<?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>225920</bug_id>
          
          <creation_ts>2021-05-18 09:00:20 -0700</creation_ts>
          <short_desc>Update Base64 encoding/decoding to match more modern WebKit conventions</short_desc>
          <delta_ts>2021-05-21 16:16:04 -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>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=226120</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>berto</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>galpeter</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>hi</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>joepeck</cc>
    
    <cc>mkwst</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>toyoshim</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1761170</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 09:00:20 -0700</bug_when>
    <thetext>Update Base64 encoding/decoding to match more modern WebKit conventions (fewer out values, string concatenation adaptor, etc.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761358</commentid>
    <comment_count>1</comment_count>
      <attachid>428991</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 16:21:02 -0700</bug_when>
    <thetext>Created attachment 428991
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761368</commentid>
    <comment_count>2</comment_count>
      <attachid>428995</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 16:37:50 -0700</bug_when>
    <thetext>Created attachment 428995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761390</commentid>
    <comment_count>3</comment_count>
      <attachid>429004</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 17:21:40 -0700</bug_when>
    <thetext>Created attachment 429004
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761395</commentid>
    <comment_count>4</comment_count>
      <attachid>429007</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 17:41:10 -0700</bug_when>
    <thetext>Created attachment 429007
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761396</commentid>
    <comment_count>5</comment_count>
      <attachid>429008</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 17:42:43 -0700</bug_when>
    <thetext>Created attachment 429008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761415</commentid>
    <comment_count>6</comment_count>
      <attachid>429014</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 18:33:15 -0700</bug_when>
    <thetext>Created attachment 429014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761434</commentid>
    <comment_count>7</comment_count>
      <attachid>429020</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 18:57:01 -0700</bug_when>
    <thetext>Created attachment 429020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761452</commentid>
    <comment_count>8</comment_count>
      <attachid>429026</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 19:54:27 -0700</bug_when>
    <thetext>Created attachment 429026
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761465</commentid>
    <comment_count>9</comment_count>
      <attachid>429029</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 21:33:16 -0700</bug_when>
    <thetext>Created attachment 429029
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761466</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 21:35:37 -0700</bug_when>
    <thetext>There is a lot more cleanup that can be done, but this is a good start.

The main takeaway from this is that we need to make our binary data representations consistent. Our inconsistent use of both const char* and const uint8_t* is a nuisance.

We should probably converge on const uint8_t* and just rid the remaining const char* away (although maybe we want to try to use std::byte instead?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761515</commentid>
    <comment_count>11</comment_count>
      <attachid>429046</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 07:13:09 -0700</bug_when>
    <thetext>Created attachment 429046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761530</commentid>
    <comment_count>12</comment_count>
      <attachid>429046</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-19 07:59:42 -0700</bug_when>
    <thetext>Comment on attachment 429046
Patch

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

I did not r+ yet because I dislike all the new makeString(base64encoded()). It makes the code more verbose than it used to be, which is unfortunate.

&gt; Source/WTF/ChangeLog:8
&gt; +        Bring base64 encoding/decoding up to more modern WebKit convetions by:

typo: convetions

&gt; Source/WTF/wtf/text/Base64.cpp:34
&gt; +static constexpr unsigned encodeMapSize = 64;

I believe we don&apos;t need the static.

&gt; Source/WTF/wtf/text/Base64.cpp:35
&gt; +static constexpr unsigned decodeMapSize = 128;

ditto.

&gt; Source/WTF/wtf/text/Base64.cpp:118
&gt; +            destinationDataBuffer[didx++] = encodeMap[ (inputDataBuffer[sidx    ] &gt;&gt; 2) &amp; 077];

I thought we had stopped adding spacing for alignment like that in new code? I am personally not a fan as it&apos;s a pain to maintain and they eventually get misaligned.

&gt; Source/WTF/wtf/text/Base64.cpp:141
&gt; +        destinationDataBuffer[didx] = &apos;=&apos;;

destinationDataBuffer[didx++] = &apos;=&apos;;

&gt; Source/WTF/wtf/text/Base64.cpp:142
&gt; +        ++didx;

Then we don&apos;t need this line.

Or we could use a for loop:
for (; didx &lt; destinationLength; ++didx)
  destinationDataBuffer[didx] = &apos;=&apos;;

&gt; Source/WebCore/Modules/plugins/QuickTimePluginReplacement.mm:249
&gt; +        data64 = makeString(&quot;data:&quot;, mimeType, &quot;;base64,&quot;, base64Encoded([data bytes], [data length]));

Is this why base64Encoded() doesn&apos;t return a String. Is is more efficient in this case? I am assuming there is a reason base64Encoded() doesn&apos;t simply return a String (which would be much nicer to use) considering most call sites need a String.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761550</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 09:25:00 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #12)
&gt; Comment on attachment 429046 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429046&amp;action=review
&gt; 
&gt; I did not r+ yet because I dislike all the new makeString(base64encoded()).
&gt; It makes the code more verbose than it used to be, which is unfortunate.

Fair enough. I thought that might be the case for some. The other option here is:

Rename base64Encode() (which returns a vector) to base64EncodeToVector() or base64EncodeToData(), and add base64EncodeToString() (or base64Encode() could just return a String()?)


&gt; 
&gt; &gt; Source/WTF/ChangeLog:8
&gt; &gt; +        Bring base64 encoding/decoding up to more modern WebKit convetions by:
&gt; 
&gt; typo: convetions
&gt; 
&gt; &gt; Source/WTF/wtf/text/Base64.cpp:34
&gt; &gt; +static constexpr unsigned encodeMapSize = 64;
&gt; 
&gt; I believe we don&apos;t need the static.

You are right. Will fix.

&gt; &gt; Source/WTF/wtf/text/Base64.cpp:118
&gt; &gt; +            destinationDataBuffer[didx++] = encodeMap[ (inputDataBuffer[sidx    ] &gt;&gt; 2) &amp; 077];
&gt; 
&gt; I thought we had stopped adding spacing for alignment like that in new code?
&gt; I am personally not a fan as it&apos;s a pain to maintain and they eventually get
&gt; misaligned.

It made reading and understanding this code so much easier for me. I&apos;m not really sure I understand the argument for hard to maintain.

&gt; 
&gt; &gt; Source/WTF/wtf/text/Base64.cpp:141
&gt; &gt; +        destinationDataBuffer[didx] = &apos;=&apos;;
&gt; 
&gt; destinationDataBuffer[didx++] = &apos;=&apos;;
&gt; 
&gt; &gt; Source/WTF/wtf/text/Base64.cpp:142
&gt; &gt; +        ++didx;
&gt; 
&gt; Then we don&apos;t need this line.

Ok.

&gt; 
&gt; Or we could use a for loop:
&gt; for (; didx &lt; destinationLength; ++didx)
&gt;   destinationDataBuffer[didx] = &apos;=&apos;;
&gt; 
&gt; &gt; Source/WebCore/Modules/plugins/QuickTimePluginReplacement.mm:249
&gt; &gt; +        data64 = makeString(&quot;data:&quot;, mimeType, &quot;;base64,&quot;, base64Encoded([data bytes], [data length]));
&gt; 
&gt; Is this why base64Encoded() doesn&apos;t return a String. Is is more efficient in
&gt; this case? I am assuming there is a reason base64Encoded() doesn&apos;t simply
&gt; return a String (which would be much nicer to use) considering most call
&gt; sites need a String.

Yes, it avoids an extra allocation and copy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761582</commentid>
    <comment_count>14</comment_count>
      <attachid>429060</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 10:14:12 -0700</bug_when>
    <thetext>Created attachment 429060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761583</commentid>
    <comment_count>15</comment_count>
      <attachid>429061</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 10:14:53 -0700</bug_when>
    <thetext>Created attachment 429061
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761589</commentid>
    <comment_count>16</comment_count>
      <attachid>429064</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 10:24:24 -0700</bug_when>
    <thetext>Created attachment 429064
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761592</commentid>
    <comment_count>17</comment_count>
      <attachid>429064</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-19 10:32:19 -0700</bug_when>
    <thetext>Comment on attachment 429064
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761600</commentid>
    <comment_count>18</comment_count>
      <attachid>429068</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 10:41:02 -0700</bug_when>
    <thetext>Created attachment 429068
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761633</commentid>
    <comment_count>19</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-19 11:43:38 -0700</bug_when>
    <thetext>Committed r277740 (237912@main): &lt;https://commits.webkit.org/237912@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429068.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761634</commentid>
    <comment_count>20</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-19 11:44:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/78216131&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761655</commentid>
    <comment_count>21</comment_count>
      <attachid>429068</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-19 12:31:39 -0700</bug_when>
    <thetext>Comment on attachment 429068
Patch

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

&gt; Source/WTF/wtf/text/Base64.h:77
&gt; +WTF_EXPORT_PRIVATE Optional&lt;Vector&lt;uint8_t&gt;&gt; base64Decode(const String&amp;, OptionSet&lt;Base64DecodeOptions&gt; = { }, Base64DecodeMap = Base64DecodeMap::Default);
&gt; +WTF_EXPORT_PRIVATE Optional&lt;Vector&lt;uint8_t&gt;&gt; base64Decode(StringView, OptionSet&lt;Base64DecodeOptions&gt; = { }, Base64DecodeMap = Base64DecodeMap::Default);
&gt; +WTF_EXPORT_PRIVATE Optional&lt;Vector&lt;uint8_t&gt;&gt; base64Decode(const Vector&lt;uint8_t&gt;&amp;, OptionSet&lt;Base64DecodeOptions&gt; = { }, Base64DecodeMap = Base64DecodeMap::Default);
&gt; +WTF_EXPORT_PRIVATE Optional&lt;Vector&lt;uint8_t&gt;&gt; base64Decode(const Vector&lt;char&gt;&amp;, OptionSet&lt;Base64DecodeOptions&gt; = { }, Base64DecodeMap = Base64DecodeMap::Default);
&gt; +WTF_EXPORT_PRIVATE Optional&lt;Vector&lt;uint8_t&gt;&gt; base64Decode(const uint8_t*, unsigned, OptionSet&lt;Base64DecodeOptions&gt; = { }, Base64DecodeMap = Base64DecodeMap::Default);
&gt; +WTF_EXPORT_PRIVATE Optional&lt;Vector&lt;uint8_t&gt;&gt; base64Decode(const char*, unsigned, OptionSet&lt;Base64DecodeOptions&gt; = { }, Base64DecodeMap = Base64DecodeMap::Default);

Now I suggest we remove the overloads for const String&amp; and const char* since both of those convert into StringView efficiently. Unless there is some kind of problem with ambiguity at call sites?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761693</commentid>
    <comment_count>22</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 14:04:00 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #21)
&gt; Comment on attachment 429068 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429068&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/text/Base64.h:77
&gt; &gt; +WTF_EXPORT_PRIVATE Optional&lt;Vector&lt;uint8_t&gt;&gt; base64Decode(const String&amp;, OptionSet&lt;Base64DecodeOptions&gt; = { }, Base64DecodeMap = Base64DecodeMap::Default);
&gt; &gt; +WTF_EXPORT_PRIVATE Optional&lt;Vector&lt;uint8_t&gt;&gt; base64Decode(StringView, OptionSet&lt;Base64DecodeOptions&gt; = { }, Base64DecodeMap = Base64DecodeMap::Default);
&gt; &gt; +WTF_EXPORT_PRIVATE Optional&lt;Vector&lt;uint8_t&gt;&gt; base64Decode(const Vector&lt;uint8_t&gt;&amp;, OptionSet&lt;Base64DecodeOptions&gt; = { }, Base64DecodeMap = Base64DecodeMap::Default);
&gt; &gt; +WTF_EXPORT_PRIVATE Optional&lt;Vector&lt;uint8_t&gt;&gt; base64Decode(const Vector&lt;char&gt;&amp;, OptionSet&lt;Base64DecodeOptions&gt; = { }, Base64DecodeMap = Base64DecodeMap::Default);
&gt; &gt; +WTF_EXPORT_PRIVATE Optional&lt;Vector&lt;uint8_t&gt;&gt; base64Decode(const uint8_t*, unsigned, OptionSet&lt;Base64DecodeOptions&gt; = { }, Base64DecodeMap = Base64DecodeMap::Default);
&gt; &gt; +WTF_EXPORT_PRIVATE Optional&lt;Vector&lt;uint8_t&gt;&gt; base64Decode(const char*, unsigned, OptionSet&lt;Base64DecodeOptions&gt; = { }, Base64DecodeMap = Base64DecodeMap::Default);
&gt; 
&gt; Now I suggest we remove the overloads for const String&amp; and const char*
&gt; since both of those convert into StringView efficiently. Unless there is
&gt; some kind of problem with ambiguity at call sites?

I doubt there will be an issue, just didn&apos;t occur to me. Will do.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428991</attachid>
            <date>2021-05-18 16:21:02 -0700</date>
            <delta_ts>2021-05-18 16:38:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210518162101.patch</filename>
            <type>text/plain</type>
            <size>166093</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIHd0Zi90ZXh0
L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVybmFsKToKKyAgICAg
ICAgKFdURjo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRV
UkxEZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5oOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgor
ICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNv
ZGUpOgorICAgICAgICAoV1RGOjppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdURjo6Y2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNl
NjRFbmNvZGVkKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlZCk6CisgICAgICAgIChX
VEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpTdHJpbmdUeXBlQWRh
cHRlcik6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRp
b24+OjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNl
NjRTcGVjaWZpY2F0aW9uPjo6aXM4Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlw
ZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46OndyaXRlVG8gY29uc3QpOgorCiAyMDIxLTA1
LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXpl
IC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dURi93
dGYvdGV4dC9CYXNlNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAg
IENvcHlyaWdodCAoQykgMjAwMC0yMDAxIERhd2l0IEFsZW1heWVodSA8YWRhd2l0QGtkZS5vcmc+
CiAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9y
Zz4KLSAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5z
dGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMTMgKzI1
LDE2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbmNsdWRlIDxsaW1pdHMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNvbnN0IGNoYXIgbm9uQWxwaGFiZXQgPSAtMTsK
IAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RW5jTWFwWzY0XSA9IHsKK3N0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgZW5jb2RlTWFwU2l6ZSA9IDY0Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBkZWNvZGVNYXBTaXplID0gMTI4OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRFbmNNYXBb
ZW5jb2RlTWFwU2l6ZV0gPSB7CiAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0
NiwgMHg0NywgMHg0OCwKICAgICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAw
eDRGLCAweDUwLAogICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcs
IDB4NTgsCkBAIC00Miw3ICs0NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVuY01hcFs2
NF0gPSB7CiAgICAgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHgy
RgogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RGVjTWFwWzEyOF0gPSB7CitzdGF0aWMg
Y29uc3QgY2hhciBiYXNlNjREZWNNYXBbZGVjb2RlTWFwU2l6ZV0gPSB7CiAgICAgbm9uQWxwaGFi
ZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCkBAIC02MSw3ICs2NCw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyIGJhc2U2NERlY01hcFsxMjhdID0gewogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJl
dAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IHsKK3N0YXRp
YyBjb25zdCBjaGFyIGJhc2U2NFVSTEVuY01hcFtlbmNvZGVNYXBTaXplXSA9IHsKICAgICAweDQx
LCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAogICAgIDB4NDksIDB4
NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCiAgICAgMHg1MSwgMHg1Miwg
MHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKQEAgLTcyLDcgKzc1LDcgQEAgc3Rh
dGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IAogICAgIDB4MzQsIDB4MzUsIDB4
MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4MkQsIDB4NUYKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFy
IGJhc2U2NFVSTERlY01hcFsxMjhdID0geworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRGVj
TWFwW2RlY29kZU1hcFNpemVdID0gewogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9u
QWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsCiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LApAQCAtOTEsMjQzICs5NCwyMTggQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJM
RGVjTWFwWzEyOF0gPQogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0LCBub25BbHBo
YWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsKIAotc3RhdGlj
IGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3ksIGNvbnN0IGNoYXIgKCZlbmNvZGVNYXApWzY0XSkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVpbnQ4
X3QqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUq
IGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNs
ZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVzdGlu
YXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUo
aW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5ndGgpOwogCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSAib3V0TGVuZ3Ro
IiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkg
cHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0gICAgY29uc3QgdW5zaWduZWQg
bWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwotICAg
IGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRv
IGVuY29kZU1hcCA9IChtYXAgPT0gQmFzZTY0RW5jb2RlTWFwOjpVUkwpID8gYmFzZTY0VVJMRW5j
TWFwIDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9IDA7CiAgICAgdW5zaWdu
ZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0gICAgdW5zaWduZWQgb3V0
TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGluc2VydExGcyA9IChwb2xp
Y3kgPT0gQmFzZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnMgJiYgZGVzdGluYXRpb25MZW5ndGgg
PiBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOwogCi0gICAgLy8gRGVh
bCB3aXRoIHRoZSA3NiBjaGFyYWN0ZXIgcGVyIGxpbmUgbGltaXQgc3BlY2lmaWVkIGluIFJGQyAy
MDQ1LgotICAgIGJvb2wgaW5zZXJ0TEZzID0gKHBvbGljeSA9PSBCYXNlNjRJbnNlcnRMRnMgJiYg
b3V0TGVuZ3RoID4gNzYpOwotICAgIGlmIChpbnNlcnRMRnMpCi0gICAgICAgIG91dExlbmd0aCAr
PSAoKG91dExlbmd0aCAtIDEpIC8gNzYpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBvdXQu
Z3JvdyhvdXRMZW5ndGgpOwotCi0gICAgLy8gMy1ieXRlIHRvIDQtYnl0ZSBjb252ZXJzaW9uICsg
MC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgotICAgIGlmIChsZW4gPiAxKSB7Ci0g
ICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAgIGlmIChpbnB1dExlbmd0aCA+IDEp
IHsKKyAgICAgICAgd2hpbGUgKHNpZHggPCBpbnB1dExlbmd0aCAtIDIpIHsKICAgICAgICAgICAg
IGlmIChpbnNlcnRMRnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoY291bnQgJiYgIShjb3VudCAl
IDc2KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOworICAgICAgICAg
ICAgICAgIGlmIChjb3VudCAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVu
SW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHgrK10gPSAnXG4nOwogICAgICAgICAgICAgICAgIGNvdW50ICs9IDQ7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA+PiAy
KSAmIDA3N107Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lk
eCArIDFdID4+IDQpICYgMDE3KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3NyldOwotICAgICAg
ICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAyXSA+PiA2KSAmIDAw
MykgfCAoKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlk
eCsrXSA9IGVuY29kZU1hcFtkYXRhW3NpZHggKyAyXSAmIDA3N107CisKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXREYXRhQnVmZmVy
W3NpZHggICAgXSA+PiAyKSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZm
ZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPj4gNCkg
JiAwMTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3KV07CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0
RGF0YUJ1ZmZlcltzaWR4ICsgMl0gPj4gNikgJiAwMDMpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lk
eCArIDFdIDw8IDIpICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJb
ZGlkeCsrXSA9IGVuY29kZU1hcFsgIGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0gICAgICAgJiAw
NzddOwogICAgICAgICAgICAgc2lkeCArPSAzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KHNpZHggPCBsZW4pIHsKLSAgICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAh
KGNvdW50ICUgNzYpKQotICAgICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7Ci0KLSAgICAgICAg
b3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzddOwotICAgICAg
ICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2Rl
TWFwWygoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYg
MDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4ICsg
MV0gPDwgMikgJiAwNzddOworICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsKKyAgICAgICAg
aWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExp
bmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlcltkaWR4KytdID0gJ1xuJzsKKworICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlk
eCsrXSA9IGVuY29kZU1hcFsoaW5wdXREYXRhQnVmZmVyW3NpZHhdID4+IDIpICYgMDc3XTsKKyAg
ICAgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHgg
KyAxXSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA8PCA0KSAmIDA3Nyld
OworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBb
IChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA8PCA0KSAm
IDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29k
ZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzddOwogICAgIH0KIAot
ICAgIC8vIEFkZCBwYWRkaW5nCi0gICAgaWYgKHBvbGljeSA9PSBCYXNlNjRVUkxQb2xpY3kpCi0g
ICAgICAgIG91dC5yZXNpemUoZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdoaWxlIChkaWR4
IDwgb3V0LnNpemUoKSkgewotICAgICAgICAgICAgb3V0W2RpZHhdID0gJz0nOwotICAgICAgICAg
ICAgKytkaWR4OwotICAgICAgICB9CisgICAgQVNTRVJUKHBvbGljeSAhPSBCYXNlNjRFbmNvZGVQ
b2xpY3k6OlVSTCB8fCBkaWR4ID09IGRlc3RpbmF0aW9uTGVuZ3RoKTsKKworICAgIHdoaWxlIChk
aWR4IDwgZGVzdGluYXRpb25MZW5ndGgpIHsKKyAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHhdID0gJz0nOworICAgICAgICArK2RpZHg7CiAgICAgfQogfQogCi1TdHJpbmcgYmFzZTY0
RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSkKK3N0YXRpYyBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBWZWN0b3I8
Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5j
TWFwKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwor
ICAgIGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShp
bnB1dExlbmd0aCwgcG9saWN5KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGRlc3RpbmF0aW9uVmVjdG9yKGRlc3Rp
bmF0aW9uTGVuZ3RoKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChpbnB1dERhdGFCdWZmZXIs
IGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvblZlY3Rvci5kYXRhKCksIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uVmVjdG9yOwogfQogCi12b2lk
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFy
PiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQorVmVjdG9yPGNoYXI+IGJhc2U2NEVu
Y29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJh
c2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRh
KSwgbGVuLCBvdXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5j
b2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciks
IGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUo
Y29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBiYXNlNjRFbmNvZGUoY29u
c3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBCYXNlNjRVUkxQb2xpY3ksIGJh
c2U2NFVSTEVuY01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQu
c2l6ZSgpKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm47Cisg
ICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0
aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0
IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQpCit2b2lkIGJhc2U2
NEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3Ro
LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0
aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
ZGF0YSksIGxlbiwgb3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7CisgICAg
aWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGJhc2U2NEVuY29k
ZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZmZXIpLCBp
bnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9s
aWN5LCBtYXApOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBib29s
IGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyJiBvdXQsIHVuc2lnbmVkIG9wdGlvbnMsIGNv
bnN0IGNoYXIgKCZkZWNvZGVNYXApWzEyOF0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBp
bnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICBvdXQuY2xl
YXIoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFp
bnB1dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIFZlY3Rvcjx1aW50OF90PiB7IH07CiAKLSAgICBv
dXQuZ3JvdyhsZW5ndGgpOworICAgIGF1dG8gZGVjb2RlTWFwID0gKG1hcCA9PSBCYXNlNjREZWNv
ZGVNYXA6OlVSTCkgPyBiYXNlNjRVUkxEZWNNYXAgOiBiYXNlNjREZWNNYXA7CisKKyAgICBWZWN0
b3I8dWludDhfdD4gZGVzdGluYXRpb24oaW5wdXRMZW5ndGgpOwogCiAgICAgdW5zaWduZWQgZXF1
YWxzU2lnbkNvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBvdXRMZW5ndGggPSAwOwotICAgIGJvb2wg
aGFkRXJyb3IgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbmd0
aDsgKytpZHgpIHsKLSAgICAgICAgdW5zaWduZWQgY2ggPSBkYXRhW2lkeF07CisgICAgdW5zaWdu
ZWQgZGVzdGluYXRpb25MZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4
IDwgaW5wdXRMZW5ndGg7ICsraWR4KSB7CisgICAgICAgIHVuc2lnbmVkIGNoID0gaW5wdXREYXRh
QnVmZmVyW2lkeF07CiAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKICAgICAgICAgICAgICsrZXF1
YWxzU2lnbkNvdW50OwogICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIG5ldmVyIGJlIG1vcmUg
dGhhbiAyIHBhZGRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChvcHRpb25zICYgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKLSAgICAgICAgICAg
ICAgICBoYWRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAob3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRp
bmcpICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y2hhciBkZWNvZGVkQ2hhcmFjdGVyID0gY2ggPCBXVEZfQVJSQVlfTEVOR1RIKGRlY29kZU1hcCkg
PyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFiZXQ7CisgICAgICAgICAgICBjaGFyIGRlY29kZWRD
aGFyYWN0ZXIgPSBjaCA8IGRlY29kZU1hcFNpemUgPyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFi
ZXQ7CiAgICAgICAgICAgICBpZiAoZGVjb2RlZENoYXJhY3RlciAhPSBub25BbHBoYWJldCkgewot
ICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaGFkRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3V0W291dExlbmd0aCsrXSA9IGRlY29kZWRDaGFy
YWN0ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucyAmIEJhc2U2NElnbm9yZVNw
YWNlc0FuZE5ld0xpbmVzKQotICAgICAgICAgICAgICAgIHx8ICghaXNMYXRpbjEoY2gpIHx8ICFp
c0FTQ0lJU3BhY2UoY2gpIHx8ICgob3B0aW9ucyAmIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikg
JiYgY2ggPT0gJ1x2JykpKSB7Ci0gICAgICAgICAgICAgICAgaGFkRXJyb3IgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAg
ICAgZGVzdGluYXRpb25bZGVzdGluYXRpb25MZW5ndGgrK10gPSBkZWNvZGVkQ2hhcmFjdGVyOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRp
b25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykgfHwgKCFpc0xhdGluMShjaCkgfHwgIWlzQVND
SUlTcGFjZShjaCkgfHwgKG9wdGlvbnMuY29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlz
Y2FyZFZlcnRpY2FsVGFiKSAmJiBjaCA9PSAnXHYnKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Ly8gTWFrZSBzdXJlIHdlIHNocmluayBiYWNrIHRoZSBWZWN0b3IgYmVmb3JlIHJldHVybmluZy4g
b3V0TGVuZ3RoIG1heSBiZSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQKKyAgICAvLyBNYWtlIHN1cmUg
d2Ugc2hyaW5rIGJhY2sgdGhlIFZlY3RvciBiZWZvcmUgcmV0dXJuaW5nLiBkZXN0aW5hdGlvbkxl
bmd0aCBtYXkgYmUgc2hvcnRlciB0aGFuIGV4cGVjdGVkCiAgICAgLy8gaW4gY2FzZSBvZiBlcnJv
ciBvciBpbiBjYXNlIG9mIGlnbm9yZWQgc3BhY2VzLgotICAgIGlmIChvdXRMZW5ndGggPCBvdXQu
c2l6ZSgpKQotICAgICAgICBvdXQuc2hyaW5rKG91dExlbmd0aCk7Ci0KLSAgICBpZiAoaGFkRXJy
b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGggPCBk
ZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNocmluayhkZXN0aW5hdGlv
bkxlbmd0aCk7CiAKLSAgICBpZiAoIW91dExlbmd0aCkKLSAgICAgICAgcmV0dXJuICFlcXVhbHNT
aWduQ291bnQ7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkgeworICAgICAgICBpZiAoIWVx
dWFsc1NpZ25Db3VudCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IHJldHVybiBWZWN0b3I8dWludDhfdD4geyB9OworICAgIH0KIAogICAgIC8vIFRoZSBzaG91bGQg
YmUgbm8gcGFkZGluZyBpZiBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiA0LgotICAgIC8vIFdlIHVz
ZSAob3V0TGVuZ3RoICsgZXF1YWxzU2lnbkNvdW50KSBpbnN0ZWFkIG9mIGxlbmd0aCBiZWNhdXNl
IHdlIGRvbid0IHdhbnQgdG8gYWNjb3VudCBmb3IgaWdub3JlZCBjaGFyYWN0ZXJzIChpLmUuIHNw
YWNlcykuCi0gICAgaWYgKG9wdGlvbnMgJiBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgJiYgZXF1YWxz
U2lnbkNvdW50ICYmIChvdXRMZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIC8vIFdlIHVzZSAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNT
aWduQ291bnQpIGluc3RlYWQgb2YgbGVuZ3RoIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhY2Nv
dW50IGZvciBpZ25vcmVkIGNoYXJhY3RlcnMgKGkuZS4gc3BhY2VzKS4KKyAgICBpZiAob3B0aW9u
cy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpICYmIGVxdWFs
c1NpZ25Db3VudCAmJiAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFZhbGlkIGRhdGEgaXMgKG4g
KiA0ICsgWzAsMiwzXSkgY2hhcmFjdGVycyBsb25nLgotICAgIGlmICgob3V0TGVuZ3RoICUgNCkg
PT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoZGVzdGluYXRpb25MZW5ndGgg
JSA0KSA9PSAxKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIC8vIDQt
Ynl0ZSB0byAzLWJ5dGUgY29udmVyc2lvbgotICAgIG91dExlbmd0aCAtPSAob3V0TGVuZ3RoICsg
MykgLyA0OwotICAgIGlmICghb3V0TGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVzdGluYXRpb25MZW5ndGggLT0gKGRlc3RpbmF0aW9uTGVuZ3RoICsgMykgLyA0OworICAgIGlm
ICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICB1bnNpZ25lZCBzaWR4ID0gMDsKICAgICB1bnNpZ25lZCBkaWR4ID0gMDsKLSAgICBpZiAob3V0
TGVuZ3RoID4gMSkgewotICAgICAgICB3aGlsZSAoZGlkeCA8IG91dExlbmd0aCAtIDIpIHsKLSAg
ICAgICAgICAgIG91dFtkaWR4XSA9ICgoKG91dFtzaWR4XSA8PCAyKSAmIDI1NSkgfCAoKG91dFtz
aWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsKLSAgICAgICAgICAgIG91dFtkaWR4ICsgMV0gPSAoKChv
dXRbc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgob3V0W3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OwotICAgICAgICAgICAgb3V0W2RpZHggKyAyXSA9ICgoKG91dFtzaWR4ICsgMl0gPDwgNikgJiAy
NTUpIHwgKG91dFtzaWR4ICsgM10gJiAwNzcpKTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGgg
PiAxKSB7CisgICAgICAgIHdoaWxlIChkaWR4IDwgZGVzdGluYXRpb25MZW5ndGggLSAyKSB7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbltkaWR4ICAgIF0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICAg
IF0gPDwgMikgJiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2RpZHggKyAxXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHgg
KyAxXSA8PCA0KSAmIDI1NSkgfCAoKGRlc3RpbmF0aW9uW3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OworICAgICAgICAgICAgZGVzdGluYXRpb25bZGlkeCArIDJdID0gKCgoZGVzdGluYXRpb25bc2lk
eCArIDJdIDw8IDYpICYgMjU1KSB8ICAoZGVzdGluYXRpb25bc2lkeCArIDNdICAgICAgICYgMDc3
KSk7CiAgICAgICAgICAgICBzaWR4ICs9IDQ7CiAgICAgICAgICAgICBkaWR4ICs9IDM7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2Rp
ZHhdID0gKCgob3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHggKyAxXSA+PiA0KSAm
IDAwMykpOwotCi0gICAgaWYgKCsrZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2RpZHhd
ID0gKCgob3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikg
JiAwMTcpKTsKKyAgICBpZiAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0
aW5hdGlvbltkaWR4XSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggICAgXSA8PCAyKSAmIDI1NSkgfCAo
KGRlc3RpbmF0aW9uW3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOwogCi0gICAgaWYgKG91dExlbmd0
aCA8IG91dC5zaXplKCkpCi0gICAgICAgIG91dC5zaHJpbmsob3V0TGVuZ3RoKTsKKyAgICBpZiAo
KytkaWR4IDwgZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0aW9uW2RpZHhdID0g
KCgoZGVzdGluYXRpb25bc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lk
eCArIDJdID4+IDIpICYgMDE3KSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGVzdGlu
YXRpb25MZW5ndGggPCBkZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNo
cmluayhkZXN0aW5hdGlvbkxlbmd0aCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwogfQogCi1i
b29sIGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZl
Y3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBs
ZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBvcHRpb25zLCBiYXNl
NjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlm
ICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2Rl
SW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3Ro
LCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29kZShTdHJpbmdWaWV3IGluLCBT
aWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQor
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5n
dGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChp
bi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwg
b3V0LCBvcHRpb25zLCBiYXNlNjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNl
NjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNsZWFy
KCk7Ci0KLSAgICAvLyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdl
LCBqdXN0IHJldHVybiBub3RoaW5nLgotICAgIGlmIChpbi5zaXplKCkgPiBVSU5UX01BWCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihpbi5kYXRhKCkpLCBpbi5zaXplKCksIG91dCwg
b3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKKyAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7CiB9
CiAKLWJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJh
c2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuLCBvdXQsIG9wdGlvbnMsIGJh
c2U2NERlY01hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1i
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbi5s
ZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0LCBCYXNl
NjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2
NFVSTERlY01hcCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAg
aWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0g
ICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwg
YmFzZTY0VVJMRGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hh
cmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXAp
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
KyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxl
bmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0KQogewotICAgIG91dC5jbGVhcigpOwotCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICBpZiAoaW4uc2l6ZSgpID4gVUlOVF9NQVgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oaW4uZGF0YSgpKSwgaW4uc2l6ZSgpLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJh
c2U2NFVSTERlY01hcCk7CisgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJM
KTsKIH0KIAotYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQogewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRV
UkxEZWNNYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDI1ICsyNywzNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdURiB7CiAKLWVudW0gQmFzZTY0RW5jb2RlUG9saWN5IHsKLSAgICBCYXNl
NjREb05vdEluc2VydExGcywKLSAgICBCYXNlNjRJbnNlcnRMRnMsCi0gICAgQmFzZTY0VVJMUG9s
aWN5IC8vIE5vIHBhZGRpbmcsIG5vIExGcy4KK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlUG9saWN5
IHsKKyAgICBEb05vdEluc2VydExGcywKKyAgICBJbnNlcnRMRnMsCisgICAgVVJMIC8vIE5vIHBh
ZGRpbmcsIG5vIExGcy4KIH07CiAKLWVudW0gQmFzZTY0RGVjb2RlT3B0aW9ucyB7Ci0gICAgQmFz
ZTY0RGVmYXVsdCA9IDAsCi0gICAgQmFzZTY0VmFsaWRhdGVQYWRkaW5nID0gMSA8PCAwLAotICAg
IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzID0gMSA8PCAxLAotICAgIEJhc2U2NERpc2Nh
cmRWZXJ0aWNhbFRhYiA9IDEgPDwgMiwKK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlTWFwIHsgRGVm
YXVsdCwgVVJMIH07CisKK2VudW0gY2xhc3MgQmFzZTY0RGVjb2RlT3B0aW9ucyA6IHVpbnQ4X3Qg
eworICAgIFZhbGlkYXRlUGFkZGluZyAgICAgICAgID0gMSA8PCAwLAorICAgIElnbm9yZVNwYWNl
c0FuZE5ld0xpbmVzID0gMSA8PCAxLAorICAgIERpc2NhcmRWZXJ0aWNhbFRhYiAgICAgID0gMSA8
PCAyLAogfTsKIAorZW51bSBjbGFzcyBCYXNlNjREZWNvZGVNYXAgeyBEZWZhdWx0LCBVUkwgfTsK
Kworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5J
bnNlcnRpbmdMRnMgPSA3NjsKKworLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2lj
YWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90aGluZy4KKy8vIFJhdGhlciB0aGFuIGJlaW5nIHBl
cmZlY3RseSBwcmVjaXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZhdGl2ZS4KK3N0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwor
CiBjbGFzcyBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgewogcHVibGljOgogICAg
IFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8Y2hhcj4mIHZlY3RvcikK
QEAgLTE0NCw5MCArMTU0LDE2MCBAQCBwcml2YXRlOgogICAgIH0gbV92ZWN0b3I7CiB9OwogCi1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExG
cyk7Ci12b2lkIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNl
cnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLVdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29k
ZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBD
U3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOworV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVu
c2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwg
VUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5
OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwg
dW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29k
ZU1hcDo6RGVmYXVsdCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JV
bnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOworVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9S
VF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0
cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2Rl
TWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8
QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29k
ZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQp
OwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiwg
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRpb25zID0gQmFz
ZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoU3RyaW5n
VmlldywgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRpb25z
ID0gQmFzZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUo
Y29uc3QgVmVjdG9yPGNoYXI+JiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1
bnNpZ25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9v
bCBiYXNlNjREZWNvZGUoY29uc3QgY2hhciosIHVuc2lnbmVkLCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIsIHVuc2lnbmVkIG9wdGlvbnMgPSBCYXNlNjREZWZhdWx0KTsKK2lubGlu
ZSBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVN
YXAgbWFwKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5z
aXplKCksIHBvbGljeSwgbWFwKTsKK30KIAotaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlKENvbnN0
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5j
b2RlKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNl
NjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIGluLnNpemUo
KSwgb3V0LCBwb2xpY3kpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW5wdXQuZGF0YSgpLCBp
bnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgdm9pZCBiYXNlNjRFbmNv
ZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xp
Y3kgcG9saWN5KQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQWxsIHRo
ZSBzYW1lIGZ1bmN0aW9ucyBtb2RpZmllZCBmb3IgYmFzZTY0dXJsLCBhcyBkZWZpbmVkIGluIFJG
QyA0NjQ4LgorLy8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBh
bmQgJy8nIHJlc3BlY3RpdmVseS4KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisK
K1ZlY3RvcjxjaGFyPiBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkKTsKK1Zl
Y3RvcjxjaGFyPiBiYXNlNjRVUkxFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3Rv
ckFkYXB0ZXIpOworVmVjdG9yPGNoYXI+IGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5nJik7
CisKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVS
TERlY29kZShjb25zdCBTdHJpbmcmKTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3KTsKK1dURl9FWFBPUlRfUFJJ
VkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0
b3I8Y2hhcj4mKTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NFVSTERlY29kZShjb25zdCBjaGFyKiwgdW5zaWduZWQpOworCitpbmxpbmUgVmVjdG9y
PGNoYXI+IGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgbGVuZ3Ro
KQogewotICAgIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0aCgpLCBvdXQsIHBvbGlj
eSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQ
b2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJh
c2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbiwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5j
b2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGlucHV0KQogewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIHBvbGljeSk7CisgICAg
cmV0dXJuIGJhc2U2NEVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5j
b2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFN0cmlu
ZyBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCitpbmxpbmUgVmVjdG9yPGNoYXI+IGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5nJiBp
bnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCks
IHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0Lmxl
bmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQWxsIHRoZSBzYW1lIGZ1
bmN0aW9ucyBtb2RpZmllZCBmb3IgYmFzZTY0dXJsLCBhcyBkZWZpbmVkIGluIFJGQyA0NjQ4Lgot
Ly8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBhbmQgJy8nIHJl
c3BlY3RpdmVseS4KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNCYXNlNjRPckJhc2U2
NFVSTENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBo
YW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLycgfHwgYyA9PSAnLScgfHwgYyA9PSAn
Xyc7Cit9CisKK2lubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZSh1bnNp
Z25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3sKKyAgICBpZiAo
IWlucHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpbnB1dExlbmd0aCA+
IG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRCdWZmZXJTaXplKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGF1dG8gYmFzZVBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAgICAgcmV0dXJu
ICgoaW5wdXRMZW5ndGggKyAyKSAvIDMpICogNDsKKyAgICB9OwogCi1XVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBWZWN0b3I8Y2hh
cj4mKTsKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyLCBWZWN0b3I8Y2hhcj4mKTsKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENT
dHJpbmcmLCBWZWN0b3I8Y2hhcj4mKTsKKyAgICBhdXRvIGJhc2VVbnBhZGRlZEVuY29kZWRTaXpl
ID0gWyZdIHsKKyAgICAgICAgcmV0dXJuICgoaW5wdXRMZW5ndGggKiA0KSArIDIpIC8gMzsKKyAg
ICB9OwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCB2
b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5z
aWduZWRDaGFyVmVjdG9yQWRhcHRlcik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENT
dHJpbmcmKTsKKyAgICBzd2l0Y2ggKHBvbGljeSkgeworICAgIGNhc2UgQmFzZTY0RW5jb2RlUG9s
aWN5OjpEb05vdEluc2VydExGczoKKyAgICAgICAgcmV0dXJuIGJhc2VQYWRkZWRFbmNvZGVkU2l6
ZSgpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3Ry
aW5nJiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3LCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFZlY3RvcjxjaGFyPiYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcik7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciosIHVu
c2lnbmVkLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIpOworICAgIGNhc2UgQmFz
ZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnM6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBiYXNl
UGFkZGVkRW5jb2RlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0g
MSkgLyBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOworICAgIH0KKwor
ICAgIGNhc2UgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkw6CisgICAgICAgIHJldHVybiBiYXNlVW5w
YWRkZWRFbmNvZGVkU2l6ZSgpOworICAgIH0KK30KIAotaW5saW5lIHZvaWQgYmFzZTY0VVJMRW5j
b2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hh
cj4mIG91dCkKK3N0cnVjdCBCYXNlNjRTcGVjaWZpY2F0aW9uIHsKKyAgICBjb25zdCB2b2lkKiBp
bnB1dERhdGE7CisgICAgdW5zaWduZWQgaW5wdXRMZW5ndGg7CisgICAgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeTsKKyAgICBCYXNlNjRFbmNvZGVNYXAgbWFwOworfTsKKworaW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2ln
bmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2Rl
UG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwIG1hcCA9IEJhc2U2NEVuY29k
ZU1hcDo6RGVmYXVsdCkKIHsKLSAgICBiYXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXpl
KCksIG91dCk7CisgICAgcmV0dXJuIHsgaW5wdXREYXRhLCBpbnB1dExlbmd0aCwgcG9saWN5LCBt
YXAgfTsKIH0KIAotaW5saW5lIHZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGlu
LCBWZWN0b3I8Y2hhcj4mIG91dCkKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVu
Y29kZWQoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgaW5wdXQsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
KQogewotICAgIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0aCgpLCBvdXQpOwor
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xp
Y3kpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5z
aWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbikKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJh
c2U2NEVuY29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzKQogewotICAgIHJldHVybiBi
YXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCkpOworICAgIHJldHVybiBiYXNlNjRF
bmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSk7CiB9CiAKLWlubGlu
ZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGluKQoraW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVu
c2lnbmVkIGlucHV0TGVuZ3RoKQogewotICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGUoaW4uZGF0
YSgpLCBpbi5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXREYXRhLCBp
bnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBi
b29sIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQoraW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChDb25zdFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlciBpbnB1dCkKIHsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVt
ZXJpYyhjKSB8fCBjID09ICcrJyB8fCBjID09ICcvJyB8fCBjID09ICctJyB8fCBjID09ICdfJzsK
KyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFz
ZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKK30KKworaW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1
dCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0
aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQog
Cit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+
IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBCYXNlNjRTcGVjaWZpY2F0
aW9uJiBiYXNlNjQpCisgICAgICAgIDogbV9iYXNlNjQgeyBiYXNlNjQgfQorICAgICAgICAsIG1f
ZW5jb2RlZExlbmd0aCB7IGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1dExl
bmd0aCwgYmFzZTY0LnBvbGljeSkgfQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX2VuY29kZWRMZW5ndGg7IH0KKyAgICBib29sIGlzOEJpdCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKiBkZXN0aW5hdGlvbikgY29uc3QKKyAg
ICB7CisgICAgICAgIGJhc2U2NEVuY29kZShtX2Jhc2U2NC5pbnB1dERhdGEsIG1fYmFzZTY0Lmlu
cHV0TGVuZ3RoLCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ks
IG1fYmFzZTY0Lm1hcCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2U2NFNwZWNpZmljYXRp
b24gbV9iYXNlNjQ7CisgICAgdW5zaWduZWQgbV9lbmNvZGVkTGVuZ3RoOworfTsKKwogfSAvLyBu
YW1lc3BhY2UgV1RGCiAKK3VzaW5nIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczsKIHVzaW5nIFdU
Rjo6QmFzZTY0RW5jb2RlUG9saWN5OwotdXNpbmcgV1RGOjpCYXNlNjREb05vdEluc2VydExGczsK
LXVzaW5nIFdURjo6QmFzZTY0SW5zZXJ0TEZzOwotdXNpbmcgV1RGOjpCYXNlNjRWYWxpZGF0ZVBh
ZGRpbmc7Ci11c2luZyBXVEY6OkJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzOwotdXNpbmcg
V1RGOjpCYXNlNjREaXNjYXJkVmVydGljYWxUYWI7Ci11c2luZyBXVEY6OmJhc2U2NEVuY29kZTsK
K3VzaW5nIFdURjo6QmFzZTY0U3BlY2lmaWNhdGlvbjsKIHVzaW5nIFdURjo6YmFzZTY0RGVjb2Rl
OwordXNpbmcgV1RGOjpiYXNlNjRFbmNvZGU7Cit1c2luZyBXVEY6OmJhc2U2NEVuY29kZWQ7Cit1
c2luZyBXVEY6OmJhc2U2NFVSTERlY29kZTsKIHVzaW5nIFdURjo6YmFzZTY0VVJMRGVjb2RlOwor
dXNpbmcgV1RGOjpiYXNlNjRVUkxFbmNvZGU7Cit1c2luZyBXVEY6OmJhc2U2NFVSTEVuY29kZWQ7
CiB1c2luZyBXVEY6OmlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzc2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNTUgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdG8g
bWF0Y2ggbW9yZSBtb2Rlcm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9l
bmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
dHJhY3RLZXlJRHNLZXlpZHMpOgorICAgICAgICAoV2ViQ29yZTo6c2FuaXRpemVLZXlpZHMpOgor
ICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNlc3Npb25D
bGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0
ZSk6CisgICAgICAgICogTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6anNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZW1JbkNvbnRleHQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JDb29yZGluYXRvckludGVybmFsOjpwcm9kdWNlQ2xp
ZW50RGF0YUpzb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVu
dGlhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsOjpQdWJsaWNL
ZXlDcmVkZW50aWFsKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlU2VjV2ViU29ja2V0S2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2Nr
ZXRBY2NlcHQpOgorICAgICAgICAqIGNyeXB0by9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oOgor
ICAgICAgICAqIGNyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW50cyBjb25zdCk6Cisg
ICAgICAgICogY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAg
ICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlBRVM6OmltcG9ydEp3ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlBRVM6OmV4
cG9ydEp3ayBjb25zdCk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OmltcG9ydEp3ayk6CisgICAgICAgICogY3J5
cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlI
TUFDOjppbXBvcnRKd2spOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5SE1BQzo6ZXhwb3J0
SndrIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjppbXBvcnRKd2spOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvS2V5UlNBOjpleHBvcnRKd2sgY29uc3QpOgorICAgICAgICAqIGNyeXB0by9tYWMv
Q3J5cHRvS2V5RUNNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OnBsYXRm
b3JtQWRkRmllbGRFbGVtZW50cyBjb25zdCk6CisgICAgICAgICogY3J5cHRvL21hYy9TZXJpYWxp
emVkQ3J5cHRvS2V5V3JhcE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFuZFN0b3Jl
TWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRNYXN0ZXJLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8v
b3BlbnNzbC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE9wZW5TU0wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRE
ZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0Zp
bGVSZWFkZXJMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcjo6
Y29udmVydFRvRGF0YVVSTCk6CisgICAgICAgICogaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBvcnQ6OmNyZWF0ZURpZ2VzdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAg
ICogaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGE6OmRlY29kZURhdGFUb0NvbnRlbnQp
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNIQTI1Nkhhc2gpOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcjo6YnVpbGRXZWJTb2NrZXRNZXNzYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlm
aWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNl
cHRXaXRoUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmludGVyY2VwdFdpdGhSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUGFnZUFnZW50OjphcmNoaXZlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkpOgorICAgICAgICAqIGxvYWRlci9Mb2FkZXJTdHJhdGVneS5oOgorICAgICAg
ICAqIGxvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6RXBoZW1lcmFsU291cmNlTm9uY2U6OmlzVmFsaWQg
Y29uc3QpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0KToK
KyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TUhUTUxBcmNoaXZlOjpnZW5lcmF0ZU1IVE1MRGF0YSk6CisgICAgICAgICog
bG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TUhUTUxQYXJzZXI6OnBhcnNlTmV4dFBhcnQpOgorICAgICAgICAqIGxvYWRlci9jb2NvYS9Qcml2
YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVVubGlua2FibGVUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQW5k
VXBkYXRlU291cmNlU2VjcmV0VG9rZW4pOgorICAgICAgICAqIHBhZ2UvQmFzZTY0VXRpbGl0aWVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2U2NFV0aWxpdGllczo6YnRvYSk6CisgICAgICAg
IChXZWJDb3JlOjpCYXNlNjRVdGlsaXRpZXM6OmF0b2IpOgorICAgICAgICAqIHBhZ2UvUGFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdl
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAgICAgICAg
KFdlYkNvcmU6OmV4dHJhY3RLZXlpZHNGcm9tQ2VuY0luaXREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OmV4dHJhY3RLZXlJZEZyb21XZWJNSW5pdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0RN
SW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdFNpbmZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZG
T2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQzo6cmVxdWVzdExpY2Vuc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2Jq
Qzo6ZGlkUHJvdmlkZVJlcXVlc3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRhdGFVUkwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVVuaXF1ZUZvbnROYW1lKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNh
aXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVVuaXF1ZUZvbnROYW1lKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bG9hZEJs
b2JSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJjZUhhbmRs
ZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRl
bnRpYWxCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxCYXNlOjpzZXJpYWxp
emF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9EYXRhVVJMRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVVJMRGVjb2Rlcjo6
ZGVjb2RlQmFzZTY0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVF
c2NhcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVTeW5jaHJv
bm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25v
dXNseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6aGFuZGxlRGF0YVVSTCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjphcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3Vw
TmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SG9zdFRMU0NlcnRpZmljYXRl
U2V0Ojpjb21wdXRlQ2VydGlmaWNhdGVIYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0Rl
Y29kZUVzY2FwZVNlcXVlbmNlcy5oOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzQXNEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9y
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0
cmluZyk6CisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1dTY3JpcHRTdG9yYWdlOjpzaGEySGFzaCBjb25zdCk6
CisKIDIwMjEtMDUtMTggIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0dQVVBdIFJlbW90ZUF1ZGlvU2Vzc2lvbiBjYWxscyBpbnRvIEFWQXVkaW9TZXNzaW9uIHdo
ZW4gR1BVUCBpcyBlbmFibGVkLCBjYXVzaW5nIGhhbmdzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVk
bWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDE1ICs4MCwx
NCBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+CiAgICAgICAgIGlm
ICgha2V5SUQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBWZWN0b3I8Y2hhcj4g
a2V5SUREYXRhOwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7IGtl
eUlERGF0YSB9KSkKKyAgICAgICAgYXV0byBrZXlJRERhdGEgPSBiYXNlNjRVUkxEZWNvZGUoa2V5
SUQpOworICAgICAgICBpZiAoIWtleUlERGF0YSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIGlmIChrZXlJRERhdGEuc2l6ZSgpIDwga0tleUlkc01pbktleUlkU2l6ZUluQnl0ZXMg
fHwga2V5SUREYXRhLnNpemUoKSA+IGtLZXlJZHNNYXhLZXlJZFNpemVJbkJ5dGVzKQorICAgICAg
ICBpZiAoa2V5SUREYXRhLT5zaXplKCkgPCBrS2V5SWRzTWluS2V5SWRTaXplSW5CeXRlcyB8fCBr
ZXlJRERhdGEtPnNpemUoKSA+IGtLZXlJZHNNYXhLZXlJZFNpemVJbkJ5dGVzKQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBSZWY8U2hhcmVkQnVmZmVyPiBrZXlJ
REJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5SUREYXRhKSk7Ci0gICAg
ICAgIGtleUlEcy5hcHBlbmQoV1RGTW92ZShrZXlJREJ1ZmZlcikpOworICAgICAgICBrZXlJRHMu
YXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKmtleUlERGF0YSkpKTsKICAgICB9
CiAKICAgICByZXR1cm4ga2V5SURzOwpAQCAtMTA1LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZUtleWkKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgYXV0byBraWRzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7
CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBrZXlJREJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBr
aWRzQXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNvZGUoYnVmZmVyLT5kYXRhKCks
IGJ1ZmZlci0+c2l6ZSgpKSk7CisgICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhtYWtlU3Ry
aW5nKGJhc2U2NFVSTEVuY29kZWQoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSkpOwog
ICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtpZHNBcnJheSkpOwogCiAgICAg
Q1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vz
c2lvbkNsZWFyS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Vu
Y3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2Fj
eS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTMg
KzE2OSwxMyBAQCBib29sIENETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKFVpbnQ4QXJyCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBrZXlEYXRhOwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUocmF3S2V5
RGF0YSwga2V5RGF0YSkgfHwga2V5RGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8g
a2V5RGF0YSA9IGJhc2U2NERlY29kZShyYXdLZXlEYXRhKTsKKyAgICAgICAgICAgIGlmICgha2V5
RGF0YSB8fCBrZXlEYXRhLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBMT0coTWVkaWEs
ICJDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZSglcCkgLSBmYWlsZWQ6IHVuYWJsZSB0byBiYXNl
NjQgZGVjb2RlIGtleSIsIHRoaXMpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBtX2NhY2hlZEtleXMuc2V0KGtleUlkLCBXVEZNb3ZlKGtl
eURhdGEpKTsKKyAgICAgICAgICAgIG1fY2FjaGVkS2V5cy5zZXQoa2V5SWQsIFdURk1vdmUoKmtl
eURhdGEpKTsKICAgICAgICAgICAgIGZvdW5kVmFsaWRLZXkgPSB0cnVlOwogICAgICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMv
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjQzLDE0ICsyNDMsMTIgQEAgdm9pZCBRdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudDo6cG9zdEV2ZQogCiBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5D
b250ZXh0KE5TRGF0YSAqZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgSlNDb250ZXh0ICpj
b250ZXh0KQogewotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29k
ZShbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0sIGJhc2U2NERhdGEpOwotCisgICAgLy8gRklY
TUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IFN0
cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFtaW1lVHlwZS5p
c0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9ICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0
LCIgKyBiYXNlNjREYXRhOworICAgICAgICBkYXRhNjQgPSBtYWtlU3RyaW5nKCJkYXRhOiIsIG1p
bWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVu
Z3RoXSkpOwogICAgIGVsc2UKLSAgICAgICAgZGF0YTY0ID0gImRhdGE6dGV4dC9wbGFpbjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4
dC9wbGFpbjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0
aF0pKTsKIAogICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6KGlkKWRhdGE2NC5j
cmVhdGVDRlN0cmluZygpLmdldCgpIGluQ29udGV4dDpjb250ZXh0XTsKIH0KQEAgLTM0Miw5ICsz
NDAsNyBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlCiAgICAgICAg
IGlkIHZhbHVlID0gaXRlbS52YWx1ZTsKICAgICAgICAgTlNTdHJpbmcgKm1pbWVUeXBlID0gW1tp
dGVtIGV4dHJhQXR0cmlidXRlc10gb2JqZWN0Rm9yS2V5OkAiTUlNRXR5cGUiXTsKICAgICAgICAg
aWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXSAmJiBtaW1lVHlwZSkgewot
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgICAgICAgICBiYXNlNjRF
bmNvZGUoW3ZhbHVlIGJ5dGVzXSwgW3ZhbHVlIGxlbmd0aF0sIGJhc2U2NERhdGEpOwotICAgICAg
ICAgICAgU3RyaW5nIGRhdGE2NCA9ICJkYXRhOiIgKyBTdHJpbmcobWltZVR5cGUpICsgIjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CisgICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmco
ImRhdGE6IiwgU3RyaW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbdmFs
dWUgYnl0ZXNdLCBbdmFsdWUgbGVuZ3RoXSkpOwogICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0
T2JqZWN0OihfX2JyaWRnZSBOU1N0cmluZyAqKWRhdGE2NC5jcmVhdGVDRlN0cmluZygpLmdldCgp
IGZvcktleTpAInZhbHVlIl07CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgW2RpY3Rpb25h
cnkgc2V0T2JqZWN0OnZhbHVlIGZvcktleTpAInZhbHVlIl07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRp
bmF0b3IuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgc3RhdGljIFJlZjxBcnJheUJ1ZmZlcj4gcHJvZHVjZUNsaWVudERhdAogICAg
ICAgICBvYmplY3QtPnNldFN0cmluZygidHlwZSJfcywgIndlYmF1dGhuLmdldCJfcyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICBvYmplY3QtPnNldFN0cmluZygiY2hhbGxlbmdlIl9zLCBX
VEY6OmJhc2U2NFVSTEVuY29kZShjaGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVuZ2UubGVuZ3RoKCkp
KTsKKyAgICBvYmplY3QtPnNldFN0cmluZygiY2hhbGxlbmdlIl9zLCBtYWtlU3RyaW5nKGJhc2U2
NFVSTEVuY29kZWQoY2hhbGxlbmdlLmRhdGEoKSwgY2hhbGxlbmdlLmxlbmd0aCgpKSkpOwogICAg
IG9iamVjdC0+c2V0U3RyaW5nKCJvcmlnaW4iX3MsIG9yaWdpbi50b1Jhd1N0cmluZygpKTsKIAog
ICAgIGF1dG8gdXRmOEpTT05TdHJpbmcgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJs
aWNLZXlDcmVkZW50aWFsLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNyArNTQsNyBAQCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIFB1
CiB9CiAKIFB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwoUmVmPEF1dGhl
bnRpY2F0b3JSZXNwb25zZT4mJiByZXNwb25zZSkKLSAgICA6IEJhc2ljQ3JlZGVudGlhbChXVEY6
OmJhc2U2NFVSTEVuY29kZShyZXNwb25zZS0+cmF3SWQoKS0+ZGF0YSgpLCByZXNwb25zZS0+cmF3
SWQoKS0+Ynl0ZUxlbmd0aCgpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6OlJlbW90ZSkK
KyAgICA6IEJhc2ljQ3JlZGVudGlhbChtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVzcG9u
c2UtPnJhd0lkKCktPmRhdGEoKSwgcmVzcG9uc2UtPnJhd0lkKCktPmJ5dGVMZW5ndGgoKSkpLCBU
eXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQogICAgICwgbV9yZXNwb25zZShXVEZN
b3ZlKHJlc3BvbnNlKSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgU3RyaW5nIGdl
bmVyYXRlU2VjV2ViU29ja2V0S2V5KCkKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbmNlU2l6
ZSA9IDE2OwogICAgIHVuc2lnbmVkIGNoYXIga2V5W25vbmNlU2l6ZV07CiAgICAgY3J5cHRvZ3Jh
cGhpY2FsbHlSYW5kb21WYWx1ZXMoa2V5LCBub25jZVNpemUpOwotICAgIHJldHVybiBiYXNlNjRF
bmNvZGUoa2V5LCBub25jZVNpemUpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29k
ZWQoa2V5LCBub25jZVNpemUpKTsKIH0KIAogU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0
RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQoY29uc3QgU3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCkBA
IC0xMTAsNyArMTEwLDcgQEAgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRX
ZQogICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4od2Vi
U29ja2V0S2V5R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSk7CiAgICAgU0hBMTo6RGln
ZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7CisgICAgcmV0dXJuIG1ha2VTdHJp
bmcoYmFzZTY0RW5jb2RlZChoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpKTsKIH0KIAogV2Vi
U29ja2V0SGFuZHNoYWtlOjpXZWJTb2NrZXRIYW5kc2hha2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcm
IGNsaWVudE9yaWdpbiwgYm9vbCBhbGxvd0Nvb2tpZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvY3J5cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gb2YgcHJv
dGVjdGlvbiBpcyBub3QgcmVxdWlyZWQgYnkgdGhlIHNwZWMgYXMgb2YgMTEgRGVjZW1iZXIgMjAx
NDoKIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XZWJDcnlwdG9BUEkvI3NlY3VyaXR5LWRldmVs
b3BlcnMKIAotV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5
KFZlY3Rvcjx1aW50OF90PiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGRl
bGV0ZURlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKIAogV0VCQ09SRV9FWFBPUlQgYm9vbCB3
cmFwU2VyaWFsaXplZENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSwg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5
cHQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0tleUVDR0NyeXB0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIzLDExICs1MjMsMTEg
QEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogICAgICAgICBpZiAo
cSAmJiBxLT5zaXplKCkgPT0gY3VydmVVbmNvbXByZXNzZWRQb2ludFNpemUobV9jdXJ2ZSkpIHsK
ICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBhOwogICAgICAgICAgICAgYS5hcHBlbmQocS0+
ZGF0YSgpICsgMSwgdW5jb21wcmVzc2VkRmllbGRFbGVtZW50U2l6ZSk7Ci0gICAgICAgICAgICBq
d2sueCA9IGJhc2U2NFVSTEVuY29kZShhKTsKKyAgICAgICAgICAgIGp3ay54ID0gbWFrZVN0cmlu
ZyhiYXNlNjRVUkxFbmNvZGVkKGEpKTsKIAogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGI7
CiAgICAgICAgICAgICBiLmFwcGVuZChxLT5kYXRhKCkgKyAxICsgdW5jb21wcmVzc2VkRmllbGRF
bGVtZW50U2l6ZSwgdW5jb21wcmVzc2VkRmllbGRFbGVtZW50U2l6ZSk7Ci0gICAgICAgICAgICBq
d2sueSA9IGJhc2U2NFVSTEVuY29kZShiKTsKKyAgICAgICAgICAgIGp3ay55ID0gbWFrZVN0cmlu
ZyhiYXNlNjRVUkxFbmNvZGVkKGIpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTQzLDcgKzU0
Myw3IEBAIGJvb2wgQ3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KICAgICAgICAg
ICAgICAgICAgICAgKmQgPSBXVEZNb3ZlKHBhZGRlZERhdGEpOwogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGp3ay5kID0gYmFzZTY0VVJMRW5jb2RlKCpkKTsKKyAgICAgICAg
ICAgICAgICBqd2suZCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgqZCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvU2Vy
aWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNSAr
MjksMTQgQEAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFz
dGVyS2V5KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVy
S2V5KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFVOVVNFRF9QQVJBTShtYXN0ZXJL
ZXkpOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAK
IC8vIEluaXRpYWxseSB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zIHdlcmUgaW50ZW5kZWQgdG8gcGVy
Zm9ybSBLRUsgd3JhcHBpbmcgYW5kIHVud3JhcHBpbmcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDEwICs4OCwxMCBAQCBSZWZQdHI8Q3J5cHRvS2V5QUVTPiBDcnlwdG9LZXlBRVM6OmltcG9y
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmsuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90PiBvY3RldFNlcXVlbmNl
OwotICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuaywgb2N0ZXRTZXF1ZW5jZSkpCisg
ICAgYXV0byBvY3RldFNlcXVlbmNlID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuayk7CisgICAg
aWYgKCFvY3RldFNlcXVlbmNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWNh
bGxiYWNrKG9jdGV0U2VxdWVuY2Uuc2l6ZSgpICogOCwga2V5RGF0YS5hbGcpKQorICAgIGlmICgh
Y2FsbGJhY2sob2N0ZXRTZXF1ZW5jZS0+c2l6ZSgpICogOCwga2V5RGF0YS5hbGcpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAodXNhZ2VzICYmICFrZXlEYXRhLnVzZS5pc051bGwo
KSAmJiBrZXlEYXRhLnVzZSAhPSAiZW5jIikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0x
MDAsMTQgKzEwMCwxNCBAQCBSZWZQdHI8Q3J5cHRvS2V5QUVTPiBDcnlwdG9LZXlBRVM6OmltcG9y
CiAgICAgaWYgKGtleURhdGEuZXh0ICYmICFrZXlEYXRhLmV4dC52YWx1ZSgpICYmIGV4dHJhY3Rh
YmxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q3J5cHRvS2V5QUVTKGFsZ29yaXRobSwgV1RGTW92ZShvY3RldFNlcXVlbmNlKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5QUVTKGFsZ29y
aXRobSwgV1RGTW92ZSgqb2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpKTsKIH0K
IAogSnNvbldlYktleSBDcnlwdG9LZXlBRVM6OmV4cG9ydEp3aygpIGNvbnN0CiB7CiAgICAgSnNv
bldlYktleSByZXN1bHQ7CiAgICAgcmVzdWx0Lmt0eSA9ICJvY3QiOwotICAgIHJlc3VsdC5rID0g
YmFzZTY0VVJMRW5jb2RlKG1fa2V5KTsKKyAgICByZXN1bHQuayA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChtX2tleSkpOwogICAgIHJlc3VsdC5rZXlfb3BzID0gdXNhZ2VzKCk7CiAgICAg
cmVzdWx0LmV4dCA9IGV4dHJhY3RhYmxlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTgsMjIgKzk4LDIyIEBAIFJlZlB0cjxDcnlwdG9LZXlFQz4gQ3J5cHRvS2V5
RUM6OmltcG9ydEoKIAogICAgIGlmIChrZXlEYXRhLnguaXNOdWxsKCkgfHwga2V5RGF0YS55Lmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4geDsK
LSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEueCwgeCkpCisgICAgYXV0byB4
ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEueCk7CisgICAgaWYgKCF4KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4geTsKLSAgICBpZiAoIVdURjo6YmFzZTY0
VVJMRGVjb2RlKGtleURhdGEueSwgeSkpCisgICAgYXV0byB5ID0gYmFzZTY0VVJMRGVjb2RlKGtl
eURhdGEueSk7CisgICAgaWYgKCF5KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
a2V5RGF0YS5kLmlzTnVsbCgpKSB7CiAgICAgICAgIC8vIGltcG9ydCBwdWJsaWMga2V5Ci0gICAg
ICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1B1YmxpYyhpZGVudGlmaWVyLCAqbmFtZWRDdXJ2
ZSwgV1RGTW92ZSh4KSwgV1RGTW92ZSh5KSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAg
IHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1B1YmxpYyhpZGVudGlmaWVyLCAqbmFtZWRDdXJ2ZSwg
V1RGTW92ZSgqeCksIFdURk1vdmUoKnkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAK
LSAgICBWZWN0b3I8dWludDhfdD4gZDsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtl
eURhdGEuZCwgZCkpCisgICAgYXV0byBkID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZCk7Cisg
ICAgaWYgKCFkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBpbXBvcnQgcHJpdmF0
ZSBrZXkKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBvcnRKV0tQcml2YXRlKGlkZW50aWZpZXIsICpu
YW1lZEN1cnZlLCBXVEZNb3ZlKHgpLCBXVEZNb3ZlKHkpLCBXVEZNb3ZlKGQpLCBleHRyYWN0YWJs
ZSwgdXNhZ2VzKTsKKyAgICByZXR1cm4gcGxhdGZvcm1JbXBvcnRKV0tQcml2YXRlKGlkZW50aWZp
ZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKCp4KSwgV1RGTW92ZSgqeSksIFdURk1vdmUoKmQpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKIH0KIAogUmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlF
Qzo6aW1wb3J0U3BraShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgY3VydmUsIFZlY3Rvcjx1aW50OF90PiYmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFi
bGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDggKzEwMyw4IEBAIFJlZlB0cjxDcnlwdG9LZXlITUFDPiBDcnlwdG9LZXlITUFDOjpp
bXAKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEuay5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG9jdGV0U2VxdWVu
Y2U7Ci0gICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rLCBvY3RldFNlcXVlbmNlKSkK
KyAgICBhdXRvIG9jdGV0U2VxdWVuY2UgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rKTsKKyAg
ICBpZiAoIW9jdGV0U2VxdWVuY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICgh
Y2FsbGJhY2soaGFzaCwga2V5RGF0YS5hbGcpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTExNSwxNCArMTE1LDE0IEBAIFJlZlB0cjxDcnlwdG9LZXlITUFDPiBDcnlwdG9LZXlITUFDOjpp
bXAKICAgICBpZiAoa2V5RGF0YS5leHQgJiYgIWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFj
dGFibGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIENyeXB0b0tleUhN
QUM6OmltcG9ydFJhdyhsZW5ndGhCaXRzLCBoYXNoLCBXVEZNb3ZlKG9jdGV0U2VxdWVuY2UpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICByZXR1cm4gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3
KGxlbmd0aEJpdHMsIGhhc2gsIFdURk1vdmUoKm9jdGV0U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwg
dXNhZ2VzKTsKIH0KIAogSnNvbldlYktleSBDcnlwdG9LZXlITUFDOjpleHBvcnRKd2soKSBjb25z
dAogewogICAgIEpzb25XZWJLZXkgcmVzdWx0OwogICAgIHJlc3VsdC5rdHkgPSAib2N0IjsKLSAg
ICByZXN1bHQuayA9IGJhc2U2NFVSTEVuY29kZShtX2tleSk7CisgICAgcmVzdWx0LmsgPSBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQobV9rZXkpKTsKICAgICByZXN1bHQua2V5X29wcyA9IHVz
YWdlcygpOwogICAgIHJlc3VsdC5leHQgPSBleHRyYWN0YWJsZSgpOwogICAgIHJldHVybiByZXN1
bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tl
eVJTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDY1ICs0NSw4NyBAQCBSZWZQdHI8Q3J5cHRv
S2V5UlNBPiBDcnlwdG9LZXlSU0E6OmltcG9yCiAKICAgICBpZiAoa2V5RGF0YS5uLmlzTnVsbCgp
IHx8IGtleURhdGEuZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgVmVj
dG9yPHVpbnQ4X3Q+IG1vZHVsdXM7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlE
YXRhLm4sIG1vZHVsdXMpKQorICAgIGF1dG8gbW9kdWx1cyA9IGJhc2U2NFVSTERlY29kZShrZXlE
YXRhLm4pOworICAgIGlmICghbW9kdWx1cykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
Ly8gUGVyIFJGQyA3NTE4IFNlY3Rpb24gNi4zLjEuMTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9o
dG1sL3JmYzc1MTgjc2VjdGlvbi02LjMuMS4xCi0gICAgaWYgKCFtb2R1bHVzLmlzRW1wdHkoKSAm
JiAhbW9kdWx1c1swXSkKLSAgICAgICAgbW9kdWx1cy5yZW1vdmUoMCk7Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IGV4cG9uZW50OwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5l
LCBleHBvbmVudCkpCisgICAgaWYgKCFtb2R1bHVzLT5pc0VtcHR5KCkgJiYgIW1vZHVsdXMtPmF0
KDApKQorICAgICAgICBtb2R1bHVzLT5yZW1vdmUoMCk7CisgICAgYXV0byBleHBvbmVudCA9IGJh
c2U2NFVSTERlY29kZShrZXlEYXRhLmUpOworICAgIGlmICghZXhwb25lbnQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmQuaXNOdWxsKCkpIHsKICAgICAgICAgLy8g
aW1wb3J0IHB1YmxpYyBrZXkKLSAgICAgICAgYXV0byBwdWJsaWNLZXlDb21wb25lbnRzID0gQ3J5
cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKFdURk1vdmUobW9kdWx1cyksIFdURk1v
dmUoZXhwb25lbnQpKTsKKyAgICAgICAgYXV0byBwdWJsaWNLZXlDb21wb25lbnRzID0gQ3J5cHRv
S2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKFdURk1vdmUoKm1vZHVsdXMpLCBXVEZNb3Zl
KCpleHBvbmVudCkpOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxkIG5vdCBoYXZlIGFueSBl
ZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlS
U0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpTSEFfMSksICEhaGFzaCwgKnB1YmxpY0tleUNvbXBvbmVudHMsIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogICAgIH0KIAogICAgIC8vIGltcG9ydCBwcml2YXRlIGtleQotICAgIFZlY3Rvcjx1
aW50OF90PiBwcml2YXRlRXhwb25lbnQ7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShr
ZXlEYXRhLmQsIHByaXZhdGVFeHBvbmVudCkpCisgICAgYXV0byBwcml2YXRlRXhwb25lbnQgPSBi
YXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBpZiAoIXByaXZhdGVFeHBvbmVudCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEucC5pc051bGwoKSAmJiBrZXlE
YXRhLnEuaXNOdWxsKCkgJiYga2V5RGF0YS5kcC5pc051bGwoKSAmJiBrZXlEYXRhLmRwLmlzTnVs
bCgpICYmIGtleURhdGEucWkuaXNOdWxsKCkpIHsKLSAgICAgICAgYXV0byBwcml2YXRlS2V5Q29t
cG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUoV1RGTW92ZSht
b2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUocHJpdmF0ZUV4cG9uZW50KSk7Cisg
ICAgICAgIGF1dG8gcHJpdmF0ZUtleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25lbnRz
OjpjcmVhdGVQcml2YXRlKFdURk1vdmUoKm1vZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVudCksIFdU
Rk1vdmUoKnByaXZhdGVFeHBvbmVudCkpOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxkIG5v
dCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJldHVy
biBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRzLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAKICAgICBpZiAoa2V5RGF0YS5wLmlzTnVsbCgp
IHx8IGtleURhdGEucS5pc051bGwoKSB8fCBrZXlEYXRhLmRwLmlzTnVsbCgpIHx8IGtleURhdGEu
ZHEuaXNOdWxsKCkgfHwga2V5RGF0YS5xaS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGZpcnN0UHJpbWVJbmZv
OwotICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBzZWNvbmRQcmltZUluZm87
Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLnAsIGZpcnN0UHJpbWVJbmZv
LnByaW1lRmFjdG9yKSkKKyAgICAKKyAgICBhdXRvIGZpcnN0UHJpbWVGYWN0b3IgPSBiYXNlNjRV
UkxEZWNvZGUoa2V5RGF0YS5wKTsKKyAgICBpZiAoIWZpcnN0UHJpbWVGYWN0b3IpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5k
cCwgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQpKQorICAgIGF1dG8gZmlyc3RGYWN0
b3JDUlRFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRwKTsKKyAgICBpZiAoIWZp
cnN0RmFjdG9yQ1JURXhwb25lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICgh
V1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5xLCBzZWNvbmRQcmltZUluZm8ucHJpbWVGYWN0
b3IpKQorICAgIGF1dG8gc2Vjb25kUHJpbWVGYWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0
YS5xKTsKKyAgICBpZiAoIXNlY29uZFByaW1lRmFjdG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZHEsIHNlY29uZFByaW1l
SW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisgICAgYXV0byBzZWNvbmRGYWN0b3JDUlRFeHBvbmVu
dCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRxKTsKKyAgICBpZiAoIXNlY29uZEZhY3RvckNS
VEV4cG9uZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIVdURjo6YmFzZTY0
VVJMRGVjb2RlKGtleURhdGEucWksIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRDb2VmZmljaWVu
dCkpCisgICAgYXV0byBzZWNvbmRGYWN0b3JDUlRDb2VmZmljaWVudCA9IGJhc2U2NFVSTERlY29k
ZShrZXlEYXRhLnFpKTsKKyAgICBpZiAoIXNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1l
SW5mbyBmaXJzdFByaW1lSW5mbzsKKyAgICBmaXJzdFByaW1lSW5mby5wcmltZUZhY3RvciA9IFdU
Rk1vdmUoKmZpcnN0UHJpbWVGYWN0b3IpOworICAgIGZpcnN0UHJpbWVJbmZvLmZhY3RvckNSVEV4
cG9uZW50ID0gV1RGTW92ZSgqZmlyc3RGYWN0b3JDUlRFeHBvbmVudCk7CisgICAgCisgICAgQ3J5
cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mbzsKKyAgICBzZWNv
bmRQcmltZUluZm8ucHJpbWVGYWN0b3IgPSBXVEZNb3ZlKCpzZWNvbmRQcmltZUZhY3Rvcik7Cisg
ICAgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50ID0gV1RGTW92ZSgqc2Vjb25kRmFj
dG9yQ1JURXhwb25lbnQpOworICAgIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRDb2VmZmljaWVu
dCA9IFdURk1vdmUoKnNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50KTsKKwogICAgIGlmICgha2V5
RGF0YS5vdGgpIHsKLSAgICAgICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tl
eVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEoV1RGTW92ZSht
b2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUocHJpdmF0ZUV4cG9uZW50KSwgV1RG
TW92ZShmaXJzdFByaW1lSW5mbyksIFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwgeyB9KTsKKyAg
ICAgICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6
OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1v
dmUoKmV4cG9uZW50KSwgV1RGTW92ZSgqcHJpdmF0ZUV4cG9uZW50KSwgV1RGTW92ZShmaXJzdFBy
aW1lSW5mbyksIFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwgeyB9KTsKICAgICAgICAgLy8gTm90
aWNlOiBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSBpcyBqdXN0IGEgcGxhY2Vob2xk
ZXIuIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkgZWZmZWN0IGlmIGhhc2ggaXMgV1RGOjpudWxsb3B0
LgogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBoYXNoLnZh
bHVlT3IoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsICpwcml2YXRl
S2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgfQogCiAgICAgVmVjdG9y
PENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbz4gb3RoZXJQcmltZUluZm9zOwogICAg
IGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiBrZXlEYXRhLm90aC52YWx1ZSgpKSB7Ci0gICAgICAg
IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBpbmZvOwotICAgICAgICBpZiAoIVdU
Rjo6YmFzZTY0VVJMRGVjb2RlKHZhbHVlLnIsIGluZm8ucHJpbWVGYWN0b3IpKQorICAgICAgICBh
dXRvIHByaW1lRmFjdG9yID0gYmFzZTY0VVJMRGVjb2RlKHZhbHVlLnIpOworICAgICAgICBpZiAo
IXByaW1lRmFjdG9yKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlmICgh
V1RGOjpiYXNlNjRVUkxEZWNvZGUodmFsdWUuZCwgaW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisg
ICAgICAgIGF1dG8gZmFjdG9yQ1JURXhwb25lbnQgPSBiYXNlNjRVUkxEZWNvZGUodmFsdWUuZCk7
CisgICAgICAgIGlmICghZmFjdG9yQ1JURXhwb25lbnQpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZSh2YWx1ZS50LCBpbmZvLmZh
Y3RvckNSVENvZWZmaWNpZW50KSkKKyAgICAgICAgYXV0byBmYWN0b3JDUlRDb2VmZmljaWVudCA9
IGJhc2U2NFVSTERlY29kZSh2YWx1ZS50KTsKKyAgICAgICAgaWYgKCFmYWN0b3JDUlRDb2VmZmlj
aWVudCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBvdGhlclByaW1lSW5m
b3MuYXBwZW5kKGluZm8pOworCisgICAgICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1l
SW5mbyBpbmZvOworICAgICAgICBpbmZvLnByaW1lRmFjdG9yID0gV1RGTW92ZSgqcHJpbWVGYWN0
b3IpOworICAgICAgICBpbmZvLmZhY3RvckNSVEV4cG9uZW50ID0gV1RGTW92ZSgqZmFjdG9yQ1JU
RXhwb25lbnQpOworICAgICAgICBpbmZvLmZhY3RvckNSVENvZWZmaWNpZW50ID0gV1RGTW92ZSgq
ZmFjdG9yQ1JUQ29lZmZpY2llbnQpOworCisgICAgICAgIG90aGVyUHJpbWVJbmZvcy5hcHBlbmQo
V1RGTW92ZShpbmZvKSk7CiAgICAgfQogCi0gICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9
IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEo
V1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUocHJpdmF0ZUV4cG9u
ZW50KSwgV1RGTW92ZShmaXJzdFByaW1lSW5mbyksIFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwg
V1RGTW92ZShvdGhlclByaW1lSW5mb3MpKTsKKyAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRz
ID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0
YShXVEZNb3ZlKCptb2R1bHVzKSwgV1RGTW92ZSgqZXhwb25lbnQpLCBXVEZNb3ZlKCpwcml2YXRl
RXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUlu
Zm8pLCBXVEZNb3ZlKG90aGVyUHJpbWVJbmZvcykpOwogICAgIC8vIE5vdGljZTogQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6U0hBXzEgaXMganVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQg
bm90IGhhdmUgYW55IGVmZmVjdCBpZiBoYXNoIGlzIFdURjo6bnVsbG9wdC4KICAgICByZXR1cm4g
Q3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBoYXNoLnZhbHVlT3IoQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsICpwcml2YXRlS2V5Q29tcG9uZW50cywgZXh0
cmFjdGFibGUsIHVzYWdlcyk7CiB9CkBAIC0xMTgsMzAgKzE0MCwzMCBAQCBKc29uV2ViS2V5IENy
eXB0b0tleVJTQTo6ZXhwb3J0SndrKCkgY29uCiAgICAgYXV0byByc2FDb21wb25lbnRzID0gZXhw
b3J0RGF0YSgpOwogCiAgICAgLy8gcHVibGljIGtleQotICAgIHJlc3VsdC5uID0gYmFzZTY0VVJM
RW5jb2RlKHJzYUNvbXBvbmVudHMtPm1vZHVsdXMoKSk7Ci0gICAgcmVzdWx0LmUgPSBiYXNlNjRV
UkxFbmNvZGUocnNhQ29tcG9uZW50cy0+ZXhwb25lbnQoKSk7CisgICAgcmVzdWx0Lm4gPSBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+bW9kdWx1cygpKSk7CisgICAg
cmVzdWx0LmUgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+ZXhw
b25lbnQoKSkpOwogICAgIGlmIChyc2FDb21wb25lbnRzLT50eXBlKCkgPT0gQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6VHlwZTo6UHVibGljKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAg
Ly8gcHJpdmF0ZSBrZXkKLSAgICByZXN1bHQuZCA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25l
bnRzLT5wcml2YXRlRXhwb25lbnQoKSk7CisgICAgcmVzdWx0LmQgPSBtYWtlU3RyaW5nKGJhc2U2
NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+cHJpdmF0ZUV4cG9uZW50KCkpKTsKICAgICBpZiAo
IXJzYUNvbXBvbmVudHMtPmhhc0FkZGl0aW9uYWxQcml2YXRlS2V5UGFyYW1ldGVycygpKQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmVzdWx0LnAgPSBiYXNlNjRVUkxFbmNvZGUocnNh
Q29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8oKS5wcmltZUZhY3Rvcik7Ci0gICAgcmVzdWx0LnEg
PSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkucHJpbWVG
YWN0b3IpOwotICAgIHJlc3VsdC5kcCA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5m
aXJzdFByaW1lSW5mbygpLmZhY3RvckNSVEV4cG9uZW50KTsKLSAgICByZXN1bHQuZHEgPSBiYXNl
NjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkuZmFjdG9yQ1JURXhw
b25lbnQpOwotICAgIHJlc3VsdC5xaSA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5z
ZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRDb2VmZmljaWVudCk7CisgICAgcmVzdWx0LnAgPSBt
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8o
KS5wcmltZUZhY3RvcikpOworICAgIHJlc3VsdC5xID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNv
ZGVkKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5mbygpLnByaW1lRmFjdG9yKSk7CisgICAg
cmVzdWx0LmRwID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKHJzYUNvbXBvbmVudHMtPmZp
cnN0UHJpbWVJbmZvKCkuZmFjdG9yQ1JURXhwb25lbnQpKTsKKyAgICByZXN1bHQuZHEgPSBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCku
ZmFjdG9yQ1JURXhwb25lbnQpKTsKKyAgICByZXN1bHQucWkgPSBtYWtlU3RyaW5nKGJhc2U2NFVS
TEVuY29kZWQocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkuZmFjdG9yQ1JUQ29lZmZp
Y2llbnQpKTsKICAgICBpZiAocnNhQ29tcG9uZW50cy0+b3RoZXJQcmltZUluZm9zKCkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgVmVjdG9yPFJzYU90aGVyUHJpbWVz
SW5mbz4gb3RoOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5mbyA6IHJzYUNvbXBvbmVudHMtPm90
aGVyUHJpbWVJbmZvcygpKSB7CiAgICAgICAgIFJzYU90aGVyUHJpbWVzSW5mbyBvdGhlckluZm87
Ci0gICAgICAgIG90aGVySW5mby5yID0gYmFzZTY0VVJMRW5jb2RlKGluZm8ucHJpbWVGYWN0b3Ip
OwotICAgICAgICBvdGhlckluZm8uZCA9IGJhc2U2NFVSTEVuY29kZShpbmZvLmZhY3RvckNSVEV4
cG9uZW50KTsKLSAgICAgICAgb3RoZXJJbmZvLnQgPSBiYXNlNjRVUkxFbmNvZGUoaW5mby5mYWN0
b3JDUlRDb2VmZmljaWVudCk7CisgICAgICAgIG90aGVySW5mby5yID0gbWFrZVN0cmluZyhiYXNl
NjRVUkxFbmNvZGVkKGluZm8ucHJpbWVGYWN0b3IpKTsKKyAgICAgICAgb3RoZXJJbmZvLmQgPSBt
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoaW5mby5mYWN0b3JDUlRFeHBvbmVudCkpOworICAg
ICAgICBvdGhlckluZm8udCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChpbmZvLmZhY3Rv
ckNSVENvZWZmaWNpZW50KSk7CiAgICAgICAgIG90aC5hcHBlbmQoV1RGTW92ZShvdGhlckluZm8p
KTsKICAgICB9CiAgICAgcmVzdWx0Lm90aCA9IFdURk1vdmUob3RoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1B
ZGRGaWVsZEVsZW1lbgogCiAgICAgaWYgKFVOTElLRUxZKChzaXplICE9IHB1YmxpY0tleVNpemUp
ICYmIChzaXplICE9IHByaXZhdGVLZXlTaXplKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBqd2sueCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHJlc3VsdC5kYXRhKCkgKyAxLCBrZXlTaXpl
SW5CeXRlcyk7Ci0gICAgandrLnkgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShyZXN1bHQuZGF0YSgp
ICsga2V5U2l6ZUluQnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRlcyk7CisgICAgandrLnggPSBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVzdWx0LmRhdGEoKSArIDEsIGtleVNpemVJbkJ5dGVz
KSk7CisgICAgandrLnkgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVzdWx0LmRhdGEo
KSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6ZUluQnl0ZXMpKTsKICAgICBpZiAoc2l6ZSA+
IHB1YmxpY0tleVNpemUpCi0gICAgICAgIGp3ay5kID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUocmVz
dWx0LmRhdGEoKSArIHB1YmxpY0tleVNpemUsIGtleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgandr
LmQgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVzdWx0LmRhdGEoKSArIHB1YmxpY0tl
eVNpemUsIGtleVNpemVJbkJ5dGVzKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5
V3JhcE1hYy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQAogI2ltcG9ydCA8Q29tbW9uQ3J5cHRvL0NvbW1vblN5bW1ldHJpY0tleXdyYXAuaD4K
ICNpbXBvcnQgPGNydF9leHRlcm5zLmg+CiAjaW1wb3J0IDx3dGYvQ3J5cHRvZ3JhcGhpY1V0aWxp
dGllcy5oPgorI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1By
aXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL3NwaS9j
b2NvYS9TZWN1cml0eVNQSS5oPgpAQCAtODAsMTEgKzgxLDExIEBAIHN0YXRpYyBOU1N0cmluZyog
bWFzdGVyS2V5QWNjb3VudE5hbWVGb3IKICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJjb20uYXBwbGUuV2ViS2l0LldlYkNyeXB0by5tYXN0ZXIrJUAiLCBidW5kbGVJZGVu
dGlmaWVyXTsKIH0KIAotc3RhdGljIGJvb2wgY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoVmVjdG9y
PHVpbnQ4X3Q+JiBtYXN0ZXJLZXlEYXRhKQorc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGhhc1By
b2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzQ3JlZGVudGlhbHMpKTsK
IAotICAgIG1hc3RlcktleURhdGEucmVzaXplKG1hc3RlcktleVNpemVJbkJ5dGVzKTsKKyAgICBW
ZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5RGF0YShtYXN0ZXJLZXlTaXplSW5CeXRlcyk7CiAgICAg
YXV0byByYyA9IENDUmFuZG9tR2VuZXJhdGVCeXRlcyhtYXN0ZXJLZXlEYXRhLmRhdGEoKSwgbWFz
dGVyS2V5RGF0YS5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJjID09IGtDQ1N1Y2Nlc3Mp
OwogCkBAIC0xMDcsNyArMTA4LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlQW5kU3RvcmVNYXN0ZXJL
ZXkoVmVjdAogICAgIHN0YXR1cyA9IFNlY0FjY2Vzc0NyZWF0ZSgoX19icmlkZ2UgQ0ZTdHJpbmdS
ZWYpbG9jYWxpemVkSXRlbU5hbWUsIG51bGxwdHIsICZhY2Nlc3NSZWYpOwogICAgIGlmIChzdGF0
dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3QgY3JlYXRlIGEgc2VjdXJpdHkgYWNj
ZXNzIG9iamVjdCBmb3Igc3RvcmluZyBXZWJDcnlwdG8gbWFzdGVyIGtleSwgZXJyb3IgJWQiLCAo
aW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPFNlY0FjY2Vzc1JlZj4gYWNjZXNzID0gYWRv
cHRDRihhY2Nlc3NSZWYpOwogCkBAIC0xMjAsMTkgKzEyMSwxOCBAQCBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19CRUdJTgogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAg
ICAgaWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBjcmVhdGUgYSB0
cnVzdGVkIGFwcGxpY2F0aW9uIG9iamVjdCBmb3Igc3RvcmluZyBXZWJDcnlwdG8gbWFzdGVyIGtl
eSwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPFNlY1RydXN0ZWRB
cHBsaWNhdGlvblJlZj4gdHJ1c3RlZEFwcCA9IGFkb3B0Q0YodHJ1c3RlZEFwcFJlZik7CiAKICAg
ICBzdGF0dXMgPSBTZWNBQ0xTZXRDb250ZW50cyhhY2wsIChfX2JyaWRnZSBDRkFycmF5UmVmKUBb
IChfX2JyaWRnZSBpZCl0cnVzdGVkQXBwLmdldCgpIF0sIChfX2JyaWRnZSBDRlN0cmluZ1JlZils
b2NhbGl6ZWRJdGVtTmFtZSwga1NlY0tleWNoYWluUHJvbXB0UmVxdWlyZVBhc3NwaGFzZSk7CiAg
ICAgaWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBzZXQgQUNMIGZv
ciBXZWJDcnlwdG8gbWFzdGVyIGtleSwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAjZW5k
aWYKIAotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YTsKLSAgICBi
YXNlNjRFbmNvZGUobWFzdGVyS2V5RGF0YSwgYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEpOwor
ICAgIGF1dG8gYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEgPSBiYXNlNjRFbmNvZGUobWFzdGVy
S2V5RGF0YSk7CiAKICAgICAvLyBDYW5ub3QgdXNlIGtTZWNDbGFzc0tleSBiZWNhdXNlIG9mIDxy
ZGFyOi8vcHJvYmxlbS8xNjA2ODIwNz4uCiAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0g
QHsKQEAgLTE1MCwxMiArMTUwLDEzIEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VO
RAogICAgIHN0YXR1cyA9IFNlY0l0ZW1BZGQoKENGRGljdGlvbmFyeVJlZilhdHRyaWJ1dGVzLCBu
dWxscHRyKTsKICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90
IHN0b3JlIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBtYXN0ZXJLZXlEYXRhOwogfQogCi1zdGF0
aWMgYm9vbCBmaW5kTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5RGF0YSkKK3N0
YXRpYyBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGZpbmRNYXN0ZXJLZXkoKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNj
ZXNzQ3JlZGVudGlhbHMpKTsKIApAQCAtMTcwLDIwICsxNzEsMjUgQEAgc3RhdGljIGJvb2wgZmlu
ZE1hc3RlcktleShWZWN0b3I8dWludDhfdAogICAgIGlmIChzdGF0dXMpIHsKICAgICAgICAgaWYg
KHN0YXR1cyAhPSBlcnJTZWNJdGVtTm90Rm91bmQgJiYgc3RhdHVzICE9IGVyclNlY1VzZXJDYW5j
ZWxlZCkKICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ291bGQgbm90IGZpbmQgV2ViQ3J5cHRv
IG1hc3RlciBrZXkgaW4gS2V5Y2hhaW4sIGVycm9yICVkIiwgKGludClzdGF0dXMpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogICAg
IFJldGFpblB0cjxDRkRhdGFSZWY+IGtleURhdGEgPSBhZG9wdENGKGtleURhdGFSZWYpOwotCi0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhID0gdmVjdG9yRnJv
bU5TRGF0YSgoX19icmlkZ2UgTlNEYXRhICopa2V5RGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIGJh
c2U2NERlY29kZSgoY29uc3QgY2hhciopYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEuZGF0YSgp
LCBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YS5zaXplKCksIG1hc3RlcktleURhdGEpOworICAg
IHJldHVybiBiYXNlNjREZWNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oQ0ZEYXRh
R2V0Qnl0ZVB0cihrZXlEYXRhLmdldCgpKSksIENGRGF0YUdldExlbmd0aChrZXlEYXRhLmdldCgp
KSk7CiB9CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShWZWN0b3I8dWludDhf
dD4mIG1hc3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSgpCiB7Ci0gICAgaWYgKCFmaW5kTWFzdGVyS2V5KG1hc3RlcktleSkgJiYgIWNy
ZWF0ZUFuZFN0b3JlTWFzdGVyS2V5KG1hc3RlcktleSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBSRUxFQVNFX0FTU0VSVChtYXN0ZXJLZXkuc2l6ZSgpID09IG1hc3RlcktleVNpemVJbkJ5
dGVzKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYXV0byBtYXN0ZXJLZXkgPSBmaW5kTWFz
dGVyS2V5KCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWFzdGVyS2V5LT5zaXplKCkgPT0g
bWFzdGVyS2V5U2l6ZUluQnl0ZXMpOworICAgICAgICByZXR1cm4gbWFzdGVyS2V5OworICAgIH0K
KworICAgIGlmIChhdXRvIG1hc3RlcktleSA9IGNyZWF0ZUFuZFN0b3JlTWFzdGVyS2V5KCkpIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWFzdGVyS2V5LT5zaXplKCkgPT0gbWFzdGVyS2V5U2l6
ZUluQnl0ZXMpOworICAgICAgICByZXR1cm4gbWFzdGVyS2V5OworICAgIH0KKworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CiAKIGJvb2wgZGVsZXRlRGVmYXVsdFdlYkNyeXB0b01hc3Rlcktl
eSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcE9wZW5TU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9v
cGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwT3BlblNTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwxNCBAQAogI2lmIEVO
QUJMRShXRUJfQ1JZUFRPKQogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGdldERlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCitPcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogLy8gSW5pdGlhbGx5IHRo
ZXNlIGhlbHBlciBmdW5jdGlvbnMgd2VyZSBpbnRlbmRlZCB0byBwZXJmb3JtIEtFSyB3cmFwcGlu
ZyBhbmQgdW53cmFwcGluZywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRl
ckxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyTG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9GaWxlUmVhZGVyTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDI2ICszMzMsMTIg
QEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9UZXh0KCkKIAogdm9pZCBGaWxlUmVh
ZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRhVVJMKCkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJkYXRhOiIpOwotCiAgICAgaWYgKCFtX2J5
dGVzTG9hZGVkKSB7Ci0gICAgICAgIG1fc3RyaW5nUmVzdWx0ID0gYnVpbGRlci50b1N0cmluZygp
OworICAgICAgICBtX3N0cmluZ1Jlc3VsdCA9ICJkYXRhOiJfczsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChtX2RhdGFUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwotICAgIGVsc2UKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQobV9kYXRhVHlwZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI7YmFz
ZTY0LCIpOwotCi0gICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICBiYXNlNjRFbmNvZGUobV9yYXdE
YXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQsIG91dCk7Ci0gICAgb3V0LmFwcGVuZCgnXDAnKTsK
LSAgICBidWlsZGVyLmFwcGVuZChvdXQuZGF0YSgpKTsKLQotICAgIG1fc3RyaW5nUmVzdWx0ID0g
YnVpbGRlci50b1N0cmluZygpOworICAgIG1fc3RyaW5nUmVzdWx0ID0gbWFrZVN0cmluZygiZGF0
YTo7YmFzZTY0LCIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSIgOiBtX2RhdGFUeXBlLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+ZGF0YSgpLCBtX2J5
dGVzTG9hZGVkKSwgJ1wwJyk7CiB9CiAKIGJvb2wgRmlsZVJlYWRlckxvYWRlcjo6aXNDb21wbGV0
ZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjksMTQgKzQyOSwxNCBAQCBz
dGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNoOwogICAgICAgICAgICAgYXR0cnNTSEEx
LmNvbXB1dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9
IGJhc2U2NEVuY29kZShhdHRyc0hhc2guZGF0YSgpLCAxMCk7CisgICAgICAgICAgICBkaWdlc3Qt
PmF0dHJzU0hBMSA9IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChhdHRyc0hhc2guZGF0YSgpLCAx
MCkpOwogICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIGRpZ2VzdC0+YXR0cnNTSEEx
KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEu
Y29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlKGhhc2gu
ZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVk
KGhhc2guZGF0YSgpLCAxMCkpOwogICAgIGlmICh1bnVzZWROb2Rlc01hcCkKICAgICAgICAgdW51
c2VkTm9kZXNNYXAtPmFkZChkaWdlc3QtPnNoYTEsIGRpZ2VzdC5nZXQoKSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDExICs1OTgsMTEgQEAgYm9v
bCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghbV9jbGllbnQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAg
IGlmICghYmFzZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSwgZGF0YSkpCisgICAgYXV0
byBkYXRhID0gYmFzZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSk7CisgICAgaWYgKCFk
YXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3Rl
bmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOwogICAgIE9w
dGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogICAgIGRlY29kZXIgPj4g
Y2VydGlmaWNhdGVJbmZvOwogICAgIGlmICghY2VydGlmaWNhdGVJbmZvKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNl
c0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdW5zaWduZWQgTmV0
d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRAogICAgICAgICBtX2NvbnRlbnQgPSBtX2RlY29k
ZXItPmRlY29kZUFuZEZsdXNoKG1fZGF0YUJ1ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBtX2Jhc2U2NEVuY29kZWQgPSB0cnVlOwotICAgICAgICBtX2Nv
bnRlbnQgPSBiYXNlNjRFbmNvZGUobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOwor
ICAgICAgICBtX2NvbnRlbnQgPSBtYWtlU3RyaW5nKFdURjo6YmFzZTY0RW5jb2RlZChtX2RhdGFC
dWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCkpOwogICAgIH0KIAogICAgIG1fZGF0YUJ1ZmZlciA9
IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MDksNyArMTcwOSw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1
cml0eVBvbGkKICAgICBhdXRvIGNyeXB0b0RpZ2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVh
dGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7CiAgICAgY3J5cHRvRGln
ZXN0LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVudC5zaXplKCkpOwogICAgIGF1dG8g
ZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlKGRpZ2VzdC5kYXRhKCksIGRpZ2VzdC5zaXplKCkp
KTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29kZWQoZGlnZXN0
LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOwogfQogCiBSZWY8UHJvdG9jb2w6OkRPTTo6Tm9kZT4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBpbnQgZGVw
dGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
TmV0d29ya0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDcgKzE3NSw3IEBAIFJlZjxQ
cm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGIKICAgICByZXR1cm4gUHJvdG9jb2w6
Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQogICAgICAgICAuc2V0T3Bjb2RlKGZy
YW1lLm9wQ29kZSkKICAgICAgICAgLnNldE1hc2soZnJhbWUubWFza2VkKQotICAgICAgICAuc2V0
UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGlu
MUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpIDogYmFzZTY0RW5j
b2RlKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKQorICAgICAgICAuc2V0UGF5
bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZh
bGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpIDogbWFrZVN0cmluZyhi
YXNlNjRFbmNvZGVkKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKSkKICAgICAg
ICAgLnNldFBheWxvYWRMZW5ndGgoZnJhbWUucGF5bG9hZExlbmd0aCkKICAgICAgICAgLnJlbGVh
c2UoKTsKIH0KQEAgLTU4Niw3ICs1ODYsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
ZGlkUmVjZWl2ZURhCiAgICAgICAgIC8vIE9mdGVuIHRoZSBkYXRhIGlzIHRleHQgYW5kIHdlIHdv
dWxkIGhhdmUgYSBkZWNvZGVyLCBidXQgZm9yIG5vbi10ZXh0IHdlIHdvbid0IGhhdmUgYSBkZWNv
ZGVyLgogICAgICAgICAvLyBTeW5jIFhIUnMgbWF5IG5vdCBoYXZlIGEgY2FjaGVkIHJlc291cmNl
LCB3aGlsZSBub24tc3luYyBYSFJzIHVzdWFsbHkgdHJhbnNmZXIgZGF0YSBvdmVyIG9uIGNvbXBs
ZXRpb24uCiAgICAgICAgIGlmIChtX2xvYWRpbmdYSFJTeW5jaHJvbm91c2x5ICYmIHJlc291cmNl
RGF0YSAmJiAhcmVzb3VyY2VEYXRhLT5oYXNCdWZmZXJlZERhdGEoKSAmJiAhcmVzb3VyY2VEYXRh
LT5jYWNoZWRSZXNvdXJjZSgpKQotICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNv
dXJjZUNvbnRlbnQocmVxdWVzdElkLCBiYXNlNjRFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCksIHRy
dWUpOworICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQocmVx
dWVzdElkLCBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoZGF0YSwgZGF0YUxlbmd0aCkpLCB0cnVl
KTsKICAgICB9CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGF0YVJlY2VpdmVkKHJlcXVl
c3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKQEAgLTEw
MDQsNyArMTAwNCw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8K
IAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNp
c3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2Rlciwg
Y2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShlbmNvZGVyLmJ1
ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFz
ZTY0RW5jb2RlZChlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSkpOwogfQog
CiBXZWJTb2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVzdElk
KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKQEAgLTEyMDIs
MTEgKzEyMDIsMTEgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgog
ICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZHMoV1RGTW92ZShleHBsaWNpdEhlYWRl
cnMpKTsKICAgICB9CiAgICAgaWYgKCEhcG9zdERhdGEpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUocG9zdERhdGEsIGJ1ZmZlcikp
CisgICAgICAgIGF1dG8gYnVmZmVyID0gYmFzZTY0RGVjb2RlKHBvc3REYXRhKTsKKyAgICAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0
byBkZWNvZGUgZ2l2ZW4gcG9zdERhdGEiX3MpOwogCi0gICAgICAgIHJlcXVlc3Quc2V0SFRUUEJv
ZHkoRm9ybURhdGE6OmNyZWF0ZShidWZmZXIpKTsKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9k
eShGb3JtRGF0YTo6Y3JlYXRlKFdURk1vdmUoKmJ1ZmZlcikpKTsKICAgICB9CiAgICAgLy8gRklY
TUU6IGZpZ3VyZSBvdXQgaG93IHRvIGlkZW50aWZ5IHdoZW4gYSByZXF1ZXN0IGhhcyBiZWVuIG92
ZXJyaWRkZW4gd2hlbiB3ZSBhZGQgdGhpcyB0byB0aGUgZnJvbnRlbmQuCiAgICAgcGVuZGluZ1Jl
cXVlc3QtPmNvbnRpbnVlV2l0aFJlcXVlc3QocmVxdWVzdCk7CkBAIC0xMjQyLDExICsxMjQyLDEx
IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck4KIAogICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IG92ZXJyaWRlRGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewot
ICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29k
ZShjb250ZW50LCBidWZmZXIpKQorICAgICAgICBhdXRvIGJ1ZmZlciA9IGJhc2U2NERlY29kZShj
b250ZW50KTsKKyAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfcyk7CiAKLSAgICAgICAg
b3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpKTsKKyAg
ICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqYnVmZmVy
KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG92ZXJyaWRlRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwgY29udGVudC51dGY4KCkubGVuZ3RoKCkpOwogCkBA
IC0xMjY4LDExICsxMjY4LDExIEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3Rvck4KIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CiAgICAgaWYgKGJhc2U2NEVu
Y29kZWQpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFi
YXNlNjREZWNvZGUoY29udGVudCwgYnVmZmVyKSkKKyAgICAgICAgYXV0byBidWZmZXIgPSBiYXNl
NjREZWNvZGUoY29udGVudCk7CisgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZGVjb2RlIGdpdmVuIGNvbnRlbnQiX3MpOwog
Ci0gICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwor
ICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqYnVmZmVyKSk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LnV0
ZjgoKS5kYXRhKCksIGNvbnRlbnQudXRmOCgpLmxlbmd0aCgpKTsKIApAQCAtMTQwNSw3ICsxNDA1
LDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cgogICAgICAgICB9
CiAKICAgICAgICAgKmJhc2U2NEVuY29kZWQgPSB0cnVlOwotICAgICAgICAqcmVzdWx0ID0gYmFz
ZTY0RW5jb2RlKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgICAgICpyZXN1
bHQgPSBtYWtlU3RyaW5nKFdURjo6YmFzZTY0RW5jb2RlZChidWZmZXItPmRhdGEoKSwgYnVmZmVy
LT5zaXplKCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcg
QEAgYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbgogYm9vbCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUs
IGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBT
dHJpbmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2NEVuY29kZSkgewotICAgICAgICAq
cmVzdWx0ID0gYmFzZTY0RW5jb2RlKGRhdGEsIHNpemUpOworICAgICAgICAqcmVzdWx0ID0gbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKGRhdGEsIHNpemUpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkBAIC0xMTAyLDcgKzExMDIsNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IEluc3BlY3RvCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90
IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfcyk7CiAKICAgICBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKTsKLSAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdldCgpKSwgQ0ZE
YXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2
NEVuY29kZWQoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgo
YnVmZmVyLmdldCgpKSkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExOCw3ICszMTE4LDcgQEAgdW5z
aWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlUwogICAgICAgICBBU1NFUlQoIW5l
d1JlcXVlc3QuaXNOdWxsKCkpOwogCiAgICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIoKS0+YXBw
bGljYXRpb25DYWNoZUhvc3QoKS5tYXliZUxvYWRTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVy
cm9yLCByZXNwb25zZSwgZGF0YSkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7
CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwogICAgICAgICAgICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoKnRoaXMsIGlkZW50aWZpZXIsIG5ld1JlcXVlc3QsIGNsaWVudENyZWRlbnRpYWxQb2xpY3ks
IG9wdGlvbnMsIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIGVycm9yLCByZXNwb25zZSwgYnVmZmVy
KTsKICAgICAgICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZl
cikpOwogICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3Qo
KS5tYXliZUxvYWRGYWxsYmFja1N5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3Bv
bnNlLCBkYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3ku
aAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdHJ1Y3QgRmV0Y2hPcHRpb25zOwog
Y2xhc3MgV0VCQ09SRV9FWFBPUlQgTG9hZGVyU3RyYXRlZ3kgewogcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UoRnJhbWUmLCBDYWNoZWRSZXNvdXJjZSYsIFJlc291cmNlUmVx
dWVzdCYmLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4mJik+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ2xpZW50Q3JlZGVudGlhbFBvbGlj
eSwgY29uc3QgRmV0Y2hPcHRpb25zJiwgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJy
b3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIENsaWVudENyZWRlbnRp
YWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0aW9ucyYsIGNvbnN0IEhUVFBIZWFkZXJNYXAmLCBSZXNv
dXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBwYWdlTG9hZENvbXBsZXRlZChQYWdlJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBicm93c2luZ0NvbnRleHRSZW1vdmVkKEZyYW1lJikgPSAwOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Qcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwxMCArMTg5LDEwIEBAIGJvb2wg
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkVwaGVtZXJhbFMKIHsKICAgICAvLyBGSVhNRTogSW52
ZXN0aWdhdGUgaWYgd2UgY2FuIGRvIHdpdGggYSBzaW1wbGUgbGVuZ3RoIGNoZWNrIGluc3RlYWQg
b2YgZGVjb2RpbmcuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMTk0NQotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7Ci0gICAgaWYgKCFiYXNlNjRV
UkxEZWNvZGUobm9uY2UsIGRpZ2VzdCkpCisgICAgYXV0byBkaWdlc3QgPSBiYXNlNjRVUkxEZWNv
ZGUobm9uY2UpOworICAgIGlmICghZGlnZXN0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIGRpZ2VzdC5zaXplKCkgPT0gRXBoZW1lcmFsU291cmNlTm9uY2VSZXF1aXJlZE51bWJl
ck9mQnl0ZXM7CisgICAgcmV0dXJuIGRpZ2VzdC0+c2l6ZSgpID09IEVwaGVtZXJhbFNvdXJjZU5v
bmNlUmVxdWlyZWROdW1iZXJPZkJ5dGVzOwogfQogCiB2b2lkIFByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpzZXRFcGhlbWVyYWxTb3VyY2VOb25jZShFcGhlbWVyYWxTb3VyY2VOb25jZSYmIG5vbmNl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OSwxNCArNjksMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAog
ICAgIGlmIChidWZmZXIucG9zaXRpb24oKSA9PSBiZWdpbkhhc2hWYWx1ZSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7CiAgICAgU3Ry
aW5nVmlldyBoYXNoVmFsdWUoYmVnaW5IYXNoVmFsdWUsIGJ1ZmZlci5wb3NpdGlvbigpIC0gYmVn
aW5IYXNoVmFsdWUpOwotICAgIGlmICghYmFzZTY0RGVjb2RlKGhhc2hWYWx1ZSwgZGlnZXN0LCBC
YXNlNjRWYWxpZGF0ZVBhZGRpbmcpKSB7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGhh
c2hWYWx1ZSwgZGlnZXN0KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
fQogCi0gICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0s
IFdURk1vdmUoZGlnZXN0KSB9OworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NERlY29kZSho
YXNoVmFsdWUsIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZykpCisgICAgICAg
IHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyAqYWxnb3JpdGhtLCBXVEZNb3Zl
KCpkaWdlc3QpIH07CisKKyAgICBpZiAoYXV0byBkaWdlc3QgPSBiYXNlNjRVUkxEZWNvZGUoaGFz
aFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICph
bGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiB9CiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9n
cmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBidWZmZXIpCkBAIC0xMjQs
MTMgKzEyNSwxMyBAQCBPcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnCiAK
IE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0JiBlbmNvZGVkRGlnZXN0KQogewotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7Ci0g
ICAgaWYgKCFiYXNlNjREZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdlc3QsIGRpZ2VzdCwgQmFzZTY0
VmFsaWRhdGVQYWRkaW5nKSkgewotICAgICAgICBpZiAoIWJhc2U2NFVSTERlY29kZShlbmNvZGVk
RGlnZXN0LmRpZ2VzdCwgZGlnZXN0KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgfQorICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NERlY29kZShlbmNvZGVkRGlnZXN0
LmRpZ2VzdCwgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAg
cmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGVuY29kZWREaWdlc3QuYWxnb3Jp
dGhtLCBXVEZNb3ZlKCpkaWdlc3QpIH07CisKKyAgICBpZiAoYXV0byBkaWdlc3QgPSBiYXNlNjRV
UkxEZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdlc3QpKQorICAgICAgICByZXR1cm4gUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERpZ2VzdC5hbGdvcml0aG0sIFdURk1vdmUoKmRp
Z2VzdCkgfTsKIAotICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyBlbmNv
ZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZShkaWdlc3QpIH07CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIH0KIAogc3RhdGljIFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG0gdG9Dcnlw
dG9EaWdlc3RBbGdvcml0aG0oUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0g
YWxnb3JpdGhtKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhU
TUxBcmNoaXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTcsNyArMTk3LDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gTUhUTUxBcmNoaXZlOjpnZW5l
cmF0ZQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoY29udGVu
dEVuY29kaW5nLCBiYXNlNjQpKTsKICAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWlu
ZyBpbnNlcnRMRnMgPSB0cnVlIGJlbG93IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGluZXMgd2l0aCBM
RnMgYW5kIE1IVE1MIHJlcXVpcmVzIENSTEZzLgotICAgICAgICAgICAgYmFzZTY0RW5jb2RlKGRh
dGEsIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhKTsKKyAgICAgICAgICAgIGVuY29kZWREYXRhID0g
YmFzZTY0RW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgpOwogICAgICAgICAgICAgY29uc3Qgc2l6ZV90
IG1heGltdW1MaW5lTGVuZ3RoID0gNzY7CiAgICAgICAgICAgICBzaXplX3QgaW5kZXggPSAwOwog
ICAgICAgICAgICAgc2l6ZV90IGVuY29kZWREYXRhTGVuZ3RoID0gZW5jb2RlZERhdGEuc2l6ZSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01I
VE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsMTQg
KzE5MiwxNyBAQCBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBNSFRNTFBhcnNlcjo6cGFyCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAg
IFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIHN3aXRjaCAobWltZUhlYWRlci5jb250ZW50VHJh
bnNmZXJFbmNvZGluZygpKSB7Ci0gICAgY2FzZSBNSU1FSGVhZGVyOjpCYXNlNjQ6Ci0gICAgICAg
IGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+c2l6ZSgpLCBkYXRh
KSkgeworICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OiB7CisgICAgICAgIGF1dG8gZGVjb2Rl
ZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCkpOwor
ICAgICAgICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkludmFs
aWQgYmFzZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgfQorICAgICAgICBkYXRhID0gV1RGTW92ZSgqZGVjb2RlZERhdGEp
OwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpRdW90ZWRQcmlu
dGFibGU6CiAgICAgICAgIHF1b3RlZFByaW50YWJsZURlY29kZShjb250ZW50LT5kYXRhKCksIGNv
bnRlbnQtPnNpemUoKSwgZGF0YSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50
Q29jb2EubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jb2Nv
YS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwx
MCArMzQsMTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogewog
I2lmIEhBVkUoUlNBX0JTU0EpCiAgICAgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gc2VydmVy
UHVibGljS2V5RGF0YTsKLSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoc2VydmVyUHVibGlj
S2V5QmFzZTY0VVJMLCBzZXJ2ZXJQdWJsaWNLZXlEYXRhKSkKKyAgICAgICAgYXV0byBzZXJ2ZXJQ
dWJsaWNLZXlEYXRhID0gYmFzZTY0VVJMRGVjb2RlKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCk7
CisgICAgICAgIGlmICghc2VydmVyUHVibGljS2V5RGF0YSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgYXV0byBzZXJ2ZXJQdWJsaWNLZXkgPSBhZG9wdE5TKFtbTlNEYXRhIGFs
bG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZlclB1YmxpY0tleURhdGEuZGF0YSgpIGxlbmd0aDpzZXJ2
ZXJQdWJsaWNLZXlEYXRhLnNpemUoKV0pOworICAgICAgICBhdXRvIHNlcnZlclB1YmxpY0tleSA9
IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2VydmVyUHVibGljS2V5RGF0
YS0+ZGF0YSgpIGxlbmd0aDpzZXJ2ZXJQdWJsaWNLZXlEYXRhLT5zaXplKCldKTsKIAogICAgICAg
ICAvLyBGSVhNRSgyMjIwMTgpOiBDaGVjayBlcnJvci4KICAgICAgICAgbV9zb3VyY2VVbmxpbmth
YmxlVG9rZW4uYmxpbmRlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NSU0FCU1NBVG9rZW5CbGluZGVy
SW5zdGFuY2UoKSBpbml0V2l0aFB1YmxpY0tleTpzZXJ2ZXJQdWJsaWNLZXkuZ2V0KCkgZXJyb3I6
bnVsbHB0cl0pOwpAQCAtNTAsNyArNTAsNyBAQCBib29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50
OjpjYWxjdWxhdGVBCiAgICAgaWYgKCFtX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9r
ZW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fc291cmNlVW5saW5rYWJsZVRva2Vu
LnZhbHVlQmFzZTY0VVJMID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoW21fc291cmNlVW5saW5rYWJs
ZVRva2VuLndhaXRpbmdUb2tlbiBibGluZGVkTWVzc2FnZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlu
a2FibGVUb2tlbi53YWl0aW5nVG9rZW4gYmxpbmRlZE1lc3NhZ2VdLmxlbmd0aCk7CisgICAgbV9z
b3VyY2VVbmxpbmthYmxlVG9rZW4udmFsdWVCYXNlNjRVUkwgPSBtYWtlU3RyaW5nKGJhc2U2NFVS
TEVuY29kZWQoW21fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBibGluZGVkTWVz
c2FnZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4gYmxpbmRl
ZE1lc3NhZ2VdLmxlbmd0aCkpOwogICAgIHJldHVybiB0cnVlOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oc2VydmVyUHVibGljS2V5QmFzZTY0VVJMKTsKQEAgLTY1LDEwICs2NSwxMCBAQCBib29s
IFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcnZlclJlc3BvbnNlRGF0YTsK
LSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoc2VydmVyUmVzcG9uc2VCYXNlNjRVUkwsIHNl
cnZlclJlc3BvbnNlRGF0YSkpCisgICAgICAgIGF1dG8gc2VydmVyUmVzcG9uc2VEYXRhID0gYmFz
ZTY0VVJMRGVjb2RlKHNlcnZlclJlc3BvbnNlQmFzZTY0VVJMKTsKKyAgICAgICAgaWYgKCFzZXJ2
ZXJSZXNwb25zZURhdGEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8g
c2VydmVyUmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNl
cnZlclJlc3BvbnNlRGF0YS5kYXRhKCkgbGVuZ3RoOnNlcnZlclJlc3BvbnNlRGF0YS5zaXplKCld
KTsKKyAgICAgICAgYXV0byBzZXJ2ZXJSZXNwb25zZSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2Nd
IGluaXRXaXRoQnl0ZXM6c2VydmVyUmVzcG9uc2VEYXRhLT5kYXRhKCkgbGVuZ3RoOnNlcnZlclJl
c3BvbnNlRGF0YS0+c2l6ZSgpXSk7CiAKICAgICAgICAgLy8gRklYTUUoMjIyMDE4KTogQ2hlY2sg
ZXJyb3IuCiAgICAgICAgIG1fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gPSBbbV9z
b3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuIGFjdGl2YXRlVG9rZW5XaXRoU2VydmVy
UmVzcG9uc2U6c2VydmVyUmVzcG9uc2UuZ2V0KCkgZXJyb3I6bnVsbHB0cl07CkBAIC03Nyw5ICs3
Nyw5IEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUEKICAgICB9CiAK
ICAgICBTb3VyY2VTZWNyZXRUb2tlbiB0b2tlbjsKLSAgICB0b2tlbi50b2tlbkJhc2U2NFVSTCA9
IFdURjo6YmFzZTY0VVJMRW5jb2RlKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2Vu
IHRva2VuQ29udGVudF0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2Vu
IHRva2VuQ29udGVudF0ubGVuZ3RoKTsKLSAgICB0b2tlbi5rZXlJREJhc2U2NFVSTCA9IFdURjo6
YmFzZTY0VVJMRW5jb2RlKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIGtleUlk
XS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRdLmxlbmd0
aCk7Ci0gICAgdG9rZW4uc2lnbmF0dXJlQmFzZTY0VVJMID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUo
W21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gc2lnbmF0dXJlXS5ieXRlcywgW21f
c291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gc2lnbmF0dXJlXS5sZW5ndGgpOworICAg
IHRva2VuLnRva2VuQmFzZTY0VVJMID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKFttX3Nv
dXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHRva2VuQ29udGVudF0uYnl0ZXMsIFttX3Nv
dXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHRva2VuQ29udGVudF0ubGVuZ3RoKSk7Cisg
ICAgdG9rZW4ua2V5SURCYXNlNjRVUkwgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW21f
c291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRdLmJ5dGVzLCBbbV9zb3VyY2VV
bmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBrZXlJZF0ubGVuZ3RoKSk7CisgICAgdG9rZW4uc2ln
bmF0dXJlQmFzZTY0VVJMID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKFttX3NvdXJjZVVu
bGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHNpZ25hdHVyZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlu
a2FibGVUb2tlbi5yZWFkeVRva2VuIHNpZ25hdHVyZV0ubGVuZ3RoKSk7CiAKICAgICBtX3NvdXJj
ZVNlY3JldFRva2VuID0gV1RGTW92ZSh0b2tlbik7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmJ0
bwogICAgIGlmICghc3RyaW5nVG9FbmNvZGUuaXNBbGxMYXRpbjEoKSkKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRDaGFyYWN0ZXJFcnJvciB9OwogCi0gICAgcmV0dXJuIGJhc2U2
NEVuY29kZShzdHJpbmdUb0VuY29kZS5sYXRpbjEoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmco
YmFzZTY0RW5jb2RlZChzdHJpbmdUb0VuY29kZS5sYXRpbjEoKSkpOwogfQogCiBFeGNlcHRpb25P
cjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YXRvYihjb25zdCBTdHJpbmcmIGVuY29kZWRTdHJp
bmcpCkBAIC00NiwxMSArNDYsMTEgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRp
ZXM6OmF0bwogICAgIGlmIChlbmNvZGVkU3RyaW5nLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKLSAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgIGlmICghYmFzZTY0RGVjb2Rl
KGVuY29kZWRTdHJpbmcsIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nIHwgQmFzZTY0SWdub3Jl
U3BhY2VzQW5kTmV3TGluZXMgfCBCYXNlNjREaXNjYXJkVmVydGljYWxUYWIpKQorICAgIGF1dG8g
ZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoZW5jb2RlZFN0cmluZywgeyBCYXNlNjREZWNvZGVP
cHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcsIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNl
c0FuZE5ld0xpbmVzLCBCYXNlNjREZWNvZGVPcHRpb25zOjpEaXNjYXJkVmVydGljYWxUYWIgfSk7
CisgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRDaGFyYWN0ZXJFcnJvciB9OwogCi0gICAgcmV0dXJuIFN0cmluZyhvdXQuZGF0YSgpLCBvdXQu
c2l6ZSgpKTsKKyAgICByZXR1cm4gU3RyaW5nKGRlY29kZWREYXRhLT5kYXRhKCksIGRlY29kZWRE
YXRhLT5zaXplKCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4NDgsOSArMTg0OCw4IEBAIHZvaWQgUGFnZTo6dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5n
ZWQKICAgICBpZiAodXJsLnByb3RvY29sSXNEYXRhKCkgJiYgdXJsLnN0cmluZygpLnN0YXJ0c1dp
dGgoImRhdGE6dGV4dC9jc3M7Y2hhcnNldD11dGYtODtiYXNlNjQsIikpIHsKICAgICAgICAgbV9k
aWRMb2FkVXNlclN0eWxlU2hlZXQgPSB0cnVlOwogCi0gICAgICAgIFZlY3RvcjxjaGFyPiBzdHls
ZVNoZWV0QXNVVEY4OwotICAgICAgICBpZiAoYmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vic3RyaW5nKDM1KSksIHN0eWxlU2hlZXRBc1VURjgsIEJh
c2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSkKLSAgICAgICAgICAgIG1fdXNlclN0eWxlU2hl
ZXQgPSBTdHJpbmc6OmZyb21VVEY4KHN0eWxlU2hlZXRBc1VURjguZGF0YSgpLCBzdHlsZVNoZWV0
QXNVVEY4LnNpemUoKSk7CisgICAgICAgIGlmIChhdXRvIHN0eWxlU2hlZXRBc1VURjggPSBiYXNl
NjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5zdHJpbmcoKS5zdWJzdHJpbmco
MzUpKSwgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpKQorICAg
ICAgICAgICAgbV91c2VyU3R5bGVTaGVldCA9IFN0cmluZzo6ZnJvbVVURjgoc3R5bGVTaGVldEFz
VVRGOC0+ZGF0YSgpLCBzdHlsZVNoZWV0QXNVVEY4LT5zaXplKCkpOwogICAgIH0KIAogICAgIGZv
ckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJr
ZXkvQ0RNQ2xlYXJLZXkuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc5LDEyICs3OSwxNSBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxL
ZXlIYW5kbGU+CiAgICAgICAgICAgICBpZiAoIWtleVZhbHVlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICAgICAgS2V5SURUeXBlIGtleUlERGF0YTsKLSAgICAgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiBrZXlIYW5kbGVWYWx1ZURhdGE7Ci0gICAgICAgICAgICBpZiAo
IVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7IGtleUlERGF0YSB9KSB8fCAhV1RGOjpiYXNl
NjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5SGFuZGxlVmFsdWVEYXRhIH0pKQorICAgICAgICAg
ICAgYXV0byBrZXlJRERhdGEgPSBiYXNlNjRVUkxEZWNvZGUoa2V5SUQpOworICAgICAgICAgICAg
aWYgKCFrZXlJRERhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgICAgIGF1dG8ga2V5SGFuZGxlVmFsdWVEYXRhID0gYmFzZTY0VVJMRGVjb2RlKGtl
eVZhbHVlKTsKKyAgICAgICAgICAgIGlmICgha2V5SGFuZGxlVmFsdWVEYXRhKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtl
eUhhbmRsZTo6Y3JlYXRlKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFdU
Rk1vdmUoa2V5SUREYXRhKSwgV1RGTW92ZShrZXlIYW5kbGVWYWx1ZURhdGEpKSk7CisgICAgICAg
ICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5SGFuZGxlOjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNz
aW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZSgqa2V5SUREYXRhKSwgV1RGTW92ZSgqa2V5
SGFuZGxlVmFsdWVEYXRhKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0p
OwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC0yMTUsOCArMjE4LDcgQEAgc3RhdGljIFJlZjxT
aGFyZWRCdWZmZXI+IGV4dHJhY3RLZXlpZHNGcgogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFy
cmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVy
bCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZh
bHVlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlJZENvdW50OyBpKyspIHsKLSAg
ICAgICAgU3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRhdGFbaW5kZXhdLCBD
bGVhcktleTo6S2V5SURTaXplSW5CeXRlcyk7Ci0gICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3Ry
aW5nKGtleUlkKTsKKyAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcobWFrZVN0cmluZyhi
YXNlNjRVUkxFbmNvZGVkKCZkYXRhW2luZGV4XSwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMp
KSk7CiAgICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0K
IApAQCAtMjQzLDggKzI0NSw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5
SWRGcm8KICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUg
Zm9sbG93aW5nIG1lbWJlcnM6CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5
IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5n
IG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCi0gICAg
U3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoaW5pdERhdGEuZGF0YSgpLCBpbml0
RGF0YS5zaXplKCkpOwotICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGtleUlkKTsKKyAgICBr
ZXlJZHNBcnJheS0+cHVzaFN0cmluZyhtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoaW5pdERh
dGEuZGF0YSgpLCBpbml0RGF0YS5zaXplKCkpKSk7CiAKICAgICBvYmplY3QtPnNldEFycmF5KCJr
aWRzIiwgV1RGTW92ZShrZXlJZHNBcnJheSkpOwogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmpl
Y3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKQEAgLTU4Nyw3ICs1ODgsNyBAQCB2b2lkIENETUlu
c3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAgICAgICAgICAgICBhdXRvIGFycmF5ID0g
SlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkg
OiBtX2tleVN0b3JlKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGtleS0+aWQoKS5zaXplKCkg
PD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgICAgICAg
ICBhcnJheS0+cHVzaFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShrZXktPmlkKCkuZGF0YSgp
LCBrZXktPmlkKCkuc2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmco
bWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5z
aXplKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJh
eSgia2lkcyIsIFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJl
YW1pbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTEgKzExMywxMSBAQCBzdGF0aWMgVmVj
dG9yPFJlZjxTaGFyZWRCdWZmZXI+PiBleHRyYWN0CiAgICAgICAgIGlmICgha2V5SUQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBWZWN0b3I8Y2hhcj4gc2luZkRhdGE7Ci0gICAg
ICAgIGlmICghV1RGOjpiYXNlNjREZWNvZGUoa2V5SUQsIHsgc2luZkRhdGEgfSwgV1RGOjpCYXNl
NjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykpCisgICAgICAgIGF1dG8gc2luZkRhdGEgPSBiYXNl
NjREZWNvZGUoa2V5SUQsIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xp
bmVzKTsKKyAgICAgICAgaWYgKCFzaW5mRGF0YSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIHNpbmZzLnVuY2hlY2tlZEFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3Zl
KHNpbmZEYXRhKSkpOworICAgICAgICBzaW5mcy51bmNoZWNrZWRBcHBlbmQoU2hhcmVkQnVmZmVy
OjpjcmVhdGUoV1RGTW92ZSgqc2luZkRhdGEpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHNpbmZz
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MTUsNyAr
NzE1LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAg
ICBpZGVudGlmaWVyID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6aW5p
dERhdGEtPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5n
XSk7CiAjaWYgSEFWRShGQUlSUExBWVNUUkVBTUlOR19DRU5DX0lOSVREQVRBKQogICAgIGVsc2Ug
aWYgKGluaXREYXRhVHlwZSA9PSBJbml0RGF0YVJlZ2lzdHJ5OjpjZW5jTmFtZSgpKSB7Ci0gICAg
ICAgIFN0cmluZyBwc3NoU3RyaW5nID0gYmFzZTY0RW5jb2RlKGluaXREYXRhLT5kYXRhKCksIGlu
aXREYXRhLT5zaXplKCkpOworICAgICAgICBhdXRvIHBzc2hTdHJpbmcgPSBtYWtlU3RyaW5nKGJh
c2U2NEVuY29kZWQoaW5pdERhdGEtPmRhdGEoKSwgaW5pdERhdGEtPnNpemUoKSkpOwogICAgICAg
ICBpbml0aWFsaXphdGlvbkRhdGEgPSBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05P
YmplY3Q6QHsgQCJwc3NoIjogKE5TU3RyaW5nKilwc3NoU3RyaW5nIH0gb3B0aW9uczpOU0pTT05X
cml0aW5nUHJldHR5UHJpbnRlZCBlcnJvcjpuaWxdOwogICAgIH0KICNlbmRpZgpAQCAtODUwLDEx
ICs4NTAsMTEgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAg
ICAgICAgICAgaWYgKCFrZXlJRFN0cmluZykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlJRFZlY3RvcjsKLSAgICAgICAgICAg
IGlmICghYmFzZTY0RGVjb2RlKGtleUlEU3RyaW5nLCBrZXlJRFZlY3RvcikpCisgICAgICAgICAg
ICBhdXRvIGtleUlEVmVjdG9yID0gYmFzZTY0RGVjb2RlKGtleUlEU3RyaW5nKTsKKyAgICAgICAg
ICAgIGlmIChrZXlJRFZlY3RvcikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgICAgIGF1dG8ga2V5SUQgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGtleUlE
VmVjdG9yKSk7CisgICAgICAgICAgICBhdXRvIGtleUlEID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
V1RGTW92ZSgqa2V5SURWZWN0b3IpKTsKICAgICAgICAgICAgIGF1dG8gZm91bmRJbmRleCA9IG1f
Y3VycmVudFJlcXVlc3QudmFsdWUoKS5yZXF1ZXN0cy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBy
ZXF1ZXN0KSB7CiAgICAgICAgICAgICAgICAgYXV0byBrZXlJRHMgPSBrZXlJRHNGb3JSZXF1ZXN0
KHJlcXVlc3QuZ2V0KCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBrZXlJRHMuZmluZE1hdGNo
aW5nKFsmXShjb25zdCBSZWY8U2hhcmVkQnVmZmVyPiYgaWQpIHsKQEAgLTg4NSwxMCArODg1LDEw
IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAgICAgICAg
ICAgICBhdXRvIHBheWxvYWRTdHJpbmcgPSBwYXlsb2FkRmluZFJlc3VsdHMtPnZhbHVlLT5hc1N0
cmluZygpOwogICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZFN0cmluZykKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBw
YXlsb2FkVmVjdG9yOwotICAgICAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKHBheWxvYWRT
dHJpbmcsIHBheWxvYWRWZWN0b3IpKQorICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZFZlY3Rv
ciA9IGJhc2U2NERlY29kZShwYXlsb2FkU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBh
eWxvYWRWZWN0b3IpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICBhdXRvIHBheWxvYWREYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShw
YXlsb2FkVmVjdG9yKSk7CisgICAgICAgICAgICAgICAgYXV0byBwYXlsb2FkRGF0YSA9IFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKnBheWxvYWRWZWN0b3IpKTsKICAgICAgICAgICAgICAg
ICBbcmVxdWVzdCBwcm9jZXNzQ29udGVudEtleVJlc3BvbnNlOltQQUw6OmdldEFWQ29udGVudEtl
eVJlc3BvbnNlQ2xhc3MoKSBjb250ZW50S2V5UmVzcG9uc2VXaXRoRmFpclBsYXlTdHJlYW1pbmdL
ZXlSZXNwb25zZURhdGE6cGF5bG9hZERhdGEtPmNyZWF0ZU5TRGF0YSgpLmdldCgpXV07CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExOTUsOCArMTE5NSw4IEBA
IHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAgICAgICAgIGF1
dG8gZW50cnkgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgYXV0byYga2V5
SUQgPSByZXF1ZXN0RGF0YS5maXJzdDsKICAgICAgICAgICAgIGF1dG8mIHBheWxvYWQgPSByZXF1
ZXN0RGF0YS5zZWNvbmQ7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJh
c2U2NEVuY29kZShrZXlJRC0+ZGF0YSgpLCBrZXlJRC0+c2l6ZSgpKSk7Ci0gICAgICAgICAgICBl
bnRyeS0+c2V0U3RyaW5nKCJwYXlsb2FkIiwgYmFzZTY0RW5jb2RlKHBheWxvYWQuZ2V0KCkuYnl0
ZXMsIHBheWxvYWQuZ2V0KCkubGVuZ3RoKSk7CisgICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5n
KCJrZXlJRCIsIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChrZXlJRC0+ZGF0YSgpLCBrZXlJRC0+
c2l6ZSgpKSkpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIG1ha2VT
dHJpbmcoYmFzZTY0RW5jb2RlZChwYXlsb2FkLmdldCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxl
bmd0aCkpKTsKICAgICAgICAgICAgIHJlcXVlc3RKU09OLT5wdXNoT2JqZWN0KFdURk1vdmUoZW50
cnkpKTsKICAgICAgICAgfQogICAgICAgICBhdXRvIHJlcXVlc3RCdWZmZXIgPSB1dGY4QnVmZmVy
KHJlcXVlc3RKU09OLT50b0pTT05TdHJpbmcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMCwxMCArMTMwLDcgQEAgU3RyaW5nIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
Ojp0b0RhdGFVUgogICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gImRhdGE6LCI7CiAKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRF
bmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0
YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2
NERhdGE7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0
LCIsIGJhc2U2NEVuY29kZWQoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUo
KSkpOwogfQogCiBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMCArMTc0LDcgQEAgc3RhdGljIFJldGFpblB0
cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogCiBTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0
YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0
YTsKLSAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVu
Z3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUg
KyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToi
LCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChDRkRhdGFHZXRCeXRlUHRyKGRh
dGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSkpKTsKIH0KIAogU3RyaW5nIGRhdGFVUkwoY29uc3Qg
UGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAg
c3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsK
ICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsKIAotICAgIFN0cmluZyBmb250TmFtZSA9IGJh
c2U2NEVuY29kZShyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9u
dFV1aWQpKTsKKyAgICBhdXRvIGZvbnROYW1lID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpKTsKICAg
ICBBU1NFUlQoZm9udE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZv
bnROYW1lOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3
ICs4MSw3IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVlRm9udE5hbWUoKQogICAgIEdVSUQg
Zm9udFV1aWQ7CiAgICAgQ29DcmVhdGVHdWlkKCZmb250VXVpZCk7CiAKLSAgICBTdHJpbmcgZm9u
dE5hbWUgPSBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlkKSwg
c2l6ZW9mKGZvbnRVdWlkKSk7CisgICAgYXV0byBmb250TmFtZSA9IG1ha2VTdHJpbmcoYmFzZTY0
RW5jb2RlZChyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1
aWQpKSk7CiAgICAgQVNTRVJUKGZvbnROYW1lLmxlbmd0aCgpIDwgTEZfRkFDRVNJWkUpOwogICAg
IHJldHVybiBmb250TmFtZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
U0xLZXlHZW5lcmF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjE5LDcgKzIxOSw3IEBAIHN0YXRpYyBTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hh
bGxlbmcKICAgICBpZiAoU2VjQXNuMUVuY29kZUl0ZW0oY29kZXIsICZzaWduZWRQdWJsaWNLZXlB
bmRDaGFsbGVuZ2UsIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVRlbXBsYXRlLCAmZW5jb2Rl
ZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSkgIT0gbm9FcnIpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoZW5jb2RlZFNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxl
bmd0aCk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChlbmNvZGVkU2lnbmVk
UHVibGljS2V5QW5kQ2hhbGxlbmdlLkRhdGEsIGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFs
bGVuZ2UuTGVuZ3RoKSk7CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdp
c3RyeUltcGwuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw3IEBAIHN0YXRpYyBSZWY8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZUJsb2JSZXMKICAgICByZXR1
cm4gYmxvYlJlZ2lzdHJ5KCkuYmxvYlJlZ2lzdHJ5SW1wbCgpLT5jcmVhdGVSZXNvdXJjZUhhbmRs
ZShyZXF1ZXN0LCBjbGllbnQpOwogfQogCi1zdGF0aWMgdm9pZCBsb2FkQmxvYlJlc291cmNlU3lu
Y2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQorc3RhdGljIHZvaWQg
bG9hZEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90
PiYgZGF0YSkKIHsKICAgICBhdXRvKiBibG9iRGF0YSA9IGJsb2JSZWdpc3RyeSgpLmJsb2JSZWdp
c3RyeUltcGwoKS0+Z2V0QmxvYkRhdGFGcm9tVVJMKHJlcXVlc3QudXJsKCkpOwogICAgIEJsb2JS
ZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShibG9iRGF0YSwgcmVxdWVz
dCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFu
ZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgewogCiBj
bGFzcyBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlciA6IHB1YmxpYyBSZXNvdXJjZUhhbmRs
ZUNsaWVudCB7CiBwdWJsaWM6Ci0gICAgQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIoUmVz
b3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mKTsKKyAgICBCbG9i
UmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25z
ZSYsIFZlY3Rvcjx1aW50OF90PiYpOwogCiAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2VBc3lu
YyhSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVzcG9uc2UmJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKSBmaW5hbDsKICAgICB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZUVycm9yJikgZmluYWw7CkBAIC04NSwxMCArODUsMTAgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBSZXNvdXJjZUVycm9yJiBtX2Vycm9yOwogICAgIFJlc291cmNlUmVzcG9uc2Um
IG1fcmVzcG9uc2U7Ci0gICAgVmVjdG9yPGNoYXI+JiBtX2RhdGE7CisgICAgVmVjdG9yPHVpbnQ4
X3Q+JiBtX2RhdGE7CiB9OwogCi1CbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6QmxvYlJl
c291cmNlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCitCbG9iUmVzb3VyY2VTeW5jaHJv
bm91c0xvYWRlcjo6QmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYg
ZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEp
CiAgICAgOiBtX2Vycm9yKGVycm9yKQogICAgICwgbV9yZXNwb25zZShyZXNwb25zZSkKICAgICAs
IG1fZGF0YShkYXRhKQpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgQmxvYlJlc291cmNlU3luY2hy
b25vdXNMb2FkZXI6OmRpZFIKIAogICAgIC8vIFJlYWQgYWxsIHRoZSBkYXRhLgogICAgIG1fZGF0
YS5yZXNpemUoc3RhdGljX2Nhc3Q8c2l6ZV90PihyZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5n
dGgoKSkpOwotICAgIHN0YXRpY19jYXN0PEJsb2JSZXNvdXJjZUhhbmRsZSo+KGhhbmRsZSktPnJl
YWRTeW5jKG1fZGF0YS5kYXRhKCksIHN0YXRpY19jYXN0PGludD4obV9kYXRhLnNpemUoKSkpOwor
ICAgIHN0YXRpY19jYXN0PEJsb2JSZXNvdXJjZUhhbmRsZSo+KGhhbmRsZSktPnJlYWRTeW5jKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fZGF0YS5kYXRhKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KG1f
ZGF0YS5zaXplKCkpKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQogCkBAIC0xNDEsNyAr
MTQxLDcgQEAgUmVmPEJsb2JSZXNvdXJjZUhhbmRsZT4gQmxvYlJlc291cmNlSGFuZAogICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEJsb2JSZXNvdXJjZUhhbmRsZShibG9iRGF0YSwgcmVxdWVzdCwg
Y2xpZW50LCB0cnVlKSk7CiB9CiAKLXZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KEJsb2JEYXRhKiBibG9iRGF0YSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KEJsb2JEYXRhKiBibG9iRGF0YSwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBpZiAoIWVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHJlcXVlc3QuaHR0cE1ldGhvZCgpLCAiZ2V0IikpIHsKICAgICAgICAg
ZXJyb3IgPSBSZXNvdXJjZUVycm9yKHdlYktpdEJsb2JSZXNvdXJjZURvbWFpbiwgc3RhdGljX2Nh
c3Q8aW50PihFcnJvcjo6TWV0aG9kTm90QWxsb3dlZCksIHJlc3BvbnNlLnVybCgpLCAiUmVxdWVz
dCBtZXRob2QgbXVzdCBiZSBHRVQiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBCbG9iUmVzb3VyY2VIYW5kbGUg
ZmluYWwgOiBwdWJsaWMgCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxCbG9iUmVzb3VyY2VIYW5k
bGU+IGNyZWF0ZUFzeW5jKEJsb2JEYXRhKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQqKTsKIAotICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoQmxvYkRhdGEqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwg
UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisgICAgc3RhdGljIHZvaWQg
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBk
YXRhKTsKIAogICAgIHZvaWQgc3RhcnQoKTsKICAgICBpbnQgcmVhZFN5bmMoY2hhciosIGludCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRp
YWxCYXNlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9DcmVkZW50aWFsQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNpbmNsdWRlICJDcmVkZW50aWFsQmFzZS5oIgogCiAjaW5jbHVkZSAiQ3JlZGVudGlhbC5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTk0LDQgKzk1LDEwIEBAIGJvb2wgQ3JlZGVudGlhbEJhc2U6OmNvbXBhcmUoY29uc3QgQ3Jl
ZGUKICAgICByZXR1cm4gQ3JlZGVudGlhbDo6cGxhdGZvcm1Db21wYXJlKGEsIGIpOwogfQogCitT
dHJpbmcgQ3JlZGVudGlhbEJhc2U6OnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25I
ZWFkZXIoKSBjb25zdAoreworICAgIGF1dG8gY3JlZGVudGlhbFN0cmluZ0RhdGEgPSBtYWtlU3Ry
aW5nKG1fdXNlciwgJzonLCBtX3Bhc3N3b3JkKS51dGY4KCk7CisgICAgcmV0dXJuIG1ha2VTdHJp
bmcoIkJhc2ljICIsIGJhc2U2NEVuY29kZWQoY3JlZGVudGlhbFN0cmluZ0RhdGEpKTsKK30KKwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlh
bEJhc2UuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9DcmVkZW50aWFsQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIGVu
dW0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlIHsKIH07CiAKIGNsYXNzIENyZWRlbnRpYWxCYXNlIHsK
LQogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAg
IApAQCAtNTIsNiArNTEsOCBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
Ym9vbCBjb21wYXJlKGNvbnN0IENyZWRlbnRpYWwmLCBjb25zdCBDcmVkZW50aWFsJik7CiAKKyAg
ICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlv
bkhlYWRlcigpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgV0VCQ09SRV9FWFBPUlQgQ3JlZGVu
dGlhbEJhc2UoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDcmVkZW50aWFsQmFzZShjb25zdCBTdHJp
bmcmIHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9EYXRhVVJMRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCwzNiArMTQ4
LDI2IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2RlVGFzaz4gY3JlYXQKICAgICApOwog
fQogCi1zdGF0aWMgYm9vbCBkZWNvZGVCYXNlNjQoRGVjb2RlVGFzayYgdGFzaywgTW9kZSBtb2Rl
KQorc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVjb2RlQmFzZTY0KGNvbnN0IERl
Y29kZVRhc2smIHRhc2ssIE1vZGUgbW9kZSkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOwot
ICAgIGlmIChtb2RlID09IE1vZGU6OkZvcmdpdmluZ0Jhc2U2NCkgewotICAgICAgICBhdXRvIHVu
ZXNjYXBlZFN0cmluZyA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0YXNrLmVuY29kZWREYXRh
LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKHVu
ZXNjYXBlZFN0cmluZywgYnVmZmVyLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgfCBCYXNlNjRJZ25v
cmVTcGFjZXNBbmROZXdMaW5lcyB8IEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIE1vZGU6OkZvcmdpdmluZ0Jhc2U2NDoKKyAgICAgICAgcmV0dXJuIGJhc2U2NERlY29k
ZShkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModGFzay5lbmNvZGVkRGF0YSksIHsgQmFzZTY0RGVj
b2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nLCBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25vcmVT
cGFjZXNBbmROZXdMaW5lcywgQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlzY2FyZFZlcnRpY2FsVGFi
fSk7CisKKyAgICBjYXNlIE1vZGU6OkxlZ2FjeToKICAgICAgICAgLy8gRmlyc3QgdHJ5IGJhc2U2
NHVybC4KLSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUodGFzay5lbmNvZGVkRGF0YS50b1N0
cmluZ1dpdGhvdXRDb3B5aW5nKCksIGJ1ZmZlcikpIHsKLSAgICAgICAgICAgIC8vIERpZG4ndCB3
b3JrLCB0cnkgdW5lc2NhcGluZyBhbmQgZGVjb2RpbmcgYXMgYmFzZTY0LgotICAgICAgICAgICAg
YXV0byB1bmVzY2FwZWRTdHJpbmcgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModGFzay5lbmNv
ZGVkRGF0YS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpOwotICAgICAgICAgICAgaWYgKCFiYXNl
NjREZWNvZGUodW5lc2NhcGVkU3RyaW5nLCBidWZmZXIsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5l
d0xpbmVzIHwgQmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gZGVjb2RlZERhdGEgPSBiYXNl
NjRVUkxEZWNvZGUodGFzay5lbmNvZGVkRGF0YSkpCisgICAgICAgICAgICByZXR1cm4gZGVjb2Rl
ZERhdGE7CisgICAgICAgIC8vIERpZG4ndCB3b3JrLCB0cnkgdW5lc2NhcGluZyBhbmQgZGVjb2Rp
bmcgYXMgYmFzZTY0LgorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlcyh0YXNrLmVuY29kZWREYXRhKSwgeyBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25v
cmVTcGFjZXNBbmROZXdMaW5lcywgQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlzY2FyZFZlcnRpY2Fs
VGFiIH0pOwogICAgIH0KLSAgICBidWZmZXIuc2hyaW5rVG9GaXQoKTsKLSAgICB0YXNrLnJlc3Vs
dC5kYXRhID0gV1RGTW92ZShidWZmZXIpOwotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRp
YyB2b2lkIGRlY29kZUVzY2FwZWQoRGVjb2RlVGFzayYgdGFzaykKK3N0YXRpYyBWZWN0b3I8dWlu
dDhfdD4gZGVjb2RlRXNjYXBlZChjb25zdCBEZWNvZGVUYXNrJiB0YXNrKQogewogICAgIFRleHRF
bmNvZGluZyBlbmNvZGluZ0Zyb21DaGFyc2V0KHRhc2sucmVzdWx0LmNoYXJzZXQpOwogICAgIGF1
dG8mIGVuY29kaW5nID0gZW5jb2RpbmdGcm9tQ2hhcnNldC5pc1ZhbGlkKCkgPyBlbmNvZGluZ0Zy
b21DaGFyc2V0IDogVVRGOEVuY29kaW5nKCk7Ci0gICAgYXV0byBidWZmZXIgPSBkZWNvZGVVUkxF
c2NhcGVTZXF1ZW5jZXNBc0RhdGEodGFzay5lbmNvZGVkRGF0YSwgZW5jb2RpbmcpOwotCi0gICAg
YnVmZmVyLnNocmlua1RvRml0KCk7Ci0gICAgdGFzay5yZXN1bHQuZGF0YSA9IFdURk1vdmUoYnVm
ZmVyKTsKKyAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKHRhc2suZW5j
b2RlZERhdGEsIGVuY29kaW5nKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPFJlc3VsdD4gZGVjb2Rl
U3luY2hyb25vdXNseShEZWNvZGVUYXNrJiB0YXNrLCBNb2RlIG1vZGUpCkBAIC0xODYsMTEgKzE3
NiwxNCBAQCBzdGF0aWMgT3B0aW9uYWw8UmVzdWx0PiBkZWNvZGVTeW5jaHJvbm91CiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAodGFzay5pc0Jhc2U2NCkgewotICAgICAg
ICBpZiAoIWRlY29kZUJhc2U2NCh0YXNrLCBtb2RlKSkKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0
YSA9IGRlY29kZUJhc2U2NCh0YXNrLCBtb2RlKTsKKyAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkK
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHRhc2sucmVzdWx0LmRh
dGEgPSBXVEZNb3ZlKCpkZWNvZGVkRGF0YSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGRlY29kZUVz
Y2FwZWQodGFzayk7CisgICAgICAgIHRhc2sucmVzdWx0LmRhdGEgPSBkZWNvZGVFc2NhcGVkKHRh
c2spOwogCisgICAgdGFzay5yZXN1bHQuZGF0YS5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiBX
VEZNb3ZlKHRhc2sucmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9EYXRhVVJMRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw3IEBAIHN0cnVjdCBSZXN1bHQgewogICAgIFN0cmluZyBtaW1lVHlw
ZTsKICAgICBTdHJpbmcgY2hhcnNldDsKICAgICBTdHJpbmcgY29udGVudFR5cGU7Ci0gICAgVmVj
dG9yPGNoYXI+IGRhdGE7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiB9OwogCiB1c2luZyBE
ZWNvZGVDb21wbGV0aW9uSGFuZGxlciA9IFdURjo6RnVuY3Rpb248dm9pZCAoT3B0aW9uYWw8UmVz
dWx0Pik+OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMs
NyArMTMzLDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZmFpbHVyZVRpbWVyRmlyZWQoKQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRl
bnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIGlmIChhdXRvIGNvbnN0cnVjdG9y
ID0gYnVpbHRpblJlc291cmNlSGFuZGxlU3luY2hyb25vdXNMb2FkZXJNYXAoKS5nZXQocmVxdWVz
dC51cmwoKS5wcm90b2NvbCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSkpIHsKICAgICAgICAg
Y29uc3RydWN0b3IoY29udGV4dCwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGVy
cm9yLCByZXNwb25zZSwgZGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTk1LDcgKzk1LDcgQEAgY2xhc3MgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU7CiBjbGFz
cyBSZXNvdXJjZUhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc291cmNlSGFuZGxlPiwgcHVi
bGljIEF1dGhlbnRpY2F0aW9uQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGUoTmV0d29ya2luZ0NvbnRleHQqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgZGVmZXJz
TG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ29udGVudEVuY29k
aW5nU25pZmYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2Um
LCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291
cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgflJlc291cmNlSGFuZGxlKCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNF
KENGVVJMQ09OTkVDVElPTikKQEAgLTE5Myw3ICsxOTMsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBSZWY8UmVzb3VyY2VIYW5kbGU+ICgqQnVpbHRpbkNvbnN0cnVjdG9yKShjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQpOwogICAgIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyQnVpbHRpbkNvbnN0cnVjdG9yKGNvbnN0IEF0b21TdHJpbmcmIHBy
b3RvY29sLCBCdWlsdGluQ29uc3RydWN0b3IpOwogCi0gICAgdHlwZWRlZiB2b2lkICgqQnVpbHRp
blN5bmNocm9ub3VzTG9hZGVyKShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VS
ZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisgICAgdHlwZWRlZiB2b2lkICgqQnVpbHRp
blN5bmNocm9ub3VzTG9hZGVyKShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VS
ZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0
ZXJCdWlsdGluU3luY2hyb25vdXNMb2FkZXIoY29uc3QgQXRvbVN0cmluZyYgcHJvdG9jb2wsIEJ1
aWx0aW5TeW5jaHJvbm91c0xvYWRlcik7CiAKIHByb3RlY3RlZDoKQEAgLTIxMyw3ICsyMTMsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgc2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlKTsKIAogICAg
IGJvb2wgc3RhcnQoKTsKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBW
ZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtTG9hZFJlc291cmNl
U3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25z
ZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAKICAgICB2b2lkIHJlZkF1dGhlbnRpY2F0aW9u
Q2xpZW50KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQogICAgIHZvaWQgZGVyZWZBdXRoZW50aWNhdGlv
bkNsaWVudCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
U3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3
IEBAIHZvaWQgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmUKIAogdm9pZCBTeW5j
aHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIGludCAvKmVuY29kZWREYXRhTGVuZ3RoKi8p
CiB7Ci0gICAgbV9kYXRhLmFwcGVuZChkYXRhLCBsZW5ndGgpOworICAgIG1fZGF0YS5hcHBlbmQo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCk7CiB9CiAKIHZv
aWQgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hy
b25vdXNMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNl
dEFsbG93U3RvcmVkQ3JlZGVudGlhbHMoYm9vbCBhbGxvdykgeyBtX2FsbG93U3RvcmVkQ3JlZGVu
dGlhbHMgPSBhbGxvdzsgfQogICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQotICAgIFZlY3RvcjxjaGFyPiYgbXV0YWJsZURh
dGEoKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBWZWN0b3I8dWludDhfdD4mIG11dGFibGVEYXRh
KCkgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IoKSBj
b25zdCB7IHJldHVybiBtX2Vycm9yOyB9CiAgICAgU3luY2hyb25vdXNMb2FkZXJNZXNzYWdlUXVl
dWUmIG1lc3NhZ2VRdWV1ZSgpIHsgcmV0dXJuIG1fbWVzc2FnZVF1ZXVlLmdldCgpOyB9CiAKQEAg
LTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRp
YWxzIHsgZmFsc2UgfTsKICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7Ci0gICAgVmVj
dG9yPGNoYXI+IG1fZGF0YTsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9kYXRhOwogICAgIFJlc291
cmNlRXJyb3IgbV9lcnJvcjsKICAgICBSZWY8U3luY2hyb25vdXNMb2FkZXJNZXNzYWdlUXVldWU+
IG1fbWVzc2FnZVF1ZXVlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsOSArODUsNyBAQCBzdGF0aWMgSGFz
aE1hcDxTdHJpbmcsIFJldGFpblB0cjxDRkRhdGFSCiAKIHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNB
dXRob3JpemF0aW9uSGVhZGVyKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ3JlZGVu
dGlhbCYgY3JlZGVudGlhbCkKIHsKLSAgICBTdHJpbmcgYXV0aGVudGljYXRpb25IZWFkZXIgPSAi
QmFzaWMgIiArIGJhc2U2NEVuY29kZShTdHJpbmcoY3JlZGVudGlhbC51c2VyKCkgKyAiOiIgKyBj
cmVkZW50aWFsLnBhc3N3b3JkKCkpLnV0ZjgoKSk7Ci0KLSAgICByZXF1ZXN0LnNldEhUVFBIZWFk
ZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlvbiwgYXV0aGVudGljYXRpb25IZWFk
ZXIpOworICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpBdXRo
b3JpemF0aW9uLCBjcmVkZW50aWFsLnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25I
ZWFkZXIoKSk7CiB9CiAKIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUlu
dGVybmFsKCkKQEAgLTUyNCw3ICs1MjIsNyBAQCBzdGF0aWMgdm9pZCBlbXB0eVBlcmZvcm0odm9p
ZCopCiB7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBW
ZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIExPRyhOZXR3b3JrLCAiUmVzb3Vy
Y2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseTolcyBzc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6JXUiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
UmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2OCw3ICszNjgsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZXN0YXJ0UmVx
dWVzdFdpdGhDCiAgICAgZC0+bV9jdXJsUmVxdWVzdC0+c3RhcnQoKTsKIH0KIAotdm9pZCBSZXNv
dXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3Zv
aWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VF
cnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4m
IGRhdGEpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQoIXJlcXVl
c3QuaXNFbXB0eSgpKTsKQEAgLTU2Miw5ICs1NjIsOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpo
YW5kbGVEYXRhVVJMKCkKIAogICAgICAgICAvLyBkaWRSZWNlaXZlUmVzcG9uc2UgbWlnaHQgY2F1
c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVkLgogICAgICAgICBpZiAoY2xpZW50KCkpIHsKLSAg
ICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAgICBpZiAoYmFzZTY0RGVjb2Rl
KGRhdGEsIG91dCwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpICYmIG91dC5zaXplKCkg
PiAwKQotICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKHRoaXMsIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKG91dC5kYXRhKCksIG91dC5zaXplKCkpLCBvcmlnaW5hbFNpemUp
OworICAgICAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShkYXRhLCBCYXNl
NjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyk7CisgICAgICAgICAgICBp
ZiAoZGVjb2RlZERhdGEgJiYgZGVjb2RlZERhdGEtPnNpemUoKSA+IDApCisgICAgICAgICAgICAg
ICAgY2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIodGhpcywgU2hhcmVkQnVmZmVyOjpjcmVhdGUo
ZGVjb2RlZERhdGEtPmRhdGEoKSwgZGVjb2RlZERhdGEtPnNpemUoKSksIG9yaWdpbmFsU2l6ZSk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmco
Y2hhcnNldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNv
dXJjZUhhbmRsZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTY3LDkgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAog
c3RhdGljIHZvaWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogewotICAgIFN0cmluZyBh
dXRoZW50aWNhdGlvbkhlYWRlciA9ICJCYXNpYyAiICsgYmFzZTY0RW5jb2RlKFN0cmluZyhjcmVk
ZW50aWFsLnVzZXIoKSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKSkudXRmOCgpKTsKLQot
ICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0
aW9uLCBhdXRoZW50aWNhdGlvbkhlYWRlcik7CisgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGNyZWRlbnRpYWwuc2VyaWFsaXphdGlv
bkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpKTsKIH0KIAogc3RhdGljIE5TT3BlcmF0aW9u
UXVldWUgKm9wZXJhdGlvblF1ZXVlRm9yQXN5bmNDbGllbnRzKCkKQEAgLTM1Miw3ICszNTAsNyBA
QCBDRlN0cmluZ1JlZiBSZXNvdXJjZUhhbmRsZTo6c3luY2hyb25vdXNMCiAgICAgcmV0dXJuIENG
U1RSKCJXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJSdW5Mb29wTW9kZSIpOwogfQogCi12b2lkIFJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3Im
IGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQor
dm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5l
dHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90
PiYgZGF0YSkKIHsKICAgICBMT0coTmV0d29yaywgIlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHk6JUAgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6JXUiLCBy
ZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQ
Qm9keSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5k
bGVTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0
Zm9ybVNldERlZmVyc0xvCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgUmVz
b3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5n
Q29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5
LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpCit2b2lk
IFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29y
a2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4m
KQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lv
bi5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGRpZ2VzdC0+YWRkQnl0ZXMoY2VydGlmaWNhdGVEYXRh
LT5kYXRhLCBjZXJ0aWZpY2F0ZURhdGEtPmxlbik7CiAKICAgICAgICAgYXV0byBoYXNoID0gZGln
ZXN0LT5jb21wdXRlSGFzaCgpOwotICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGhhc2guZGF0YSgpKSwgaGFzaC5zaXplKCkpOworICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGhhc2guZGF0YSgpKSwgaGFzaC5zaXplKCkpKTsKICAgICB9CiAKICAgICBIYXNoU2V0
PFN0cmluZz4gbV9jZXJ0aWZpY2F0ZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMSArMTU0LDExIEBAIFN0cmluZyBkZWNvZGVFc2NhcGVT
ZXF1ZW5jZXMoU3RyaW5nVmlldyAKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAK
LWlubGluZSBWZWN0b3I8Y2hhcj4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKFN0cmlu
Z1ZpZXcgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQoraW5saW5lIFZlY3Rv
cjx1aW50OF90PiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBzdHJp
bmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgQVNTRVJUKGVuY29kaW5n
LmlzVmFsaWQoKSk7CiAKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OworICAgIFZlY3Rvcjx1aW50
OF90PiByZXN1bHQ7CiAgICAgc2l6ZV90IGRlY29kZWRQb3NpdGlvbiA9IDA7CiAgICAgc2l6ZV90
IHNlYXJjaFBvc2l0aW9uID0gMDsKICAgICB3aGlsZSAodHJ1ZSkgewpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0
b3JXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBzaWduZWRQ
dWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcKICAgICAgICAgaWYgKCFDcnlwdFNpZ25BbmRFbmNv
ZGVDZXJ0aWZpY2F0ZShoQ29udGV4dCwgQVRfS0VZRVhDSEFOR0UsIFg1MDlfQVNOX0VOQ09ESU5H
LCBYNTA5X0tFWUdFTl9SRVFVRVNUX1RPX0JFX1NJR05FRCwgJnJlcXVlc3RJbmZvLCAmc2lnbkFs
Z28sIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBCWVRFPihiaW5hcnkuZGF0YSgpKSwgJmR3RW5jb2Rl
ZExlbmd0aCkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBrZXlTdHJpbmcgPSBiYXNl
NjRFbmNvZGUoYmluYXJ5KTsKKyAgICAgICAga2V5U3RyaW5nID0gbWFrZVN0cmluZyhiYXNlNjRF
bmNvZGVkKGJpbmFyeSkpOwogICAgIH0gd2hpbGUoMCk7CiAKICAgICBpZiAocFB1YkluZm8pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZl
ci9TV1NjcmlwdFN0b3JhZ2UuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDcgKzU2LDcgQEAgU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29u
c3QgUwogICAgIGF1dG8gaW5wdXRVdGY4ID0gaW5wdXQudXRmOCgpOwogICAgIGNyeXB0by0+YWRk
Qnl0ZXMoaW5wdXRVdGY4LmRhdGEoKSwgaW5wdXRVdGY4Lmxlbmd0aCgpKTsKICAgICBhdXRvIGhh
c2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7Ci0gICAgcmV0dXJuIFdURjo6YmFzZTY0VVJMRW5j
b2RlKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpKTsKIH0KIAogU3RyaW5nIFNX
U2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyNzc2NTQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OnNlbmRSZXBseVRvU3luY2hyb25vdXNSZXF1ZXN0KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcmVDb252ZXJzaW9uUmVxdWVz
dCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6OmFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAg
ICAgICAgKiBTaGFyZWQvQVBJL0FQSURhdGEuaDoKKyAgICAgICAgKEFQSTo6RGF0YTo6Y3JlYXRl
KToKKyAgICAgICAgKEFQSTo6RGF0YTo6ZnJlZVZlY3RvckJ5dGVzKToKKyAgICAgICAgKiBTaGFy
ZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW06CisgICAgICAgIChXZWJLaXQ6OnNhbmRib3hG
aWxlUGF0aCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAg
IChXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAocHJvZHVjZUNs
aWVudERhdGFKc29uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9jYWlyby9XZWJB
dXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6YmFzZTY0RW5jb2Rl
ZFBOR0RhdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW06
CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6d2Vi
Q3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVt
b3RlSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0
b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2
ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94
eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1T
YXZlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
dEJhY2tlbmRDb21tYW5kcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9u
L0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxBdXRo
ZW50aWNhdG9ySW50ZXJuYWw6OnByb2R1Y2VIYXNoU2V0KToKKyAgICAgICAgKFdlYktpdDo6TG9j
YWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2Fs
QXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok1vY2tIaWRDb25uZWN0aW9uOjpmZWVkUmVwb3J0cyk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbToKKyAgICAgICAgKFdl
YktpdDo6TW9ja0xvY2FsQ29ubmVjdGlvbjo6ZmlsdGVyUmVzcG9uc2VzIGNvbnN0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlVSTFNj
aGVtZVRhc2suY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVUYXNrOjpkaWRDb21w
bGV0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5Lmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6bG9hZFN5bmNocm9ub3VzbHkpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuaDoK
KwogMjAyMS0wNS0xOCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVzdXJyZWN0IFdLV2ViVmlldyBtZWRpYSBjb250cm9scyBBUEkgcmVtb3ZlZCBpbiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxOTI5CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3Nh
Z2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIG1lc3NhZ2Vz
IC0+IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKIAogICAg
IFNjaGVkdWxlUmVzb3VyY2VMb2FkKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykKLSAgICBQZXJmb3JtU3luY2hyb25vdXNMb2FkKFdl
YktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVy
cykgLT4gKFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiBkYXRhKSBTeW5jaHJvbm91cworICAgIFBlcmZv
cm1TeW5jaHJvbm91c0xvYWQoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBy
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKSAtPiAoV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+IGRhdGEp
IFN5bmNocm9ub3VzCiAgICAgVGVzdFByb2Nlc3NJbmNvbWluZ1N5bmNNZXNzYWdlc1doZW5XYWl0
aW5nRm9yU3luY1JlcGx5KFdlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQpIC0+
IChib29sIGhhbmRsZWQpIFN5bmNocm9ub3VzCiAgICAgTG9hZFBpbmcoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKQogICAgIFJlbW92
ZUxvYWRJZGVudGlmaWVyKHVpbnQ2NF90IHJlc291cmNlTG9hZElkZW50aWZpZXIpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkx
LDcgQEAgc3RhdGljIHZvaWQgc2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlcwogICAgIEFTU0VS
VChkYXRhLmRlbGF5ZWRSZXBseSk7CiAgICAgQVNTRVJUKCFkYXRhLnJlc3BvbnNlLmlzTnVsbCgp
IHx8ICFkYXRhLmVycm9yLmlzTnVsbCgpKTsKIAotICAgIFZlY3RvcjxjaGFyPiByZXNwb25zZUJ1
ZmZlcjsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzcG9uc2VCdWZmZXI7CiAgICAgaWYgKGJ1ZmZl
ciAmJiBidWZmZXItPnNpemUoKSkKICAgICAgICAgcmVzcG9uc2VCdWZmZXIuYXBwZW5kKGJ1ZmZl
ci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFu
YWdlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzE1LDE0ICszMTUsMTUgQEAgdm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZp
cgogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IFZlY3Rvcjx1aW50OF90PiBwdWJsaWNLZXlEYXRhOwotICAgICAgICBXVEY6OmJhc2U2NFVSTERl
Y29kZShwdWJsaWNLZXlCYXNlNjRVUkwsIHB1YmxpY0tleURhdGEpOworICAgICAgICBhdXRvIHB1
YmxpY0tleURhdGEgPSBiYXNlNjRVUkxEZWNvZGUocHVibGljS2V5QmFzZTY0VVJMKTsKKyAgICAg
ICAgaWYgKCFwdWJsaWNLZXlEYXRhKQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1
dG8gY3J5cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6
QWxnb3JpdGhtOjpTSEFfMjU2KTsKLSAgICAgICAgY3J5cHRvLT5hZGRCeXRlcyhwdWJsaWNLZXlE
YXRhLmRhdGEoKSwgcHVibGljS2V5RGF0YS5zaXplKCkpOworICAgICAgICBjcnlwdG8tPmFkZEJ5
dGVzKHB1YmxpY0tleURhdGEtPmRhdGEoKSwgcHVibGljS2V5RGF0YS0+c2l6ZSgpKTsKICAgICAg
ICAgYXV0byBwdWJsaWNLZXlEYXRhSGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKIAotICAg
ICAgICBhdXRvIGtleUlEID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUocHVibGljS2V5RGF0YUhhc2gu
ZGF0YSgpLCBwdWJsaWNLZXlEYXRhSGFzaC5zaXplKCkpOworICAgICAgICBhdXRvIGtleUlEID0g
bWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKHB1YmxpY0tleURhdGFIYXNoLmRhdGEoKSwgcHVi
bGljS2V5RGF0YUhhc2guc2l6ZSgpKSk7CiAgICAgICAgIGlmIChrZXlJRCAhPSBhdHRyaWJ1dGlv
bi5zb3VyY2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURCYXNlNjRVUkwpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a0RhdGFUYXNrQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICNp
ZiBVU0UoQ1JFREVOVElBTF9TVE9SQUdFX1dJVEhfTkVUV09SS19TRVNTSU9OKQogc3RhdGljIHZv
aWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogewotICAg
IFN0cmluZyBhdXRoZW50aWNhdGlvbkhlYWRlciA9ICJCYXNpYyAiICsgYmFzZTY0RW5jb2RlKFN0
cmluZyhjcmVkZW50aWFsLnVzZXIoKSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKSkudXRm
OCgpKTsKLSAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVy
TmFtZTo6QXV0aG9yaXphdGlvbiwgYXV0aGVudGljYXRpb25IZWFkZXIpOworICAgIHJlcXVlc3Qu
c2V0SFRUUEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9u
LCBjcmVkZW50aWFsLnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSk7
CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJRGF0YS5oCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02OCw2ICs2OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUo
YnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CiAgICAgfQogCisgICAgc3RhdGljIFJlZjxE
YXRhPiBjcmVhdGUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYgYnVmZmVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZVdpdGhvdXRDb3B5aW5nKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXpl
KCksIGZyZWVWZWN0b3JCeXRlcywgbnVsbHB0cik7OworICAgIH0KKwogICAgIHN0YXRpYyBSZWZQ
dHI8RGF0YT4gY3JlYXRlKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOwogICAgIAogI2lmIFBM
QVRGT1JNKENPQ09BKQpAQCAtMTAyLDYgKzEwNywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ZmFzdEZyZWUoc3RhdGljX2Nhc3Q8dm9pZCo+KGJ5dGVzKSk7CiAgICAgfQogCisgICAgc3RhdGlj
IHZvaWQgZnJlZVZlY3RvckJ5dGVzKHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBjb25zdCB2b2lkKikK
KyAgICB7CisgICAgICAgIGlmIChieXRlcykKKyAgICAgICAgICAgIFdURjo6VmVjdG9yTWFsbG9j
OjpmcmVlKGJ5dGVzKTsKKyAgICB9CisKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBtX2J5dGVz
IHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE4ICszMTUsMTMgQEAgc3RhdGljIFN0cmluZyBzYW5k
Ym94RGlyZWN0b3J5KFdlYkNvcmU6OgogCiBzdGF0aWMgU3RyaW5nIHNhbmRib3hGaWxlUGF0aChj
b25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgsIGNvbnN0IENTdHJpbmcmIGhlYWRlcikKIHsKLSAg
ICBTdHJpbmdCdWlsZGVyIHNhbmRib3hGaWxlOwotICAgIHNhbmRib3hGaWxlLmFwcGVuZChkaXJl
Y3RvcnlQYXRoKTsKLSAgICBzYW5kYm94RmlsZS5hcHBlbmQoIi9Db21waWxlZFNhbmRib3grIik7
Ci0KICAgICAvLyBNYWtlIHRoZSBmaWxlbmFtZSBzZW1pLXVuaXF1ZSBiYXNlZCBvbiB0aGUgY29u
dGVudHMgb2YgdGhlIGhlYWRlci4KKwogICAgIGF1dG8gY3J5cHRvID0gUEFMOjpDcnlwdG9EaWdl
c3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBj
cnlwdG8tPmFkZEJ5dGVzKGhlYWRlci5kYXRhKCksIGhlYWRlci5sZW5ndGgoKSk7Ci0gICAgVmVj
dG9yPHVpbnQ4X3Q+IGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7Ci0gICAgU3RyaW5nIHJl
YWRhYmxlSGFzaCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKGhhc2guZGF0YSgpLCBoYXNoLnNpemUo
KSk7CisgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgc2FuZGJv
eEZpbGUuYXBwZW5kKHJlYWRhYmxlSGFzaCk7Ci0gICAgcmV0dXJuIHNhbmRib3hGaWxlLnRvU3Ry
aW5nKCk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0aCwgIi9Db21waWxlZFNh
bmRib3grIiwgYmFzZTY0VVJMRW5jb2RlZChoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpKTsKIH0K
IAogc3RhdGljIGJvb2wgZW5zdXJlU2FuZGJveENhY2hlRGlyZWN0b3J5KGNvbnN0IFNhbmRib3hJ
bmZvJiBpbmZvKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsNyAr
NTIwLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAogICAgIFN0YXJ0VVJMU2NoZW1l
VGFzayhzdHJ1Y3QgV2ViS2l0OjpVUkxTY2hlbWVUYXNrUGFyYW1ldGVycyBwYXJhbWV0ZXJzKQog
ICAgIFN0b3BVUkxTY2hlbWVUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRf
dCB0YXNrSWRlbnRpZmllcikKLSAgICBMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrKHN0cnVj
dCBXZWJLaXQ6OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpIC0+IChXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9y
LCBWZWN0b3I8Y2hhcj4gZGF0YSkgU3luY2hyb25vdXMKKyAgICBMb2FkU3luY2hyb25vdXNVUkxT
Y2hlbWVUYXNrKHN0cnVjdCBXZWJLaXQ6OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRl
cnMpIC0+IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yIGVycm9yLCBWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKIAogI2lm
IEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgU2hvdWxkQWxsb3dEZXZpY2VPcmllbnRh
dGlvbkFuZE1vdGlvbkFjY2VzcyhXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgc3Ry
dWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFtZUluZm8sIGJvb2wgbWF5UHJvbXB0KSAtPiAo
ZW51bTp1aW50OF90IFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9u
U3RhdGUgcGVybWlzc2lvblN0YXRlKSBBc3luYwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIHN0cnVjdCBVUkxTY2hlbWVUYXNrUGFyYW1ldGVyczsKIGNsYXNzIFdl
YlBhZ2VQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKIAotdXNpbmcgU3luY0xvYWRDb21w
bGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBWZWN0
b3I8Y2hhcj4mKT47Cit1c2luZyBTeW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0gQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpPjsKIAogY2xhc3Mg
V2ViVVJMU2NoZW1lSGFuZGxlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlVSTFNjaGVtZUhhbmRs
ZXI+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxTY2hlbWVIYW5kbGVyKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDEwICsyMTIsMTAgQEAgYXV0byBXZWJVUkxTY2hl
bWVUYXNrOjpkaWRDb21wbGV0ZShjb25zdAogICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKICAgICAK
ICAgICBpZiAoaXNTeW5jKCkpIHsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAg
IFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgICAgICBpZiAobV9zeW5jRGF0YSkgewogICAgICAg
ICAgICAgZGF0YS5yZXNpemUobV9zeW5jRGF0YS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIG1lbWNw
eShkYXRhLmRhdGEoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obV9zeW5jRGF0YS0+
ZGF0YSgpKSwgbV9zeW5jRGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG1lbWNweShkYXRhLmRh
dGEoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9zeW5jRGF0YS0+ZGF0YSgp
KSwgbV9zeW5jRGF0YS0+c2l6ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fc3luY0NvbXBs
ZXRpb25IYW5kbGVyKG1fc3luY1Jlc3BvbnNlLCBlcnJvciwgV1RGTW92ZShkYXRhKSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgc3RydWN0IFVSTFNjaGVtZVRhc2tQYXJhbWV0
ZXJzOwogY2xhc3MgV2ViVVJMU2NoZW1lSGFuZGxlcjsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIAot
dXNpbmcgU3luY0xvYWRDb21wbGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImLCBjb25zdCBWZWN0b3I8Y2hhcj4mKT47Cit1c2luZyBTeW5jTG9hZENvbXBsZXRpb25I
YW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYpPjsKIAogY2xhc3MgV2ViVVJMU2NoZW1lVGFzayA6IHB1YmxpYyBBUEk6Ok9iamVjdElt
cGw8QVBJOjpPYmplY3Q6OlR5cGU6OlVSTFNjaGVtZVRhc2s+LCBwdWJsaWMgSW5zdGFuY2VDb3Vu
dGVkPFdlYlVSTFNjaGVtZVRhc2s+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxT
Y2hlbWVUYXNrKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzOCwxMyArMjMzOCwxNCBAQCB2b2lkIFdLUGFn
ZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KFdLUGFnCiAgICAgICAgICAgICBpZiAobV9jbGllbnQu
Y29weVdlYkNyeXB0b01hc3RlcktleSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
dG9JbXBsKG1fY2xpZW50LmNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkodG9BUEkoJnBhZ2UpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pKSk7CiAKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBt
YXN0ZXJLZXk7CiAjaWYgRU5BQkxFKFdFQl9DUllQVE8pCi0gICAgICAgICAgICBpZiAoIWdldERl
ZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKKyAgICAgICAgICAgIGF1dG8gbWFz
dGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgICAgICAgICAgaWYgKCFt
YXN0ZXJLZXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBy
ZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUoV1RGTW92ZSgqbWFzdGVyS2V5KSk7CisjZWxzZQorICAg
ICAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKG51bGxwdHIsIDApOwogI2VuZGlmCi0K
LSAgICAgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0YSgpLCBt
YXN0ZXJLZXkuc2l6ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIFJlZlB0cjxBUEk6OlN0cmlu
Zz4gc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKFdlYlBhZ2VQcm94eSYgcGFnZSwg
dW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBSZWZQdHI8QVBJOjpTdHJpbmc+JiBjaGFsbGVu
Z2VTdHJpbmcsIGNvbnN0IFVSTCYgdXJsKSBvdmVycmlkZQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw3ICs2OCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNEYXRhPiBwcm9kdWNlQ2xpZW50RGEK
ICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAid2ViYXV0aG4uZ2V0IiBmb3JLZXk6QCJ0
eXBlIl07CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
V1RGOjpiYXNlNjRVUkxFbmNvZGUoY2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2UubGVuZ3RoKSBm
b3JLZXk6QCJjaGFsbGVuZ2UiXTsKKyAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bWFrZVN0cmlu
ZyhiYXNlNjRVUkxFbmNvZGVkKGNoYWxsZW5nZS5ieXRlcywgY2hhbGxlbmdlLmxlbmd0aCkpIGZv
cktleTpAImNoYWxsZW5nZSJdOwogICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpvcmlnaW4gZm9y
S2V5OkAib3JpZ2luIl07CiAKICAgICByZXR1cm4gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdp
dGhKU09OT2JqZWN0OmRpY3Rpb25hcnkuZ2V0KCkgb3B0aW9uczpOU0pTT05Xcml0aW5nU29ydGVk
S2V5cyBlcnJvcjpuaWxdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlv
bi9jYWlyby9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9u
Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBPcHRpb25hbDxTdHJpbmc+IGJhc2U2NEVuY29k
ZWRQTkcKICAgICBpZiAocG5nRGF0YS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKHBuZ0RhdGEpOworICAgIHJldHVybiBt
YWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocG5nRGF0YSkpOwogfQogCiBPcHRpb25hbDxTdHJpbmc+
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwbGF0Zm9ybUdldEJhc2U2NEVuY29kZWRQTkdEYXRhKGNv
bnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTExMzUsMTEgKzExMzUsMTEgQEAgUmVmUHRyPEFQSTo6RGF0YT4g
TmF2aWdhdGlvblN0YXRlOjpOYXZpZwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlm
ICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJDcnlw
dG9NYXN0ZXJLZXlGb3JXZWJWaWV3KSB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJL
ZXk7Ci0gICAgICAgIGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkp
KQorICAgICAgICBhdXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsK
KyAgICAgICAgaWYgKCFtYXN0ZXJLZXkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgICAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUobWFzdGVyS2V5LmRhdGEoKSwgbWFzdGVy
S2V5LnNpemUoKSk7CisgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShXVEZNb3ZlKCpt
YXN0ZXJLZXkpKTsKICAgICB9CiAKICAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2
aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVt
b3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk0LDEzICsxOTQsMTEgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGll
bnQ6OnNldHVwQ29ubmVjdAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRD
b21tYW5kcyhjb25zdCBjaGFyKiBiYWNrZW5kQ29tbWFuZHMpCiB7CiAgICAgaWYgKCFiYWNrZW5k
Q29tbWFuZHMgfHwgIWJhY2tlbmRDb21tYW5kc1swXSkgewotICAgICAgICBtX2JhY2tlbmRDb21t
YW5kc1VSTCA9IFN0cmluZygpOworICAgICAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IHsgfTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwot
ICAgIGJhc2U2NEVuY29kZShiYWNrZW5kQ29tbWFuZHMsIHN0cmxlbihiYWNrZW5kQ29tbWFuZHMp
LCBiYXNlNjREYXRhKTsKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9ICJkYXRhOnRleHQvamF2
YXNjcmlwdDtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwg
PSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2Rl
ZChiYWNrZW5kQ29tbWFuZHMsIHN0cmxlbihiYWNrZW5kQ29tbWFuZHMpKSk7CiB9CiAKIHZvaWQg
UmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpjb25uZWN0aW9uRGlkQ2xvc2UoKQpJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
Z3RrL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHlHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsOSArMTQyLDExIEBAIHZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm0KICAgICBWZWN0b3I8Y2hhcj4gZGF0
YVZlY3RvcjsKICAgICBDU3RyaW5nIGRhdGFTdHJpbmc7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQp
IHsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0
VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29k
ZShjb250ZW50LCBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAg
ICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkYXRhVmVj
dG9yLnNocmlua1RvRml0KCk7CisgICAgICAgIGRlY29kZWREYXRhLT5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICBkYXRhVmVjdG9yID0gV1RGTW92ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxzZQog
ICAgICAgICBkYXRhU3RyaW5nID0gY29udGVudC51dGY4KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNw
ZWN0b3JVSVByb3h5R3RrLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQxLDkgKzU0MSwxMSBAQCB2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtU2F2ZShjCiAgICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7CiAgICAgQ1N0cmluZyBk
YXRhU3RyaW5nOwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIGlmICghYmFzZTY0
RGVjb2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAg
ICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudCwgQmFzZTY0RGVjb2Rl
T3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKTsKKyAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgpOworICAg
ICAgICBkZWNvZGVkRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgZGF0YVZlY3RvciA9IFdU
Rk1vdmUoKmRlY29kZWREYXRhKTsKICAgICB9IGVsc2UKICAgICAgICAgZGF0YVN0cmluZyA9IGNv
bnRlbnQudXRmOCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
bWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
TWFjLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE3NCwxMCArMTc0LDEwIEBAIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm0KICAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJM
Q29weSwgYWN0dWFsVVJMKTsKIAogICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAg
ICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNv
bnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICBhdXRv
IGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBCYXNlNjREZWNvZGVPcHRp
b25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRh
Q29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEo
KSBsZW5ndGg6b3V0LnNpemUoKV0pOworICAgICAgICAgICAgYXV0byBkYXRhQ29udGVudCA9IGFk
b3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGVjb2RlZERhdGEtPmRhdGEoKSBs
ZW5ndGg6ZGVjb2RlZERhdGEtPnNpemUoKV0pOwogICAgICAgICAgICAgW2RhdGFDb250ZW50IHdy
aXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMg
ZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJ
bnNwZWN0b3JVSVByb3h5TWFjLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTUwOSwxMCArNTA5LDEwIEBAIHZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1TYXZlKGMKICAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3Vn
Z2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKIAogICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkg
ewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0
RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAg
ICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBCYXNlNjRE
ZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICAgICAgaWYgKCFkZWNvZGVk
RGF0YSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNE
YXRhPiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6
b3V0LmRhdGEoKSBsZW5ndGg6b3V0LnNpemUoKV0pOworICAgICAgICAgICAgYXV0byBkYXRhQ29u
dGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGVjb2RlZERhdGEt
PmRhdGEoKSBsZW5ndGg6ZGVjb2RlZERhdGEtPnNpemUoKV0pOwogICAgICAgICAgICAgW2RhdGFD
b250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWlj
YWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIFJlbW90
ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvCiAgICAgaWYgKCFldmVudC5tZXNzYWdlIHx8
IGV2ZW50Lm1lc3NhZ2UtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9iYWNr
ZW5kQ29tbWFuZHNVUkwgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQs
IiwgYmFzZTY0RW5jb2RlKGV2ZW50Lm1lc3NhZ2UtPnV0ZjgoKSkpOworICAgIG1fYmFja2VuZENv
bW1hbmRzVVJMID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIsIGJh
c2U2NEVuY29kZWQoZXZlbnQubWVzc2FnZS0+dXRmOCgpKSk7CiB9CiAKIHZvaWQgUmVtb3RlSW5z
cGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50JiBldmVudCkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVu
dGljYXRvci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0JKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2Fs
QXV0aGVudGljYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAtODIsMTAgKzgyLDggQEAgc3RhdGlj
IGlubGluZSBIYXNoU2V0PFN0cmluZz4gcHJvZHVjZUhhcwogewogICAgIEhhc2hTZXQ8U3RyaW5n
PiByZXN1bHQ7CiAgICAgZm9yIChhdXRvJiBjcmVkZW50aWFsRGVzY3JpcHRvciA6IGNyZWRlbnRp
YWxEZXNjcmlwdG9ycykgewotICAgICAgICBpZiAoZW1wdHlUcmFuc3BvcnRzT3JDb250YWluKGNy
ZWRlbnRpYWxEZXNjcmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6Oklu
dGVybmFsKQotICAgICAgICAgICAgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IudHlwZSA9PSBQdWJs
aWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5Ci0gICAgICAgICAgICAmJiBjcmVkZW50aWFs
RGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkgPT0gY3JlZGVudGlhbElkTGVuZ3RoKQotICAgICAg
ICAgICAgcmVzdWx0LmFkZChiYXNlNjRFbmNvZGUoY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0
b3IuZGF0YSgpLCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkpKTsKKyAgICAg
ICAgaWYgKGVtcHR5VHJhbnNwb3J0c09yQ29udGFpbihjcmVkZW50aWFsRGVzY3JpcHRvci50cmFu
c3BvcnRzLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCkgJiYgY3JlZGVudGlhbERl
c2NyaXB0b3IudHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5ICYmIGNy
ZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgp
CisgICAgICAgICAgICByZXN1bHQuYWRkKG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChjcmVkZW50
aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5kYXRhKCksIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVj
dG9yLnNpemUoKSkpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI0MSw3ICsy
MzksNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoCiAgICAgICAg
IGlmIChub3RGb3VuZCAhPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZE1hdGNoaW5nKFsmZXhj
bHVkZUNyZWRlbnRpYWxJZHNdIChhdXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgICAgICBhdXRv
KiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7CiAgICAgICAgICAgICBBU1NFUlQocmF3SWQp
OwotICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2
NEVuY29kZShyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgICAg
ICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFpbnMobWFrZVN0cmluZyhiYXNlNjRF
bmNvZGVkKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKSk7CiAgICAgICAgIH0p
KSB7CiAgICAgICAgICAgICByZWNlaXZlRXhjZXB0aW9uKHsgTm90QWxsb3dlZEVycm9yLCAiQXQg
bGVhc3Qgb25lIGNyZWRlbnRpYWwgbWF0Y2hlcyBhbiBlbnRyeSBvZiB0aGUgZXhjbHVkZUNyZWRl
bnRpYWxzIGxpc3QgaW4gdGhlIHBsYXRmb3JtIGF0dGFjaGVkIGF1dGhlbnRpY2F0b3IuIl9zIH0s
IFdlYkF1dGhlbnRpY2F0aW9uU3RhdHVzOjpMQUV4Y2x1ZGVDcmVkZW50aWFsc01hdGNoZWQpOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTE4LDcgKzUxNiw3IEBAIHZvaWQgTG9jYWxBdXRoZW50
aWNhdG9yOjpnZXRBc3NlcnRpb24oKQogICAgICAgICB9CiAKICAgICAgICAgYXV0byogcmF3SWQg
PSBjcmVkZW50aWFsLT5yYXdJZCgpOwotICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNv
bnRhaW5zKGJhc2U2NEVuY29kZShyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSkp
CisgICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMobWFrZVN0cmluZyhiYXNl
NjRFbmNvZGVkKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKSkpCiAgICAgICAg
ICAgICBhc3NlcnRpb25SZXNwb25zZXMudW5jaGVja2VkQXBwZW5kKGNyZWRlbnRpYWwuY29weVJl
ZigpKTsKICAgICB9CiAgICAgaWYgKGFzc2VydGlvblJlc3BvbnNlcy5pc0VtcHR5KCkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0hp
ZENvbm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01v
Y2tIaWRDb25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDE1ICsyNjEsMTMgQEAg
dm9pZCBNb2NrSGlkQ29ubmVjdGlvbjo6ZmVlZFJlcG9ydHMoKQogICAgICAgICBpZiAoc3RhZ2Vz
TWF0Y2goKSAmJiBtX2NvbmZpZ3VyYXRpb24uaGlkLT5lcnJvciA9PSBNb2NrOjpIaWRFcnJvcjo6
VW5zdXBwb3J0ZWRPcHRpb25zICYmIChtX3JlcXVpcmVSZXNpZGVudEtleSB8fCBtX3JlcXVpcmVV
c2VyVmVyaWZpY2F0aW9uKSkKICAgICAgICAgICAgIG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6
Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21tYW5kOjprQ2JvciwgeyBz
dGF0aWNfY2FzdDx1aW50OF90PihDdGFwRGV2aWNlUmVzcG9uc2VDb2RlOjprQ3RhcDJFcnJVbnN1
cHBvcnRlZE9wdGlvbikgfSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHBheWxvYWQ7CiAgICAgICAgICAgICBBU1NFUlQoIW1fY29uZmlndXJhdGlvbi5oaWQt
PnBheWxvYWRCYXNlNjQuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIGF1dG8gc3RhdHVzID0gYmFz
ZTY0RGVjb2RlKG1fY29uZmlndXJhdGlvbi5oaWQtPnBheWxvYWRCYXNlNjRbMF0sIHBheWxvYWQp
OworICAgICAgICAgICAgYXV0byBwYXlsb2FkID0gYmFzZTY0RGVjb2RlKG1fY29uZmlndXJhdGlv
bi5oaWQtPnBheWxvYWRCYXNlNjRbMF0pOwogICAgICAgICAgICAgbV9jb25maWd1cmF0aW9uLmhp
ZC0+cGF5bG9hZEJhc2U2NC5yZW1vdmUoMCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN0
YXR1cywgc3RhdHVzKTsKICAgICAgICAgICAgIGlmICghbV9jb25maWd1cmF0aW9uLmhpZC0+aXNV
MmYpCi0gICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9j
dXJyZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNvbW1hbmQ6OmtDYm9yLCBwYXlsb2FkKTsKKyAg
ICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRD
aGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a0Nib3IsIFdURk1vdmUoKnBheWxvYWQpKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3Nh
Z2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a01zZywg
cGF5bG9hZCk7CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZpZG9IaWRNZXNzYWdlOjpjcmVh
dGUobV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNvbW1hbmQ6OmtNc2csIFdURk1vdmUo
KnBheWxvYWQpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2sv
TW9ja0xvY2FsQ29ubmVjdGlvbi5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBNb2NrTG9jYWxDb25uZWN0
aW9uOjpmaWx0ZXJSZXNwb25zZQogICAgIGZvciAoOyBpdHIgIT0gcmVzcG9uc2VzLmVuZCgpOyAr
K2l0cikgewogICAgICAgICBhdXRvKiByYXdJZCA9IGl0ci0+Z2V0KCkucmF3SWQoKTsKICAgICAg
ICAgQVNTRVJUKHJhd0lkKTsKLSAgICAgICAgYXV0byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29k
ZShyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYXV0byByYXdJ
ZEJhc2U2NCA9IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChyYXdJZC0+ZGF0YSgpLCByYXdJZC0+
Ynl0ZUxlbmd0aCgpKSk7CiAgICAgICAgIGlmIChyYXdJZEJhc2U2NCA9PSBwcmVmZXJyZWRDcmVk
ZW50aWFsSWRCYXNlNjQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3ku
Y3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29y
ay9XZWJMb2FkZXJTdHJhdGVneS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3OCw3ICs1NzgsNyBA
QCBPcHRpb25hbDxXZWJMb2FkZXJTdHJhdGVneTo6U3luY0xvYWRSZXN1CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2Fk
SWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGllbnRDcmVkZW50
aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksICBjb25zdCBGZXRjaE9wdGlvbnMmIG9w
dGlvbnMsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIFJlc291
cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+
JiBkYXRhKQordm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRl
bnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGllbnRDcmVkZW50aWFs
UG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksICBjb25zdCBGZXRjaE9wdGlvbnMmIG9wdGlv
bnMsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIFJlc291cmNl
RXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQogewogICAgIGF1dG8qIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0gdG9XZWJGcmFtZUxv
YWRlckNsaWVudChmcmFtZUxvYWRlci5jbGllbnQoKSk7CiAgICAgYXV0byogd2ViRnJhbWUgPSB3
ZWJGcmFtZUxvYWRlckNsaWVudCA/ICZ3ZWJGcmFtZUxvYWRlckNsaWVudC0+d2ViRnJhbWUoKSA6
IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2Fk
ZXJTdHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH5XZWJMb2FkZXJTdHJhdGVneSgpIGZpbmFs
OwogICAgIAogICAgIHZvaWQgbG9hZFJlc291cmNlKFdlYkNvcmU6OkZyYW1lJiwgV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2UmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8
V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI+JiYpPiYmKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25n
IHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0
aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkgZmlu
YWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6OkZyYW1lTG9h
ZGVyJiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25z
dCBXZWJDb3JlOjpGZXRjaE9wdGlvbnMmLCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiwg
V2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0
b3I8dWludDhfdD4mIGRhdGEpIGZpbmFsOwogICAgIHZvaWQgcGFnZUxvYWRDb21wbGV0ZWQoV2Vi
Q29yZTo6UGFnZSYpIGZpbmFsOwogICAgIHZvaWQgYnJvd3NpbmdDb250ZXh0UmVtb3ZlZChXZWJD
b3JlOjpGcmFtZSYpIGZpbmFsOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICBz
dHJ1Y3QgU3luY0xvYWRSZXN1bHQgewogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
IHJlc3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yOwotICAgICAg
ICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAg
fTsKICAgICBPcHRpb25hbDxTeW5jTG9hZFJlc3VsdD4gdHJ5TG9hZGluZ1N5bmNocm9ub3VzbHlV
c2luZ1VSTFNjaGVtZUhhbmRsZXIoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCBSZXNvdXJjZUxvYWRJ
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICAgICBTeW5jTG9h
ZFJlc3VsdCBsb2FkRGF0YVVSTFN5bmNocm9ub3VzbHkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxT
Y2hlbWVIYW5kbGVyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRs
ZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBXZWJVUkxT
Y2hlbWVIYW5kbGVyUHJveHk6OnN0YXJ0TmV3VAogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUt
PnN0YXJ0TG9hZGluZygpOwogfQogCi12b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6bG9h
ZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBsb2FkSWRlbnRpZmllciwgV2Vi
RnJhbWUmIHdlYkZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgVmVjdG9yPGNoYXI+JiBk
YXRhKQordm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OmxvYWRTeW5jaHJvbm91c2x5KFJl
c291cmNlTG9hZElkZW50aWZpZXIgbG9hZElkZW50aWZpZXIsIFdlYkZyYW1lJiB3ZWJGcmFtZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBk
YXRhLnNocmluaygwKTsKICAgICBpZiAoIW1fd2ViUGFnZS5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrKFVSTFNjaGVtZVRhc2tQYXJh
bWV0ZXJzIHsgbV9pZGVudGlmaWVyLCBsb2FkSWRlbnRpZmllciwgcmVxdWVzdCwgd2ViRnJhbWUu
aW5mbygpIH0pLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpMb2FkU3luY2hyb25vdXNVUkxTY2hl
bWVUYXNrOjpSZXBseShyZXNwb25zZSwgZXJyb3IsIGRhdGEpKSkgewpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFu
ZGxlclByb3h5LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0TmV3VGFzayhXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlciYsIFdlYkZyYW1lJik7CiAgICAgdm9pZCBzdG9wQWxsVGFza3MoKTsKIAotICAg
IHZvaWQgbG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgV2ViRnJhbWUm
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFZlY3RvcjxjaGFyPiYpOworICAgIHZvaWQg
bG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgV2ViRnJhbWUmLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwg
V2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFZlY3Rvcjx1aW50OF90PiYpOwogCiAgICAgdWludDY0
X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogICAgIFdlYlBh
Z2UmIHBhZ2UoKSB7IHJldHVybiBtX3dlYlBhZ2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdh
Y3kvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vp
bmlnQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5n
IHRvIG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAgICAgVXBkYXRlIHRvIG1hdGNoIG5ldyBz
aWduYXR1cmUuIGNoYXIgLT4gdWludDhfdC4KKwogMjAyMS0wNS0xNCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBGaWxlU3lzdGVtOjpnZXRGaWxlU2l6
ZSgpIHRvIEZpbGVTeXN0ZW06OmZpbGVTaXplKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kv
V2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVk
dWxlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29y
ZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA3LDcgKzEwNyw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3UK
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyLCB1bnNpZ25lZCBsb25nLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNv
bnN0IEZldGNoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNl
RXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBk
YXRhKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IEZldGNo
T3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3ImIGVy
cm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQog
ewogICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGZyYW1lTG9h
ZGVyLm5ldHdvcmtpbmdDb250ZXh0KCksIHJlcXVlc3QsIG9wdGlvbnMuY3JlZGVudGlhbHMgPT0g
RmV0Y2hPcHRpb25zOjpDcmVkZW50aWFsczo6T21pdCA/IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5
OjpEb05vdFVzZSA6IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UsIGVycm9yLCByZXNwb25z
ZSwgZGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dl
YlJlc291cmNlTG9hZFNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgog
ICAgIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCiAgICAgdm9pZCBsb2FkUmVzb3VyY2Uo
V2ViQ29yZTo6RnJhbWUmLCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSYsIFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcj4mJik+
JiYpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpG
cmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNo
T3B0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpIGZpbmFs
OworICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpGcmFtZUxvYWRl
ciYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNv
cmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0aW9ucyYs
IGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYpIGZpbmFsOwogICAg
IHZvaWQgcGFnZUxvYWRDb21wbGV0ZWQoV2ViQ29yZTo6UGFnZSYpIGZpbmFsOwogICAgIHZvaWQg
YnJvd3NpbmdDb250ZXh0UmVtb3ZlZChXZWJDb3JlOjpGcmFtZSYpIGZpbmFsOwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAor
MjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXBk
YXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQg
Y29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2ViQ2hy
b21lQ2xpZW50Ojp3cmFwQ3J5cHRvS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVu
dDo6dW53cmFwQ3J5cHRvS2V5IGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgT3B0
aW9uYWwgcmV0dXJuaW5nIGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKS4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpzYXZlKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgT3B0
aW9uYWwgcmV0dXJuaW5nIGJhc2U2NERlY29kZSgpLgorCiAyMDIxLTA1LTE1ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIERlbGV0ZSBXZWJTUUwgY29kZSBmcm9t
IFdlYktpdDIKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTA2NiwyOCArMTA2NiwzNCBAQCB2b2lkIFdlYkNocm9tZUNsaWVu
dDo6ZXhpdEZ1bGxTY3JlZW5Gb3JFCiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojp3cmFwQ3J5cHRv
S2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRL
ZXkpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICAgICBTRUwgc2Vs
ZWN0b3IgPSBAc2VsZWN0b3Iod2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmlldzopOwogICAgIGlm
IChbW21fd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKSB7
CiAgICAgICAgIE5TRGF0YSAqa2V5RGF0YSA9IENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgc2Vs
ZWN0b3IpOworICAgICAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogICAgICAgICBtYXN0
ZXJLZXkuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihjb25zdF9jYXN0PHZvaWQqPihba2V5
RGF0YSBieXRlc10pKSwgW2tleURhdGEgbGVuZ3RoXSk7Ci0gICAgfSBlbHNlIGlmICghZ2V0RGVm
YXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQorICAgICAgICByZXR1cm4gd3JhcFNl
cmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCBrZXksIHdyYXBwZWRLZXkpOworICAgIH0KKyAg
ICAKKyAgICBhdXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAg
ICBpZiAoIW1hc3RlcktleSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHdy
YXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwga2V5LCB3cmFwcGVkS2V5KTsKKyAgICBy
ZXR1cm4gd3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoV1RGTW92ZSgqbWFzdGVyS2V5KSwga2V5LCB3
cmFwcGVkS2V5KTsKIH0KIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnVud3JhcENyeXB0b0tleShj
b25zdCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXksIFZlY3Rvcjx1aW50OF90PiYga2V5KSBj
b25zdAogewotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAgICAgU0VMIHNlbGVjdG9y
ID0gQHNlbGVjdG9yKHdlYkNyeXB0b01hc3RlcktleUZvcldlYlZpZXc6KTsKICAgICBpZiAoW1tt
X3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkgeworICAg
ICAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogICAgICAgICBOU0RhdGEgKmtleURhdGEg
PSBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIHNlbGVjdG9yKTsKICAgICAgICAgbWFzdGVyS2V5
LmFwcGVuZChzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDx2b2lkKj4oW2tleURhdGEg
Ynl0ZXNdKSksIFtrZXlEYXRhIGxlbmd0aF0pOwotICAgIH0gZWxzZSBpZiAoIWdldERlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gdW53cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIHdyYXBwZWRL
ZXksIGtleSk7CisgICAgfQogCi0gICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXko
bWFzdGVyS2V5LCB3cmFwcGVkS2V5LCBrZXkpOworICAgIGF1dG8gbWFzdGVyS2V5ID0gZGVmYXVs
dFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIGlmICghbWFzdGVyS2V5KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoV1RGTW92ZSgq
bWFzdGVyS2V5KSwgd3JhcHBlZEtleSwga2V5KTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQwOCwxMCArNDA4LDEwIEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNh
dmUoY28KICAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJM
Q29weSwgYWN0dWFsVVJMKTsKIAogICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAg
ICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNv
bnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICBhdXRv
IGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQsIEJhc2U2NERlY29kZU9wdGlvbnM6
OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250
ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxl
bmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29u
dGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGVjb2RlZERhdGEt
PmRhdGEoKSBsZW5ndGg6ZGVjb2RlZERhdGEtPnNpemUoKV0pOwogICAgICAgICAgICAgW2RhdGFD
b250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWlj
YWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07Cg==
</data>
<flag name="commit-queue"
          id="450064"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428995</attachid>
            <date>2021-05-18 16:37:50 -0700</date>
            <delta_ts>2021-05-18 17:24:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210518163749.patch</filename>
            <type>text/plain</type>
            <size>171147</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIHd0Zi90ZXh0
L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVybmFsKToKKyAgICAg
ICAgKFdURjo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRV
UkxEZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5oOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgor
ICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNv
ZGUpOgorICAgICAgICAoV1RGOjppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdURjo6Y2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNl
NjRFbmNvZGVkKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlZCk6CisgICAgICAgIChX
VEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpTdHJpbmdUeXBlQWRh
cHRlcik6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRp
b24+OjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNl
NjRTcGVjaWZpY2F0aW9uPjo6aXM4Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlw
ZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46OndyaXRlVG8gY29uc3QpOgorCiAyMDIxLTA1
LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXpl
IC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dURi93
dGYvdGV4dC9CYXNlNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAg
IENvcHlyaWdodCAoQykgMjAwMC0yMDAxIERhd2l0IEFsZW1heWVodSA8YWRhd2l0QGtkZS5vcmc+
CiAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9y
Zz4KLSAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5z
dGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMTMgKzI1
LDE2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbmNsdWRlIDxsaW1pdHMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNvbnN0IGNoYXIgbm9uQWxwaGFiZXQgPSAtMTsK
IAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RW5jTWFwWzY0XSA9IHsKK3N0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgZW5jb2RlTWFwU2l6ZSA9IDY0Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBkZWNvZGVNYXBTaXplID0gMTI4OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRFbmNNYXBb
ZW5jb2RlTWFwU2l6ZV0gPSB7CiAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0
NiwgMHg0NywgMHg0OCwKICAgICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAw
eDRGLCAweDUwLAogICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcs
IDB4NTgsCkBAIC00Miw3ICs0NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVuY01hcFs2
NF0gPSB7CiAgICAgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHgy
RgogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RGVjTWFwWzEyOF0gPSB7CitzdGF0aWMg
Y29uc3QgY2hhciBiYXNlNjREZWNNYXBbZGVjb2RlTWFwU2l6ZV0gPSB7CiAgICAgbm9uQWxwaGFi
ZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCkBAIC02MSw3ICs2NCw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyIGJhc2U2NERlY01hcFsxMjhdID0gewogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJl
dAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IHsKK3N0YXRp
YyBjb25zdCBjaGFyIGJhc2U2NFVSTEVuY01hcFtlbmNvZGVNYXBTaXplXSA9IHsKICAgICAweDQx
LCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAogICAgIDB4NDksIDB4
NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCiAgICAgMHg1MSwgMHg1Miwg
MHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKQEAgLTcyLDcgKzc1LDcgQEAgc3Rh
dGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IAogICAgIDB4MzQsIDB4MzUsIDB4
MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4MkQsIDB4NUYKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFy
IGJhc2U2NFVSTERlY01hcFsxMjhdID0geworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRGVj
TWFwW2RlY29kZU1hcFNpemVdID0gewogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9u
QWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsCiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LApAQCAtOTEsMjQzICs5NCwyMTggQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJM
RGVjTWFwWzEyOF0gPQogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0LCBub25BbHBo
YWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsKIAotc3RhdGlj
IGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3ksIGNvbnN0IGNoYXIgKCZlbmNvZGVNYXApWzY0XSkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVpbnQ4
X3QqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUq
IGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNs
ZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVzdGlu
YXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUo
aW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5ndGgpOwogCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSAib3V0TGVuZ3Ro
IiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkg
cHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0gICAgY29uc3QgdW5zaWduZWQg
bWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwotICAg
IGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRv
IGVuY29kZU1hcCA9IChtYXAgPT0gQmFzZTY0RW5jb2RlTWFwOjpVUkwpID8gYmFzZTY0VVJMRW5j
TWFwIDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9IDA7CiAgICAgdW5zaWdu
ZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0gICAgdW5zaWduZWQgb3V0
TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGluc2VydExGcyA9IChwb2xp
Y3kgPT0gQmFzZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnMgJiYgZGVzdGluYXRpb25MZW5ndGgg
PiBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOwogCi0gICAgLy8gRGVh
bCB3aXRoIHRoZSA3NiBjaGFyYWN0ZXIgcGVyIGxpbmUgbGltaXQgc3BlY2lmaWVkIGluIFJGQyAy
MDQ1LgotICAgIGJvb2wgaW5zZXJ0TEZzID0gKHBvbGljeSA9PSBCYXNlNjRJbnNlcnRMRnMgJiYg
b3V0TGVuZ3RoID4gNzYpOwotICAgIGlmIChpbnNlcnRMRnMpCi0gICAgICAgIG91dExlbmd0aCAr
PSAoKG91dExlbmd0aCAtIDEpIC8gNzYpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBvdXQu
Z3JvdyhvdXRMZW5ndGgpOwotCi0gICAgLy8gMy1ieXRlIHRvIDQtYnl0ZSBjb252ZXJzaW9uICsg
MC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgotICAgIGlmIChsZW4gPiAxKSB7Ci0g
ICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAgIGlmIChpbnB1dExlbmd0aCA+IDEp
IHsKKyAgICAgICAgd2hpbGUgKHNpZHggPCBpbnB1dExlbmd0aCAtIDIpIHsKICAgICAgICAgICAg
IGlmIChpbnNlcnRMRnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoY291bnQgJiYgIShjb3VudCAl
IDc2KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOworICAgICAgICAg
ICAgICAgIGlmIChjb3VudCAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVu
SW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHgrK10gPSAnXG4nOwogICAgICAgICAgICAgICAgIGNvdW50ICs9IDQ7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA+PiAy
KSAmIDA3N107Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lk
eCArIDFdID4+IDQpICYgMDE3KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3NyldOwotICAgICAg
ICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAyXSA+PiA2KSAmIDAw
MykgfCAoKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlk
eCsrXSA9IGVuY29kZU1hcFtkYXRhW3NpZHggKyAyXSAmIDA3N107CisKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXREYXRhQnVmZmVy
W3NpZHggICAgXSA+PiAyKSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZm
ZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPj4gNCkg
JiAwMTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3KV07CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0
RGF0YUJ1ZmZlcltzaWR4ICsgMl0gPj4gNikgJiAwMDMpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lk
eCArIDFdIDw8IDIpICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJb
ZGlkeCsrXSA9IGVuY29kZU1hcFsgIGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0gICAgICAgJiAw
NzddOwogICAgICAgICAgICAgc2lkeCArPSAzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KHNpZHggPCBsZW4pIHsKLSAgICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAh
KGNvdW50ICUgNzYpKQotICAgICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7Ci0KLSAgICAgICAg
b3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzddOwotICAgICAg
ICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2Rl
TWFwWygoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYg
MDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4ICsg
MV0gPDwgMikgJiAwNzddOworICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsKKyAgICAgICAg
aWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExp
bmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlcltkaWR4KytdID0gJ1xuJzsKKworICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlk
eCsrXSA9IGVuY29kZU1hcFsoaW5wdXREYXRhQnVmZmVyW3NpZHhdID4+IDIpICYgMDc3XTsKKyAg
ICAgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHgg
KyAxXSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA8PCA0KSAmIDA3Nyld
OworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBb
IChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA8PCA0KSAm
IDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29k
ZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzddOwogICAgIH0KIAot
ICAgIC8vIEFkZCBwYWRkaW5nCi0gICAgaWYgKHBvbGljeSA9PSBCYXNlNjRVUkxQb2xpY3kpCi0g
ICAgICAgIG91dC5yZXNpemUoZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdoaWxlIChkaWR4
IDwgb3V0LnNpemUoKSkgewotICAgICAgICAgICAgb3V0W2RpZHhdID0gJz0nOwotICAgICAgICAg
ICAgKytkaWR4OwotICAgICAgICB9CisgICAgQVNTRVJUKHBvbGljeSAhPSBCYXNlNjRFbmNvZGVQ
b2xpY3k6OlVSTCB8fCBkaWR4ID09IGRlc3RpbmF0aW9uTGVuZ3RoKTsKKworICAgIHdoaWxlIChk
aWR4IDwgZGVzdGluYXRpb25MZW5ndGgpIHsKKyAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHhdID0gJz0nOworICAgICAgICArK2RpZHg7CiAgICAgfQogfQogCi1TdHJpbmcgYmFzZTY0
RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSkKK3N0YXRpYyBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBWZWN0b3I8
Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5j
TWFwKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwor
ICAgIGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShp
bnB1dExlbmd0aCwgcG9saWN5KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGRlc3RpbmF0aW9uVmVjdG9yKGRlc3Rp
bmF0aW9uTGVuZ3RoKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChpbnB1dERhdGFCdWZmZXIs
IGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvblZlY3Rvci5kYXRhKCksIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uVmVjdG9yOwogfQogCi12b2lk
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFy
PiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQorVmVjdG9yPGNoYXI+IGJhc2U2NEVu
Y29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJh
c2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRh
KSwgbGVuLCBvdXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5j
b2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciks
IGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUo
Y29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBiYXNlNjRFbmNvZGUoY29u
c3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBCYXNlNjRVUkxQb2xpY3ksIGJh
c2U2NFVSTEVuY01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQu
c2l6ZSgpKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm47Cisg
ICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0
aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0
IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQpCit2b2lkIGJhc2U2
NEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3Ro
LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0
aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
ZGF0YSksIGxlbiwgb3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7CisgICAg
aWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGJhc2U2NEVuY29k
ZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZmZXIpLCBp
bnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9s
aWN5LCBtYXApOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBib29s
IGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyJiBvdXQsIHVuc2lnbmVkIG9wdGlvbnMsIGNv
bnN0IGNoYXIgKCZkZWNvZGVNYXApWzEyOF0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBp
bnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICBvdXQuY2xl
YXIoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFp
bnB1dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIFZlY3Rvcjx1aW50OF90PiB7IH07CiAKLSAgICBv
dXQuZ3JvdyhsZW5ndGgpOworICAgIGF1dG8gZGVjb2RlTWFwID0gKG1hcCA9PSBCYXNlNjREZWNv
ZGVNYXA6OlVSTCkgPyBiYXNlNjRVUkxEZWNNYXAgOiBiYXNlNjREZWNNYXA7CisKKyAgICBWZWN0
b3I8dWludDhfdD4gZGVzdGluYXRpb24oaW5wdXRMZW5ndGgpOwogCiAgICAgdW5zaWduZWQgZXF1
YWxzU2lnbkNvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBvdXRMZW5ndGggPSAwOwotICAgIGJvb2wg
aGFkRXJyb3IgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbmd0
aDsgKytpZHgpIHsKLSAgICAgICAgdW5zaWduZWQgY2ggPSBkYXRhW2lkeF07CisgICAgdW5zaWdu
ZWQgZGVzdGluYXRpb25MZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4
IDwgaW5wdXRMZW5ndGg7ICsraWR4KSB7CisgICAgICAgIHVuc2lnbmVkIGNoID0gaW5wdXREYXRh
QnVmZmVyW2lkeF07CiAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKICAgICAgICAgICAgICsrZXF1
YWxzU2lnbkNvdW50OwogICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIG5ldmVyIGJlIG1vcmUg
dGhhbiAyIHBhZGRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChvcHRpb25zICYgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKLSAgICAgICAgICAg
ICAgICBoYWRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAob3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRp
bmcpICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y2hhciBkZWNvZGVkQ2hhcmFjdGVyID0gY2ggPCBXVEZfQVJSQVlfTEVOR1RIKGRlY29kZU1hcCkg
PyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFiZXQ7CisgICAgICAgICAgICBjaGFyIGRlY29kZWRD
aGFyYWN0ZXIgPSBjaCA8IGRlY29kZU1hcFNpemUgPyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFi
ZXQ7CiAgICAgICAgICAgICBpZiAoZGVjb2RlZENoYXJhY3RlciAhPSBub25BbHBoYWJldCkgewot
ICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaGFkRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3V0W291dExlbmd0aCsrXSA9IGRlY29kZWRDaGFy
YWN0ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucyAmIEJhc2U2NElnbm9yZVNw
YWNlc0FuZE5ld0xpbmVzKQotICAgICAgICAgICAgICAgIHx8ICghaXNMYXRpbjEoY2gpIHx8ICFp
c0FTQ0lJU3BhY2UoY2gpIHx8ICgob3B0aW9ucyAmIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikg
JiYgY2ggPT0gJ1x2JykpKSB7Ci0gICAgICAgICAgICAgICAgaGFkRXJyb3IgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAg
ICAgZGVzdGluYXRpb25bZGVzdGluYXRpb25MZW5ndGgrK10gPSBkZWNvZGVkQ2hhcmFjdGVyOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRp
b25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykgfHwgKCFpc0xhdGluMShjaCkgfHwgIWlzQVND
SUlTcGFjZShjaCkgfHwgKG9wdGlvbnMuY29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlz
Y2FyZFZlcnRpY2FsVGFiKSAmJiBjaCA9PSAnXHYnKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Ly8gTWFrZSBzdXJlIHdlIHNocmluayBiYWNrIHRoZSBWZWN0b3IgYmVmb3JlIHJldHVybmluZy4g
b3V0TGVuZ3RoIG1heSBiZSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQKKyAgICAvLyBNYWtlIHN1cmUg
d2Ugc2hyaW5rIGJhY2sgdGhlIFZlY3RvciBiZWZvcmUgcmV0dXJuaW5nLiBkZXN0aW5hdGlvbkxl
bmd0aCBtYXkgYmUgc2hvcnRlciB0aGFuIGV4cGVjdGVkCiAgICAgLy8gaW4gY2FzZSBvZiBlcnJv
ciBvciBpbiBjYXNlIG9mIGlnbm9yZWQgc3BhY2VzLgotICAgIGlmIChvdXRMZW5ndGggPCBvdXQu
c2l6ZSgpKQotICAgICAgICBvdXQuc2hyaW5rKG91dExlbmd0aCk7Ci0KLSAgICBpZiAoaGFkRXJy
b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGggPCBk
ZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNocmluayhkZXN0aW5hdGlv
bkxlbmd0aCk7CiAKLSAgICBpZiAoIW91dExlbmd0aCkKLSAgICAgICAgcmV0dXJuICFlcXVhbHNT
aWduQ291bnQ7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkgeworICAgICAgICBpZiAoIWVx
dWFsc1NpZ25Db3VudCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IHJldHVybiBWZWN0b3I8dWludDhfdD4geyB9OworICAgIH0KIAogICAgIC8vIFRoZSBzaG91bGQg
YmUgbm8gcGFkZGluZyBpZiBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiA0LgotICAgIC8vIFdlIHVz
ZSAob3V0TGVuZ3RoICsgZXF1YWxzU2lnbkNvdW50KSBpbnN0ZWFkIG9mIGxlbmd0aCBiZWNhdXNl
IHdlIGRvbid0IHdhbnQgdG8gYWNjb3VudCBmb3IgaWdub3JlZCBjaGFyYWN0ZXJzIChpLmUuIHNw
YWNlcykuCi0gICAgaWYgKG9wdGlvbnMgJiBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgJiYgZXF1YWxz
U2lnbkNvdW50ICYmIChvdXRMZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIC8vIFdlIHVzZSAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNT
aWduQ291bnQpIGluc3RlYWQgb2YgbGVuZ3RoIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhY2Nv
dW50IGZvciBpZ25vcmVkIGNoYXJhY3RlcnMgKGkuZS4gc3BhY2VzKS4KKyAgICBpZiAob3B0aW9u
cy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpICYmIGVxdWFs
c1NpZ25Db3VudCAmJiAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFZhbGlkIGRhdGEgaXMgKG4g
KiA0ICsgWzAsMiwzXSkgY2hhcmFjdGVycyBsb25nLgotICAgIGlmICgob3V0TGVuZ3RoICUgNCkg
PT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoZGVzdGluYXRpb25MZW5ndGgg
JSA0KSA9PSAxKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIC8vIDQt
Ynl0ZSB0byAzLWJ5dGUgY29udmVyc2lvbgotICAgIG91dExlbmd0aCAtPSAob3V0TGVuZ3RoICsg
MykgLyA0OwotICAgIGlmICghb3V0TGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVzdGluYXRpb25MZW5ndGggLT0gKGRlc3RpbmF0aW9uTGVuZ3RoICsgMykgLyA0OworICAgIGlm
ICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICB1bnNpZ25lZCBzaWR4ID0gMDsKICAgICB1bnNpZ25lZCBkaWR4ID0gMDsKLSAgICBpZiAob3V0
TGVuZ3RoID4gMSkgewotICAgICAgICB3aGlsZSAoZGlkeCA8IG91dExlbmd0aCAtIDIpIHsKLSAg
ICAgICAgICAgIG91dFtkaWR4XSA9ICgoKG91dFtzaWR4XSA8PCAyKSAmIDI1NSkgfCAoKG91dFtz
aWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsKLSAgICAgICAgICAgIG91dFtkaWR4ICsgMV0gPSAoKChv
dXRbc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgob3V0W3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OwotICAgICAgICAgICAgb3V0W2RpZHggKyAyXSA9ICgoKG91dFtzaWR4ICsgMl0gPDwgNikgJiAy
NTUpIHwgKG91dFtzaWR4ICsgM10gJiAwNzcpKTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGgg
PiAxKSB7CisgICAgICAgIHdoaWxlIChkaWR4IDwgZGVzdGluYXRpb25MZW5ndGggLSAyKSB7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbltkaWR4ICAgIF0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICAg
IF0gPDwgMikgJiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2RpZHggKyAxXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHgg
KyAxXSA8PCA0KSAmIDI1NSkgfCAoKGRlc3RpbmF0aW9uW3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OworICAgICAgICAgICAgZGVzdGluYXRpb25bZGlkeCArIDJdID0gKCgoZGVzdGluYXRpb25bc2lk
eCArIDJdIDw8IDYpICYgMjU1KSB8ICAoZGVzdGluYXRpb25bc2lkeCArIDNdICAgICAgICYgMDc3
KSk7CiAgICAgICAgICAgICBzaWR4ICs9IDQ7CiAgICAgICAgICAgICBkaWR4ICs9IDM7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2Rp
ZHhdID0gKCgob3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHggKyAxXSA+PiA0KSAm
IDAwMykpOwotCi0gICAgaWYgKCsrZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2RpZHhd
ID0gKCgob3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikg
JiAwMTcpKTsKKyAgICBpZiAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0
aW5hdGlvbltkaWR4XSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggICAgXSA8PCAyKSAmIDI1NSkgfCAo
KGRlc3RpbmF0aW9uW3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOwogCi0gICAgaWYgKG91dExlbmd0
aCA8IG91dC5zaXplKCkpCi0gICAgICAgIG91dC5zaHJpbmsob3V0TGVuZ3RoKTsKKyAgICBpZiAo
KytkaWR4IDwgZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0aW9uW2RpZHhdID0g
KCgoZGVzdGluYXRpb25bc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lk
eCArIDJdID4+IDIpICYgMDE3KSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGVzdGlu
YXRpb25MZW5ndGggPCBkZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNo
cmluayhkZXN0aW5hdGlvbkxlbmd0aCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwogfQogCi1i
b29sIGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZl
Y3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBs
ZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBvcHRpb25zLCBiYXNl
NjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlm
ICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2Rl
SW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3Ro
LCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29kZShTdHJpbmdWaWV3IGluLCBT
aWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQor
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5n
dGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChp
bi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwg
b3V0LCBvcHRpb25zLCBiYXNlNjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNl
NjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNsZWFy
KCk7Ci0KLSAgICAvLyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdl
LCBqdXN0IHJldHVybiBub3RoaW5nLgotICAgIGlmIChpbi5zaXplKCkgPiBVSU5UX01BWCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihpbi5kYXRhKCkpLCBpbi5zaXplKCksIG91dCwg
b3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKKyAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7CiB9
CiAKLWJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJh
c2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuLCBvdXQsIG9wdGlvbnMsIGJh
c2U2NERlY01hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1i
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbi5s
ZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0LCBCYXNl
NjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2
NFVSTERlY01hcCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAg
aWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0g
ICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwg
YmFzZTY0VVJMRGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hh
cmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXAp
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
KyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxl
bmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0KQogewotICAgIG91dC5jbGVhcigpOwotCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICBpZiAoaW4uc2l6ZSgpID4gVUlOVF9NQVgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oaW4uZGF0YSgpKSwgaW4uc2l6ZSgpLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJh
c2U2NFVSTERlY01hcCk7CisgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJM
KTsKIH0KIAotYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQogewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRV
UkxEZWNNYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDI1ICsyNywzNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdURiB7CiAKLWVudW0gQmFzZTY0RW5jb2RlUG9saWN5IHsKLSAgICBCYXNl
NjREb05vdEluc2VydExGcywKLSAgICBCYXNlNjRJbnNlcnRMRnMsCi0gICAgQmFzZTY0VVJMUG9s
aWN5IC8vIE5vIHBhZGRpbmcsIG5vIExGcy4KK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlUG9saWN5
IHsKKyAgICBEb05vdEluc2VydExGcywKKyAgICBJbnNlcnRMRnMsCisgICAgVVJMIC8vIE5vIHBh
ZGRpbmcsIG5vIExGcy4KIH07CiAKLWVudW0gQmFzZTY0RGVjb2RlT3B0aW9ucyB7Ci0gICAgQmFz
ZTY0RGVmYXVsdCA9IDAsCi0gICAgQmFzZTY0VmFsaWRhdGVQYWRkaW5nID0gMSA8PCAwLAotICAg
IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzID0gMSA8PCAxLAotICAgIEJhc2U2NERpc2Nh
cmRWZXJ0aWNhbFRhYiA9IDEgPDwgMiwKK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlTWFwIHsgRGVm
YXVsdCwgVVJMIH07CisKK2VudW0gY2xhc3MgQmFzZTY0RGVjb2RlT3B0aW9ucyA6IHVpbnQ4X3Qg
eworICAgIFZhbGlkYXRlUGFkZGluZyAgICAgICAgID0gMSA8PCAwLAorICAgIElnbm9yZVNwYWNl
c0FuZE5ld0xpbmVzID0gMSA8PCAxLAorICAgIERpc2NhcmRWZXJ0aWNhbFRhYiAgICAgID0gMSA8
PCAyLAogfTsKIAorZW51bSBjbGFzcyBCYXNlNjREZWNvZGVNYXAgeyBEZWZhdWx0LCBVUkwgfTsK
Kworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5J
bnNlcnRpbmdMRnMgPSA3NjsKKworLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2lj
YWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90aGluZy4KKy8vIFJhdGhlciB0aGFuIGJlaW5nIHBl
cmZlY3RseSBwcmVjaXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZhdGl2ZS4KK3N0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwor
CiBjbGFzcyBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgewogcHVibGljOgogICAg
IFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8Y2hhcj4mIHZlY3RvcikK
QEAgLTE0NCw5MCArMTU0LDE2MCBAQCBwcml2YXRlOgogICAgIH0gbV92ZWN0b3I7CiB9OwogCi1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExG
cyk7Ci12b2lkIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNl
cnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLVdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29k
ZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBD
U3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOworV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVu
c2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwg
VUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5
OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwg
dW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29k
ZU1hcDo6RGVmYXVsdCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JV
bnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOworVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9S
VF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0
cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2Rl
TWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8
QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29k
ZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQp
OwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiwg
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRpb25zID0gQmFz
ZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoU3RyaW5n
VmlldywgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRpb25z
ID0gQmFzZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUo
Y29uc3QgVmVjdG9yPGNoYXI+JiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1
bnNpZ25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9v
bCBiYXNlNjREZWNvZGUoY29uc3QgY2hhciosIHVuc2lnbmVkLCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIsIHVuc2lnbmVkIG9wdGlvbnMgPSBCYXNlNjREZWZhdWx0KTsKK2lubGlu
ZSBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVN
YXAgbWFwKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5z
aXplKCksIHBvbGljeSwgbWFwKTsKK30KIAotaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlKENvbnN0
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5j
b2RlKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNl
NjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIGluLnNpemUo
KSwgb3V0LCBwb2xpY3kpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW5wdXQuZGF0YSgpLCBp
bnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgdm9pZCBiYXNlNjRFbmNv
ZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xp
Y3kgcG9saWN5KQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQWxsIHRo
ZSBzYW1lIGZ1bmN0aW9ucyBtb2RpZmllZCBmb3IgYmFzZTY0dXJsLCBhcyBkZWZpbmVkIGluIFJG
QyA0NjQ4LgorLy8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBh
bmQgJy8nIHJlc3BlY3RpdmVseS4KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisK
K1ZlY3RvcjxjaGFyPiBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkKTsKK1Zl
Y3RvcjxjaGFyPiBiYXNlNjRVUkxFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3Rv
ckFkYXB0ZXIpOworVmVjdG9yPGNoYXI+IGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5nJik7
CisKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVS
TERlY29kZShjb25zdCBTdHJpbmcmKTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3KTsKK1dURl9FWFBPUlRfUFJJ
VkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0
b3I8Y2hhcj4mKTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NFVSTERlY29kZShjb25zdCBjaGFyKiwgdW5zaWduZWQpOworCitpbmxpbmUgVmVjdG9y
PGNoYXI+IGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgbGVuZ3Ro
KQogewotICAgIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0aCgpLCBvdXQsIHBvbGlj
eSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQ
b2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJh
c2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbiwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5j
b2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGlucHV0KQogewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIHBvbGljeSk7CisgICAg
cmV0dXJuIGJhc2U2NEVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5j
b2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFN0cmlu
ZyBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCitpbmxpbmUgVmVjdG9yPGNoYXI+IGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5nJiBp
bnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCks
IHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0Lmxl
bmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQWxsIHRoZSBzYW1lIGZ1
bmN0aW9ucyBtb2RpZmllZCBmb3IgYmFzZTY0dXJsLCBhcyBkZWZpbmVkIGluIFJGQyA0NjQ4Lgot
Ly8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBhbmQgJy8nIHJl
c3BlY3RpdmVseS4KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNCYXNlNjRPckJhc2U2
NFVSTENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBo
YW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLycgfHwgYyA9PSAnLScgfHwgYyA9PSAn
Xyc7Cit9CisKK2lubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZSh1bnNp
Z25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3sKKyAgICBpZiAo
IWlucHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpbnB1dExlbmd0aCA+
IG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRCdWZmZXJTaXplKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGF1dG8gYmFzZVBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAgICAgcmV0dXJu
ICgoaW5wdXRMZW5ndGggKyAyKSAvIDMpICogNDsKKyAgICB9OwogCi1XVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBWZWN0b3I8Y2hh
cj4mKTsKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyLCBWZWN0b3I8Y2hhcj4mKTsKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENT
dHJpbmcmLCBWZWN0b3I8Y2hhcj4mKTsKKyAgICBhdXRvIGJhc2VVbnBhZGRlZEVuY29kZWRTaXpl
ID0gWyZdIHsKKyAgICAgICAgcmV0dXJuICgoaW5wdXRMZW5ndGggKiA0KSArIDIpIC8gMzsKKyAg
ICB9OwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCB2
b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5z
aWduZWRDaGFyVmVjdG9yQWRhcHRlcik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENT
dHJpbmcmKTsKKyAgICBzd2l0Y2ggKHBvbGljeSkgeworICAgIGNhc2UgQmFzZTY0RW5jb2RlUG9s
aWN5OjpEb05vdEluc2VydExGczoKKyAgICAgICAgcmV0dXJuIGJhc2VQYWRkZWRFbmNvZGVkU2l6
ZSgpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3Ry
aW5nJiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3LCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFZlY3RvcjxjaGFyPiYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcik7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciosIHVu
c2lnbmVkLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIpOworICAgIGNhc2UgQmFz
ZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnM6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBiYXNl
UGFkZGVkRW5jb2RlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0g
MSkgLyBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOworICAgIH0KKwor
ICAgIGNhc2UgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkw6CisgICAgICAgIHJldHVybiBiYXNlVW5w
YWRkZWRFbmNvZGVkU2l6ZSgpOworICAgIH0KK30KIAotaW5saW5lIHZvaWQgYmFzZTY0VVJMRW5j
b2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hh
cj4mIG91dCkKK3N0cnVjdCBCYXNlNjRTcGVjaWZpY2F0aW9uIHsKKyAgICBjb25zdCB2b2lkKiBp
bnB1dERhdGE7CisgICAgdW5zaWduZWQgaW5wdXRMZW5ndGg7CisgICAgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeTsKKyAgICBCYXNlNjRFbmNvZGVNYXAgbWFwOworfTsKKworaW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2ln
bmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2Rl
UG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwIG1hcCA9IEJhc2U2NEVuY29k
ZU1hcDo6RGVmYXVsdCkKIHsKLSAgICBiYXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXpl
KCksIG91dCk7CisgICAgcmV0dXJuIHsgaW5wdXREYXRhLCBpbnB1dExlbmd0aCwgcG9saWN5LCBt
YXAgfTsKIH0KIAotaW5saW5lIHZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGlu
LCBWZWN0b3I8Y2hhcj4mIG91dCkKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVu
Y29kZWQoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgaW5wdXQsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
KQogewotICAgIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0aCgpLCBvdXQpOwor
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xp
Y3kpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5z
aWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbikKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJh
c2U2NEVuY29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzKQogewotICAgIHJldHVybiBi
YXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCkpOworICAgIHJldHVybiBiYXNlNjRF
bmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSk7CiB9CiAKLWlubGlu
ZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGluKQoraW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVu
c2lnbmVkIGlucHV0TGVuZ3RoKQogewotICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGUoaW4uZGF0
YSgpLCBpbi5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXREYXRhLCBp
bnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBi
b29sIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQoraW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChDb25zdFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlciBpbnB1dCkKIHsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVt
ZXJpYyhjKSB8fCBjID09ICcrJyB8fCBjID09ICcvJyB8fCBjID09ICctJyB8fCBjID09ICdfJzsK
KyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFz
ZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKK30KKworaW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1
dCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0
aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQog
Cit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+
IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBCYXNlNjRTcGVjaWZpY2F0
aW9uJiBiYXNlNjQpCisgICAgICAgIDogbV9iYXNlNjQgeyBiYXNlNjQgfQorICAgICAgICAsIG1f
ZW5jb2RlZExlbmd0aCB7IGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1dExl
bmd0aCwgYmFzZTY0LnBvbGljeSkgfQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX2VuY29kZWRMZW5ndGg7IH0KKyAgICBib29sIGlzOEJpdCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKiBkZXN0aW5hdGlvbikgY29uc3QKKyAg
ICB7CisgICAgICAgIGJhc2U2NEVuY29kZShtX2Jhc2U2NC5pbnB1dERhdGEsIG1fYmFzZTY0Lmlu
cHV0TGVuZ3RoLCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ks
IG1fYmFzZTY0Lm1hcCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2U2NFNwZWNpZmljYXRp
b24gbV9iYXNlNjQ7CisgICAgdW5zaWduZWQgbV9lbmNvZGVkTGVuZ3RoOworfTsKKwogfSAvLyBu
YW1lc3BhY2UgV1RGCiAKK3VzaW5nIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczsKIHVzaW5nIFdU
Rjo6QmFzZTY0RW5jb2RlUG9saWN5OwotdXNpbmcgV1RGOjpCYXNlNjREb05vdEluc2VydExGczsK
LXVzaW5nIFdURjo6QmFzZTY0SW5zZXJ0TEZzOwotdXNpbmcgV1RGOjpCYXNlNjRWYWxpZGF0ZVBh
ZGRpbmc7Ci11c2luZyBXVEY6OkJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzOwotdXNpbmcg
V1RGOjpCYXNlNjREaXNjYXJkVmVydGljYWxUYWI7Ci11c2luZyBXVEY6OmJhc2U2NEVuY29kZTsK
K3VzaW5nIFdURjo6QmFzZTY0U3BlY2lmaWNhdGlvbjsKIHVzaW5nIFdURjo6YmFzZTY0RGVjb2Rl
OwordXNpbmcgV1RGOjpiYXNlNjRFbmNvZGU7Cit1c2luZyBXVEY6OmJhc2U2NEVuY29kZWQ7Cit1
c2luZyBXVEY6OmJhc2U2NFVSTERlY29kZTsKIHVzaW5nIFdURjo6YmFzZTY0VVJMRGVjb2RlOwor
dXNpbmcgV1RGOjpiYXNlNjRVUkxFbmNvZGU7Cit1c2luZyBXVEY6OmJhc2U2NFVSTEVuY29kZWQ7
CiB1c2luZyBXVEY6OmlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzc2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNTUgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdG8g
bWF0Y2ggbW9yZSBtb2Rlcm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9l
bmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
dHJhY3RLZXlJRHNLZXlpZHMpOgorICAgICAgICAoV2ViQ29yZTo6c2FuaXRpemVLZXlpZHMpOgor
ICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNlc3Npb25D
bGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0
ZSk6CisgICAgICAgICogTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6anNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZW1JbkNvbnRleHQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JDb29yZGluYXRvckludGVybmFsOjpwcm9kdWNlQ2xp
ZW50RGF0YUpzb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVu
dGlhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsOjpQdWJsaWNL
ZXlDcmVkZW50aWFsKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlU2VjV2ViU29ja2V0S2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2Nr
ZXRBY2NlcHQpOgorICAgICAgICAqIGNyeXB0by9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oOgor
ICAgICAgICAqIGNyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW50cyBjb25zdCk6Cisg
ICAgICAgICogY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAg
ICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlBRVM6OmltcG9ydEp3ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlBRVM6OmV4
cG9ydEp3ayBjb25zdCk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OmltcG9ydEp3ayk6CisgICAgICAgICogY3J5
cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlI
TUFDOjppbXBvcnRKd2spOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5SE1BQzo6ZXhwb3J0
SndrIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjppbXBvcnRKd2spOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvS2V5UlNBOjpleHBvcnRKd2sgY29uc3QpOgorICAgICAgICAqIGNyeXB0by9tYWMv
Q3J5cHRvS2V5RUNNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OnBsYXRm
b3JtQWRkRmllbGRFbGVtZW50cyBjb25zdCk6CisgICAgICAgICogY3J5cHRvL21hYy9TZXJpYWxp
emVkQ3J5cHRvS2V5V3JhcE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFuZFN0b3Jl
TWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRNYXN0ZXJLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8v
b3BlbnNzbC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE9wZW5TU0wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRE
ZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0Zp
bGVSZWFkZXJMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcjo6
Y29udmVydFRvRGF0YVVSTCk6CisgICAgICAgICogaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBvcnQ6OmNyZWF0ZURpZ2VzdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAg
ICogaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGE6OmRlY29kZURhdGFUb0NvbnRlbnQp
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNIQTI1Nkhhc2gpOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcjo6YnVpbGRXZWJTb2NrZXRNZXNzYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlm
aWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNl
cHRXaXRoUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmludGVyY2VwdFdpdGhSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUGFnZUFnZW50OjphcmNoaXZlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkpOgorICAgICAgICAqIGxvYWRlci9Mb2FkZXJTdHJhdGVneS5oOgorICAgICAg
ICAqIGxvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6RXBoZW1lcmFsU291cmNlTm9uY2U6OmlzVmFsaWQg
Y29uc3QpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0KToK
KyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TUhUTUxBcmNoaXZlOjpnZW5lcmF0ZU1IVE1MRGF0YSk6CisgICAgICAgICog
bG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TUhUTUxQYXJzZXI6OnBhcnNlTmV4dFBhcnQpOgorICAgICAgICAqIGxvYWRlci9jb2NvYS9Qcml2
YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVVubGlua2FibGVUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQW5k
VXBkYXRlU291cmNlU2VjcmV0VG9rZW4pOgorICAgICAgICAqIHBhZ2UvQmFzZTY0VXRpbGl0aWVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2U2NFV0aWxpdGllczo6YnRvYSk6CisgICAgICAg
IChXZWJDb3JlOjpCYXNlNjRVdGlsaXRpZXM6OmF0b2IpOgorICAgICAgICAqIHBhZ2UvUGFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdl
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAgICAgICAg
KFdlYkNvcmU6OmV4dHJhY3RLZXlpZHNGcm9tQ2VuY0luaXREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OmV4dHJhY3RLZXlJZEZyb21XZWJNSW5pdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0RN
SW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdFNpbmZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZG
T2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQzo6cmVxdWVzdExpY2Vuc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2Jq
Qzo6ZGlkUHJvdmlkZVJlcXVlc3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRhdGFVUkwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVVuaXF1ZUZvbnROYW1lKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNh
aXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVVuaXF1ZUZvbnROYW1lKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bG9hZEJs
b2JSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJjZUhhbmRs
ZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRl
bnRpYWxCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxCYXNlOjpzZXJpYWxp
emF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9EYXRhVVJMRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVVJMRGVjb2Rlcjo6
ZGVjb2RlQmFzZTY0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVF
c2NhcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVTeW5jaHJv
bm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25v
dXNseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6aGFuZGxlRGF0YVVSTCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjphcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3Vw
TmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SG9zdFRMU0NlcnRpZmljYXRl
U2V0Ojpjb21wdXRlQ2VydGlmaWNhdGVIYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0Rl
Y29kZUVzY2FwZVNlcXVlbmNlcy5oOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzQXNEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9y
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0
cmluZyk6CisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1dTY3JpcHRTdG9yYWdlOjpzaGEySGFzaCBjb25zdCk6
CisKIDIwMjEtMDUtMTggIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0dQVVBdIFJlbW90ZUF1ZGlvU2Vzc2lvbiBjYWxscyBpbnRvIEFWQXVkaW9TZXNzaW9uIHdo
ZW4gR1BVUCBpcyBlbmFibGVkLCBjYXVzaW5nIGhhbmdzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVk
bWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDE1ICs4MCwx
NCBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+CiAgICAgICAgIGlm
ICgha2V5SUQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBWZWN0b3I8Y2hhcj4g
a2V5SUREYXRhOwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7IGtl
eUlERGF0YSB9KSkKKyAgICAgICAgYXV0byBrZXlJRERhdGEgPSBiYXNlNjRVUkxEZWNvZGUoa2V5
SUQpOworICAgICAgICBpZiAoIWtleUlERGF0YSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIGlmIChrZXlJRERhdGEuc2l6ZSgpIDwga0tleUlkc01pbktleUlkU2l6ZUluQnl0ZXMg
fHwga2V5SUREYXRhLnNpemUoKSA+IGtLZXlJZHNNYXhLZXlJZFNpemVJbkJ5dGVzKQorICAgICAg
ICBpZiAoa2V5SUREYXRhLT5zaXplKCkgPCBrS2V5SWRzTWluS2V5SWRTaXplSW5CeXRlcyB8fCBr
ZXlJRERhdGEtPnNpemUoKSA+IGtLZXlJZHNNYXhLZXlJZFNpemVJbkJ5dGVzKQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBSZWY8U2hhcmVkQnVmZmVyPiBrZXlJ
REJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5SUREYXRhKSk7Ci0gICAg
ICAgIGtleUlEcy5hcHBlbmQoV1RGTW92ZShrZXlJREJ1ZmZlcikpOworICAgICAgICBrZXlJRHMu
YXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKmtleUlERGF0YSkpKTsKICAgICB9
CiAKICAgICByZXR1cm4ga2V5SURzOwpAQCAtMTA1LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZUtleWkKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgYXV0byBraWRzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7
CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBrZXlJREJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBr
aWRzQXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNvZGUoYnVmZmVyLT5kYXRhKCks
IGJ1ZmZlci0+c2l6ZSgpKSk7CisgICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhtYWtlU3Ry
aW5nKGJhc2U2NFVSTEVuY29kZWQoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSkpOwog
ICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtpZHNBcnJheSkpOwogCiAgICAg
Q1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vz
c2lvbkNsZWFyS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Vu
Y3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2Fj
eS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTMg
KzE2OSwxMyBAQCBib29sIENETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKFVpbnQ4QXJyCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBrZXlEYXRhOwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUocmF3S2V5
RGF0YSwga2V5RGF0YSkgfHwga2V5RGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8g
a2V5RGF0YSA9IGJhc2U2NERlY29kZShyYXdLZXlEYXRhKTsKKyAgICAgICAgICAgIGlmICgha2V5
RGF0YSB8fCBrZXlEYXRhLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBMT0coTWVkaWEs
ICJDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZSglcCkgLSBmYWlsZWQ6IHVuYWJsZSB0byBiYXNl
NjQgZGVjb2RlIGtleSIsIHRoaXMpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBtX2NhY2hlZEtleXMuc2V0KGtleUlkLCBXVEZNb3ZlKGtl
eURhdGEpKTsKKyAgICAgICAgICAgIG1fY2FjaGVkS2V5cy5zZXQoa2V5SWQsIFdURk1vdmUoKmtl
eURhdGEpKTsKICAgICAgICAgICAgIGZvdW5kVmFsaWRLZXkgPSB0cnVlOwogICAgICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMv
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjQzLDE0ICsyNDMsMTIgQEAgdm9pZCBRdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudDo6cG9zdEV2ZQogCiBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5D
b250ZXh0KE5TRGF0YSAqZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgSlNDb250ZXh0ICpj
b250ZXh0KQogewotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29k
ZShbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0sIGJhc2U2NERhdGEpOwotCisgICAgLy8gRklY
TUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IFN0
cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFtaW1lVHlwZS5p
c0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9ICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0
LCIgKyBiYXNlNjREYXRhOworICAgICAgICBkYXRhNjQgPSBtYWtlU3RyaW5nKCJkYXRhOiIsIG1p
bWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVu
Z3RoXSkpOwogICAgIGVsc2UKLSAgICAgICAgZGF0YTY0ID0gImRhdGE6dGV4dC9wbGFpbjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4
dC9wbGFpbjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0
aF0pKTsKIAogICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6KGlkKWRhdGE2NC5j
cmVhdGVDRlN0cmluZygpLmdldCgpIGluQ29udGV4dDpjb250ZXh0XTsKIH0KQEAgLTM0Miw5ICsz
NDAsNyBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlCiAgICAgICAg
IGlkIHZhbHVlID0gaXRlbS52YWx1ZTsKICAgICAgICAgTlNTdHJpbmcgKm1pbWVUeXBlID0gW1tp
dGVtIGV4dHJhQXR0cmlidXRlc10gb2JqZWN0Rm9yS2V5OkAiTUlNRXR5cGUiXTsKICAgICAgICAg
aWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXSAmJiBtaW1lVHlwZSkgewot
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgICAgICAgICBiYXNlNjRF
bmNvZGUoW3ZhbHVlIGJ5dGVzXSwgW3ZhbHVlIGxlbmd0aF0sIGJhc2U2NERhdGEpOwotICAgICAg
ICAgICAgU3RyaW5nIGRhdGE2NCA9ICJkYXRhOiIgKyBTdHJpbmcobWltZVR5cGUpICsgIjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CisgICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmco
ImRhdGE6IiwgU3RyaW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbdmFs
dWUgYnl0ZXNdLCBbdmFsdWUgbGVuZ3RoXSkpOwogICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0
T2JqZWN0OihfX2JyaWRnZSBOU1N0cmluZyAqKWRhdGE2NC5jcmVhdGVDRlN0cmluZygpLmdldCgp
IGZvcktleTpAInZhbHVlIl07CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgW2RpY3Rpb25h
cnkgc2V0T2JqZWN0OnZhbHVlIGZvcktleTpAInZhbHVlIl07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRp
bmF0b3IuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgc3RhdGljIFJlZjxBcnJheUJ1ZmZlcj4gcHJvZHVjZUNsaWVudERhdAogICAg
ICAgICBvYmplY3QtPnNldFN0cmluZygidHlwZSJfcywgIndlYmF1dGhuLmdldCJfcyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICBvYmplY3QtPnNldFN0cmluZygiY2hhbGxlbmdlIl9zLCBX
VEY6OmJhc2U2NFVSTEVuY29kZShjaGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVuZ2UubGVuZ3RoKCkp
KTsKKyAgICBvYmplY3QtPnNldFN0cmluZygiY2hhbGxlbmdlIl9zLCBtYWtlU3RyaW5nKGJhc2U2
NFVSTEVuY29kZWQoY2hhbGxlbmdlLmRhdGEoKSwgY2hhbGxlbmdlLmxlbmd0aCgpKSkpOwogICAg
IG9iamVjdC0+c2V0U3RyaW5nKCJvcmlnaW4iX3MsIG9yaWdpbi50b1Jhd1N0cmluZygpKTsKIAog
ICAgIGF1dG8gdXRmOEpTT05TdHJpbmcgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJs
aWNLZXlDcmVkZW50aWFsLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNyArNTQsNyBAQCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIFB1
CiB9CiAKIFB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwoUmVmPEF1dGhl
bnRpY2F0b3JSZXNwb25zZT4mJiByZXNwb25zZSkKLSAgICA6IEJhc2ljQ3JlZGVudGlhbChXVEY6
OmJhc2U2NFVSTEVuY29kZShyZXNwb25zZS0+cmF3SWQoKS0+ZGF0YSgpLCByZXNwb25zZS0+cmF3
SWQoKS0+Ynl0ZUxlbmd0aCgpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6OlJlbW90ZSkK
KyAgICA6IEJhc2ljQ3JlZGVudGlhbChtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVzcG9u
c2UtPnJhd0lkKCktPmRhdGEoKSwgcmVzcG9uc2UtPnJhd0lkKCktPmJ5dGVMZW5ndGgoKSkpLCBU
eXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQogICAgICwgbV9yZXNwb25zZShXVEZN
b3ZlKHJlc3BvbnNlKSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgU3RyaW5nIGdl
bmVyYXRlU2VjV2ViU29ja2V0S2V5KCkKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbmNlU2l6
ZSA9IDE2OwogICAgIHVuc2lnbmVkIGNoYXIga2V5W25vbmNlU2l6ZV07CiAgICAgY3J5cHRvZ3Jh
cGhpY2FsbHlSYW5kb21WYWx1ZXMoa2V5LCBub25jZVNpemUpOwotICAgIHJldHVybiBiYXNlNjRF
bmNvZGUoa2V5LCBub25jZVNpemUpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29k
ZWQoa2V5LCBub25jZVNpemUpKTsKIH0KIAogU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0
RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQoY29uc3QgU3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCkBA
IC0xMTAsNyArMTEwLDcgQEAgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRX
ZQogICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4od2Vi
U29ja2V0S2V5R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSk7CiAgICAgU0hBMTo6RGln
ZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7CisgICAgcmV0dXJuIG1ha2VTdHJp
bmcoYmFzZTY0RW5jb2RlZChoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpKTsKIH0KIAogV2Vi
U29ja2V0SGFuZHNoYWtlOjpXZWJTb2NrZXRIYW5kc2hha2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcm
IGNsaWVudE9yaWdpbiwgYm9vbCBhbGxvd0Nvb2tpZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvY3J5cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gb2YgcHJv
dGVjdGlvbiBpcyBub3QgcmVxdWlyZWQgYnkgdGhlIHNwZWMgYXMgb2YgMTEgRGVjZW1iZXIgMjAx
NDoKIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XZWJDcnlwdG9BUEkvI3NlY3VyaXR5LWRldmVs
b3BlcnMKIAotV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5
KFZlY3Rvcjx1aW50OF90PiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGRl
bGV0ZURlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKIAogV0VCQ09SRV9FWFBPUlQgYm9vbCB3
cmFwU2VyaWFsaXplZENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSwg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5
cHQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0tleUVDR0NyeXB0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIzLDExICs1MjMsMTEg
QEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogICAgICAgICBpZiAo
cSAmJiBxLT5zaXplKCkgPT0gY3VydmVVbmNvbXByZXNzZWRQb2ludFNpemUobV9jdXJ2ZSkpIHsK
ICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBhOwogICAgICAgICAgICAgYS5hcHBlbmQocS0+
ZGF0YSgpICsgMSwgdW5jb21wcmVzc2VkRmllbGRFbGVtZW50U2l6ZSk7Ci0gICAgICAgICAgICBq
d2sueCA9IGJhc2U2NFVSTEVuY29kZShhKTsKKyAgICAgICAgICAgIGp3ay54ID0gbWFrZVN0cmlu
ZyhiYXNlNjRVUkxFbmNvZGVkKGEpKTsKIAogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGI7
CiAgICAgICAgICAgICBiLmFwcGVuZChxLT5kYXRhKCkgKyAxICsgdW5jb21wcmVzc2VkRmllbGRF
bGVtZW50U2l6ZSwgdW5jb21wcmVzc2VkRmllbGRFbGVtZW50U2l6ZSk7Ci0gICAgICAgICAgICBq
d2sueSA9IGJhc2U2NFVSTEVuY29kZShiKTsKKyAgICAgICAgICAgIGp3ay55ID0gbWFrZVN0cmlu
ZyhiYXNlNjRVUkxFbmNvZGVkKGIpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTQzLDcgKzU0
Myw3IEBAIGJvb2wgQ3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KICAgICAgICAg
ICAgICAgICAgICAgKmQgPSBXVEZNb3ZlKHBhZGRlZERhdGEpOwogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGp3ay5kID0gYmFzZTY0VVJMRW5jb2RlKCpkKTsKKyAgICAgICAg
ICAgICAgICBqd2suZCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgqZCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvU2Vy
aWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNSAr
MjksMTQgQEAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFz
dGVyS2V5KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVy
S2V5KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFVOVVNFRF9QQVJBTShtYXN0ZXJL
ZXkpOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAK
IC8vIEluaXRpYWxseSB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zIHdlcmUgaW50ZW5kZWQgdG8gcGVy
Zm9ybSBLRUsgd3JhcHBpbmcgYW5kIHVud3JhcHBpbmcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDEwICs4OCwxMCBAQCBSZWZQdHI8Q3J5cHRvS2V5QUVTPiBDcnlwdG9LZXlBRVM6OmltcG9y
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmsuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90PiBvY3RldFNlcXVlbmNl
OwotICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuaywgb2N0ZXRTZXF1ZW5jZSkpCisg
ICAgYXV0byBvY3RldFNlcXVlbmNlID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuayk7CisgICAg
aWYgKCFvY3RldFNlcXVlbmNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWNh
bGxiYWNrKG9jdGV0U2VxdWVuY2Uuc2l6ZSgpICogOCwga2V5RGF0YS5hbGcpKQorICAgIGlmICgh
Y2FsbGJhY2sob2N0ZXRTZXF1ZW5jZS0+c2l6ZSgpICogOCwga2V5RGF0YS5hbGcpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAodXNhZ2VzICYmICFrZXlEYXRhLnVzZS5pc051bGwo
KSAmJiBrZXlEYXRhLnVzZSAhPSAiZW5jIikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0x
MDAsMTQgKzEwMCwxNCBAQCBSZWZQdHI8Q3J5cHRvS2V5QUVTPiBDcnlwdG9LZXlBRVM6OmltcG9y
CiAgICAgaWYgKGtleURhdGEuZXh0ICYmICFrZXlEYXRhLmV4dC52YWx1ZSgpICYmIGV4dHJhY3Rh
YmxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q3J5cHRvS2V5QUVTKGFsZ29yaXRobSwgV1RGTW92ZShvY3RldFNlcXVlbmNlKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5QUVTKGFsZ29y
aXRobSwgV1RGTW92ZSgqb2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpKTsKIH0K
IAogSnNvbldlYktleSBDcnlwdG9LZXlBRVM6OmV4cG9ydEp3aygpIGNvbnN0CiB7CiAgICAgSnNv
bldlYktleSByZXN1bHQ7CiAgICAgcmVzdWx0Lmt0eSA9ICJvY3QiOwotICAgIHJlc3VsdC5rID0g
YmFzZTY0VVJMRW5jb2RlKG1fa2V5KTsKKyAgICByZXN1bHQuayA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChtX2tleSkpOwogICAgIHJlc3VsdC5rZXlfb3BzID0gdXNhZ2VzKCk7CiAgICAg
cmVzdWx0LmV4dCA9IGV4dHJhY3RhYmxlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTgsMjIgKzk4LDIyIEBAIFJlZlB0cjxDcnlwdG9LZXlFQz4gQ3J5cHRvS2V5
RUM6OmltcG9ydEoKIAogICAgIGlmIChrZXlEYXRhLnguaXNOdWxsKCkgfHwga2V5RGF0YS55Lmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4geDsK
LSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEueCwgeCkpCisgICAgYXV0byB4
ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEueCk7CisgICAgaWYgKCF4KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4geTsKLSAgICBpZiAoIVdURjo6YmFzZTY0
VVJMRGVjb2RlKGtleURhdGEueSwgeSkpCisgICAgYXV0byB5ID0gYmFzZTY0VVJMRGVjb2RlKGtl
eURhdGEueSk7CisgICAgaWYgKCF5KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
a2V5RGF0YS5kLmlzTnVsbCgpKSB7CiAgICAgICAgIC8vIGltcG9ydCBwdWJsaWMga2V5Ci0gICAg
ICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1B1YmxpYyhpZGVudGlmaWVyLCAqbmFtZWRDdXJ2
ZSwgV1RGTW92ZSh4KSwgV1RGTW92ZSh5KSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAg
IHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1B1YmxpYyhpZGVudGlmaWVyLCAqbmFtZWRDdXJ2ZSwg
V1RGTW92ZSgqeCksIFdURk1vdmUoKnkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAK
LSAgICBWZWN0b3I8dWludDhfdD4gZDsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtl
eURhdGEuZCwgZCkpCisgICAgYXV0byBkID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZCk7Cisg
ICAgaWYgKCFkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBpbXBvcnQgcHJpdmF0
ZSBrZXkKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBvcnRKV0tQcml2YXRlKGlkZW50aWZpZXIsICpu
YW1lZEN1cnZlLCBXVEZNb3ZlKHgpLCBXVEZNb3ZlKHkpLCBXVEZNb3ZlKGQpLCBleHRyYWN0YWJs
ZSwgdXNhZ2VzKTsKKyAgICByZXR1cm4gcGxhdGZvcm1JbXBvcnRKV0tQcml2YXRlKGlkZW50aWZp
ZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKCp4KSwgV1RGTW92ZSgqeSksIFdURk1vdmUoKmQpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKIH0KIAogUmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlF
Qzo6aW1wb3J0U3BraShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgY3VydmUsIFZlY3Rvcjx1aW50OF90PiYmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFi
bGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDggKzEwMyw4IEBAIFJlZlB0cjxDcnlwdG9LZXlITUFDPiBDcnlwdG9LZXlITUFDOjpp
bXAKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEuay5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG9jdGV0U2VxdWVu
Y2U7Ci0gICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rLCBvY3RldFNlcXVlbmNlKSkK
KyAgICBhdXRvIG9jdGV0U2VxdWVuY2UgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rKTsKKyAg
ICBpZiAoIW9jdGV0U2VxdWVuY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICgh
Y2FsbGJhY2soaGFzaCwga2V5RGF0YS5hbGcpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTExNSwxNCArMTE1LDE0IEBAIFJlZlB0cjxDcnlwdG9LZXlITUFDPiBDcnlwdG9LZXlITUFDOjpp
bXAKICAgICBpZiAoa2V5RGF0YS5leHQgJiYgIWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFj
dGFibGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIENyeXB0b0tleUhN
QUM6OmltcG9ydFJhdyhsZW5ndGhCaXRzLCBoYXNoLCBXVEZNb3ZlKG9jdGV0U2VxdWVuY2UpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICByZXR1cm4gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3
KGxlbmd0aEJpdHMsIGhhc2gsIFdURk1vdmUoKm9jdGV0U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwg
dXNhZ2VzKTsKIH0KIAogSnNvbldlYktleSBDcnlwdG9LZXlITUFDOjpleHBvcnRKd2soKSBjb25z
dAogewogICAgIEpzb25XZWJLZXkgcmVzdWx0OwogICAgIHJlc3VsdC5rdHkgPSAib2N0IjsKLSAg
ICByZXN1bHQuayA9IGJhc2U2NFVSTEVuY29kZShtX2tleSk7CisgICAgcmVzdWx0LmsgPSBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQobV9rZXkpKTsKICAgICByZXN1bHQua2V5X29wcyA9IHVz
YWdlcygpOwogICAgIHJlc3VsdC5leHQgPSBleHRyYWN0YWJsZSgpOwogICAgIHJldHVybiByZXN1
bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tl
eVJTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDY1ICs0NSw4NyBAQCBSZWZQdHI8Q3J5cHRv
S2V5UlNBPiBDcnlwdG9LZXlSU0E6OmltcG9yCiAKICAgICBpZiAoa2V5RGF0YS5uLmlzTnVsbCgp
IHx8IGtleURhdGEuZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgVmVj
dG9yPHVpbnQ4X3Q+IG1vZHVsdXM7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlE
YXRhLm4sIG1vZHVsdXMpKQorICAgIGF1dG8gbW9kdWx1cyA9IGJhc2U2NFVSTERlY29kZShrZXlE
YXRhLm4pOworICAgIGlmICghbW9kdWx1cykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
Ly8gUGVyIFJGQyA3NTE4IFNlY3Rpb24gNi4zLjEuMTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9o
dG1sL3JmYzc1MTgjc2VjdGlvbi02LjMuMS4xCi0gICAgaWYgKCFtb2R1bHVzLmlzRW1wdHkoKSAm
JiAhbW9kdWx1c1swXSkKLSAgICAgICAgbW9kdWx1cy5yZW1vdmUoMCk7Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IGV4cG9uZW50OwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5l
LCBleHBvbmVudCkpCisgICAgaWYgKCFtb2R1bHVzLT5pc0VtcHR5KCkgJiYgIW1vZHVsdXMtPmF0
KDApKQorICAgICAgICBtb2R1bHVzLT5yZW1vdmUoMCk7CisgICAgYXV0byBleHBvbmVudCA9IGJh
c2U2NFVSTERlY29kZShrZXlEYXRhLmUpOworICAgIGlmICghZXhwb25lbnQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmQuaXNOdWxsKCkpIHsKICAgICAgICAgLy8g
aW1wb3J0IHB1YmxpYyBrZXkKLSAgICAgICAgYXV0byBwdWJsaWNLZXlDb21wb25lbnRzID0gQ3J5
cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKFdURk1vdmUobW9kdWx1cyksIFdURk1v
dmUoZXhwb25lbnQpKTsKKyAgICAgICAgYXV0byBwdWJsaWNLZXlDb21wb25lbnRzID0gQ3J5cHRv
S2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKFdURk1vdmUoKm1vZHVsdXMpLCBXVEZNb3Zl
KCpleHBvbmVudCkpOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxkIG5vdCBoYXZlIGFueSBl
ZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlS
U0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpTSEFfMSksICEhaGFzaCwgKnB1YmxpY0tleUNvbXBvbmVudHMsIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogICAgIH0KIAogICAgIC8vIGltcG9ydCBwcml2YXRlIGtleQotICAgIFZlY3Rvcjx1
aW50OF90PiBwcml2YXRlRXhwb25lbnQ7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShr
ZXlEYXRhLmQsIHByaXZhdGVFeHBvbmVudCkpCisgICAgYXV0byBwcml2YXRlRXhwb25lbnQgPSBi
YXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBpZiAoIXByaXZhdGVFeHBvbmVudCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEucC5pc051bGwoKSAmJiBrZXlE
YXRhLnEuaXNOdWxsKCkgJiYga2V5RGF0YS5kcC5pc051bGwoKSAmJiBrZXlEYXRhLmRwLmlzTnVs
bCgpICYmIGtleURhdGEucWkuaXNOdWxsKCkpIHsKLSAgICAgICAgYXV0byBwcml2YXRlS2V5Q29t
cG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUoV1RGTW92ZSht
b2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUocHJpdmF0ZUV4cG9uZW50KSk7Cisg
ICAgICAgIGF1dG8gcHJpdmF0ZUtleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25lbnRz
OjpjcmVhdGVQcml2YXRlKFdURk1vdmUoKm1vZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVudCksIFdU
Rk1vdmUoKnByaXZhdGVFeHBvbmVudCkpOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxkIG5v
dCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJldHVy
biBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRzLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAKICAgICBpZiAoa2V5RGF0YS5wLmlzTnVsbCgp
IHx8IGtleURhdGEucS5pc051bGwoKSB8fCBrZXlEYXRhLmRwLmlzTnVsbCgpIHx8IGtleURhdGEu
ZHEuaXNOdWxsKCkgfHwga2V5RGF0YS5xaS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGZpcnN0UHJpbWVJbmZv
OwotICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBzZWNvbmRQcmltZUluZm87
Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLnAsIGZpcnN0UHJpbWVJbmZv
LnByaW1lRmFjdG9yKSkKKyAgICAKKyAgICBhdXRvIGZpcnN0UHJpbWVGYWN0b3IgPSBiYXNlNjRV
UkxEZWNvZGUoa2V5RGF0YS5wKTsKKyAgICBpZiAoIWZpcnN0UHJpbWVGYWN0b3IpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5k
cCwgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQpKQorICAgIGF1dG8gZmlyc3RGYWN0
b3JDUlRFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRwKTsKKyAgICBpZiAoIWZp
cnN0RmFjdG9yQ1JURXhwb25lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICgh
V1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5xLCBzZWNvbmRQcmltZUluZm8ucHJpbWVGYWN0
b3IpKQorICAgIGF1dG8gc2Vjb25kUHJpbWVGYWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0
YS5xKTsKKyAgICBpZiAoIXNlY29uZFByaW1lRmFjdG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZHEsIHNlY29uZFByaW1l
SW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisgICAgYXV0byBzZWNvbmRGYWN0b3JDUlRFeHBvbmVu
dCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRxKTsKKyAgICBpZiAoIXNlY29uZEZhY3RvckNS
VEV4cG9uZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIVdURjo6YmFzZTY0
VVJMRGVjb2RlKGtleURhdGEucWksIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRDb2VmZmljaWVu
dCkpCisgICAgYXV0byBzZWNvbmRGYWN0b3JDUlRDb2VmZmljaWVudCA9IGJhc2U2NFVSTERlY29k
ZShrZXlEYXRhLnFpKTsKKyAgICBpZiAoIXNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1l
SW5mbyBmaXJzdFByaW1lSW5mbzsKKyAgICBmaXJzdFByaW1lSW5mby5wcmltZUZhY3RvciA9IFdU
Rk1vdmUoKmZpcnN0UHJpbWVGYWN0b3IpOworICAgIGZpcnN0UHJpbWVJbmZvLmZhY3RvckNSVEV4
cG9uZW50ID0gV1RGTW92ZSgqZmlyc3RGYWN0b3JDUlRFeHBvbmVudCk7CisgICAgCisgICAgQ3J5
cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mbzsKKyAgICBzZWNv
bmRQcmltZUluZm8ucHJpbWVGYWN0b3IgPSBXVEZNb3ZlKCpzZWNvbmRQcmltZUZhY3Rvcik7Cisg
ICAgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50ID0gV1RGTW92ZSgqc2Vjb25kRmFj
dG9yQ1JURXhwb25lbnQpOworICAgIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRDb2VmZmljaWVu
dCA9IFdURk1vdmUoKnNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50KTsKKwogICAgIGlmICgha2V5
RGF0YS5vdGgpIHsKLSAgICAgICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tl
eVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEoV1RGTW92ZSht
b2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUocHJpdmF0ZUV4cG9uZW50KSwgV1RG
TW92ZShmaXJzdFByaW1lSW5mbyksIFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwgeyB9KTsKKyAg
ICAgICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6
OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1v
dmUoKmV4cG9uZW50KSwgV1RGTW92ZSgqcHJpdmF0ZUV4cG9uZW50KSwgV1RGTW92ZShmaXJzdFBy
aW1lSW5mbyksIFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwgeyB9KTsKICAgICAgICAgLy8gTm90
aWNlOiBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSBpcyBqdXN0IGEgcGxhY2Vob2xk
ZXIuIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkgZWZmZWN0IGlmIGhhc2ggaXMgV1RGOjpudWxsb3B0
LgogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBoYXNoLnZh
bHVlT3IoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsICpwcml2YXRl
S2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgfQogCiAgICAgVmVjdG9y
PENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbz4gb3RoZXJQcmltZUluZm9zOwogICAg
IGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiBrZXlEYXRhLm90aC52YWx1ZSgpKSB7Ci0gICAgICAg
IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBpbmZvOwotICAgICAgICBpZiAoIVdU
Rjo6YmFzZTY0VVJMRGVjb2RlKHZhbHVlLnIsIGluZm8ucHJpbWVGYWN0b3IpKQorICAgICAgICBh
dXRvIHByaW1lRmFjdG9yID0gYmFzZTY0VVJMRGVjb2RlKHZhbHVlLnIpOworICAgICAgICBpZiAo
IXByaW1lRmFjdG9yKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlmICgh
V1RGOjpiYXNlNjRVUkxEZWNvZGUodmFsdWUuZCwgaW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisg
ICAgICAgIGF1dG8gZmFjdG9yQ1JURXhwb25lbnQgPSBiYXNlNjRVUkxEZWNvZGUodmFsdWUuZCk7
CisgICAgICAgIGlmICghZmFjdG9yQ1JURXhwb25lbnQpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZSh2YWx1ZS50LCBpbmZvLmZh
Y3RvckNSVENvZWZmaWNpZW50KSkKKyAgICAgICAgYXV0byBmYWN0b3JDUlRDb2VmZmljaWVudCA9
IGJhc2U2NFVSTERlY29kZSh2YWx1ZS50KTsKKyAgICAgICAgaWYgKCFmYWN0b3JDUlRDb2VmZmlj
aWVudCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBvdGhlclByaW1lSW5m
b3MuYXBwZW5kKGluZm8pOworCisgICAgICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1l
SW5mbyBpbmZvOworICAgICAgICBpbmZvLnByaW1lRmFjdG9yID0gV1RGTW92ZSgqcHJpbWVGYWN0
b3IpOworICAgICAgICBpbmZvLmZhY3RvckNSVEV4cG9uZW50ID0gV1RGTW92ZSgqZmFjdG9yQ1JU
RXhwb25lbnQpOworICAgICAgICBpbmZvLmZhY3RvckNSVENvZWZmaWNpZW50ID0gV1RGTW92ZSgq
ZmFjdG9yQ1JUQ29lZmZpY2llbnQpOworCisgICAgICAgIG90aGVyUHJpbWVJbmZvcy5hcHBlbmQo
V1RGTW92ZShpbmZvKSk7CiAgICAgfQogCi0gICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9
IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEo
V1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUocHJpdmF0ZUV4cG9u
ZW50KSwgV1RGTW92ZShmaXJzdFByaW1lSW5mbyksIFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwg
V1RGTW92ZShvdGhlclByaW1lSW5mb3MpKTsKKyAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRz
ID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0
YShXVEZNb3ZlKCptb2R1bHVzKSwgV1RGTW92ZSgqZXhwb25lbnQpLCBXVEZNb3ZlKCpwcml2YXRl
RXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUlu
Zm8pLCBXVEZNb3ZlKG90aGVyUHJpbWVJbmZvcykpOwogICAgIC8vIE5vdGljZTogQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6U0hBXzEgaXMganVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQg
bm90IGhhdmUgYW55IGVmZmVjdCBpZiBoYXNoIGlzIFdURjo6bnVsbG9wdC4KICAgICByZXR1cm4g
Q3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBoYXNoLnZhbHVlT3IoQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsICpwcml2YXRlS2V5Q29tcG9uZW50cywgZXh0
cmFjdGFibGUsIHVzYWdlcyk7CiB9CkBAIC0xMTgsMzAgKzE0MCwzMCBAQCBKc29uV2ViS2V5IENy
eXB0b0tleVJTQTo6ZXhwb3J0SndrKCkgY29uCiAgICAgYXV0byByc2FDb21wb25lbnRzID0gZXhw
b3J0RGF0YSgpOwogCiAgICAgLy8gcHVibGljIGtleQotICAgIHJlc3VsdC5uID0gYmFzZTY0VVJM
RW5jb2RlKHJzYUNvbXBvbmVudHMtPm1vZHVsdXMoKSk7Ci0gICAgcmVzdWx0LmUgPSBiYXNlNjRV
UkxFbmNvZGUocnNhQ29tcG9uZW50cy0+ZXhwb25lbnQoKSk7CisgICAgcmVzdWx0Lm4gPSBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+bW9kdWx1cygpKSk7CisgICAg
cmVzdWx0LmUgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+ZXhw
b25lbnQoKSkpOwogICAgIGlmIChyc2FDb21wb25lbnRzLT50eXBlKCkgPT0gQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6VHlwZTo6UHVibGljKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAg
Ly8gcHJpdmF0ZSBrZXkKLSAgICByZXN1bHQuZCA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25l
bnRzLT5wcml2YXRlRXhwb25lbnQoKSk7CisgICAgcmVzdWx0LmQgPSBtYWtlU3RyaW5nKGJhc2U2
NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+cHJpdmF0ZUV4cG9uZW50KCkpKTsKICAgICBpZiAo
IXJzYUNvbXBvbmVudHMtPmhhc0FkZGl0aW9uYWxQcml2YXRlS2V5UGFyYW1ldGVycygpKQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmVzdWx0LnAgPSBiYXNlNjRVUkxFbmNvZGUocnNh
Q29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8oKS5wcmltZUZhY3Rvcik7Ci0gICAgcmVzdWx0LnEg
PSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkucHJpbWVG
YWN0b3IpOwotICAgIHJlc3VsdC5kcCA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5m
aXJzdFByaW1lSW5mbygpLmZhY3RvckNSVEV4cG9uZW50KTsKLSAgICByZXN1bHQuZHEgPSBiYXNl
NjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkuZmFjdG9yQ1JURXhw
b25lbnQpOwotICAgIHJlc3VsdC5xaSA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5z
ZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRDb2VmZmljaWVudCk7CisgICAgcmVzdWx0LnAgPSBt
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8o
KS5wcmltZUZhY3RvcikpOworICAgIHJlc3VsdC5xID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNv
ZGVkKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5mbygpLnByaW1lRmFjdG9yKSk7CisgICAg
cmVzdWx0LmRwID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKHJzYUNvbXBvbmVudHMtPmZp
cnN0UHJpbWVJbmZvKCkuZmFjdG9yQ1JURXhwb25lbnQpKTsKKyAgICByZXN1bHQuZHEgPSBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCku
ZmFjdG9yQ1JURXhwb25lbnQpKTsKKyAgICByZXN1bHQucWkgPSBtYWtlU3RyaW5nKGJhc2U2NFVS
TEVuY29kZWQocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkuZmFjdG9yQ1JUQ29lZmZp
Y2llbnQpKTsKICAgICBpZiAocnNhQ29tcG9uZW50cy0+b3RoZXJQcmltZUluZm9zKCkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgVmVjdG9yPFJzYU90aGVyUHJpbWVz
SW5mbz4gb3RoOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5mbyA6IHJzYUNvbXBvbmVudHMtPm90
aGVyUHJpbWVJbmZvcygpKSB7CiAgICAgICAgIFJzYU90aGVyUHJpbWVzSW5mbyBvdGhlckluZm87
Ci0gICAgICAgIG90aGVySW5mby5yID0gYmFzZTY0VVJMRW5jb2RlKGluZm8ucHJpbWVGYWN0b3Ip
OwotICAgICAgICBvdGhlckluZm8uZCA9IGJhc2U2NFVSTEVuY29kZShpbmZvLmZhY3RvckNSVEV4
cG9uZW50KTsKLSAgICAgICAgb3RoZXJJbmZvLnQgPSBiYXNlNjRVUkxFbmNvZGUoaW5mby5mYWN0
b3JDUlRDb2VmZmljaWVudCk7CisgICAgICAgIG90aGVySW5mby5yID0gbWFrZVN0cmluZyhiYXNl
NjRVUkxFbmNvZGVkKGluZm8ucHJpbWVGYWN0b3IpKTsKKyAgICAgICAgb3RoZXJJbmZvLmQgPSBt
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoaW5mby5mYWN0b3JDUlRFeHBvbmVudCkpOworICAg
ICAgICBvdGhlckluZm8udCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChpbmZvLmZhY3Rv
ckNSVENvZWZmaWNpZW50KSk7CiAgICAgICAgIG90aC5hcHBlbmQoV1RGTW92ZShvdGhlckluZm8p
KTsKICAgICB9CiAgICAgcmVzdWx0Lm90aCA9IFdURk1vdmUob3RoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1B
ZGRGaWVsZEVsZW1lbgogCiAgICAgaWYgKFVOTElLRUxZKChzaXplICE9IHB1YmxpY0tleVNpemUp
ICYmIChzaXplICE9IHByaXZhdGVLZXlTaXplKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBqd2sueCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHJlc3VsdC5kYXRhKCkgKyAxLCBrZXlTaXpl
SW5CeXRlcyk7Ci0gICAgandrLnkgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShyZXN1bHQuZGF0YSgp
ICsga2V5U2l6ZUluQnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRlcyk7CisgICAgandrLnggPSBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVzdWx0LmRhdGEoKSArIDEsIGtleVNpemVJbkJ5dGVz
KSk7CisgICAgandrLnkgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVzdWx0LmRhdGEo
KSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6ZUluQnl0ZXMpKTsKICAgICBpZiAoc2l6ZSA+
IHB1YmxpY0tleVNpemUpCi0gICAgICAgIGp3ay5kID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUocmVz
dWx0LmRhdGEoKSArIHB1YmxpY0tleVNpemUsIGtleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgandr
LmQgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVzdWx0LmRhdGEoKSArIHB1YmxpY0tl
eVNpemUsIGtleVNpemVJbkJ5dGVzKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5
V3JhcE1hYy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQAogI2ltcG9ydCA8Q29tbW9uQ3J5cHRvL0NvbW1vblN5bW1ldHJpY0tleXdyYXAuaD4K
ICNpbXBvcnQgPGNydF9leHRlcm5zLmg+CiAjaW1wb3J0IDx3dGYvQ3J5cHRvZ3JhcGhpY1V0aWxp
dGllcy5oPgorI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1By
aXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL3NwaS9j
b2NvYS9TZWN1cml0eVNQSS5oPgpAQCAtODAsMTEgKzgxLDExIEBAIHN0YXRpYyBOU1N0cmluZyog
bWFzdGVyS2V5QWNjb3VudE5hbWVGb3IKICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJjb20uYXBwbGUuV2ViS2l0LldlYkNyeXB0by5tYXN0ZXIrJUAiLCBidW5kbGVJZGVu
dGlmaWVyXTsKIH0KIAotc3RhdGljIGJvb2wgY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoVmVjdG9y
PHVpbnQ4X3Q+JiBtYXN0ZXJLZXlEYXRhKQorc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGhhc1By
b2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzQ3JlZGVudGlhbHMpKTsK
IAotICAgIG1hc3RlcktleURhdGEucmVzaXplKG1hc3RlcktleVNpemVJbkJ5dGVzKTsKKyAgICBW
ZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5RGF0YShtYXN0ZXJLZXlTaXplSW5CeXRlcyk7CiAgICAg
YXV0byByYyA9IENDUmFuZG9tR2VuZXJhdGVCeXRlcyhtYXN0ZXJLZXlEYXRhLmRhdGEoKSwgbWFz
dGVyS2V5RGF0YS5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJjID09IGtDQ1N1Y2Nlc3Mp
OwogCkBAIC0xMDcsNyArMTA4LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlQW5kU3RvcmVNYXN0ZXJL
ZXkoVmVjdAogICAgIHN0YXR1cyA9IFNlY0FjY2Vzc0NyZWF0ZSgoX19icmlkZ2UgQ0ZTdHJpbmdS
ZWYpbG9jYWxpemVkSXRlbU5hbWUsIG51bGxwdHIsICZhY2Nlc3NSZWYpOwogICAgIGlmIChzdGF0
dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3QgY3JlYXRlIGEgc2VjdXJpdHkgYWNj
ZXNzIG9iamVjdCBmb3Igc3RvcmluZyBXZWJDcnlwdG8gbWFzdGVyIGtleSwgZXJyb3IgJWQiLCAo
aW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPFNlY0FjY2Vzc1JlZj4gYWNjZXNzID0gYWRv
cHRDRihhY2Nlc3NSZWYpOwogCkBAIC0xMjAsMTkgKzEyMSwxOCBAQCBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19CRUdJTgogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAg
ICAgaWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBjcmVhdGUgYSB0
cnVzdGVkIGFwcGxpY2F0aW9uIG9iamVjdCBmb3Igc3RvcmluZyBXZWJDcnlwdG8gbWFzdGVyIGtl
eSwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPFNlY1RydXN0ZWRB
cHBsaWNhdGlvblJlZj4gdHJ1c3RlZEFwcCA9IGFkb3B0Q0YodHJ1c3RlZEFwcFJlZik7CiAKICAg
ICBzdGF0dXMgPSBTZWNBQ0xTZXRDb250ZW50cyhhY2wsIChfX2JyaWRnZSBDRkFycmF5UmVmKUBb
IChfX2JyaWRnZSBpZCl0cnVzdGVkQXBwLmdldCgpIF0sIChfX2JyaWRnZSBDRlN0cmluZ1JlZils
b2NhbGl6ZWRJdGVtTmFtZSwga1NlY0tleWNoYWluUHJvbXB0UmVxdWlyZVBhc3NwaGFzZSk7CiAg
ICAgaWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBzZXQgQUNMIGZv
ciBXZWJDcnlwdG8gbWFzdGVyIGtleSwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAjZW5k
aWYKIAotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YTsKLSAgICBi
YXNlNjRFbmNvZGUobWFzdGVyS2V5RGF0YSwgYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEpOwor
ICAgIGF1dG8gYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEgPSBiYXNlNjRFbmNvZGUobWFzdGVy
S2V5RGF0YSk7CiAKICAgICAvLyBDYW5ub3QgdXNlIGtTZWNDbGFzc0tleSBiZWNhdXNlIG9mIDxy
ZGFyOi8vcHJvYmxlbS8xNjA2ODIwNz4uCiAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0g
QHsKQEAgLTE1MCwxMiArMTUwLDEzIEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VO
RAogICAgIHN0YXR1cyA9IFNlY0l0ZW1BZGQoKENGRGljdGlvbmFyeVJlZilhdHRyaWJ1dGVzLCBu
dWxscHRyKTsKICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90
IHN0b3JlIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBtYXN0ZXJLZXlEYXRhOwogfQogCi1zdGF0
aWMgYm9vbCBmaW5kTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5RGF0YSkKK3N0
YXRpYyBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGZpbmRNYXN0ZXJLZXkoKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNj
ZXNzQ3JlZGVudGlhbHMpKTsKIApAQCAtMTcwLDIwICsxNzEsMjUgQEAgc3RhdGljIGJvb2wgZmlu
ZE1hc3RlcktleShWZWN0b3I8dWludDhfdAogICAgIGlmIChzdGF0dXMpIHsKICAgICAgICAgaWYg
KHN0YXR1cyAhPSBlcnJTZWNJdGVtTm90Rm91bmQgJiYgc3RhdHVzICE9IGVyclNlY1VzZXJDYW5j
ZWxlZCkKICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ291bGQgbm90IGZpbmQgV2ViQ3J5cHRv
IG1hc3RlciBrZXkgaW4gS2V5Y2hhaW4sIGVycm9yICVkIiwgKGludClzdGF0dXMpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogICAg
IFJldGFpblB0cjxDRkRhdGFSZWY+IGtleURhdGEgPSBhZG9wdENGKGtleURhdGFSZWYpOwotCi0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhID0gdmVjdG9yRnJv
bU5TRGF0YSgoX19icmlkZ2UgTlNEYXRhICopa2V5RGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIGJh
c2U2NERlY29kZSgoY29uc3QgY2hhciopYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEuZGF0YSgp
LCBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YS5zaXplKCksIG1hc3RlcktleURhdGEpOworICAg
IHJldHVybiBiYXNlNjREZWNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oQ0ZEYXRh
R2V0Qnl0ZVB0cihrZXlEYXRhLmdldCgpKSksIENGRGF0YUdldExlbmd0aChrZXlEYXRhLmdldCgp
KSk7CiB9CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShWZWN0b3I8dWludDhf
dD4mIG1hc3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSgpCiB7Ci0gICAgaWYgKCFmaW5kTWFzdGVyS2V5KG1hc3RlcktleSkgJiYgIWNy
ZWF0ZUFuZFN0b3JlTWFzdGVyS2V5KG1hc3RlcktleSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBSRUxFQVNFX0FTU0VSVChtYXN0ZXJLZXkuc2l6ZSgpID09IG1hc3RlcktleVNpemVJbkJ5
dGVzKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYXV0byBtYXN0ZXJLZXkgPSBmaW5kTWFz
dGVyS2V5KCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWFzdGVyS2V5LT5zaXplKCkgPT0g
bWFzdGVyS2V5U2l6ZUluQnl0ZXMpOworICAgICAgICByZXR1cm4gbWFzdGVyS2V5OworICAgIH0K
KworICAgIGlmIChhdXRvIG1hc3RlcktleSA9IGNyZWF0ZUFuZFN0b3JlTWFzdGVyS2V5KCkpIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWFzdGVyS2V5LT5zaXplKCkgPT0gbWFzdGVyS2V5U2l6
ZUluQnl0ZXMpOworICAgICAgICByZXR1cm4gbWFzdGVyS2V5OworICAgIH0KKworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CiAKIGJvb2wgZGVsZXRlRGVmYXVsdFdlYkNyeXB0b01hc3Rlcktl
eSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcE9wZW5TU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9v
cGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwT3BlblNTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwxNCBAQAogI2lmIEVO
QUJMRShXRUJfQ1JZUFRPKQogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGdldERlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCitPcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogLy8gSW5pdGlhbGx5IHRo
ZXNlIGhlbHBlciBmdW5jdGlvbnMgd2VyZSBpbnRlbmRlZCB0byBwZXJmb3JtIEtFSyB3cmFwcGlu
ZyBhbmQgdW53cmFwcGluZywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRl
ckxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyTG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9GaWxlUmVhZGVyTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDI2ICszMzMsMTIg
QEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9UZXh0KCkKIAogdm9pZCBGaWxlUmVh
ZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRhVVJMKCkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJkYXRhOiIpOwotCiAgICAgaWYgKCFtX2J5
dGVzTG9hZGVkKSB7Ci0gICAgICAgIG1fc3RyaW5nUmVzdWx0ID0gYnVpbGRlci50b1N0cmluZygp
OworICAgICAgICBtX3N0cmluZ1Jlc3VsdCA9ICJkYXRhOiJfczsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChtX2RhdGFUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwotICAgIGVsc2UKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQobV9kYXRhVHlwZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI7YmFz
ZTY0LCIpOwotCi0gICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICBiYXNlNjRFbmNvZGUobV9yYXdE
YXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQsIG91dCk7Ci0gICAgb3V0LmFwcGVuZCgnXDAnKTsK
LSAgICBidWlsZGVyLmFwcGVuZChvdXQuZGF0YSgpKTsKLQotICAgIG1fc3RyaW5nUmVzdWx0ID0g
YnVpbGRlci50b1N0cmluZygpOworICAgIG1fc3RyaW5nUmVzdWx0ID0gbWFrZVN0cmluZygiZGF0
YTo7YmFzZTY0LCIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSIgOiBtX2RhdGFUeXBlLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+ZGF0YSgpLCBtX2J5
dGVzTG9hZGVkKSwgJ1wwJyk7CiB9CiAKIGJvb2wgRmlsZVJlYWRlckxvYWRlcjo6aXNDb21wbGV0
ZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjksMTQgKzQyOSwxNCBAQCBz
dGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNoOwogICAgICAgICAgICAgYXR0cnNTSEEx
LmNvbXB1dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9
IGJhc2U2NEVuY29kZShhdHRyc0hhc2guZGF0YSgpLCAxMCk7CisgICAgICAgICAgICBkaWdlc3Qt
PmF0dHJzU0hBMSA9IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChhdHRyc0hhc2guZGF0YSgpLCAx
MCkpOwogICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIGRpZ2VzdC0+YXR0cnNTSEEx
KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEu
Y29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlKGhhc2gu
ZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVk
KGhhc2guZGF0YSgpLCAxMCkpOwogICAgIGlmICh1bnVzZWROb2Rlc01hcCkKICAgICAgICAgdW51
c2VkTm9kZXNNYXAtPmFkZChkaWdlc3QtPnNoYTEsIGRpZ2VzdC5nZXQoKSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDExICs1OTgsMTEgQEAgYm9v
bCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghbV9jbGllbnQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAg
IGlmICghYmFzZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSwgZGF0YSkpCisgICAgYXV0
byBkYXRhID0gYmFzZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSk7CisgICAgaWYgKCFk
YXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3Rl
bmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOwogICAgIE9w
dGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogICAgIGRlY29kZXIgPj4g
Y2VydGlmaWNhdGVJbmZvOwogICAgIGlmICghY2VydGlmaWNhdGVJbmZvKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNl
c0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdW5zaWduZWQgTmV0
d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRAogICAgICAgICBtX2NvbnRlbnQgPSBtX2RlY29k
ZXItPmRlY29kZUFuZEZsdXNoKG1fZGF0YUJ1ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBtX2Jhc2U2NEVuY29kZWQgPSB0cnVlOwotICAgICAgICBtX2Nv
bnRlbnQgPSBiYXNlNjRFbmNvZGUobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOwor
ICAgICAgICBtX2NvbnRlbnQgPSBtYWtlU3RyaW5nKFdURjo6YmFzZTY0RW5jb2RlZChtX2RhdGFC
dWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCkpOwogICAgIH0KIAogICAgIG1fZGF0YUJ1ZmZlciA9
IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MDksNyArMTcwOSw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1
cml0eVBvbGkKICAgICBhdXRvIGNyeXB0b0RpZ2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVh
dGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7CiAgICAgY3J5cHRvRGln
ZXN0LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVudC5zaXplKCkpOwogICAgIGF1dG8g
ZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlKGRpZ2VzdC5kYXRhKCksIGRpZ2VzdC5zaXplKCkp
KTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29kZWQoZGlnZXN0
LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOwogfQogCiBSZWY8UHJvdG9jb2w6OkRPTTo6Tm9kZT4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBpbnQgZGVw
dGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
TmV0d29ya0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDcgKzE3NSw3IEBAIFJlZjxQ
cm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGIKICAgICByZXR1cm4gUHJvdG9jb2w6
Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQogICAgICAgICAuc2V0T3Bjb2RlKGZy
YW1lLm9wQ29kZSkKICAgICAgICAgLnNldE1hc2soZnJhbWUubWFza2VkKQotICAgICAgICAuc2V0
UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGlu
MUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpIDogYmFzZTY0RW5j
b2RlKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKQorICAgICAgICAuc2V0UGF5
bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZh
bGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpIDogbWFrZVN0cmluZyhi
YXNlNjRFbmNvZGVkKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKSkKICAgICAg
ICAgLnNldFBheWxvYWRMZW5ndGgoZnJhbWUucGF5bG9hZExlbmd0aCkKICAgICAgICAgLnJlbGVh
c2UoKTsKIH0KQEAgLTU4Niw3ICs1ODYsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
ZGlkUmVjZWl2ZURhCiAgICAgICAgIC8vIE9mdGVuIHRoZSBkYXRhIGlzIHRleHQgYW5kIHdlIHdv
dWxkIGhhdmUgYSBkZWNvZGVyLCBidXQgZm9yIG5vbi10ZXh0IHdlIHdvbid0IGhhdmUgYSBkZWNv
ZGVyLgogICAgICAgICAvLyBTeW5jIFhIUnMgbWF5IG5vdCBoYXZlIGEgY2FjaGVkIHJlc291cmNl
LCB3aGlsZSBub24tc3luYyBYSFJzIHVzdWFsbHkgdHJhbnNmZXIgZGF0YSBvdmVyIG9uIGNvbXBs
ZXRpb24uCiAgICAgICAgIGlmIChtX2xvYWRpbmdYSFJTeW5jaHJvbm91c2x5ICYmIHJlc291cmNl
RGF0YSAmJiAhcmVzb3VyY2VEYXRhLT5oYXNCdWZmZXJlZERhdGEoKSAmJiAhcmVzb3VyY2VEYXRh
LT5jYWNoZWRSZXNvdXJjZSgpKQotICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNv
dXJjZUNvbnRlbnQocmVxdWVzdElkLCBiYXNlNjRFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCksIHRy
dWUpOworICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQocmVx
dWVzdElkLCBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoZGF0YSwgZGF0YUxlbmd0aCkpLCB0cnVl
KTsKICAgICB9CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGF0YVJlY2VpdmVkKHJlcXVl
c3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKQEAgLTEw
MDQsNyArMTAwNCw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8K
IAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNp
c3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2Rlciwg
Y2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShlbmNvZGVyLmJ1
ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFz
ZTY0RW5jb2RlZChlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSkpOwogfQog
CiBXZWJTb2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVzdElk
KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKQEAgLTEyMDIs
MTEgKzEyMDIsMTEgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgog
ICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZHMoV1RGTW92ZShleHBsaWNpdEhlYWRl
cnMpKTsKICAgICB9CiAgICAgaWYgKCEhcG9zdERhdGEpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUocG9zdERhdGEsIGJ1ZmZlcikp
CisgICAgICAgIGF1dG8gYnVmZmVyID0gYmFzZTY0RGVjb2RlKHBvc3REYXRhKTsKKyAgICAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0
byBkZWNvZGUgZ2l2ZW4gcG9zdERhdGEiX3MpOwogCi0gICAgICAgIHJlcXVlc3Quc2V0SFRUUEJv
ZHkoRm9ybURhdGE6OmNyZWF0ZShidWZmZXIpKTsKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9k
eShGb3JtRGF0YTo6Y3JlYXRlKFdURk1vdmUoKmJ1ZmZlcikpKTsKICAgICB9CiAgICAgLy8gRklY
TUU6IGZpZ3VyZSBvdXQgaG93IHRvIGlkZW50aWZ5IHdoZW4gYSByZXF1ZXN0IGhhcyBiZWVuIG92
ZXJyaWRkZW4gd2hlbiB3ZSBhZGQgdGhpcyB0byB0aGUgZnJvbnRlbmQuCiAgICAgcGVuZGluZ1Jl
cXVlc3QtPmNvbnRpbnVlV2l0aFJlcXVlc3QocmVxdWVzdCk7CkBAIC0xMjQyLDExICsxMjQyLDEx
IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck4KIAogICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IG92ZXJyaWRlRGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewot
ICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29k
ZShjb250ZW50LCBidWZmZXIpKQorICAgICAgICBhdXRvIGJ1ZmZlciA9IGJhc2U2NERlY29kZShj
b250ZW50KTsKKyAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfcyk7CiAKLSAgICAgICAg
b3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpKTsKKyAg
ICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqYnVmZmVy
KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG92ZXJyaWRlRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwgY29udGVudC51dGY4KCkubGVuZ3RoKCkpOwogCkBA
IC0xMjY4LDExICsxMjY4LDExIEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3Rvck4KIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CiAgICAgaWYgKGJhc2U2NEVu
Y29kZWQpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFi
YXNlNjREZWNvZGUoY29udGVudCwgYnVmZmVyKSkKKyAgICAgICAgYXV0byBidWZmZXIgPSBiYXNl
NjREZWNvZGUoY29udGVudCk7CisgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZGVjb2RlIGdpdmVuIGNvbnRlbnQiX3MpOwog
Ci0gICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwor
ICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqYnVmZmVyKSk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LnV0
ZjgoKS5kYXRhKCksIGNvbnRlbnQudXRmOCgpLmxlbmd0aCgpKTsKIApAQCAtMTQwNSw3ICsxNDA1
LDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cgogICAgICAgICB9
CiAKICAgICAgICAgKmJhc2U2NEVuY29kZWQgPSB0cnVlOwotICAgICAgICAqcmVzdWx0ID0gYmFz
ZTY0RW5jb2RlKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgICAgICpyZXN1
bHQgPSBtYWtlU3RyaW5nKFdURjo6YmFzZTY0RW5jb2RlZChidWZmZXItPmRhdGEoKSwgYnVmZmVy
LT5zaXplKCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcg
QEAgYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbgogYm9vbCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUs
IGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBT
dHJpbmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2NEVuY29kZSkgewotICAgICAgICAq
cmVzdWx0ID0gYmFzZTY0RW5jb2RlKGRhdGEsIHNpemUpOworICAgICAgICAqcmVzdWx0ID0gbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKGRhdGEsIHNpemUpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkBAIC0xMTAyLDcgKzExMDIsNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IEluc3BlY3RvCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90
IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfcyk7CiAKICAgICBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKTsKLSAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdldCgpKSwgQ0ZE
YXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2
NEVuY29kZWQoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgo
YnVmZmVyLmdldCgpKSkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExOCw3ICszMTE4LDcgQEAgdW5z
aWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlUwogICAgICAgICBBU1NFUlQoIW5l
d1JlcXVlc3QuaXNOdWxsKCkpOwogCiAgICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIoKS0+YXBw
bGljYXRpb25DYWNoZUhvc3QoKS5tYXliZUxvYWRTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVy
cm9yLCByZXNwb25zZSwgZGF0YSkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7
CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwogICAgICAgICAgICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoKnRoaXMsIGlkZW50aWZpZXIsIG5ld1JlcXVlc3QsIGNsaWVudENyZWRlbnRpYWxQb2xpY3ks
IG9wdGlvbnMsIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIGVycm9yLCByZXNwb25zZSwgYnVmZmVy
KTsKICAgICAgICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZl
cikpOwogICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3Qo
KS5tYXliZUxvYWRGYWxsYmFja1N5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3Bv
bnNlLCBkYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3ku
aAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdHJ1Y3QgRmV0Y2hPcHRpb25zOwog
Y2xhc3MgV0VCQ09SRV9FWFBPUlQgTG9hZGVyU3RyYXRlZ3kgewogcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UoRnJhbWUmLCBDYWNoZWRSZXNvdXJjZSYsIFJlc291cmNlUmVx
dWVzdCYmLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4mJik+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ2xpZW50Q3JlZGVudGlhbFBvbGlj
eSwgY29uc3QgRmV0Y2hPcHRpb25zJiwgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJy
b3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIENsaWVudENyZWRlbnRp
YWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0aW9ucyYsIGNvbnN0IEhUVFBIZWFkZXJNYXAmLCBSZXNv
dXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBwYWdlTG9hZENvbXBsZXRlZChQYWdlJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBicm93c2luZ0NvbnRleHRSZW1vdmVkKEZyYW1lJikgPSAwOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Qcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwxMCArMTg5LDEwIEBAIGJvb2wg
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkVwaGVtZXJhbFMKIHsKICAgICAvLyBGSVhNRTogSW52
ZXN0aWdhdGUgaWYgd2UgY2FuIGRvIHdpdGggYSBzaW1wbGUgbGVuZ3RoIGNoZWNrIGluc3RlYWQg
b2YgZGVjb2RpbmcuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMTk0NQotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7Ci0gICAgaWYgKCFiYXNlNjRV
UkxEZWNvZGUobm9uY2UsIGRpZ2VzdCkpCisgICAgYXV0byBkaWdlc3QgPSBiYXNlNjRVUkxEZWNv
ZGUobm9uY2UpOworICAgIGlmICghZGlnZXN0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIGRpZ2VzdC5zaXplKCkgPT0gRXBoZW1lcmFsU291cmNlTm9uY2VSZXF1aXJlZE51bWJl
ck9mQnl0ZXM7CisgICAgcmV0dXJuIGRpZ2VzdC0+c2l6ZSgpID09IEVwaGVtZXJhbFNvdXJjZU5v
bmNlUmVxdWlyZWROdW1iZXJPZkJ5dGVzOwogfQogCiB2b2lkIFByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpzZXRFcGhlbWVyYWxTb3VyY2VOb25jZShFcGhlbWVyYWxTb3VyY2VOb25jZSYmIG5vbmNl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OSwxNCArNjksMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAog
ICAgIGlmIChidWZmZXIucG9zaXRpb24oKSA9PSBiZWdpbkhhc2hWYWx1ZSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7CiAgICAgU3Ry
aW5nVmlldyBoYXNoVmFsdWUoYmVnaW5IYXNoVmFsdWUsIGJ1ZmZlci5wb3NpdGlvbigpIC0gYmVn
aW5IYXNoVmFsdWUpOwotICAgIGlmICghYmFzZTY0RGVjb2RlKGhhc2hWYWx1ZSwgZGlnZXN0LCBC
YXNlNjRWYWxpZGF0ZVBhZGRpbmcpKSB7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGhh
c2hWYWx1ZSwgZGlnZXN0KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
fQogCi0gICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0s
IFdURk1vdmUoZGlnZXN0KSB9OworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NERlY29kZSho
YXNoVmFsdWUsIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZykpCisgICAgICAg
IHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyAqYWxnb3JpdGhtLCBXVEZNb3Zl
KCpkaWdlc3QpIH07CisKKyAgICBpZiAoYXV0byBkaWdlc3QgPSBiYXNlNjRVUkxEZWNvZGUoaGFz
aFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICph
bGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiB9CiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9n
cmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBidWZmZXIpCkBAIC0xMjQs
MTMgKzEyNSwxMyBAQCBPcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnCiAK
IE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0JiBlbmNvZGVkRGlnZXN0KQogewotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7Ci0g
ICAgaWYgKCFiYXNlNjREZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdlc3QsIGRpZ2VzdCwgQmFzZTY0
VmFsaWRhdGVQYWRkaW5nKSkgewotICAgICAgICBpZiAoIWJhc2U2NFVSTERlY29kZShlbmNvZGVk
RGlnZXN0LmRpZ2VzdCwgZGlnZXN0KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgfQorICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NERlY29kZShlbmNvZGVkRGlnZXN0
LmRpZ2VzdCwgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAg
cmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGVuY29kZWREaWdlc3QuYWxnb3Jp
dGhtLCBXVEZNb3ZlKCpkaWdlc3QpIH07CisKKyAgICBpZiAoYXV0byBkaWdlc3QgPSBiYXNlNjRV
UkxEZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdlc3QpKQorICAgICAgICByZXR1cm4gUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERpZ2VzdC5hbGdvcml0aG0sIFdURk1vdmUoKmRp
Z2VzdCkgfTsKIAotICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyBlbmNv
ZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZShkaWdlc3QpIH07CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIH0KIAogc3RhdGljIFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG0gdG9Dcnlw
dG9EaWdlc3RBbGdvcml0aG0oUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0g
YWxnb3JpdGhtKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhU
TUxBcmNoaXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTEsMTMgKzE5MSwxMyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6Omdl
bmVyYXRlCiAgICAgICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgp
OwogICAgICAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZERhdGE7CiAgICAgICAgIGlmICghc3RyY21w
KGNvbnRlbnRFbmNvZGluZywgcXVvdGVkUHJpbnRhYmxlKSkgewotICAgICAgICAgICAgcXVvdGVk
UHJpbnRhYmxlRW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhKTsKKyAgICAgICAg
ICAgIGVuY29kZWREYXRhID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgp
OwogICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNv
ZGVkRGF0YS5zaXplKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoIlxyXG4iLCAy
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCghc3RyY21wKGNvbnRlbnRF
bmNvZGluZywgYmFzZTY0KSk7CiAgICAgICAgICAgICAvLyBXZSBhcmUgbm90IHNwZWNpZnlpbmcg
aW5zZXJ0TEZzID0gdHJ1ZSBiZWxvdyBhcyBpdCB3b3VsZCBjdXQgdGhlIGxpbmVzIHdpdGggTEZz
IGFuZCBNSFRNTCByZXF1aXJlcyBDUkxGcy4KLSAgICAgICAgICAgIGJhc2U2NEVuY29kZShkYXRh
LCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YSk7CisgICAgICAgICAgICBlbmNvZGVkRGF0YSA9IGJh
c2U2NEVuY29kZShkYXRhLCBkYXRhTGVuZ3RoKTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBt
YXhpbXVtTGluZUxlbmd0aCA9IDc2OwogICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKICAg
ICAgICAgICAgIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRN
TFBhcnNlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDE2ICsx
OTIsMTkgQEAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gTUhUTUxQYXJzZXI6OnBhcgogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBW
ZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBzd2l0Y2ggKG1pbWVIZWFkZXIuY29udGVudFRyYW5z
ZmVyRW5jb2RpbmcoKSkgewotICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OgotICAgICAgICBp
ZiAoIWJhc2U2NERlY29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSwgZGF0YSkp
IHsKKyAgICBjYXNlIE1JTUVIZWFkZXI6OkJhc2U2NDogeworICAgICAgICBhdXRvIGRlY29kZWRE
YXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+c2l6ZSgpKTsKKyAg
ICAgICAgaWYgKCFkZWNvZGVkRGF0YSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlk
IGJhc2U2NCBjb250ZW50IGZvciBNSFRNTCBwYXJ0LiIpOwogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIH0KKyAgICAgICAgZGF0YSA9IFdURk1vdmUoKmRlY29kZWREYXRhKTsK
ICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgTUlNRUhlYWRlcjo6UXVvdGVkUHJpbnRh
YmxlOgotICAgICAgICBxdW90ZWRQcmludGFibGVEZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250
ZW50LT5zaXplKCksIGRhdGEpOworICAgICAgICBkYXRhID0gcXVvdGVkUHJpbnRhYmxlRGVjb2Rl
KGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+c2l6ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBNSU1FSGVhZGVyOjpTZXZlbkJpdDoKICAgICBjYXNlIE1JTUVIZWFkZXI6OkJpbmFyeToK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jb2NvYS9Qcml2
YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEwIEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQ6OmNhbGN1bGF0ZUEKIHsKICNpZiBIQVZFKFJTQV9CU1NBKQogICAgIHsKLSAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHNlcnZlclB1YmxpY0tleURhdGE7Ci0gICAgICAgIGlmICghYmFzZTY0VVJM
RGVjb2RlKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCwgc2VydmVyUHVibGljS2V5RGF0YSkpCisg
ICAgICAgIGF1dG8gc2VydmVyUHVibGljS2V5RGF0YSA9IGJhc2U2NFVSTERlY29kZShzZXJ2ZXJQ
dWJsaWNLZXlCYXNlNjRVUkwpOworICAgICAgICBpZiAoIXNlcnZlclB1YmxpY0tleURhdGEpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gc2VydmVyUHVibGljS2V5ID0g
YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzZXJ2ZXJQdWJsaWNLZXlEYXRh
LmRhdGEoKSBsZW5ndGg6c2VydmVyUHVibGljS2V5RGF0YS5zaXplKCldKTsKKyAgICAgICAgYXV0
byBzZXJ2ZXJQdWJsaWNLZXkgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVz
OnNlcnZlclB1YmxpY0tleURhdGEtPmRhdGEoKSBsZW5ndGg6c2VydmVyUHVibGljS2V5RGF0YS0+
c2l6ZSgpXSk7CiAKICAgICAgICAgLy8gRklYTUUoMjIyMDE4KTogQ2hlY2sgZXJyb3IuCiAgICAg
ICAgIG1fc291cmNlVW5saW5rYWJsZVRva2VuLmJsaW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9j
UlNBQlNTQVRva2VuQmxpbmRlckluc3RhbmNlKCkgaW5pdFdpdGhQdWJsaWNLZXk6c2VydmVyUHVi
bGljS2V5LmdldCgpIGVycm9yOm51bGxwdHJdKTsKQEAgLTUwLDcgKzUwLDcgQEAgYm9vbCBQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogICAgIGlmICghbV9zb3VyY2VVbmxpbmth
YmxlVG9rZW4ud2FpdGluZ1Rva2VuKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3Nv
dXJjZVVubGlua2FibGVUb2tlbi52YWx1ZUJhc2U2NFVSTCA9IFdURjo6YmFzZTY0VVJMRW5jb2Rl
KFttX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4gYmxpbmRlZE1lc3NhZ2VdLmJ5
dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuIGJsaW5kZWRNZXNzYWdl
XS5sZW5ndGgpOworICAgIG1fc291cmNlVW5saW5rYWJsZVRva2VuLnZhbHVlQmFzZTY0VVJMID0g
bWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0
aW5nVG9rZW4gYmxpbmRlZE1lc3NhZ2VdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4u
d2FpdGluZ1Rva2VuIGJsaW5kZWRNZXNzYWdlXS5sZW5ndGgpKTsKICAgICByZXR1cm4gdHJ1ZTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCk7CkBAIC02
NSwxMCArNjUsMTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBz
ZXJ2ZXJSZXNwb25zZURhdGE7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKHNlcnZlclJl
c3BvbnNlQmFzZTY0VVJMLCBzZXJ2ZXJSZXNwb25zZURhdGEpKQorICAgICAgICBhdXRvIHNlcnZl
clJlc3BvbnNlRGF0YSA9IGJhc2U2NFVSTERlY29kZShzZXJ2ZXJSZXNwb25zZUJhc2U2NFVSTCk7
CisgICAgICAgIGlmICghc2VydmVyUmVzcG9uc2VEYXRhKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBhdXRvIHNlcnZlclJlc3BvbnNlID0gYWRvcHROUyhbW05TRGF0YSBhbGxv
Y10gaW5pdFdpdGhCeXRlczpzZXJ2ZXJSZXNwb25zZURhdGEuZGF0YSgpIGxlbmd0aDpzZXJ2ZXJS
ZXNwb25zZURhdGEuc2l6ZSgpXSk7CisgICAgICAgIGF1dG8gc2VydmVyUmVzcG9uc2UgPSBhZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZlclJlc3BvbnNlRGF0YS0+ZGF0
YSgpIGxlbmd0aDpzZXJ2ZXJSZXNwb25zZURhdGEtPnNpemUoKV0pOwogCiAgICAgICAgIC8vIEZJ
WE1FKDIyMjAxOCk6IENoZWNrIGVycm9yLgogICAgICAgICBtX3NvdXJjZVVubGlua2FibGVUb2tl
bi5yZWFkeVRva2VuID0gW21fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBhY3Rp
dmF0ZVRva2VuV2l0aFNlcnZlclJlc3BvbnNlOnNlcnZlclJlc3BvbnNlLmdldCgpIGVycm9yOm51
bGxwdHJdOwpAQCAtNzcsOSArNzcsOSBAQCBib29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50Ojpj
YWxjdWxhdGVBCiAgICAgfQogCiAgICAgU291cmNlU2VjcmV0VG9rZW4gdG9rZW47Ci0gICAgdG9r
ZW4udG9rZW5CYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxpbmth
YmxlVG9rZW4ucmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmth
YmxlVG9rZW4ucmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmxlbmd0aCk7Ci0gICAgdG9rZW4ua2V5
SURCYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxpbmthYmxlVG9r
ZW4ucmVhZHlUb2tlbiBrZXlJZF0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFk
eVRva2VuIGtleUlkXS5sZW5ndGgpOwotICAgIHRva2VuLnNpZ25hdHVyZUJhc2U2NFVSTCA9IFdU
Rjo6YmFzZTY0VVJMRW5jb2RlKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHNp
Z25hdHVyZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHNpZ25h
dHVyZV0ubGVuZ3RoKTsKKyAgICB0b2tlbi50b2tlbkJhc2U2NFVSTCA9IG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiB0b2tlbkNv
bnRlbnRdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiB0b2tlbkNv
bnRlbnRdLmxlbmd0aCkpOworICAgIHRva2VuLmtleUlEQmFzZTY0VVJMID0gbWFrZVN0cmluZyhi
YXNlNjRVUkxFbmNvZGVkKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIGtleUlk
XS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRdLmxlbmd0
aCkpOworICAgIHRva2VuLnNpZ25hdHVyZUJhc2U2NFVSTCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlZChbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1cmVdLmJ5
dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1cmVdLmxlbmd0
aCkpOwogCiAgICAgbV9zb3VyY2VTZWNyZXRUb2tlbiA9IFdURk1vdmUodG9rZW4pOwogICAgIHJl
dHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAko
cmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4g
QmFzZTY0VXRpbGl0aWVzOjpidG8KICAgICBpZiAoIXN0cmluZ1RvRW5jb2RlLmlzQWxsTGF0aW4x
KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsK
IAotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkpOworICAg
IHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkp
KTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0b2IoY29uc3Qg
U3RyaW5nJiBlbmNvZGVkU3RyaW5nKQpAQCAtNDYsMTEgKzQ2LDExIEBAIEV4Y2VwdGlvbk9yPFN0
cmluZz4gQmFzZTY0VXRpbGl0aWVzOjphdG8KICAgICBpZiAoZW5jb2RlZFN0cmluZy5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgVmVjdG9yPGNoYXI+IG91dDsKLSAg
ICBpZiAoIWJhc2U2NERlY29kZShlbmNvZGVkU3RyaW5nLCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFk
ZGluZyB8IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzIHwgQmFzZTY0RGlzY2FyZFZlcnRp
Y2FsVGFiKSkKKyAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGVuY29kZWRTdHJp
bmcsIHsgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nLCBCYXNlNjREZWNvZGVP
cHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcywgQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlz
Y2FyZFZlcnRpY2FsVGFiIH0pOworICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAotICAgIHJldHVybiBTdHJp
bmcob3V0LmRhdGEoKSwgb3V0LnNpemUoKSk7CisgICAgcmV0dXJuIFN0cmluZyhkZWNvZGVkRGF0
YS0+ZGF0YSgpLCBkZWNvZGVkRGF0YS0+c2l6ZSgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODQ4LDkgKzE4NDgsOCBAQCB2b2lkIFBhZ2U6OnVzZXJTdHls
ZVNoZWV0TG9jYXRpb25DaGFuZ2VkCiAgICAgaWYgKHVybC5wcm90b2NvbElzRGF0YSgpICYmIHVy
bC5zdHJpbmcoKS5zdGFydHNXaXRoKCJkYXRhOnRleHQvY3NzO2NoYXJzZXQ9dXRmLTg7YmFzZTY0
LCIpKSB7CiAgICAgICAgIG1fZGlkTG9hZFVzZXJTdHlsZVNoZWV0ID0gdHJ1ZTsKIAotICAgICAg
ICBWZWN0b3I8Y2hhcj4gc3R5bGVTaGVldEFzVVRGODsKLSAgICAgICAgaWYgKGJhc2U2NERlY29k
ZShkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnN0cmluZygpLnN1YnN0cmluZygzNSkpLCBz
dHlsZVNoZWV0QXNVVEY4LCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykpCi0gICAgICAg
ICAgICBtX3VzZXJTdHlsZVNoZWV0ID0gU3RyaW5nOjpmcm9tVVRGOChzdHlsZVNoZWV0QXNVVEY4
LmRhdGEoKSwgc3R5bGVTaGVldEFzVVRGOC5zaXplKCkpOworICAgICAgICBpZiAoYXV0byBzdHls
ZVNoZWV0QXNVVEY4ID0gYmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwu
c3RyaW5nKCkuc3Vic3RyaW5nKDM1KSksIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNl
c0FuZE5ld0xpbmVzKSkKKyAgICAgICAgICAgIG1fdXNlclN0eWxlU2hlZXQgPSBTdHJpbmc6OmZy
b21VVEY4KHN0eWxlU2hlZXRBc1VURjgtPmRhdGEoKSwgc3R5bGVTaGVldEFzVVRGOC0+c2l6ZSgp
KTsKICAgICB9CiAKICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xl
YXJLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMiArNzksMTUgQEAgc3RhdGljIE9wdGlv
bmFsPFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPgogICAgICAgICAgICAgaWYgKCFrZXlWYWx1ZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIEtleUlEVHlwZSBr
ZXlJRERhdGE7Ci0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SGFuZGxlVmFsdWVEYXRh
OwotICAgICAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlJRCwgeyBrZXlJRERh
dGEgfSkgfHwgIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleVZhbHVlLCB7IGtleUhhbmRsZVZhbHVl
RGF0YSB9KSkKKyAgICAgICAgICAgIGF1dG8ga2V5SUREYXRhID0gYmFzZTY0VVJMRGVjb2RlKGtl
eUlEKTsKKyAgICAgICAgICAgIGlmICgha2V5SUREYXRhKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgICAgICBhdXRvIGtleUhhbmRsZVZhbHVlRGF0YSA9
IGJhc2U2NFVSTERlY29kZShrZXlWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIWtleUhhbmRsZVZh
bHVlRGF0YSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGRl
Y29kZWRLZXlzLmFwcGVuZChLZXlIYW5kbGU6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246Oktl
eVN0YXR1czo6VXNhYmxlLCBXVEZNb3ZlKGtleUlERGF0YSksIFdURk1vdmUoa2V5SGFuZGxlVmFs
dWVEYXRhKSkpOworICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtleUhhbmRsZTo6Y3Jl
YXRlKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFdURk1vdmUoKmtleUlE
RGF0YSksIFdURk1vdmUoKmtleUhhbmRsZVZhbHVlRGF0YSkpKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9KTsKICAgICBpZiAoIXZhbGlkRm9ybWF0KQpAQCAtMjE1LDggKzIx
OCw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5aWRzRnIKICAgICAvLyAi
a2lkcyIKICAgICAvLyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFy
cmF5IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRh
aW5pbmcgdGhlIGtleSBJRCB2YWx1ZS4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5
SWRDb3VudDsgaSsrKSB7Ci0gICAgICAgIFN0cmluZyBrZXlJZCA9IFdURjo6YmFzZTY0VVJMRW5j
b2RlKCZkYXRhW2luZGV4XSwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpOwotICAgICAgICBr
ZXlJZHNBcnJheS0+cHVzaFN0cmluZyhrZXlJZCk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNo
U3RyaW5nKG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgmZGF0YVtpbmRleF0sIENsZWFyS2V5
OjpLZXlJRFNpemVJbkJ5dGVzKSkpOwogICAgICAgICBpbmRleCArPSBDbGVhcktleTo6S2V5SURT
aXplSW5CeXRlczsKICAgICB9CiAKQEAgLTI0Myw4ICsyNDUsNyBAQCBzdGF0aWMgUmVmPFNoYXJl
ZEJ1ZmZlcj4gZXh0cmFjdEtleUlkRnJvCiAgICAgLy8gVGhlIGZvcm1hdCBpcyBhIEpTT04gb2Jq
ZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgogICAgIC8vICJraWRzIgogICAg
IC8vIEFuIGFycmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhl
IGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUg
a2V5IElEIHZhbHVlLgotICAgIFN0cmluZyBrZXlJZCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKGlu
aXREYXRhLmRhdGEoKSwgaW5pdERhdGEuc2l6ZSgpKTsKLSAgICBrZXlJZHNBcnJheS0+cHVzaFN0
cmluZyhrZXlJZCk7CisgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcobWFrZVN0cmluZyhiYXNl
NjRVUkxFbmNvZGVkKGluaXREYXRhLmRhdGEoKSwgaW5pdERhdGEuc2l6ZSgpKSkpOwogCiAgICAg
b2JqZWN0LT5zZXRBcnJheSgia2lkcyIsIFdURk1vdmUoa2V5SWRzQXJyYXkpKTsKICAgICBDU3Ry
aW5nIGpzb25EYXRhID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkBAIC01ODcsNyAr
NTg4LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAg
ICAgICAgYXV0byBhcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlTdG9yZSkgewogICAgICAgICAgICAgICAgIEFTU0VS
VChrZXktPmlkKCkuc2l6ZSgpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSk7Ci0gICAgICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNv
ZGUoa2V5LT5pZCgpLmRhdGEoKSwga2V5LT5pZCgpLnNpemUoKSkpOworICAgICAgICAgICAgICAg
IGFycmF5LT5wdXNoU3RyaW5nKG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChrZXktPmlkKCku
ZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cm9vdE9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGFycmF5KSk7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1G
YWlyUGxheVN0cmVhbWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDExICsx
MTMsMTEgQEAgc3RhdGljIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4gZXh0cmFjdAogICAgICAg
ICBpZiAoIWtleUlEKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgVmVjdG9yPGNo
YXI+IHNpbmZEYXRhOwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0RGVjb2RlKGtleUlELCB7IHNp
bmZEYXRhIH0sIFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpKQorICAgICAgICBh
dXRvIHNpbmZEYXRhID0gYmFzZTY0RGVjb2RlKGtleUlELCBCYXNlNjREZWNvZGVPcHRpb25zOjpJ
Z25vcmVTcGFjZXNBbmROZXdMaW5lcyk7CisgICAgICAgIGlmICghc2luZkRhdGEpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBzaW5mcy51bmNoZWNrZWRBcHBlbmQoU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoV1RGTW92ZShzaW5mRGF0YSkpKTsKKyAgICAgICAgc2luZnMudW5jaGVja2Vk
QXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKnNpbmZEYXRhKSkpOwogICAgIH0K
IAogICAgIHJldHVybiBzaW5mczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNzE1LDcgKzcxNSw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBs
YXlTdHJlYW1pbmcKICAgICAgICAgaWRlbnRpZmllciA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxv
Y10gaW5pdFdpdGhEYXRhOmluaXREYXRhLT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBlbmNvZGluZzpO
U1VURjhTdHJpbmdFbmNvZGluZ10pOwogI2lmIEhBVkUoRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19J
TklUREFUQSkKICAgICBlbHNlIGlmIChpbml0RGF0YVR5cGUgPT0gSW5pdERhdGFSZWdpc3RyeTo6
Y2VuY05hbWUoKSkgewotICAgICAgICBTdHJpbmcgcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZShp
bml0RGF0YS0+ZGF0YSgpLCBpbml0RGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgYXV0byBwc3NoU3Ry
aW5nID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGluaXREYXRhLT5kYXRhKCksIGluaXREYXRh
LT5zaXplKCkpKTsKICAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhID0gW05TSlNPTlNlcmlhbGl6
YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7IEAicHNzaCI6IChOU1N0cmluZyopcHNzaFN0cmlu
ZyB9IG9wdGlvbnM6TlNKU09OV3JpdGluZ1ByZXR0eVByaW50ZWQgZXJyb3I6bmlsXTsKICAgICB9
CiAjZW5kaWYKQEAgLTg1MCwxMSArODUwLDExIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFp
clBsYXlTdHJlYW1pbmcKICAgICAgICAgICAgIGlmICgha2V5SURTdHJpbmcpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SURW
ZWN0b3I7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShrZXlJRFN0cmluZywga2V5SURW
ZWN0b3IpKQorICAgICAgICAgICAgYXV0byBrZXlJRFZlY3RvciA9IGJhc2U2NERlY29kZShrZXlJ
RFN0cmluZyk7CisgICAgICAgICAgICBpZiAoa2V5SURWZWN0b3IpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBhdXRvIGtleUlEID0gU2hhcmVkQnVmZmVyOjpj
cmVhdGUoV1RGTW92ZShrZXlJRFZlY3RvcikpOworICAgICAgICAgICAgYXV0byBrZXlJRCA9IFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKmtleUlEVmVjdG9yKSk7CiAgICAgICAgICAgICBh
dXRvIGZvdW5kSW5kZXggPSBtX2N1cnJlbnRSZXF1ZXN0LnZhbHVlKCkucmVxdWVzdHMuZmluZE1h
dGNoaW5nKFsmXSAoYXV0byYgcmVxdWVzdCkgewogICAgICAgICAgICAgICAgIGF1dG8ga2V5SURz
ID0ga2V5SURzRm9yUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKICAgICAgICAgICAgICAgICByZXR1
cm4ga2V5SURzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgUmVmPFNoYXJlZEJ1ZmZlcj4mIGlkKSB7
CkBAIC04ODUsMTAgKzg4NSwxMCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3Ry
ZWFtaW5nCiAgICAgICAgICAgICAgICAgYXV0byBwYXlsb2FkU3RyaW5nID0gcGF5bG9hZEZpbmRS
ZXN1bHRzLT52YWx1ZS0+YXNTdHJpbmcoKTsKICAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWRT
dHJpbmcpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICBWZWN0b3I8dWludDhfdD4gcGF5bG9hZFZlY3RvcjsKLSAgICAgICAgICAgICAgICBpZiAoIWJh
c2U2NERlY29kZShwYXlsb2FkU3RyaW5nLCBwYXlsb2FkVmVjdG9yKSkKKyAgICAgICAgICAgICAg
ICBhdXRvIHBheWxvYWRWZWN0b3IgPSBiYXNlNjREZWNvZGUocGF5bG9hZFN0cmluZyk7CisgICAg
ICAgICAgICAgICAgaWYgKCFwYXlsb2FkVmVjdG9yKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYXV0byBwYXlsb2FkRGF0YSA9IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKFdURk1vdmUocGF5bG9hZFZlY3RvcikpOworICAgICAgICAgICAgICAgIGF1dG8g
cGF5bG9hZERhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpwYXlsb2FkVmVjdG9y
KSk7CiAgICAgICAgICAgICAgICAgW3JlcXVlc3QgcHJvY2Vzc0NvbnRlbnRLZXlSZXNwb25zZTpb
UEFMOjpnZXRBVkNvbnRlbnRLZXlSZXNwb25zZUNsYXNzKCkgY29udGVudEtleVJlc3BvbnNlV2l0
aEZhaXJQbGF5U3RyZWFtaW5nS2V5UmVzcG9uc2VEYXRhOnBheWxvYWREYXRhLT5jcmVhdGVOU0Rh
dGEoKS5nZXQoKV1dOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0xMTk1LDggKzExOTUsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFt
aW5nCiAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAg
ICAgICAgICAgIGF1dG8mIGtleUlEID0gcmVxdWVzdERhdGEuZmlyc3Q7CiAgICAgICAgICAgICBh
dXRvJiBwYXlsb2FkID0gcmVxdWVzdERhdGEuc2Vjb25kOwotICAgICAgICAgICAgZW50cnktPnNl
dFN0cmluZygia2V5SUQiLCBiYXNlNjRFbmNvZGUoa2V5SUQtPmRhdGEoKSwga2V5SUQtPnNpemUo
KSkpOwotICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29k
ZShwYXlsb2FkLmdldCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAg
ICAgZW50cnktPnNldFN0cmluZygia2V5SUQiLCBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoa2V5
SUQtPmRhdGEoKSwga2V5SUQtPnNpemUoKSkpKTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJp
bmcoInBheWxvYWQiLCBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocGF5bG9hZC5nZXQoKS5ieXRl
cywgcGF5bG9hZC5nZXQoKS5sZW5ndGgpKSk7CiAgICAgICAgICAgICByZXF1ZXN0SlNPTi0+cHVz
aE9iamVjdChXVEZNb3ZlKGVudHJ5KSk7CiAgICAgICAgIH0KICAgICAgICAgYXV0byByZXF1ZXN0
QnVmZmVyID0gdXRmOEJ1ZmZlcihyZXF1ZXN0SlNPTi0+dG9KU09OU3RyaW5nKCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMTAgKzEzMCw3IEBAIFN0cmluZyBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVIKICAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwogCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2
NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFn
ZS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSAr
ICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIs
IG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKGVuY29kZWRJbWFnZS5kYXRhKCks
IGVuY29kZWRJbWFnZS5zaXplKCkpKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTAgKzE3NCw3
IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QKIAogU3RyaW5nIGRh
dGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgVmVj
dG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIo
ZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4g
ImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgcmV0dXJu
IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQo
Q0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpKSk7CiB9CiAKIFN0
cmluZyBkYXRhVVJMKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDcgKzEwMCw3IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVlRm9udE5hbWUoKQog
ICAgIEdVSUQgZm9udFV1aWQ7CiAgICAgQ29DcmVhdGVHdWlkKCZmb250VXVpZCk7CiAKLSAgICBT
dHJpbmcgZm9udE5hbWUgPSBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZv
bnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSk7CisgICAgYXV0byBmb250TmFtZSA9IG1ha2VTdHJp
bmcoYmFzZTY0RW5jb2RlZChyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXpl
b2YoZm9udFV1aWQpKSk7CiAgICAgQVNTRVJUKGZvbnROYW1lLmxlbmd0aCgpIDwgTEZfRkFDRVNJ
WkUpOwogICAgIHJldHVybiBmb250TmFtZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZv
bnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQp
OwogCi0gICAgU3RyaW5nIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9udE5hbWUg
PSBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRV
dWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSkpOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8
IExGX0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0JKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIxOSw3ICsyMTksNyBAQCBzdGF0aWMgU3RyaW5nIHNp
Z25lZFB1YmxpY0tleUFuZENoYWxsZW5nCiAgICAgaWYgKFNlY0FzbjFFbmNvZGVJdGVtKGNvZGVy
LCAmc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLCBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2VUZW1wbGF0ZSwgJmVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UpICE9IG5vRXJy
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVu
Y29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZS5MZW5ndGgpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVu
Y29kZWQoZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2ln
bmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxlbmd0aCkpOwogfQogCiBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19FTkQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYlJlZ2lzdHJ5SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgUmVmPFJlc291cmNlSGFuZGxlPiBjcmVh
dGVCbG9iUmVzCiAgICAgcmV0dXJuIGJsb2JSZWdpc3RyeSgpLmJsb2JSZWdpc3RyeUltcGwoKS0+
Y3JlYXRlUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50KTsKIH0KIAotc3RhdGljIHZvaWQg
bG9hZEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYg
ZGF0YSkKK3N0YXRpYyB2b2lkIGxvYWRCbG9iUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtp
bmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50
aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgYXV0byogYmxvYkRhdGEgPSBibG9i
UmVnaXN0cnkoKS5ibG9iUmVnaXN0cnlJbXBsKCktPmdldEJsb2JEYXRhRnJvbVVSTChyZXF1ZXN0
LnVybCgpKTsKICAgICBCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoYmxvYkRhdGEsIHJlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5k
bGUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcg
QEAgbmFtZXNwYWNlIHsKIAogY2xhc3MgQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIgOiBw
dWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgewogcHVibGljOgotICAgIEJsb2JSZXNvdXJjZVN5
bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PGNoYXI+Jik7CisgICAgQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJv
ciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mKTsKIAogICAgIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJlc3BvbnNlJiYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgZmluYWw7CiAgICAgdm9pZCBkaWRGYWlsKFJl
c291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIGZpbmFsOwpAQCAtODUsMTAgKzg1
LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUmVzb3VyY2VFcnJvciYgbV9lcnJvcjsKICAg
ICBSZXNvdXJjZVJlc3BvbnNlJiBtX3Jlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFyPiYgbV9kYXRh
OworICAgIFZlY3Rvcjx1aW50OF90PiYgbV9kYXRhOwogfTsKIAotQmxvYlJlc291cmNlU3luY2hy
b25vdXNMb2FkZXI6OkJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3Im
IGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQor
QmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXI6OkJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9h
ZGVyKFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVj
dG9yPHVpbnQ4X3Q+JiBkYXRhKQogICAgIDogbV9lcnJvcihlcnJvcikKICAgICAsIG1fcmVzcG9u
c2UocmVzcG9uc2UpCiAgICAgLCBtX2RhdGEoZGF0YSkKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lk
IEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRSCiAKICAgICAvLyBSZWFkIGFsbCB0
aGUgZGF0YS4KICAgICBtX2RhdGEucmVzaXplKHN0YXRpY19jYXN0PHNpemVfdD4ocmVzcG9uc2Uu
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpKTsKLSAgICBzdGF0aWNfY2FzdDxCbG9iUmVzb3VyY2VI
YW5kbGUqPihoYW5kbGUpLT5yZWFkU3luYyhtX2RhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+
KG1fZGF0YS5zaXplKCkpKTsKKyAgICBzdGF0aWNfY2FzdDxCbG9iUmVzb3VyY2VIYW5kbGUqPiho
YW5kbGUpLT5yZWFkU3luYyhyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2RhdGEuZGF0YSgpKSwg
c3RhdGljX2Nhc3Q8aW50PihtX2RhdGEuc2l6ZSgpKSk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKIH0KIApAQCAtMTQxLDcgKzE0MSw3IEBAIFJlZjxCbG9iUmVzb3VyY2VIYW5kbGU+IEJsb2JS
ZXNvdXJjZUhhbmQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCbG9iUmVzb3VyY2VIYW5kbGUo
YmxvYkRhdGEsIHJlcXVlc3QsIGNsaWVudCwgdHJ1ZSkpOwogfQogCi12b2lkIEJsb2JSZXNvdXJj
ZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSogYmxvYkRhdGEsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIEJsb2JSZXNv
dXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSogYmxvYkRhdGEs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAg
aWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShyZXF1ZXN0Lmh0dHBNZXRob2QoKSwg
ImdldCIpKSB7CiAgICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJvcih3ZWJLaXRCbG9iUmVzb3Vy
Y2VEb21haW4sIHN0YXRpY19jYXN0PGludD4oRXJyb3I6Ok1ldGhvZE5vdEFsbG93ZWQpLCByZXNw
b25zZS51cmwoKSwgIlJlcXVlc3QgbWV0aG9kIG11c3QgYmUgR0VUIik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxv
YlJlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3Mg
QmxvYlJlc291cmNlSGFuZGxlIGZpbmFsIDogcHVibGljIAogcHVibGljOgogICAgIHN0YXRpYyBS
ZWY8QmxvYlJlc291cmNlSGFuZGxlPiBjcmVhdGVBc3luYyhCbG9iRGF0YSosIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50Kik7CiAKLSAgICBzdGF0aWMgdm9pZCBs
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEJsb2JEYXRhKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEp
OworICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQmxvYkRhdGEqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYs
IFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAKICAgICB2b2lkIHN0YXJ0KCk7CiAgICAgaW50IHJl
YWRTeW5jKGNoYXIqLCBpbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9DcmVkZW50aWFsQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ3JlZGVudGlhbEJhc2UuaCIKIAogI2lu
Y2x1ZGUgIkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC05NCw0ICs5NSwxMCBAQCBib29sIENyZWRlbnRpYWxCYXNl
Ojpjb21wYXJlKGNvbnN0IENyZWRlCiAgICAgcmV0dXJuIENyZWRlbnRpYWw6OnBsYXRmb3JtQ29t
cGFyZShhLCBiKTsKIH0KIAorU3RyaW5nIENyZWRlbnRpYWxCYXNlOjpzZXJpYWxpemF0aW9uRm9y
QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkgY29uc3QKK3sKKyAgICBhdXRvIGNyZWRlbnRpYWxT
dHJpbmdEYXRhID0gbWFrZVN0cmluZyhtX3VzZXIsICc6JywgbV9wYXNzd29yZCkudXRmOCgpOwor
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRpYWxT
dHJpbmdEYXRhKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQ3JlZGVudGlhbEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNyArMzksNiBAQCBlbnVtIENyZWRlbnRpYWxQZXJzaXN0ZW5jZSB7CiB9OwogCiBjbGFz
cyBDcmVkZW50aWFsQmFzZSB7Ci0KIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlz
RW1wdHkoKSBjb25zdDsKICAgICAKQEAgLTUyLDYgKzUxLDggQEAgcHVibGljOgogCiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIGJvb2wgY29tcGFyZShjb25zdCBDcmVkZW50aWFsJiwgY29uc3Qg
Q3JlZGVudGlhbCYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIFdF
QkNPUkVfRVhQT1JUIENyZWRlbnRpYWxCYXNlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ3JlZGVu
dGlhbEJhc2UoY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkLCBDcmVk
ZW50aWFsUGVyc2lzdGVuY2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9EYXRhVVJMRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDgsMzYgKzE0OCwyNiBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPERlY29kZVRh
c2s+IGNyZWF0CiAgICAgKTsKIH0KIAotc3RhdGljIGJvb2wgZGVjb2RlQmFzZTY0KERlY29kZVRh
c2smIHRhc2ssIE1vZGUgbW9kZSkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRl
Y29kZUJhc2U2NChjb25zdCBEZWNvZGVUYXNrJiB0YXNrLCBNb2RlIG1vZGUpCiB7Ci0gICAgVmVj
dG9yPGNoYXI+IGJ1ZmZlcjsKLSAgICBpZiAobW9kZSA9PSBNb2RlOjpGb3JnaXZpbmdCYXNlNjQp
IHsKLSAgICAgICAgYXV0byB1bmVzY2FwZWRTdHJpbmcgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5j
ZXModGFzay5lbmNvZGVkRGF0YS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpOwotICAgICAgICBp
ZiAoIWJhc2U2NERlY29kZSh1bmVzY2FwZWRTdHJpbmcsIGJ1ZmZlciwgQmFzZTY0VmFsaWRhdGVQ
YWRkaW5nIHwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgfCBCYXNlNjREaXNjYXJkVmVy
dGljYWxUYWIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7CisgICAg
c3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBNb2RlOjpGb3JnaXZpbmdCYXNlNjQ6CisgICAgICAg
IHJldHVybiBiYXNlNjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRhc2suZW5jb2Rl
ZERhdGEpLCB7IEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZywgQmFzZTY0RGVj
b2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMsIEJhc2U2NERlY29kZU9wdGlvbnM6
OkRpc2NhcmRWZXJ0aWNhbFRhYn0pOworCisgICAgY2FzZSBNb2RlOjpMZWdhY3k6CiAgICAgICAg
IC8vIEZpcnN0IHRyeSBiYXNlNjR1cmwuCi0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKHRh
c2suZW5jb2RlZERhdGEudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBidWZmZXIpKSB7Ci0gICAg
ICAgICAgICAvLyBEaWRuJ3Qgd29yaywgdHJ5IHVuZXNjYXBpbmcgYW5kIGRlY29kaW5nIGFzIGJh
c2U2NC4KLSAgICAgICAgICAgIGF1dG8gdW5lc2NhcGVkU3RyaW5nID0gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKHRhc2suZW5jb2RlZERhdGEudG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKLSAg
ICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKHVuZXNjYXBlZFN0cmluZywgYnVmZmVyLCBCYXNl
NjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyB8IEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRv
IGRlY29kZWREYXRhID0gYmFzZTY0VVJMRGVjb2RlKHRhc2suZW5jb2RlZERhdGEpKQorICAgICAg
ICAgICAgcmV0dXJuIGRlY29kZWREYXRhOworICAgICAgICAvLyBEaWRuJ3Qgd29yaywgdHJ5IHVu
ZXNjYXBpbmcgYW5kIGRlY29kaW5nIGFzIGJhc2U2NC4KKyAgICAgICAgcmV0dXJuIGJhc2U2NERl
Y29kZShkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModGFzay5lbmNvZGVkRGF0YSksIHsgQmFzZTY0
RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMsIEJhc2U2NERlY29kZU9wdGlv
bnM6OkRpc2NhcmRWZXJ0aWNhbFRhYiB9KTsKICAgICB9Ci0gICAgYnVmZmVyLnNocmlua1RvRml0
KCk7Ci0gICAgdGFzay5yZXN1bHQuZGF0YSA9IFdURk1vdmUoYnVmZmVyKTsKLQotICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBkZWNvZGVFc2NhcGVkKERlY29kZVRhc2smIHRhc2sp
CitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGRlY29kZUVzY2FwZWQoY29uc3QgRGVjb2RlVGFzayYg
dGFzaykKIHsKICAgICBUZXh0RW5jb2RpbmcgZW5jb2RpbmdGcm9tQ2hhcnNldCh0YXNrLnJlc3Vs
dC5jaGFyc2V0KTsKICAgICBhdXRvJiBlbmNvZGluZyA9IGVuY29kaW5nRnJvbUNoYXJzZXQuaXNW
YWxpZCgpID8gZW5jb2RpbmdGcm9tQ2hhcnNldCA6IFVURjhFbmNvZGluZygpOwotICAgIGF1dG8g
YnVmZmVyID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKHRhc2suZW5jb2RlZERhdGEs
IGVuY29kaW5nKTsKLQotICAgIGJ1ZmZlci5zaHJpbmtUb0ZpdCgpOwotICAgIHRhc2sucmVzdWx0
LmRhdGEgPSBXVEZNb3ZlKGJ1ZmZlcik7CisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlc0FzRGF0YSh0YXNrLmVuY29kZWREYXRhLCBlbmNvZGluZyk7CiB9CiAKIHN0YXRpYyBPcHRp
b25hbDxSZXN1bHQ+IGRlY29kZVN5bmNocm9ub3VzbHkoRGVjb2RlVGFzayYgdGFzaywgTW9kZSBt
b2RlKQpAQCAtMTg2LDExICsxNzYsMTQgQEAgc3RhdGljIE9wdGlvbmFsPFJlc3VsdD4gZGVjb2Rl
U3luY2hyb25vdQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKHRhc2su
aXNCYXNlNjQpIHsKLSAgICAgICAgaWYgKCFkZWNvZGVCYXNlNjQodGFzaywgbW9kZSkpCisgICAg
ICAgIGF1dG8gZGVjb2RlZERhdGEgPSBkZWNvZGVCYXNlNjQodGFzaywgbW9kZSk7CisgICAgICAg
IGlmICghZGVjb2RlZERhdGEpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICB0YXNrLnJlc3VsdC5kYXRhID0gV1RGTW92ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxz
ZQotICAgICAgICBkZWNvZGVFc2NhcGVkKHRhc2spOworICAgICAgICB0YXNrLnJlc3VsdC5kYXRh
ID0gZGVjb2RlRXNjYXBlZCh0YXNrKTsKIAorICAgIHRhc2sucmVzdWx0LmRhdGEuc2hyaW5rVG9G
aXQoKTsKICAgICByZXR1cm4gV1RGTW92ZSh0YXNrLnJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmgJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERl
Y29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBzdHJ1Y3QgUmVzdWx0IHsK
ICAgICBTdHJpbmcgbWltZVR5cGU7CiAgICAgU3RyaW5nIGNoYXJzZXQ7CiAgICAgU3RyaW5nIGNv
bnRlbnRUeXBlOwotICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIFZlY3Rvcjx1aW50OF90PiBk
YXRhOwogfTsKIAogdXNpbmcgRGVjb2RlQ29tcGxldGlvbkhhbmRsZXIgPSBXVEY6OkZ1bmN0aW9u
PHZvaWQgKE9wdGlvbmFsPFJlc3VsdD4pPjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmZhaWx1
cmVUaW1lckZpcmVkKCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZXNv
dXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFs
c1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291
cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxz
UG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBp
ZiAoYXV0byBjb25zdHJ1Y3RvciA9IGJ1aWx0aW5SZXNvdXJjZUhhbmRsZVN5bmNocm9ub3VzTG9h
ZGVyTWFwKCkuZ2V0KHJlcXVlc3QudXJsKCkucHJvdG9jb2woKS50b1N0cmluZ1dpdGhvdXRDb3B5
aW5nKCkpKSB7CiAgICAgICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIHJlcXVlc3QsIHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIGNsYXNzIEN1cmxSZXNvdXJjZUhh
bmRsZURlbGVnYXRlOwogY2xhc3MgUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxS
ZXNvdXJjZUhhbmRsZT4sIHB1YmxpYyBBdXRoZW50aWNhdGlvbkNsaWVudCB7CiBwdWJsaWM6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlKE5l
dHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVD
bGllbnQqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29s
IHNob3VsZENvbnRlbnRFbmNvZGluZ1NuaWZmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3Im
LCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250
ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJl
c291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZXNvdXJjZUhhbmRsZSgpOwogCiAjaWYgUExB
VEZPUk0oQ09DT0EpIHx8IFVTRShDRlVSTENPTk5FQ1RJT04pCkBAIC0xOTMsNyArMTkzLDcgQEAg
cHVibGljOgogICAgIHR5cGVkZWYgUmVmPFJlc291cmNlSGFuZGxlPiAoKkJ1aWx0aW5Db25zdHJ1
Y3RvcikoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVu
dCogY2xpZW50KTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJ1aWx0aW5Db25zdHJ1Y3Rvcihj
b25zdCBBdG9tU3RyaW5nJiBwcm90b2NvbCwgQnVpbHRpbkNvbnN0cnVjdG9yKTsKIAotICAgIHR5
cGVkZWYgdm9pZCAoKkJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlcikoTmV0d29ya2luZ0NvbnRleHQq
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3Vy
Y2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIHR5
cGVkZWYgdm9pZCAoKkJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlcikoTmV0d29ya2luZ0NvbnRleHQq
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3Vy
Y2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyQnVpbHRpblN5bmNocm9ub3VzTG9hZGVyKGNvbnN0IEF0b21T
dHJpbmcmIHByb3RvY29sLCBCdWlsdGluU3luY2hyb25vdXNMb2FkZXIpOwogCiBwcm90ZWN0ZWQ6
CkBAIC0yMTMsNyArMjEzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjaGVkdWxlRmFpbHVyZShG
YWlsdXJlVHlwZSk7CiAKICAgICBib29sIHN0YXJ0KCk7Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZv
cm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBzdGF0aWMgdm9pZCBw
bGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJv
ciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgdm9p
ZCByZWZBdXRoZW50aWNhdGlvbkNsaWVudCgpIG92ZXJyaWRlIHsgcmVmKCk7IH0KICAgICB2b2lk
IGRlcmVmQXV0aGVudGljYXRpb25DbGllbnQoKSBvdmVycmlkZSB7IGRlcmVmKCk7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hy
b25vdXNMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRS
ZWNlaXZlCiAKIHZvaWQgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKFJl
c291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBpbnQgLypl
bmNvZGVkRGF0YUxlbmd0aCovKQogewotICAgIG1fZGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsK
KyAgICBtX2RhdGEuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEp
LCBsZW5ndGgpOwogfQogCiB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRGaW5pc2hM
b2FkaW5nKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKGJvb2wgYWxsb3cpIHsg
bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gYWxsb3c7IH0KICAgICBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KLSAgICBWZWN0
b3I8Y2hhcj4mIG11dGFibGVEYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgVmVjdG9yPHVp
bnQ4X3Q+JiBtdXRhYmxlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIGNvbnN0IFJlc291
cmNlRXJyb3ImIGVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvcjsgfQogICAgIFN5bmNocm9u
b3VzTG9hZGVyTWVzc2FnZVF1ZXVlJiBtZXNzYWdlUXVldWUoKSB7IHJldHVybiBtX21lc3NhZ2VR
dWV1ZS5nZXQoKTsgfQogCkBAIC03NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1f
YWxsb3dTdG9yZWRDcmVkZW50aWFscyB7IGZhbHNlIH07CiAgICAgUmVzb3VyY2VSZXNwb25zZSBt
X3Jlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IG1fZGF0YTsKICAgICBSZXNvdXJjZUVycm9yIG1fZXJyb3I7CiAgICAgUmVmPFN5bmNocm9ub3Vz
TG9hZGVyTWVzc2FnZVF1ZXVlPiBtX21lc3NhZ2VRdWV1ZTsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVD
Rk5ldC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDkg
Kzg1LDcgQEAgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZEYXRhUgogCiBzdGF0
aWMgdm9pZCBhcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcihSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7Ci0gICAgU3RyaW5nIGF1dGhl
bnRpY2F0aW9uSGVhZGVyID0gIkJhc2ljICIgKyBiYXNlNjRFbmNvZGUoU3RyaW5nKGNyZWRlbnRp
YWwudXNlcigpICsgIjoiICsgY3JlZGVudGlhbC5wYXNzd29yZCgpKS51dGY4KCkpOwotCi0gICAg
cmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24s
IGF1dGhlbnRpY2F0aW9uSGVhZGVyKTsKKyAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChI
VFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlvbiwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9uRm9y
QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkpOwogfQogCiBSZXNvdXJjZUhhbmRsZUludGVybmFs
Ojp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpCkBAIC01MjQsNyArNTIyLDcgQEAgc3RhdGljIHZv
aWQgZW1wdHlQZXJmb3JtKHZvaWQqKQogewogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0
Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxz
UG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBM
T0coTmV0d29yaywgIlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHk6JXMgc3N0b3JlZENyZWRlbnRpYWxzUG9saWN5OiV1IiwgcmVxdWVzdC51cmwoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZUN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNyArMzY4LDcgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6cmVzdGFydFJlcXVlc3RXaXRoQwogICAgIGQtPm1fY3VybFJlcXVlc3QtPnN0YXJ0
KCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hy
b25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0
b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgQVNTRVJUKCFyZXF1ZXN0LmlzRW1wdHkoKSk7CkBAIC01NjIsOSArNTYyLDkgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxlRGF0YVVSTCgpCiAKICAgICAgICAgLy8gZGlkUmVjZWl2
ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRlZC4KICAgICAgICAg
aWYgKGNsaWVudCgpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAg
ICAgaWYgKGJhc2U2NERlY29kZShkYXRhLCBvdXQsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xp
bmVzKSAmJiBvdXQuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVj
ZWl2ZUJ1ZmZlcih0aGlzLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShvdXQuZGF0YSgpLCBvdXQuc2l6
ZSgpKSwgb3JpZ2luYWxTaXplKTsKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNl
NjREZWNvZGUoZGF0YSwgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGlu
ZXMpOworICAgICAgICAgICAgaWYgKGRlY29kZWREYXRhICYmIGRlY29kZWREYXRhLT5zaXplKCkg
PiAwKQorICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKHRoaXMsIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGRlY29kZWREYXRhLT5kYXRhKCksIGRlY29kZWREYXRhLT5zaXpl
KCkpLCBvcmlnaW5hbFNpemUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgVGV4
dEVuY29kaW5nIGVuY29kaW5nKGNoYXJzZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0JKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291
cmNlSGFuZGxlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw5ICs2Nyw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAKIHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVh
ZGVyKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlh
bCkKIHsKLSAgICBTdHJpbmcgYXV0aGVudGljYXRpb25IZWFkZXIgPSAiQmFzaWMgIiArIGJhc2U2
NEVuY29kZShTdHJpbmcoY3JlZGVudGlhbC51c2VyKCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3
b3JkKCkpLnV0ZjgoKSk7Ci0KLSAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVh
ZGVyTmFtZTo6QXV0aG9yaXphdGlvbiwgYXV0aGVudGljYXRpb25IZWFkZXIpOworICAgIHJlcXVl
c3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uLCBjcmVk
ZW50aWFsLnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSk7CiB9CiAK
IHN0YXRpYyBOU09wZXJhdGlvblF1ZXVlICpvcGVyYXRpb25RdWV1ZUZvckFzeW5jQ2xpZW50cygp
CkBAIC0zNTIsNyArMzUwLDcgQEAgQ0ZTdHJpbmdSZWYgUmVzb3VyY2VIYW5kbGU6OnN5bmNocm9u
b3VzTAogICAgIHJldHVybiBDRlNUUigiV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1v
ZGUiKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291
cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50
aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgTE9HKE5ldHdvcmssICJSZXNvdXJj
ZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5OiVAIHN0b3JlZENyZWRl
bnRpYWxzUG9saWN5OiV1IiwgcmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xp
Y3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZUhhbmRsZVNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZlcnNMbwogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBW
ZWN0b3I8Y2hhcj4mKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNl
JiwgVmVjdG9yPHVpbnQ4X3Q+JikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Np
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgICAgICBkaWdlc3QtPmFkZEJ5
dGVzKGNlcnRpZmljYXRlRGF0YS0+ZGF0YSwgY2VydGlmaWNhdGVEYXRhLT5sZW4pOwogCiAgICAg
ICAgIGF1dG8gaGFzaCA9IGRpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKLSAgICAgICAgcmV0dXJuIGJh
c2U2NEVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihoYXNoLmRhdGEoKSksIGhh
c2guc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihoYXNoLmRhdGEoKSksIGhhc2guc2l6ZSgpKSk7CiAg
ICAgfQogCiAgICAgSGFzaFNldDxTdHJpbmc+IG1fY2VydGlmaWNhdGVzOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5o
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29k
ZUVzY2FwZVNlcXVlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTEgKzE1NCwxMSBAQCBT
dHJpbmcgZGVjb2RlRXNjYXBlU2VxdWVuY2VzKFN0cmluZ1ZpZXcgCiAgICAgcmV0dXJuIHJlc3Vs
dC50b1N0cmluZygpOwogfQogCi1pbmxpbmUgVmVjdG9yPGNoYXI+IGRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNv
ZGluZykKK2lubGluZSBWZWN0b3I8dWludDhfdD4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNE
YXRhKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewog
ICAgIEFTU0VSVChlbmNvZGluZy5pc1ZhbGlkKCkpOwogCi0gICAgVmVjdG9yPGNoYXI+IHJlc3Vs
dDsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwogICAgIHNpemVfdCBkZWNvZGVkUG9zaXRp
b24gPSAwOwogICAgIHNpemVfdCBzZWFyY2hQb3NpdGlvbiA9IDA7CiAgICAgd2hpbGUgKHRydWUp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50
YWJsZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvUXVvdGVkUHJpbnRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBz
dGF0aWMgY29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gCiAKIHN0YXRpYyBjb25zdCBj
aGFyIGNybGZMaW5lRW5kaW5nW10gPSAiXHJcbiI7CiAKLXN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZM
aW5lRW5kaW5nQXRJbmRleChjb25zdCBjaGFyKiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoLCBz
aXplX3QgaW5kZXgpCitzdGF0aWMgc2l6ZV90IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoY29u
c3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCwgc2l6ZV90IGluZGV4KQogewog
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgaW5wdXRMZW5ndGgp
OwogICAgIGlmIChpbnB1dFtpbmRleF0gPT0gJ1xuJykKQEAgLTU1LDE5ICs1NSwxOSBAQCBzdGF0
aWMgc2l6ZV90IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoCiAgICAgcmV0dXJuIDA7CiB9CiAK
LXZvaWQgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFZlY3Rv
cjxjaGFyPiYgb3V0KQorVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25z
dCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQogewotICAgIHF1b3RlZFByaW50YWJsZUVuY29kZShp
bi5kYXRhKCksIGluLnNpemUoKSwgb3V0KTsKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRW5j
b2RlKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFi
bGVFbmNvZGUoY29uc3QgY2hhciogaW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCwgVmVjdG9yPGNo
YXI+JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVp
bnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCiB7Ci0gICAgb3V0LmNsZWFyKCk7Ci0g
ICAgb3V0LnJlc2VydmVDYXBhY2l0eShpbnB1dExlbmd0aCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IG91dDsKKyAgICBvdXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnB1dExlbmd0aCk7CiAgICAg
c2l6ZV90IGN1cnJlbnRMaW5lTGVuZ3RoID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGlucHV0TGVuZ3RoOyArK2kpIHsKICAgICAgICAgYm9vbCBpc0xhc3RDaGFyYWN0ZXIgPSAoaSA9
PSBpbnB1dExlbmd0aCAtIDEpOwotICAgICAgICBjaGFyIGN1cnJlbnRDaGFyYWN0ZXIgPSBpbnB1
dFtpXTsKKyAgICAgICAgdWludDhfdCBjdXJyZW50Q2hhcmFjdGVyID0gaW5wdXRbaV07CiAgICAg
ICAgIGJvb2wgcmVxdWlyZXNFbmNvZGluZyA9IGZhbHNlOwogICAgICAgICAvLyBBbGwgbm9uLXBy
aW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzIGFuZCA9IHJlcXVpcmUgZW5jb2RpbmcuCiAgICAgICAg
IGlmICgoY3VycmVudENoYXJhY3RlciA8ICcgJyB8fCBjdXJyZW50Q2hhcmFjdGVyID4gJ34nIHx8
IGN1cnJlbnRDaGFyYWN0ZXIgPT0gJz0nKSAmJiBjdXJyZW50Q2hhcmFjdGVyICE9ICdcdCcpCkBA
IC0xMTIsMTggKzExMiwyMCBAQCB2b2lkIHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBjaGFy
KiBpCiAgICAgICAgICAgICBjdXJyZW50TGluZUxlbmd0aCsrOwogICAgICAgICB9CiAgICAgfQor
CisgICAgcmV0dXJuIG91dDsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3Qg
VmVjdG9yPGNoYXI+JiBpbiwgVmVjdG9yPGNoYXI+JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVv
dGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCiB7Ci0gICAg
cXVvdGVkUHJpbnRhYmxlRGVjb2RlKGluLmRhdGEoKSwgaW4uc2l6ZSgpLCBvdXQpOworICAgIHJl
dHVybiBxdW90ZWRQcmludGFibGVEZWNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwog
fQogCi12b2lkIHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
ZGF0YUxlbmd0aCwgVmVjdG9yPGNoYXI+JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQogewot
ICAgIG91dC5jbGVhcigpOworICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgaWYgKCFkYXRh
TGVuZ3RoKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBvdXQ7CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkgewogICAgICAgICBjaGFyIGN1cnJl
bnRDaGFyYWN0ZXIgPSBkYXRhW2ldOwpAQCAtMTQ5LDggKzE1MSw5IEBAIHZvaWQgcXVvdGVkUHJp
bnRhYmxlRGVjb2RlKGNvbnN0IGNoYXIqIGQKICAgICAgICAgICAgIG91dC5hcHBlbmQobG93ZXJD
aGFyYWN0ZXIpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgb3V0
LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPih0b0FTQ0lJSGV4VmFsdWUodXBwZXJDaGFyYWN0ZXIs
IGxvd2VyQ2hhcmFjdGVyKSkpOworICAgICAgICBvdXQuYXBwZW5kKHRvQVNDSUlIZXhWYWx1ZSh1
cHBlckNoYXJhY3RlciwgbG93ZXJDaGFyYWN0ZXIpKTsKICAgICB9CisgICAgcmV0dXJuIG91dDsK
IH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFBy
aW50YWJsZS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1F1b3RlZFByaW50YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxOSArMjgsMTYgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBRdW90ZWRQcmludGFibGVfaAotI2RlZmlu
ZSBRdW90ZWRQcmludGFibGVfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRW5jb2Rl
KGNvbnN0IFZlY3RvcjxjaGFyPiYsIFZlY3RvcjxjaGFyPiYpOwotdm9pZCBxdW90ZWRQcmludGFi
bGVFbmNvZGUoY29uc3QgY2hhciosIHNpemVfdCwgVmVjdG9yPGNoYXI+Jik7CitWZWN0b3I8dWlu
dDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworVmVj
dG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90
KTsKIAotdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgVmVj
dG9yPGNoYXI+Jik7Ci12b2lkIHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBjaGFyKiwgc2l6
ZV90LCBWZWN0b3I8Y2hhcj4mKTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNv
ZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRh
YmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBRdW90ZWRQcmludGFibGVfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBzaWduZWRQdWJsaWNL
ZXlBbmRDaGFsbGVuZ2VTdHJpbmcKICAgICAgICAgaWYgKCFDcnlwdFNpZ25BbmRFbmNvZGVDZXJ0
aWZpY2F0ZShoQ29udGV4dCwgQVRfS0VZRVhDSEFOR0UsIFg1MDlfQVNOX0VOQ09ESU5HLCBYNTA5
X0tFWUdFTl9SRVFVRVNUX1RPX0JFX1NJR05FRCwgJnJlcXVlc3RJbmZvLCAmc2lnbkFsZ28sIDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8TFBCWVRFPihiaW5hcnkuZGF0YSgpKSwgJmR3RW5jb2RlZExlbmd0
aCkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBrZXlTdHJpbmcgPSBiYXNlNjRFbmNv
ZGUoYmluYXJ5KTsKKyAgICAgICAga2V5U3RyaW5nID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVk
KGJpbmFyeSkpOwogICAgIH0gd2hpbGUoMCk7CiAKICAgICBpZiAocFB1YkluZm8pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1Nj
cmlwdFN0b3JhZ2UuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDcgKzU2LDcgQEAgU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgUwog
ICAgIGF1dG8gaW5wdXRVdGY4ID0gaW5wdXQudXRmOCgpOwogICAgIGNyeXB0by0+YWRkQnl0ZXMo
aW5wdXRVdGY4LmRhdGEoKSwgaW5wdXRVdGY4Lmxlbmd0aCgpKTsKICAgICBhdXRvIGhhc2ggPSBj
cnlwdG8tPmNvbXB1dGVIYXNoKCk7Ci0gICAgcmV0dXJuIFdURjo6YmFzZTY0VVJMRW5jb2RlKGhh
c2guZGF0YSgpLCBoYXNoLnNpemUoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlZChoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpKTsKIH0KIAogU3RyaW5nIFNXU2NyaXB0
U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyNzc2NTQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDY0IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxl
LmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNo
IG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OnNlbmRSZXBseVRvU3luY2hyb25vdXNSZXF1ZXN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcmVDb252ZXJzaW9uUmVxdWVzdCk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW06Cisg
ICAgICAgIChXZWJLaXQ6OmFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAg
KiBTaGFyZWQvQVBJL0FQSURhdGEuaDoKKyAgICAgICAgKEFQSTo6RGF0YTo6Y3JlYXRlKToKKyAg
ICAgICAgKEFQSTo6RGF0YTo6ZnJlZVZlY3RvckJ5dGVzKToKKyAgICAgICAgKiBTaGFyZWQvbWFj
L0F1eGlsaWFyeVByb2Nlc3NNYWMubW06CisgICAgICAgIChXZWJLaXQ6OnNhbmRib3hGaWxlUGF0
aCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChXS1Bh
Z2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAocHJvZHVjZUNsaWVudERh
dGFKc29uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9jYWlyby9XZWJBdXRvbWF0
aW9uU2Vzc2lvbkNhaXJvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6YmFzZTY0RW5jb2RlZFBOR0Rh
dGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW06CisgICAg
ICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6d2ViQ3J5cHRv
TWFzdGVyS2V5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5z
cGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50
OjpzZXRCYWNrZW5kQ29tbWFuZHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3Rr
L1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW06CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGll
bnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tl
bmRDb21tYW5kcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29h
L0xvY2FsQXV0aGVudGljYXRvci5tbToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxBdXRoZW50aWNh
dG9ySW50ZXJuYWw6OnByb2R1Y2VIYXNoU2V0KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxBdXRo
ZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsQXV0aGVu
dGljYXRvcjo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1vY2tI
aWRDb25uZWN0aW9uOjpmZWVkUmVwb3J0cyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6
TW9ja0xvY2FsQ29ubmVjdGlvbjo6ZmlsdGVyUmVzcG9uc2VzIGNvbnN0KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJVUkxTY2hlbWVIYW5kbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRh
c2suY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVUYXNrOjpkaWRDb21wbGV0ZSk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5Lmg6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6bG9hZFN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuaDoKKwogMjAy
MS0wNS0xOCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVz
dXJyZWN0IFdLV2ViVmlldyBtZWRpYSBjb250cm9scyBBUEkgcmVtb3ZlZCBpbiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxOTI5CkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVz
c2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIG1lc3NhZ2VzIC0+IE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKIAogICAgIFNjaGVk
dWxlUmVzb3VyY2VMb2FkKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVz
b3VyY2VMb2FkUGFyYW1ldGVycykKLSAgICBQZXJmb3JtU3luY2hyb25vdXNMb2FkKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykgLT4g
KFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Ug
cmVzcG9uc2UsIFZlY3RvcjxjaGFyPiBkYXRhKSBTeW5jaHJvbm91cworICAgIFBlcmZvcm1TeW5j
aHJvbm91c0xvYWQoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJj
ZUxvYWRQYXJhbWV0ZXJzKSAtPiAoV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNo
cm9ub3VzCiAgICAgVGVzdFByb2Nlc3NJbmNvbWluZ1N5bmNNZXNzYWdlc1doZW5XYWl0aW5nRm9y
U3luY1JlcGx5KFdlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQpIC0+IChib29s
IGhhbmRsZWQpIFN5bmNocm9ub3VzCiAgICAgTG9hZFBpbmcoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKQogICAgIFJlbW92ZUxvYWRJ
ZGVudGlmaWVyKHVpbnQ2NF90IHJlc291cmNlTG9hZElkZW50aWZpZXIpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAg
c3RhdGljIHZvaWQgc2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlcwogICAgIEFTU0VSVChkYXRh
LmRlbGF5ZWRSZXBseSk7CiAgICAgQVNTRVJUKCFkYXRhLnJlc3BvbnNlLmlzTnVsbCgpIHx8ICFk
YXRhLmVycm9yLmlzTnVsbCgpKTsKIAotICAgIFZlY3RvcjxjaGFyPiByZXNwb25zZUJ1ZmZlcjsK
KyAgICBWZWN0b3I8dWludDhfdD4gcmVzcG9uc2VCdWZmZXI7CiAgICAgaWYgKGJ1ZmZlciAmJiBi
dWZmZXItPnNpemUoKSkKICAgICAgICAgcmVzcG9uc2VCdWZmZXIuYXBwZW5kKGJ1ZmZlci0+ZGF0
YSgpLCBidWZmZXItPnNpemUoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE0
ICszMTUsMTUgQEAgdm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcgogICAg
ICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiBwdWJsaWNLZXlEYXRhOwotICAgICAgICBXVEY6OmJhc2U2NFVSTERlY29kZShw
dWJsaWNLZXlCYXNlNjRVUkwsIHB1YmxpY0tleURhdGEpOworICAgICAgICBhdXRvIHB1YmxpY0tl
eURhdGEgPSBiYXNlNjRVUkxEZWNvZGUocHVibGljS2V5QmFzZTY0VVJMKTsKKyAgICAgICAgaWYg
KCFwdWJsaWNLZXlEYXRhKQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gY3J5
cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3Jp
dGhtOjpTSEFfMjU2KTsKLSAgICAgICAgY3J5cHRvLT5hZGRCeXRlcyhwdWJsaWNLZXlEYXRhLmRh
dGEoKSwgcHVibGljS2V5RGF0YS5zaXplKCkpOworICAgICAgICBjcnlwdG8tPmFkZEJ5dGVzKHB1
YmxpY0tleURhdGEtPmRhdGEoKSwgcHVibGljS2V5RGF0YS0+c2l6ZSgpKTsKICAgICAgICAgYXV0
byBwdWJsaWNLZXlEYXRhSGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKIAotICAgICAgICBh
dXRvIGtleUlEID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUocHVibGljS2V5RGF0YUhhc2guZGF0YSgp
LCBwdWJsaWNLZXlEYXRhSGFzaC5zaXplKCkpOworICAgICAgICBhdXRvIGtleUlEID0gbWFrZVN0
cmluZyhiYXNlNjRVUkxFbmNvZGVkKHB1YmxpY0tleURhdGFIYXNoLmRhdGEoKSwgcHVibGljS2V5
RGF0YUhhc2guc2l6ZSgpKSk7CiAgICAgICAgIGlmIChrZXlJRCAhPSBhdHRyaWJ1dGlvbi5zb3Vy
Y2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURCYXNlNjRVUkwpCiAgICAgICAgICAgICByZXR1cm47
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFU
YXNrQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQkod29y
a2luZyBjb3B5KQpAQCAtNjUsOCArNjUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICNpZiBVU0Uo
Q1JFREVOVElBTF9TVE9SQUdFX1dJVEhfTkVUV09SS19TRVNTSU9OKQogc3RhdGljIHZvaWQgYXBw
bHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogewotICAgIFN0cmlu
ZyBhdXRoZW50aWNhdGlvbkhlYWRlciA9ICJCYXNpYyAiICsgYmFzZTY0RW5jb2RlKFN0cmluZyhj
cmVkZW50aWFsLnVzZXIoKSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKSkudXRmOCgpKTsK
LSAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6
QXV0aG9yaXphdGlvbiwgYXV0aGVudGljYXRpb25IZWFkZXIpOworICAgIHJlcXVlc3Quc2V0SFRU
UEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uLCBjcmVk
ZW50aWFsLnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSk7CiB9CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJRGF0YS5oCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw3ICs2MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtZW1jcHkoY29waWVkQnl0
ZXMsIGJ5dGVzLCBzaXplKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBjcmVhdGVXaXRo
b3V0Q29weWluZyhjb3BpZWRCeXRlcywgc2l6ZSwgZmFzdEZyZWVCeXRlcywgbnVsbHB0cik7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVXaXRob3V0Q29weWluZyhjb3BpZWRCeXRlcywgc2l6ZSwgW10g
KHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBjb25zdCB2b2lkKikgeworICAgICAgICAgICAgaWYgKGJ5
dGVzKQorICAgICAgICAgICAgICAgIGZhc3RGcmVlKHN0YXRpY19jYXN0PHZvaWQqPihieXRlcykp
OworICAgICAgICB9LCBudWxscHRyKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFJlZjxEYXRh
PiBjcmVhdGUoY29uc3QgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiBidWZmZXIpCkBAIC02OCw2ICs3
MSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLmRhdGEoKSwgYnVm
ZmVyLnNpemUoKSk7CiAgICAgfQogCisgICAgc3RhdGljIFJlZjxEYXRhPiBjcmVhdGUoVmVjdG9y
PHVuc2lnbmVkIGNoYXI+JiYgYnVmZmVyKQorICAgIHsKKyAgICAgICAgYXV0byBidWZmZXJTaXpl
ID0gYnVmZmVyLnNpemUoKTsKKyAgICAgICAgYXV0byBidWZmZXJQb2ludGVyID0gYnVmZmVyLnJl
bGVhc2VCdWZmZXIoKS5sZWFrUHRyKCk7CisgICAgICAgIHJldHVybiBjcmVhdGVXaXRob3V0Q29w
eWluZyhidWZmZXJQb2ludGVyLCBidWZmZXJTaXplLCBbXSAodW5zaWduZWQgY2hhciogYnl0ZXMs
IGNvbnN0IHZvaWQqKSB7CisgICAgICAgICAgICBpZiAoYnl0ZXMpCisgICAgICAgICAgICAgICAg
V1RGOjpWZWN0b3JNYWxsb2M6OmZyZWUoYnl0ZXMpOworICAgICAgICB9LCBudWxscHRyKTsKKyAg
ICB9CisKICAgICBzdGF0aWMgUmVmUHRyPERhdGE+IGNyZWF0ZShjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmKTsKICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTk2LDEyICsxMDksNiBAQCBw
cml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBmYXN0RnJlZUJ5dGVzKHVu
c2lnbmVkIGNoYXIqIGJ5dGVzLCBjb25zdCB2b2lkKikKLSAgICB7Ci0gICAgICAgIGlmIChieXRl
cykKLSAgICAgICAgICAgIGZhc3RGcmVlKHN0YXRpY19jYXN0PHZvaWQqPihieXRlcykpOwotICAg
IH0KLQogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1fYnl0ZXMgeyBudWxscHRyIH07CiAgICAg
c2l6ZV90IG1fc2l6ZSB7IDAgfTsKIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1
eGlsaWFyeVByb2Nlc3NNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTUsMTggKzMxNSwxMyBAQCBzdGF0aWMgU3RyaW5nIHNhbmRib3hEaXJlY3RvcnkoV2ViQ29y
ZTo6CiAKIHN0YXRpYyBTdHJpbmcgc2FuZGJveEZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0
b3J5UGF0aCwgY29uc3QgQ1N0cmluZyYgaGVhZGVyKQogewotICAgIFN0cmluZ0J1aWxkZXIgc2Fu
ZGJveEZpbGU7Ci0gICAgc2FuZGJveEZpbGUuYXBwZW5kKGRpcmVjdG9yeVBhdGgpOwotICAgIHNh
bmRib3hGaWxlLmFwcGVuZCgiL0NvbXBpbGVkU2FuZGJveCsiKTsKLQogICAgIC8vIE1ha2UgdGhl
IGZpbGVuYW1lIHNlbWktdW5pcXVlIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgaGVhZGVy
LgorCiAgICAgYXV0byBjcnlwdG8gPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6Q3J5
cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwogICAgIGNyeXB0by0+YWRkQnl0ZXMoaGVh
ZGVyLmRhdGEoKSwgaGVhZGVyLmxlbmd0aCgpKTsKLSAgICBWZWN0b3I8dWludDhfdD4gaGFzaCA9
IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKLSAgICBTdHJpbmcgcmVhZGFibGVIYXNoID0gV1RGOjpi
YXNlNjRVUkxFbmNvZGUoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBhdXRvIGhhc2gg
PSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAgICBzYW5kYm94RmlsZS5hcHBlbmQocmVhZGFi
bGVIYXNoKTsKLSAgICByZXR1cm4gc2FuZGJveEZpbGUudG9TdHJpbmcoKTsKKyAgICByZXR1cm4g
bWFrZVN0cmluZyhkaXJlY3RvcnlQYXRoLCAiL0NvbXBpbGVkU2FuZGJveCsiLCBiYXNlNjRVUkxF
bmNvZGVkKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSkpOwogfQogCiBzdGF0aWMgYm9vbCBlbnN1
cmVTYW5kYm94Q2FjaGVEaXJlY3RvcnkoY29uc3QgU2FuZGJveEluZm8mIGluZm8pCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTUyMCw3ICs1MjAsNyBAQCBtZXNzYWdlcyAt
PiBXZWJQYWdlUHJveHkgewogCiAgICAgU3RhcnRVUkxTY2hlbWVUYXNrKHN0cnVjdCBXZWJLaXQ6
OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpCiAgICAgU3RvcFVSTFNjaGVtZVRh
c2sodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKQot
ICAgIExvYWRTeW5jaHJvbm91c1VSTFNjaGVtZVRhc2soc3RydWN0IFdlYktpdDo6VVJMU2NoZW1l
VGFza1BhcmFtZXRlcnMgcGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Ug
cmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFZlY3RvcjxjaGFyPiBkYXRh
KSBTeW5jaHJvbm91cworICAgIExvYWRTeW5jaHJvbm91c1VSTFNjaGVtZVRhc2soc3RydWN0IFdl
YktpdDo6VVJMU2NoZW1lVGFza1BhcmFtZXRlcnMgcGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFZl
Y3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwogCiAjaWYgRU5BQkxFKERFVklDRV9PUklF
TlRBVElPTikKICAgICBTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNz
KFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBzdHJ1Y3QgV2ViS2l0OjpGcmFtZUlu
Zm9EYXRhIGZyYW1lSW5mbywgYm9vbCBtYXlQcm9tcHQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29y
ZTo6RGV2aWNlT3JpZW50YXRpb25Pck1vdGlvblBlcm1pc3Npb25TdGF0ZSBwZXJtaXNzaW9uU3Rh
dGUpIEFzeW5jCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5k
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1l
SGFuZGxlci5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJVUkxTY2hlbWVIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgc3Ry
dWN0IFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzOwogY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3Mg
V2ViUHJvY2Vzc1Byb3h5OwogCi11c2luZyBTeW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0gQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3RvcjxjaGFyPiYpPjsKK3VzaW5n
IFN5bmNMb2FkQ29tcGxldGlvbkhhbmRsZXIgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik+OwogCiBjbGFzcyBXZWJVUkxTY2hlbWVIYW5kbGVy
IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVVJMU2NoZW1lSGFuZGxlcj4gewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFdlYlVSTFNjaGVtZUhhbmRsZXIpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTIsMTAgKzIxMiwxMCBAQCBhdXRvIFdlYlVSTFNjaGVtZVRhc2s6OmRpZENvbXBsZXRl
KGNvbnN0CiAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwogICAgIAogICAgIGlmIChpc1N5bmMoKSkg
ewotICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRh
dGE7CiAgICAgICAgIGlmIChtX3N5bmNEYXRhKSB7CiAgICAgICAgICAgICBkYXRhLnJlc2l6ZSht
X3N5bmNEYXRhLT5zaXplKCkpOwotICAgICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX3N5bmNEYXRhLT5kYXRhKCkpLCBtX3N5bmNEYXRh
LT5zaXplKCkpOworICAgICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihtX3N5bmNEYXRhLT5kYXRhKCkpLCBtX3N5bmNEYXRhLT5zaXpl
KCkpOwogICAgICAgICB9CiAKICAgICAgICAgbV9zeW5jQ29tcGxldGlvbkhhbmRsZXIobV9zeW5j
UmVzcG9uc2UsIGVycm9yLCBXVEZNb3ZlKGRhdGEpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NyArNTEsNyBAQCBzdHJ1Y3QgVVJMU2NoZW1lVGFza1BhcmFtZXRlcnM7CiBjbGFzcyBXZWJVUkxT
Y2hlbWVIYW5kbGVyOwogY2xhc3MgV2ViUGFnZVByb3h5OwogCi11c2luZyBTeW5jTG9hZENvbXBs
ZXRpb25IYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3Rv
cjxjaGFyPiYpPjsKK3VzaW5nIFN5bmNMb2FkQ29tcGxldGlvbkhhbmRsZXIgPSBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik+OwogCiBjbGFzcyBX
ZWJVUkxTY2hlbWVUYXNrIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlw
ZTo6VVJMU2NoZW1lVGFzaz4sIHB1YmxpYyBJbnN0YW5jZUNvdW50ZWQ8V2ViVVJMU2NoZW1lVGFz
az4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlVSTFNjaGVtZVRhc2spOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzM4LDEzICsyMzM4LDE0IEBAIHZvaWQgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25D
bGllbnQoV0tQYWcKICAgICAgICAgICAgIGlmIChtX2NsaWVudC5jb3B5V2ViQ3J5cHRvTWFzdGVy
S2V5KQogICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZih0b0ltcGwobV9jbGllbnQuY29w
eVdlYkNyeXB0b01hc3RlcktleSh0b0FQSSgmcGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
bykpKTsKIAotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICNpZiBFTkFC
TEUoV0VCX0NSWVBUTykKLSAgICAgICAgICAgIGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3Rl
cktleShtYXN0ZXJLZXkpKQorICAgICAgICAgICAgYXV0byBtYXN0ZXJLZXkgPSBkZWZhdWx0V2Vi
Q3J5cHRvTWFzdGVyS2V5KCk7CisgICAgICAgICAgICBpZiAoIW1hc3RlcktleSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNy
ZWF0ZShXVEZNb3ZlKCptYXN0ZXJLZXkpKTsKKyNlbHNlCisgICAgICAgICAgICByZXR1cm4gQVBJ
OjpEYXRhOjpjcmVhdGUobnVsbHB0ciwgMCk7CiAjZW5kaWYKLQotICAgICAgICAgICAgcmV0dXJu
IEFQSTo6RGF0YTo6Y3JlYXRlKG1hc3RlcktleS5kYXRhKCksIG1hc3RlcktleS5zaXplKCkpOwog
ICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPEFQSTo6U3RyaW5nPiBzaWduZWRQdWJsaWNLZXlB
bmRDaGFsbGVuZ2VTdHJpbmcoV2ViUGFnZVByb3h5JiBwYWdlLCB1bnNpZ25lZCBrZXlTaXplSW5k
ZXgsIGNvbnN0IFJlZlB0cjxBUEk6OlN0cmluZz4mIGNoYWxsZW5nZVN0cmluZywgY29uc3QgVVJM
JiB1cmwpIG92ZXJyaWRlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgc3Rh
dGljIFJldGFpblB0cjxOU0RhdGE+IHByb2R1Y2VDbGllbnREYQogICAgICAgICBbZGljdGlvbmFy
eSBzZXRPYmplY3Q6QCJ3ZWJhdXRobi5nZXQiIGZvcktleTpAInR5cGUiXTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpXVEY6OmJhc2U2NFVSTEVuY29k
ZShjaGFsbGVuZ2UuYnl0ZXMsIGNoYWxsZW5nZS5sZW5ndGgpIGZvcktleTpAImNoYWxsZW5nZSJd
OworICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDptYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQo
Y2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2UubGVuZ3RoKSkgZm9yS2V5OkAiY2hhbGxlbmdlIl07
CiAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om9yaWdpbiBmb3JLZXk6QCJvcmlnaW4iXTsKIAog
ICAgIHJldHVybiBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6ZGljdGlv
bmFyeS5nZXQoKSBvcHRpb25zOk5TSlNPTldyaXRpbmdTb3J0ZWRLZXlzIGVycm9yOm5pbF07Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRp
b25TZXNzaW9uQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vY2Fpcm8vV2ViQXV0b21hdGlvblNlc3Npb25DYWlyby5jcHAJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2Vi
QXV0b21hdGlvblNlc3Npb25DYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcg
QEAgc3RhdGljIE9wdGlvbmFsPFN0cmluZz4gYmFzZTY0RW5jb2RlZFBORwogICAgIGlmIChwbmdE
YXRhLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVy
biBiYXNlNjRFbmNvZGUocG5nRGF0YSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5j
b2RlZChwbmdEYXRhKSk7CiB9CiAKIE9wdGlvbmFsPFN0cmluZz4gV2ViQXV0b21hdGlvblNlc3Np
b246OnBsYXRmb3JtR2V0QmFzZTY0RW5jb2RlZFBOR0RhdGEoY29uc3QgU2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmIGhhbmRsZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05h
dmlnYXRpb25TdGF0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTEzNSwxMSArMTEzNSwxMSBAQCBSZWZQdHI8QVBJOjpEYXRhPiBOYXZpZ2F0aW9uU3RhdGU6Ok5h
dmlnCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0
ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYkNyeXB0b01hc3RlcktleUZvcldlYlZp
ZXcpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKLSAgICAgICAgaWYgKCFn
ZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkpCisgICAgICAgIGF1dG8gbWFz
dGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgICAgICBpZiAoIW1hc3Rl
cktleSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIHJldHVybiBBUEk6
OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0YSgpLCBtYXN0ZXJLZXkuc2l6ZSgpKTsKKyAgICAg
ICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKFdURk1vdmUoKm1hc3RlcktleSkpOwogICAgIH0K
IAogICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQu
Y3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQs
MTMgKzE5NCwxMSBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0dXBDb25uZWN0CiB2
b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IGNoYXIq
IGJhY2tlbmRDb21tYW5kcykKIHsKICAgICBpZiAoIWJhY2tlbmRDb21tYW5kcyB8fCAhYmFja2Vu
ZENvbW1hbmRzWzBdKSB7Ci0gICAgICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gU3RyaW5nKCk7
CisgICAgICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0geyB9OwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGJh
Y2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tlbmRDb21tYW5kcyksIGJhc2U2NERhdGEpOwotICAg
IG1fYmFja2VuZENvbW1hbmRzVVJMID0gImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiICsg
YmFzZTY0RGF0YTsKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1ha2VTdHJpbmcoImRhdGE6
dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKGJhY2tlbmRDb21tYW5kcywg
c3RybGVuKGJhY2tlbmRDb21tYW5kcykpKTsKIH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGll
bnQ6OmNvbm5lY3Rpb25EaWRDbG9zZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eUd0ay5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0Miw5ICsxNDIsMTEgQEAgdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5OjpwbGF0Zm9ybQogICAgIFZlY3RvcjxjaGFyPiBkYXRhVmVjdG9yOwogICAgIENTdHJp
bmcgZGF0YVN0cmluZzsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICBpZiAoIWJh
c2U2NERlY29kZShjb250ZW50LCBkYXRhVmVjdG9yLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQor
ICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQsIEJhc2U2NERl
Y29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgIGlmICghZGVjb2RlZERhdGEp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsK
KyAgICAgICAgZGVjb2RlZERhdGEtPnNocmlua1RvRml0KCk7CisgICAgICAgIGRhdGFWZWN0b3Ig
PSBXVEZNb3ZlKCpkZWNvZGVkRGF0YSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGRhdGFTdHJpbmcg
PSBjb250ZW50LnV0ZjgoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
Z3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDEsOSAr
NTQxLDExIEBAIHZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKGMKICAgICBW
ZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKICAgICBDU3RyaW5nIGRhdGFTdHJpbmc7CiAgICAgaWYg
KGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0
YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0
YSA9IGJhc2U2NERlY29kZShjb250ZW50LCBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBh
ZGRpbmcpOworICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBkYXRhVmVjdG9yLnNocmlua1RvRml0KCk7CisgICAgICAgIGRlY29kZWREYXRhLT5z
aHJpbmtUb0ZpdCgpOworICAgICAgICBkYXRhVmVjdG9yID0gV1RGTW92ZSgqZGVjb2RlZERhdGEp
OwogICAgIH0gZWxzZQogICAgICAgICBkYXRhU3RyaW5nID0gY29udGVudC51dGY4KCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEwICsxNzQsMTAg
QEAgdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybQogICAgICAgICBtX3N1
Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwog
CiAgICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4g
b3V0OwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNl
NjREZWNvZGUoY29udGVudENvcHksIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGlu
Zyk7CisgICAgICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhb
W05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgp
XSk7CisgICAgICAgICAgICBhdXRvIGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxv
Y10gaW5pdFdpdGhCeXRlczpkZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0YS0+
c2l6ZSgpXSk7CiAgICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwg
YXRvbWljYWxseTpZRVNdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50Q29w
eSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMu
bW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTA5LDEw
ICs1MDksMTAgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUoYwogICAg
ICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1
YWxVUkwpOwogCiAgICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0
b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHks
IG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERh
dGEgPSBiYXNlNjREZWNvZGUoY29udGVudENvcHksIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlk
YXRlUGFkZGluZyk7CisgICAgICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0g
YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpv
dXQuc2l6ZSgpXSk7CisgICAgICAgICAgICBhdXRvIGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05T
RGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpkZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNv
ZGVkRGF0YS0+c2l6ZSgpXSk7CiAgICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDph
Y3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtj
b250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpO
U1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUlu
c3BlY3RvckNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpz
ZXRCYWNrZW5kQ28KICAgICBpZiAoIWV2ZW50Lm1lc3NhZ2UgfHwgZXZlbnQubWVzc2FnZS0+aXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1h
a2VTdHJpbmcoImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGUoZXZl
bnQubWVzc2FnZS0+dXRmOCgpKSk7CisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBtYWtlU3Ry
aW5nKCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChldmVudC5t
ZXNzYWdlLT51dGY4KCkpKTsKIH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRh
cmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xv
Y2FsQXV0aGVudGljYXRvci5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC04MiwxMCArODIsOCBAQCBzdGF0aWMgaW5saW5lIEhhc2hTZXQ8U3Ry
aW5nPiBwcm9kdWNlSGFzCiB7CiAgICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKICAgICBmb3Ig
KGF1dG8mIGNyZWRlbnRpYWxEZXNjcmlwdG9yIDogY3JlZGVudGlhbERlc2NyaXB0b3JzKSB7Ci0g
ICAgICAgIGlmIChlbXB0eVRyYW5zcG9ydHNPckNvbnRhaW4oY3JlZGVudGlhbERlc2NyaXB0b3Iu
dHJhbnNwb3J0cywgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpCi0gICAgICAgICAg
ICAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBl
OjpQdWJsaWNLZXkKLSAgICAgICAgICAgICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9y
LnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCi0gICAgICAgICAgICByZXN1bHQuYWRkKGJh
c2U2NEVuY29kZShjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5kYXRhKCksIGNyZWRlbnRp
YWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSkpOworICAgICAgICBpZiAoZW1wdHlUcmFuc3Bv
cnRzT3JDb250YWluKGNyZWRlbnRpYWxEZXNjcmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRpY2F0
b3JUcmFuc3BvcnQ6OkludGVybmFsKSAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09IFB1
YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3Iu
aWRWZWN0b3Iuc2l6ZSgpID09IGNyZWRlbnRpYWxJZExlbmd0aCkKKyAgICAgICAgICAgIHJlc3Vs
dC5hZGQobWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVj
dG9yLmRhdGEoKSwgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpKSkpOwogICAg
IH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjQxLDcgKzIzOSw3IEBAIHZvaWQgTG9jYWxB
dXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgKICAgICAgICAgaWYgKG5vdEZvdW5kICE9IG1f
ZXhpc3RpbmdDcmVkZW50aWFscy5maW5kTWF0Y2hpbmcoWyZleGNsdWRlQ3JlZGVudGlhbElkc10g
KGF1dG8mIGNyZWRlbnRpYWwpIHsKICAgICAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlh
bC0+cmF3SWQoKTsKICAgICAgICAgICAgIEFTU0VSVChyYXdJZCk7Ci0gICAgICAgICAgICByZXR1
cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlKHJhd0lkLT5kYXRh
KCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBleGNsdWRlQ3Jl
ZGVudGlhbElkcy5jb250YWlucyhtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocmF3SWQtPmRhdGEo
KSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpKTsKICAgICAgICAgfSkpIHsKICAgICAgICAgICAgIHJl
Y2VpdmVFeGNlcHRpb24oeyBOb3RBbGxvd2VkRXJyb3IsICJBdCBsZWFzdCBvbmUgY3JlZGVudGlh
bCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVudGlhbHMgbGlzdCBpbiB0aGUg
cGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4iX3MgfSwgV2ViQXV0aGVudGljYXRpb25T
dGF0dXM6OkxBRXhjbHVkZUNyZWRlbnRpYWxzTWF0Y2hlZCk7CiAgICAgICAgICAgICByZXR1cm47
CkBAIC01MTgsNyArNTE2LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlv
bigpCiAgICAgICAgIH0KIAogICAgICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lk
KCk7Ci0gICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2Rl
KHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKSkKKyAgICAgICAgaWYgKGFsbG93
Q3JlZGVudGlhbElkcy5jb250YWlucyhtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocmF3SWQtPmRh
dGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpKSkKICAgICAgICAgICAgIGFzc2VydGlvblJlc3Bv
bnNlcy51bmNoZWNrZWRBcHBlbmQoY3JlZGVudGlhbC5jb3B5UmVmKCkpOwogICAgIH0KICAgICBp
ZiAoYXNzZXJ0aW9uUmVzcG9uc2VzLmlzRW1wdHkoKSkgewpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9j
ay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsMTUgKzI2MSwxMyBAQCB2b2lkIE1vY2tIaWRDb25uZWN0
aW9uOjpmZWVkUmVwb3J0cygpCiAgICAgICAgIGlmIChzdGFnZXNNYXRjaCgpICYmIG1fY29uZmln
dXJhdGlvbi5oaWQtPmVycm9yID09IE1vY2s6OkhpZEVycm9yOjpVbnN1cHBvcnRlZE9wdGlvbnMg
JiYgKG1fcmVxdWlyZVJlc2lkZW50S2V5IHx8IG1fcmVxdWlyZVVzZXJWZXJpZmljYXRpb24pKQog
ICAgICAgICAgICAgbWVzc2FnZSA9IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hh
bm5lbCwgRmlkb0hpZERldmljZUNvbW1hbmQ6OmtDYm9yLCB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KEN0YXBEZXZpY2VSZXNwb25zZUNvZGU6OmtDdGFwMkVyclVuc3VwcG9ydGVkT3B0aW9uKSB9KTsK
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gcGF5bG9hZDsKICAg
ICAgICAgICAgIEFTU0VSVCghbV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NC5pc0Vt
cHR5KCkpOwotICAgICAgICAgICAgYXV0byBzdGF0dXMgPSBiYXNlNjREZWNvZGUobV9jb25maWd1
cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NFswXSwgcGF5bG9hZCk7CisgICAgICAgICAgICBhdXRv
IHBheWxvYWQgPSBiYXNlNjREZWNvZGUobV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2
NFswXSk7CiAgICAgICAgICAgICBtX2NvbmZpZ3VyYXRpb24uaGlkLT5wYXlsb2FkQmFzZTY0LnJl
bW92ZSgwKTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhdHVzLCBzdGF0dXMpOwogICAg
ICAgICAgICAgaWYgKCFtX2NvbmZpZ3VyYXRpb24uaGlkLT5pc1UyZikKLSAgICAgICAgICAgICAg
ICBtZXNzYWdlID0gRmlkb0hpZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRv
SGlkRGV2aWNlQ29tbWFuZDo6a0Nib3IsIHBheWxvYWQpOworICAgICAgICAgICAgICAgIG1lc3Nh
Z2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZp
Y2VDb21tYW5kOjprQ2JvciwgV1RGTW92ZSgqcGF5bG9hZCkpOwogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3VycmVu
dENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21tYW5kOjprTXNnLCBwYXlsb2FkKTsKKyAgICAgICAg
ICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVs
LCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a01zZywgV1RGTW92ZSgqcGF5bG9hZCkpOwogICAgICAg
ICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9u
Lm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAg
LTE2Miw3ICsxNjIsNyBAQCB2b2lkIE1vY2tMb2NhbENvbm5lY3Rpb246OmZpbHRlclJlc3BvbnNl
CiAgICAgZm9yICg7IGl0ciAhPSByZXNwb25zZXMuZW5kKCk7ICsraXRyKSB7CiAgICAgICAgIGF1
dG8qIHJhd0lkID0gaXRyLT5nZXQoKS5yYXdJZCgpOwogICAgICAgICBBU1NFUlQocmF3SWQpOwot
ICAgICAgICBhdXRvIHJhd0lkQmFzZTY0ID0gYmFzZTY0RW5jb2RlKHJhd0lkLT5kYXRhKCksIHJh
d0lkLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBhdXRvIHJhd0lkQmFzZTY0ID0gbWFrZVN0cmlu
ZyhiYXNlNjRFbmNvZGVkKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKTsKICAg
ICAgICAgaWYgKHJhd0lkQmFzZTY0ID09IHByZWZlcnJlZENyZWRlbnRpYWxJZEJhc2U2NCkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc4LDcgKzU3OCw3IEBAIE9wdGlvbmFsPFdlYkxvYWRl
clN0cmF0ZWd5OjpTeW5jTG9hZFJlc3UKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFdl
YkxvYWRlclN0cmF0ZWd5Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiBm
cmFtZUxvYWRlciwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVudENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3Jl
ZGVudGlhbFBvbGljeSwgIGNvbnN0IEZldGNoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhl
YWRlck1hcCYgb3JpZ2luYWxSZXF1ZXN0SGVhZGVycywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYkxv
YWRlclN0cmF0ZWd5Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiBmcmFt
ZUxvYWRlciwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVudENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVu
dGlhbFBvbGljeSwgIGNvbnN0IEZldGNoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRl
ck1hcCYgb3JpZ2luYWxSZXF1ZXN0SGVhZGVycywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgYXV0
byogd2ViRnJhbWVMb2FkZXJDbGllbnQgPSB0b1dlYkZyYW1lTG9hZGVyQ2xpZW50KGZyYW1lTG9h
ZGVyLmNsaWVudCgpKTsKICAgICBhdXRvKiB3ZWJGcmFtZSA9IHdlYkZyYW1lTG9hZGVyQ2xpZW50
ID8gJndlYkZyYW1lTG9hZGVyQ2xpZW50LT53ZWJGcmFtZSgpIDogbnVsbHB0cjsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRl
Z3kuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViTG9hZGVyU3RyYXRlZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBw
dWJsaWM6CiAgICAgfldlYkxvYWRlclN0cmF0ZWd5KCkgZmluYWw7CiAgICAgCiAgICAgdm9pZCBs
b2FkUmVzb3VyY2UoV2ViQ29yZTo6RnJhbWUmLCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSYsIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck9w
dGlvbnMmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpTdWJyZXNvdXJj
ZUxvYWRlcj4mJik+JiYpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShXZWJDb3JlOjpGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRp
ZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3Jl
ZGVudGlhbFBvbGljeSwgY29uc3QgV2ViQ29yZTo6RmV0Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29y
ZTo6SFRUUEhlYWRlck1hcCYsIFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25n
IHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0
aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkg
ZmluYWw7CiAgICAgdm9pZCBwYWdlTG9hZENvbXBsZXRlZChXZWJDb3JlOjpQYWdlJikgZmluYWw7
CiAgICAgdm9pZCBicm93c2luZ0NvbnRleHRSZW1vdmVkKFdlYkNvcmU6OkZyYW1lJikgZmluYWw7
CiAKQEAgLTEwMSw3ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBTeW5jTG9hZFJlc3Vs
dCB7CiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CiAgICAgICAg
IFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3I7Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBkYXRh
OworICAgICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICB9OwogICAgIE9wdGlvbmFsPFN5
bmNMb2FkUmVzdWx0PiB0cnlMb2FkaW5nU3luY2hyb25vdXNseVVzaW5nVVJMU2NoZW1lSGFuZGxl
cihXZWJDb3JlOjpGcmFtZUxvYWRlciYsIFJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwogICAgIFN5bmNMb2FkUmVzdWx0IGxvYWREYXRhVVJM
U3luY2hyb25vdXNseShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJM
U2NoZW1lSGFuZGxlclByb3h5LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6
c3RhcnROZXdUCiAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c3RhcnRMb2FkaW5nKCk7CiB9
CiAKLXZvaWQgV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5Ojpsb2FkU3luY2hyb25vdXNseShSZXNv
dXJjZUxvYWRJZGVudGlmaWVyIGxvYWRJZGVudGlmaWVyLCBXZWJGcmFtZSYgd2ViRnJhbWUsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFJlc291cmNlRXJyb3ImIGVycm9yLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYlVSTFNj
aGVtZUhhbmRsZXJQcm94eTo6bG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmll
ciBsb2FkSWRlbnRpZmllciwgV2ViRnJhbWUmIHdlYkZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIGRhdGEuc2hyaW5rKDApOwogICAg
IGlmICghbV93ZWJQYWdlLnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxvYWRTeW5j
aHJvbm91c1VSTFNjaGVtZVRhc2soVVJMU2NoZW1lVGFza1BhcmFtZXRlcnMgeyBtX2lkZW50aWZp
ZXIsIGxvYWRJZGVudGlmaWVyLCByZXF1ZXN0LCB3ZWJGcmFtZS5pbmZvKCkgfSksIE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkxvYWRTeW5jaHJvbm91c1VSTFNjaGVtZVRhc2s6OlJlcGx5KHJlc3Bv
bnNlLCBlcnJvciwgZGF0YSkpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuaAkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2No
ZW1lSGFuZGxlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc3RhcnROZXdUYXNrKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyJiwgV2ViRnJh
bWUmKTsKICAgICB2b2lkIHN0b3BBbGxUYXNrcygpOwogCi0gICAgdm9pZCBsb2FkU3luY2hyb25v
dXNseShSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBXZWJGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yJiwgVmVjdG9yPGNoYXI+Jik7CisgICAgdm9pZCBsb2FkU3luY2hyb25vdXNseShS
ZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBXZWJGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJiwgVmVjdG9yPHVpbnQ4X3Q+Jik7CiAKICAgICB1aW50NjRfdCBpZGVudGlmaWVyKCkgY29u
c3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAgICAgV2ViUGFnZSYgcGFnZSgpIHsgcmV0dXJu
IG1fd2ViUGFnZTsgfQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisg
ICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdG8gbWF0Y2ggbW9yZSBtb2Rl
cm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5j
cHA6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVk
dWxlci5oOgorICAgICAgICBVcGRhdGUgdG8gbWF0Y2ggbmV3IHNpZ25hdHVyZS4gY2hhciAtPiB1
aW50OF90LgorCiAyMDIxLTA1LTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVuYW1lIEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKCkgdG8gRmlsZVN5c3RlbTo6
ZmlsZVNpemUoKQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdQogICAgIH0pOwogfQogCi12b2lk
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFt
ZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgRmV0Y2hPcHRpb25zJiBv
cHRpb25zLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYg
ZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zLCBj
b25zdCBIVFRQSGVhZGVyTWFwJiwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgUmVzb3VyY2VIYW5k
bGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoZnJhbWVMb2FkZXIubmV0d29ya2luZ0NvbnRl
eHQoKSwgcmVxdWVzdCwgb3B0aW9ucy5jcmVkZW50aWFscyA9PSBGZXRjaE9wdGlvbnM6OkNyZWRl
bnRpYWxzOjpPbWl0ID8gU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlIDogU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3k6OlVzZSwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9X
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKCk7CiAKICAgICB2b2lkIGxvYWRSZXNvdXJjZShXZWJDb3JlOjpGcmFtZSYsIFdl
YkNvcmU6OkNhY2hlZFJlc291cmNlJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlTG9hZGVyT3B0aW9ucyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
UmVmUHRyPFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyPiYmKT4mJikgZmluYWw7Ci0gICAgdm9p
ZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6OkZyYW1lTG9hZGVyJiwgdW5zaWdu
ZWQgbG9uZywgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50
Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgV2ViQ29yZTo6RmV0Y2hPcHRpb25zJiwgY29uc3QgV2Vi
Q29yZTo6SFRUUEhlYWRlck1hcCYsIFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JikgZmluYWw7CisgICAgdm9pZCBsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZywg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlh
bFBvbGljeSwgY29uc3QgV2ViQ29yZTo6RmV0Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29yZTo6SFRU
UEhlYWRlck1hcCYsIFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JikgZmluYWw7CiAgICAgdm9pZCBwYWdlTG9hZENvbXBs
ZXRlZChXZWJDb3JlOjpQYWdlJikgZmluYWw7CiAgICAgdm9pZCBicm93c2luZ0NvbnRleHRSZW1v
dmVkKFdlYkNvcmU6OkZyYW1lJikgZmluYWw7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDIxLTA1LTE4ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5n
L2RlY29kaW5nIHRvIG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OndyYXBDcnlw
dG9LZXkgY29uc3QpOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50Ojp1bndyYXBDcnlwdG9LZXkg
Y29uc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBPcHRpb25hbCByZXR1cm5pbmcgZGVm
YXVsdFdlYkNyeXB0b01hc3RlcktleSgpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OnNhdmUpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBPcHRpb25hbCByZXR1cm5pbmcgYmFz
ZTY0RGVjb2RlKCkuCisKIDIwMjEtMDUtMTUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgRGVsZXRlIFdlYlNRTCBjb2RlIGZyb20gV2ViS2l0MgpJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDY2LDI4ICsxMDY2LDM0IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGl0RnVsbFNjcmVlbkZv
ckUKIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OndyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXksIFZlY3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSkgY29uc3QKIHsKLSAgICBW
ZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogICAgIFNFTCBzZWxlY3RvciA9IEBzZWxlY3Rvcih3
ZWJDcnlwdG9NYXN0ZXJLZXlGb3JXZWJWaWV3Oik7CiAgICAgaWYgKFtbbV93ZWJWaWV3IFVJRGVs
ZWdhdGVdIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pIHsKICAgICAgICAgTlNEYXRhICpr
ZXlEYXRhID0gQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBzZWxlY3Rvcik7CisgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAgICAgICAgIG1hc3RlcktleS5hcHBlbmQoc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KFtrZXlEYXRhIGJ5dGVzXSkpLCBba2V5
RGF0YSBsZW5ndGhdKTsKLSAgICB9IGVsc2UgaWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVy
S2V5KG1hc3RlcktleSkpCisgICAgICAgIHJldHVybiB3cmFwU2VyaWFsaXplZENyeXB0b0tleSht
YXN0ZXJLZXksIGtleSwgd3JhcHBlZEtleSk7CisgICAgfQorICAgIAorICAgIGF1dG8gbWFzdGVy
S2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIGlmICghbWFzdGVyS2V5KQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gd3JhcFNlcmlhbGl6ZWRDcnlwdG9L
ZXkobWFzdGVyS2V5LCBrZXksIHdyYXBwZWRLZXkpOworICAgIHJldHVybiB3cmFwU2VyaWFsaXpl
ZENyeXB0b0tleShXVEZNb3ZlKCptYXN0ZXJLZXkpLCBrZXksIHdyYXBwZWRLZXkpOwogfQogCiBi
b29sIFdlYkNocm9tZUNsaWVudDo6dW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgd3JhcHBlZEtleSwgVmVjdG9yPHVpbnQ4X3Q+JiBrZXkpIGNvbnN0CiB7Ci0gICAgVmVjdG9y
PHVpbnQ4X3Q+IG1hc3RlcktleTsKICAgICBTRUwgc2VsZWN0b3IgPSBAc2VsZWN0b3Iod2ViQ3J5
cHRvTWFzdGVyS2V5Rm9yV2ViVmlldzopOwogICAgIGlmIChbW21fd2ViVmlldyBVSURlbGVnYXRl
XSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKSB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBtYXN0ZXJLZXk7CiAgICAgICAgIE5TRGF0YSAqa2V5RGF0YSA9IENhbGxVSURlbGVnYXRlKG1f
d2ViVmlldywgc2VsZWN0b3IpOwogICAgICAgICBtYXN0ZXJLZXkuYXBwZW5kKHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihjb25zdF9jYXN0PHZvaWQqPihba2V5RGF0YSBieXRlc10pKSwgW2tleURhdGEg
bGVuZ3RoXSk7Ci0gICAgfSBlbHNlIGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSht
YXN0ZXJLZXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB1bndyYXBT
ZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwgd3JhcHBlZEtleSwga2V5KTsKKyAgICB9CiAK
LSAgICByZXR1cm4gdW53cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIHdyYXBwZWRL
ZXksIGtleSk7CisgICAgYXV0byBtYXN0ZXJLZXkgPSBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5
KCk7CisgICAgaWYgKCFtYXN0ZXJLZXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gdW53cmFwU2VyaWFsaXplZENyeXB0b0tleShXVEZNb3ZlKCptYXN0ZXJLZXkpLCB3cmFwcGVk
S2V5LCBrZXkpOwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0JKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDA4LDEwICs0MDgsMTAg
QEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2F2ZShjbwogICAgICAgICBtX3N1
Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwog
CiAgICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4g
b3V0OwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNl
NjREZWNvZGUoY29udGVudCwgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKTsK
KyAgICAgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNE
YXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsK
KyAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05T
RGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpkZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNv
ZGVkRGF0YS0+c2l6ZSgpXSk7CiAgICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDph
Y3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtj
b250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpO
U1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsK
</data>
<flag name="commit-queue"
          id="450070"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429004</attachid>
            <date>2021-05-18 17:21:40 -0700</date>
            <delta_ts>2021-05-18 17:40:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210518172139.patch</filename>
            <type>text/plain</type>
            <size>187926</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIHd0Zi90ZXh0
L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVybmFsKToKKyAgICAg
ICAgKFdURjo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRV
UkxEZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5oOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgor
ICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNv
ZGUpOgorICAgICAgICAoV1RGOjppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdURjo6Y2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNl
NjRFbmNvZGVkKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlZCk6CisgICAgICAgIChX
VEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpTdHJpbmdUeXBlQWRh
cHRlcik6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRp
b24+OjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNl
NjRTcGVjaWZpY2F0aW9uPjo6aXM4Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlw
ZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46OndyaXRlVG8gY29uc3QpOgorCiAyMDIxLTA1
LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXpl
IC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dURi93
dGYvdGV4dC9CYXNlNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAg
IENvcHlyaWdodCAoQykgMjAwMC0yMDAxIERhd2l0IEFsZW1heWVodSA8YWRhd2l0QGtkZS5vcmc+
CiAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9y
Zz4KLSAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5z
dGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMTMgKzI1
LDE2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbmNsdWRlIDxsaW1pdHMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNvbnN0IGNoYXIgbm9uQWxwaGFiZXQgPSAtMTsK
IAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RW5jTWFwWzY0XSA9IHsKK3N0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgZW5jb2RlTWFwU2l6ZSA9IDY0Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBkZWNvZGVNYXBTaXplID0gMTI4OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRFbmNNYXBb
ZW5jb2RlTWFwU2l6ZV0gPSB7CiAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0
NiwgMHg0NywgMHg0OCwKICAgICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAw
eDRGLCAweDUwLAogICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcs
IDB4NTgsCkBAIC00Miw3ICs0NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVuY01hcFs2
NF0gPSB7CiAgICAgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHgy
RgogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RGVjTWFwWzEyOF0gPSB7CitzdGF0aWMg
Y29uc3QgY2hhciBiYXNlNjREZWNNYXBbZGVjb2RlTWFwU2l6ZV0gPSB7CiAgICAgbm9uQWxwaGFi
ZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCkBAIC02MSw3ICs2NCw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyIGJhc2U2NERlY01hcFsxMjhdID0gewogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJl
dAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IHsKK3N0YXRp
YyBjb25zdCBjaGFyIGJhc2U2NFVSTEVuY01hcFtlbmNvZGVNYXBTaXplXSA9IHsKICAgICAweDQx
LCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAogICAgIDB4NDksIDB4
NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCiAgICAgMHg1MSwgMHg1Miwg
MHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKQEAgLTcyLDcgKzc1LDcgQEAgc3Rh
dGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IAogICAgIDB4MzQsIDB4MzUsIDB4
MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4MkQsIDB4NUYKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFy
IGJhc2U2NFVSTERlY01hcFsxMjhdID0geworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRGVj
TWFwW2RlY29kZU1hcFNpemVdID0gewogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9u
QWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsCiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LApAQCAtOTEsMjQzICs5NCwyMTggQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJM
RGVjTWFwWzEyOF0gPQogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0LCBub25BbHBo
YWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsKIAotc3RhdGlj
IGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3ksIGNvbnN0IGNoYXIgKCZlbmNvZGVNYXApWzY0XSkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVpbnQ4
X3QqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUq
IGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNs
ZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVzdGlu
YXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUo
aW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5ndGgpOwogCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSAib3V0TGVuZ3Ro
IiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkg
cHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0gICAgY29uc3QgdW5zaWduZWQg
bWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwotICAg
IGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRv
IGVuY29kZU1hcCA9IChtYXAgPT0gQmFzZTY0RW5jb2RlTWFwOjpVUkwpID8gYmFzZTY0VVJMRW5j
TWFwIDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9IDA7CiAgICAgdW5zaWdu
ZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0gICAgdW5zaWduZWQgb3V0
TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGluc2VydExGcyA9IChwb2xp
Y3kgPT0gQmFzZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnMgJiYgZGVzdGluYXRpb25MZW5ndGgg
PiBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOwogCi0gICAgLy8gRGVh
bCB3aXRoIHRoZSA3NiBjaGFyYWN0ZXIgcGVyIGxpbmUgbGltaXQgc3BlY2lmaWVkIGluIFJGQyAy
MDQ1LgotICAgIGJvb2wgaW5zZXJ0TEZzID0gKHBvbGljeSA9PSBCYXNlNjRJbnNlcnRMRnMgJiYg
b3V0TGVuZ3RoID4gNzYpOwotICAgIGlmIChpbnNlcnRMRnMpCi0gICAgICAgIG91dExlbmd0aCAr
PSAoKG91dExlbmd0aCAtIDEpIC8gNzYpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBvdXQu
Z3JvdyhvdXRMZW5ndGgpOwotCi0gICAgLy8gMy1ieXRlIHRvIDQtYnl0ZSBjb252ZXJzaW9uICsg
MC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgotICAgIGlmIChsZW4gPiAxKSB7Ci0g
ICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAgIGlmIChpbnB1dExlbmd0aCA+IDEp
IHsKKyAgICAgICAgd2hpbGUgKHNpZHggPCBpbnB1dExlbmd0aCAtIDIpIHsKICAgICAgICAgICAg
IGlmIChpbnNlcnRMRnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoY291bnQgJiYgIShjb3VudCAl
IDc2KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOworICAgICAgICAg
ICAgICAgIGlmIChjb3VudCAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVu
SW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHgrK10gPSAnXG4nOwogICAgICAgICAgICAgICAgIGNvdW50ICs9IDQ7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA+PiAy
KSAmIDA3N107Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lk
eCArIDFdID4+IDQpICYgMDE3KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3NyldOwotICAgICAg
ICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAyXSA+PiA2KSAmIDAw
MykgfCAoKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlk
eCsrXSA9IGVuY29kZU1hcFtkYXRhW3NpZHggKyAyXSAmIDA3N107CisKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXREYXRhQnVmZmVy
W3NpZHggICAgXSA+PiAyKSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZm
ZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPj4gNCkg
JiAwMTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3KV07CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0
RGF0YUJ1ZmZlcltzaWR4ICsgMl0gPj4gNikgJiAwMDMpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lk
eCArIDFdIDw8IDIpICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJb
ZGlkeCsrXSA9IGVuY29kZU1hcFsgIGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0gICAgICAgJiAw
NzddOwogICAgICAgICAgICAgc2lkeCArPSAzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KHNpZHggPCBsZW4pIHsKLSAgICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAh
KGNvdW50ICUgNzYpKQotICAgICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7Ci0KLSAgICAgICAg
b3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzddOwotICAgICAg
ICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2Rl
TWFwWygoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYg
MDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4ICsg
MV0gPDwgMikgJiAwNzddOworICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsKKyAgICAgICAg
aWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExp
bmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlcltkaWR4KytdID0gJ1xuJzsKKworICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlk
eCsrXSA9IGVuY29kZU1hcFsoaW5wdXREYXRhQnVmZmVyW3NpZHhdID4+IDIpICYgMDc3XTsKKyAg
ICAgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHgg
KyAxXSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA8PCA0KSAmIDA3Nyld
OworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBb
IChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA8PCA0KSAm
IDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29k
ZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzddOwogICAgIH0KIAot
ICAgIC8vIEFkZCBwYWRkaW5nCi0gICAgaWYgKHBvbGljeSA9PSBCYXNlNjRVUkxQb2xpY3kpCi0g
ICAgICAgIG91dC5yZXNpemUoZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdoaWxlIChkaWR4
IDwgb3V0LnNpemUoKSkgewotICAgICAgICAgICAgb3V0W2RpZHhdID0gJz0nOwotICAgICAgICAg
ICAgKytkaWR4OwotICAgICAgICB9CisgICAgQVNTRVJUKHBvbGljeSAhPSBCYXNlNjRFbmNvZGVQ
b2xpY3k6OlVSTCB8fCBkaWR4ID09IGRlc3RpbmF0aW9uTGVuZ3RoKTsKKworICAgIHdoaWxlIChk
aWR4IDwgZGVzdGluYXRpb25MZW5ndGgpIHsKKyAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHhdID0gJz0nOworICAgICAgICArK2RpZHg7CiAgICAgfQogfQogCi1TdHJpbmcgYmFzZTY0
RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSkKK3N0YXRpYyBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBWZWN0b3I8
Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5j
TWFwKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwor
ICAgIGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShp
bnB1dExlbmd0aCwgcG9saWN5KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGRlc3RpbmF0aW9uVmVjdG9yKGRlc3Rp
bmF0aW9uTGVuZ3RoKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChpbnB1dERhdGFCdWZmZXIs
IGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvblZlY3Rvci5kYXRhKCksIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uVmVjdG9yOwogfQogCi12b2lk
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFy
PiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQorVmVjdG9yPGNoYXI+IGJhc2U2NEVu
Y29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJh
c2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRh
KSwgbGVuLCBvdXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5j
b2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciks
IGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUo
Y29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBiYXNlNjRFbmNvZGUoY29u
c3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBCYXNlNjRVUkxQb2xpY3ksIGJh
c2U2NFVSTEVuY01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQu
c2l6ZSgpKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm47Cisg
ICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0
aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0
IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQpCit2b2lkIGJhc2U2
NEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3Ro
LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0
aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
ZGF0YSksIGxlbiwgb3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7CisgICAg
aWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGJhc2U2NEVuY29k
ZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZmZXIpLCBp
bnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9s
aWN5LCBtYXApOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBib29s
IGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyJiBvdXQsIHVuc2lnbmVkIG9wdGlvbnMsIGNv
bnN0IGNoYXIgKCZkZWNvZGVNYXApWzEyOF0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBp
bnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICBvdXQuY2xl
YXIoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFp
bnB1dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIFZlY3Rvcjx1aW50OF90PiB7IH07CiAKLSAgICBv
dXQuZ3JvdyhsZW5ndGgpOworICAgIGF1dG8gZGVjb2RlTWFwID0gKG1hcCA9PSBCYXNlNjREZWNv
ZGVNYXA6OlVSTCkgPyBiYXNlNjRVUkxEZWNNYXAgOiBiYXNlNjREZWNNYXA7CisKKyAgICBWZWN0
b3I8dWludDhfdD4gZGVzdGluYXRpb24oaW5wdXRMZW5ndGgpOwogCiAgICAgdW5zaWduZWQgZXF1
YWxzU2lnbkNvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBvdXRMZW5ndGggPSAwOwotICAgIGJvb2wg
aGFkRXJyb3IgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbmd0
aDsgKytpZHgpIHsKLSAgICAgICAgdW5zaWduZWQgY2ggPSBkYXRhW2lkeF07CisgICAgdW5zaWdu
ZWQgZGVzdGluYXRpb25MZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4
IDwgaW5wdXRMZW5ndGg7ICsraWR4KSB7CisgICAgICAgIHVuc2lnbmVkIGNoID0gaW5wdXREYXRh
QnVmZmVyW2lkeF07CiAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKICAgICAgICAgICAgICsrZXF1
YWxzU2lnbkNvdW50OwogICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIG5ldmVyIGJlIG1vcmUg
dGhhbiAyIHBhZGRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChvcHRpb25zICYgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKLSAgICAgICAgICAg
ICAgICBoYWRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAob3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRp
bmcpICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y2hhciBkZWNvZGVkQ2hhcmFjdGVyID0gY2ggPCBXVEZfQVJSQVlfTEVOR1RIKGRlY29kZU1hcCkg
PyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFiZXQ7CisgICAgICAgICAgICBjaGFyIGRlY29kZWRD
aGFyYWN0ZXIgPSBjaCA8IGRlY29kZU1hcFNpemUgPyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFi
ZXQ7CiAgICAgICAgICAgICBpZiAoZGVjb2RlZENoYXJhY3RlciAhPSBub25BbHBoYWJldCkgewot
ICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaGFkRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3V0W291dExlbmd0aCsrXSA9IGRlY29kZWRDaGFy
YWN0ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucyAmIEJhc2U2NElnbm9yZVNw
YWNlc0FuZE5ld0xpbmVzKQotICAgICAgICAgICAgICAgIHx8ICghaXNMYXRpbjEoY2gpIHx8ICFp
c0FTQ0lJU3BhY2UoY2gpIHx8ICgob3B0aW9ucyAmIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikg
JiYgY2ggPT0gJ1x2JykpKSB7Ci0gICAgICAgICAgICAgICAgaGFkRXJyb3IgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAg
ICAgZGVzdGluYXRpb25bZGVzdGluYXRpb25MZW5ndGgrK10gPSBkZWNvZGVkQ2hhcmFjdGVyOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRp
b25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykgfHwgKCFpc0xhdGluMShjaCkgfHwgIWlzQVND
SUlTcGFjZShjaCkgfHwgKG9wdGlvbnMuY29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlz
Y2FyZFZlcnRpY2FsVGFiKSAmJiBjaCA9PSAnXHYnKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Ly8gTWFrZSBzdXJlIHdlIHNocmluayBiYWNrIHRoZSBWZWN0b3IgYmVmb3JlIHJldHVybmluZy4g
b3V0TGVuZ3RoIG1heSBiZSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQKKyAgICAvLyBNYWtlIHN1cmUg
d2Ugc2hyaW5rIGJhY2sgdGhlIFZlY3RvciBiZWZvcmUgcmV0dXJuaW5nLiBkZXN0aW5hdGlvbkxl
bmd0aCBtYXkgYmUgc2hvcnRlciB0aGFuIGV4cGVjdGVkCiAgICAgLy8gaW4gY2FzZSBvZiBlcnJv
ciBvciBpbiBjYXNlIG9mIGlnbm9yZWQgc3BhY2VzLgotICAgIGlmIChvdXRMZW5ndGggPCBvdXQu
c2l6ZSgpKQotICAgICAgICBvdXQuc2hyaW5rKG91dExlbmd0aCk7Ci0KLSAgICBpZiAoaGFkRXJy
b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGggPCBk
ZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNocmluayhkZXN0aW5hdGlv
bkxlbmd0aCk7CiAKLSAgICBpZiAoIW91dExlbmd0aCkKLSAgICAgICAgcmV0dXJuICFlcXVhbHNT
aWduQ291bnQ7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkgeworICAgICAgICBpZiAoIWVx
dWFsc1NpZ25Db3VudCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IHJldHVybiBWZWN0b3I8dWludDhfdD4geyB9OworICAgIH0KIAogICAgIC8vIFRoZSBzaG91bGQg
YmUgbm8gcGFkZGluZyBpZiBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiA0LgotICAgIC8vIFdlIHVz
ZSAob3V0TGVuZ3RoICsgZXF1YWxzU2lnbkNvdW50KSBpbnN0ZWFkIG9mIGxlbmd0aCBiZWNhdXNl
IHdlIGRvbid0IHdhbnQgdG8gYWNjb3VudCBmb3IgaWdub3JlZCBjaGFyYWN0ZXJzIChpLmUuIHNw
YWNlcykuCi0gICAgaWYgKG9wdGlvbnMgJiBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgJiYgZXF1YWxz
U2lnbkNvdW50ICYmIChvdXRMZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIC8vIFdlIHVzZSAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNT
aWduQ291bnQpIGluc3RlYWQgb2YgbGVuZ3RoIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhY2Nv
dW50IGZvciBpZ25vcmVkIGNoYXJhY3RlcnMgKGkuZS4gc3BhY2VzKS4KKyAgICBpZiAob3B0aW9u
cy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpICYmIGVxdWFs
c1NpZ25Db3VudCAmJiAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFZhbGlkIGRhdGEgaXMgKG4g
KiA0ICsgWzAsMiwzXSkgY2hhcmFjdGVycyBsb25nLgotICAgIGlmICgob3V0TGVuZ3RoICUgNCkg
PT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoZGVzdGluYXRpb25MZW5ndGgg
JSA0KSA9PSAxKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIC8vIDQt
Ynl0ZSB0byAzLWJ5dGUgY29udmVyc2lvbgotICAgIG91dExlbmd0aCAtPSAob3V0TGVuZ3RoICsg
MykgLyA0OwotICAgIGlmICghb3V0TGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVzdGluYXRpb25MZW5ndGggLT0gKGRlc3RpbmF0aW9uTGVuZ3RoICsgMykgLyA0OworICAgIGlm
ICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICB1bnNpZ25lZCBzaWR4ID0gMDsKICAgICB1bnNpZ25lZCBkaWR4ID0gMDsKLSAgICBpZiAob3V0
TGVuZ3RoID4gMSkgewotICAgICAgICB3aGlsZSAoZGlkeCA8IG91dExlbmd0aCAtIDIpIHsKLSAg
ICAgICAgICAgIG91dFtkaWR4XSA9ICgoKG91dFtzaWR4XSA8PCAyKSAmIDI1NSkgfCAoKG91dFtz
aWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsKLSAgICAgICAgICAgIG91dFtkaWR4ICsgMV0gPSAoKChv
dXRbc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgob3V0W3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OwotICAgICAgICAgICAgb3V0W2RpZHggKyAyXSA9ICgoKG91dFtzaWR4ICsgMl0gPDwgNikgJiAy
NTUpIHwgKG91dFtzaWR4ICsgM10gJiAwNzcpKTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGgg
PiAxKSB7CisgICAgICAgIHdoaWxlIChkaWR4IDwgZGVzdGluYXRpb25MZW5ndGggLSAyKSB7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbltkaWR4ICAgIF0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICAg
IF0gPDwgMikgJiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2RpZHggKyAxXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHgg
KyAxXSA8PCA0KSAmIDI1NSkgfCAoKGRlc3RpbmF0aW9uW3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OworICAgICAgICAgICAgZGVzdGluYXRpb25bZGlkeCArIDJdID0gKCgoZGVzdGluYXRpb25bc2lk
eCArIDJdIDw8IDYpICYgMjU1KSB8ICAoZGVzdGluYXRpb25bc2lkeCArIDNdICAgICAgICYgMDc3
KSk7CiAgICAgICAgICAgICBzaWR4ICs9IDQ7CiAgICAgICAgICAgICBkaWR4ICs9IDM7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2Rp
ZHhdID0gKCgob3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHggKyAxXSA+PiA0KSAm
IDAwMykpOwotCi0gICAgaWYgKCsrZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2RpZHhd
ID0gKCgob3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikg
JiAwMTcpKTsKKyAgICBpZiAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0
aW5hdGlvbltkaWR4XSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggICAgXSA8PCAyKSAmIDI1NSkgfCAo
KGRlc3RpbmF0aW9uW3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOwogCi0gICAgaWYgKG91dExlbmd0
aCA8IG91dC5zaXplKCkpCi0gICAgICAgIG91dC5zaHJpbmsob3V0TGVuZ3RoKTsKKyAgICBpZiAo
KytkaWR4IDwgZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0aW9uW2RpZHhdID0g
KCgoZGVzdGluYXRpb25bc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lk
eCArIDJdID4+IDIpICYgMDE3KSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGVzdGlu
YXRpb25MZW5ndGggPCBkZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNo
cmluayhkZXN0aW5hdGlvbkxlbmd0aCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwogfQogCi1i
b29sIGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZl
Y3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBs
ZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBvcHRpb25zLCBiYXNl
NjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlm
ICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2Rl
SW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3Ro
LCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29kZShTdHJpbmdWaWV3IGluLCBT
aWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQor
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5n
dGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChp
bi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwg
b3V0LCBvcHRpb25zLCBiYXNlNjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNl
NjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNsZWFy
KCk7Ci0KLSAgICAvLyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdl
LCBqdXN0IHJldHVybiBub3RoaW5nLgotICAgIGlmIChpbi5zaXplKCkgPiBVSU5UX01BWCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihpbi5kYXRhKCkpLCBpbi5zaXplKCksIG91dCwg
b3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKKyAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7CiB9
CiAKLWJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJh
c2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuLCBvdXQsIG9wdGlvbnMsIGJh
c2U2NERlY01hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1i
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbi5s
ZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0LCBCYXNl
NjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2
NFVSTERlY01hcCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAg
aWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0g
ICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwg
YmFzZTY0VVJMRGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hh
cmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXAp
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
KyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxl
bmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0KQogewotICAgIG91dC5jbGVhcigpOwotCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICBpZiAoaW4uc2l6ZSgpID4gVUlOVF9NQVgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oaW4uZGF0YSgpKSwgaW4uc2l6ZSgpLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJh
c2U2NFVSTERlY01hcCk7CisgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJM
KTsKIH0KIAotYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQogewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRV
UkxEZWNNYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDI1ICsyNywzNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdURiB7CiAKLWVudW0gQmFzZTY0RW5jb2RlUG9saWN5IHsKLSAgICBCYXNl
NjREb05vdEluc2VydExGcywKLSAgICBCYXNlNjRJbnNlcnRMRnMsCi0gICAgQmFzZTY0VVJMUG9s
aWN5IC8vIE5vIHBhZGRpbmcsIG5vIExGcy4KK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlUG9saWN5
IHsKKyAgICBEb05vdEluc2VydExGcywKKyAgICBJbnNlcnRMRnMsCisgICAgVVJMIC8vIE5vIHBh
ZGRpbmcsIG5vIExGcy4KIH07CiAKLWVudW0gQmFzZTY0RGVjb2RlT3B0aW9ucyB7Ci0gICAgQmFz
ZTY0RGVmYXVsdCA9IDAsCi0gICAgQmFzZTY0VmFsaWRhdGVQYWRkaW5nID0gMSA8PCAwLAotICAg
IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzID0gMSA8PCAxLAotICAgIEJhc2U2NERpc2Nh
cmRWZXJ0aWNhbFRhYiA9IDEgPDwgMiwKK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlTWFwIHsgRGVm
YXVsdCwgVVJMIH07CisKK2VudW0gY2xhc3MgQmFzZTY0RGVjb2RlT3B0aW9ucyA6IHVpbnQ4X3Qg
eworICAgIFZhbGlkYXRlUGFkZGluZyAgICAgICAgID0gMSA8PCAwLAorICAgIElnbm9yZVNwYWNl
c0FuZE5ld0xpbmVzID0gMSA8PCAxLAorICAgIERpc2NhcmRWZXJ0aWNhbFRhYiAgICAgID0gMSA8
PCAyLAogfTsKIAorZW51bSBjbGFzcyBCYXNlNjREZWNvZGVNYXAgeyBEZWZhdWx0LCBVUkwgfTsK
Kworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5J
bnNlcnRpbmdMRnMgPSA3NjsKKworLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2lj
YWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90aGluZy4KKy8vIFJhdGhlciB0aGFuIGJlaW5nIHBl
cmZlY3RseSBwcmVjaXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZhdGl2ZS4KK3N0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwor
CiBjbGFzcyBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgewogcHVibGljOgogICAg
IFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8Y2hhcj4mIHZlY3RvcikK
QEAgLTE0NCw5MCArMTU0LDE2MCBAQCBwcml2YXRlOgogICAgIH0gbV92ZWN0b3I7CiB9OwogCi1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExG
cyk7Ci12b2lkIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNl
cnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLVdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29k
ZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBD
U3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOworV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVu
c2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwg
VUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5
OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwg
dW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29k
ZU1hcDo6RGVmYXVsdCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JV
bnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOworVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9S
VF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0
cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2Rl
TWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8
QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29k
ZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQp
OwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiwg
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRpb25zID0gQmFz
ZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoU3RyaW5n
VmlldywgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRpb25z
ID0gQmFzZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUo
Y29uc3QgVmVjdG9yPGNoYXI+JiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1
bnNpZ25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9v
bCBiYXNlNjREZWNvZGUoY29uc3QgY2hhciosIHVuc2lnbmVkLCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIsIHVuc2lnbmVkIG9wdGlvbnMgPSBCYXNlNjREZWZhdWx0KTsKK2lubGlu
ZSBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVN
YXAgbWFwKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5z
aXplKCksIHBvbGljeSwgbWFwKTsKK30KIAotaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlKENvbnN0
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5j
b2RlKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNl
NjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIGluLnNpemUo
KSwgb3V0LCBwb2xpY3kpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW5wdXQuZGF0YSgpLCBp
bnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgdm9pZCBiYXNlNjRFbmNv
ZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xp
Y3kgcG9saWN5KQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQWxsIHRo
ZSBzYW1lIGZ1bmN0aW9ucyBtb2RpZmllZCBmb3IgYmFzZTY0dXJsLCBhcyBkZWZpbmVkIGluIFJG
QyA0NjQ4LgorLy8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBh
bmQgJy8nIHJlc3BlY3RpdmVseS4KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisK
K1ZlY3RvcjxjaGFyPiBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkKTsKK1Zl
Y3RvcjxjaGFyPiBiYXNlNjRVUkxFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3Rv
ckFkYXB0ZXIpOworVmVjdG9yPGNoYXI+IGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5nJik7
CisKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVS
TERlY29kZShjb25zdCBTdHJpbmcmKTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3KTsKK1dURl9FWFBPUlRfUFJJ
VkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0
b3I8Y2hhcj4mKTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NFVSTERlY29kZShjb25zdCBjaGFyKiwgdW5zaWduZWQpOworCitpbmxpbmUgVmVjdG9y
PGNoYXI+IGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgbGVuZ3Ro
KQogewotICAgIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0aCgpLCBvdXQsIHBvbGlj
eSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQ
b2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJh
c2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbiwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5j
b2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGlucHV0KQogewotICAg
IHJldHVybiBiYXNlNjRFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIHBvbGljeSk7CisgICAg
cmV0dXJuIGJhc2U2NEVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5j
b2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFN0cmlu
ZyBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCitpbmxpbmUgVmVjdG9yPGNoYXI+IGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5nJiBp
bnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCks
IHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0Lmxl
bmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQWxsIHRoZSBzYW1lIGZ1
bmN0aW9ucyBtb2RpZmllZCBmb3IgYmFzZTY0dXJsLCBhcyBkZWZpbmVkIGluIFJGQyA0NjQ4Lgot
Ly8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBhbmQgJy8nIHJl
c3BlY3RpdmVseS4KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNCYXNlNjRPckJhc2U2
NFVSTENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBo
YW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLycgfHwgYyA9PSAnLScgfHwgYyA9PSAn
Xyc7Cit9CisKK2lubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZSh1bnNp
Z25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3sKKyAgICBpZiAo
IWlucHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpbnB1dExlbmd0aCA+
IG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRCdWZmZXJTaXplKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGF1dG8gYmFzZVBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAgICAgcmV0dXJu
ICgoaW5wdXRMZW5ndGggKyAyKSAvIDMpICogNDsKKyAgICB9OwogCi1XVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBWZWN0b3I8Y2hh
cj4mKTsKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyLCBWZWN0b3I8Y2hhcj4mKTsKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENT
dHJpbmcmLCBWZWN0b3I8Y2hhcj4mKTsKKyAgICBhdXRvIGJhc2VVbnBhZGRlZEVuY29kZWRTaXpl
ID0gWyZdIHsKKyAgICAgICAgcmV0dXJuICgoaW5wdXRMZW5ndGggKiA0KSArIDIpIC8gMzsKKyAg
ICB9OwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCB2
b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5z
aWduZWRDaGFyVmVjdG9yQWRhcHRlcik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENT
dHJpbmcmKTsKKyAgICBzd2l0Y2ggKHBvbGljeSkgeworICAgIGNhc2UgQmFzZTY0RW5jb2RlUG9s
aWN5OjpEb05vdEluc2VydExGczoKKyAgICAgICAgcmV0dXJuIGJhc2VQYWRkZWRFbmNvZGVkU2l6
ZSgpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3Ry
aW5nJiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3LCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFZlY3RvcjxjaGFyPiYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcik7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciosIHVu
c2lnbmVkLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIpOworICAgIGNhc2UgQmFz
ZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnM6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBiYXNl
UGFkZGVkRW5jb2RlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0g
MSkgLyBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOworICAgIH0KKwor
ICAgIGNhc2UgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkw6CisgICAgICAgIHJldHVybiBiYXNlVW5w
YWRkZWRFbmNvZGVkU2l6ZSgpOworICAgIH0KK30KIAotaW5saW5lIHZvaWQgYmFzZTY0VVJMRW5j
b2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hh
cj4mIG91dCkKK3N0cnVjdCBCYXNlNjRTcGVjaWZpY2F0aW9uIHsKKyAgICBjb25zdCB2b2lkKiBp
bnB1dERhdGE7CisgICAgdW5zaWduZWQgaW5wdXRMZW5ndGg7CisgICAgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeTsKKyAgICBCYXNlNjRFbmNvZGVNYXAgbWFwOworfTsKKworaW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2ln
bmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2Rl
UG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwIG1hcCA9IEJhc2U2NEVuY29k
ZU1hcDo6RGVmYXVsdCkKIHsKLSAgICBiYXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXpl
KCksIG91dCk7CisgICAgcmV0dXJuIHsgaW5wdXREYXRhLCBpbnB1dExlbmd0aCwgcG9saWN5LCBt
YXAgfTsKIH0KIAotaW5saW5lIHZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGlu
LCBWZWN0b3I8Y2hhcj4mIG91dCkKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVu
Y29kZWQoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgaW5wdXQsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
KQogewotICAgIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0aCgpLCBvdXQpOwor
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xp
Y3kpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5z
aWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbikKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJh
c2U2NEVuY29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzKQogewotICAgIHJldHVybiBi
YXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCkpOworICAgIHJldHVybiBiYXNlNjRF
bmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSk7CiB9CiAKLWlubGlu
ZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGluKQoraW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVu
c2lnbmVkIGlucHV0TGVuZ3RoKQogewotICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGUoaW4uZGF0
YSgpLCBpbi5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXREYXRhLCBp
bnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJM
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBi
b29sIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQoraW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChDb25zdFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlciBpbnB1dCkKIHsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVt
ZXJpYyhjKSB8fCBjID09ICcrJyB8fCBjID09ICcvJyB8fCBjID09ICctJyB8fCBjID09ICdfJzsK
KyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFz
ZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKK30KKworaW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1
dCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0
aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQog
Cit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+
IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBCYXNlNjRTcGVjaWZpY2F0
aW9uJiBiYXNlNjQpCisgICAgICAgIDogbV9iYXNlNjQgeyBiYXNlNjQgfQorICAgICAgICAsIG1f
ZW5jb2RlZExlbmd0aCB7IGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1dExl
bmd0aCwgYmFzZTY0LnBvbGljeSkgfQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX2VuY29kZWRMZW5ndGg7IH0KKyAgICBib29sIGlzOEJpdCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKiBkZXN0aW5hdGlvbikgY29uc3QKKyAg
ICB7CisgICAgICAgIGJhc2U2NEVuY29kZShtX2Jhc2U2NC5pbnB1dERhdGEsIG1fYmFzZTY0Lmlu
cHV0TGVuZ3RoLCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ks
IG1fYmFzZTY0Lm1hcCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2U2NFNwZWNpZmljYXRp
b24gbV9iYXNlNjQ7CisgICAgdW5zaWduZWQgbV9lbmNvZGVkTGVuZ3RoOworfTsKKwogfSAvLyBu
YW1lc3BhY2UgV1RGCiAKK3VzaW5nIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczsKIHVzaW5nIFdU
Rjo6QmFzZTY0RW5jb2RlUG9saWN5OwotdXNpbmcgV1RGOjpCYXNlNjREb05vdEluc2VydExGczsK
LXVzaW5nIFdURjo6QmFzZTY0SW5zZXJ0TEZzOwotdXNpbmcgV1RGOjpCYXNlNjRWYWxpZGF0ZVBh
ZGRpbmc7Ci11c2luZyBXVEY6OkJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzOwotdXNpbmcg
V1RGOjpCYXNlNjREaXNjYXJkVmVydGljYWxUYWI7Ci11c2luZyBXVEY6OmJhc2U2NEVuY29kZTsK
K3VzaW5nIFdURjo6QmFzZTY0U3BlY2lmaWNhdGlvbjsKIHVzaW5nIFdURjo6YmFzZTY0RGVjb2Rl
OwordXNpbmcgV1RGOjpiYXNlNjRFbmNvZGU7Cit1c2luZyBXVEY6OmJhc2U2NEVuY29kZWQ7Cit1
c2luZyBXVEY6OmJhc2U2NFVSTERlY29kZTsKIHVzaW5nIFdURjo6YmFzZTY0VVJMRGVjb2RlOwor
dXNpbmcgV1RGOjpiYXNlNjRVUkxFbmNvZGU7Cit1c2luZyBXVEY6OmJhc2U2NFVSTEVuY29kZWQ7
CiB1c2luZyBXVEY6OmlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzc2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNTUgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdG8g
bWF0Y2ggbW9yZSBtb2Rlcm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9kdWxlcy9l
bmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
dHJhY3RLZXlJRHNLZXlpZHMpOgorICAgICAgICAoV2ViQ29yZTo6c2FuaXRpemVLZXlpZHMpOgor
ICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNlc3Npb25D
bGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0
ZSk6CisgICAgICAgICogTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6anNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZW1JbkNvbnRleHQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JDb29yZGluYXRvckludGVybmFsOjpwcm9kdWNlQ2xp
ZW50RGF0YUpzb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVu
dGlhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsOjpQdWJsaWNL
ZXlDcmVkZW50aWFsKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlU2VjV2ViU29ja2V0S2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2Nr
ZXRBY2NlcHQpOgorICAgICAgICAqIGNyeXB0by9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oOgor
ICAgICAgICAqIGNyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW50cyBjb25zdCk6Cisg
ICAgICAgICogY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAg
ICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlBRVM6OmltcG9ydEp3ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlBRVM6OmV4
cG9ydEp3ayBjb25zdCk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OmltcG9ydEp3ayk6CisgICAgICAgICogY3J5
cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlI
TUFDOjppbXBvcnRKd2spOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5SE1BQzo6ZXhwb3J0
SndrIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjppbXBvcnRKd2spOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvS2V5UlNBOjpleHBvcnRKd2sgY29uc3QpOgorICAgICAgICAqIGNyeXB0by9tYWMv
Q3J5cHRvS2V5RUNNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OnBsYXRm
b3JtQWRkRmllbGRFbGVtZW50cyBjb25zdCk6CisgICAgICAgICogY3J5cHRvL21hYy9TZXJpYWxp
emVkQ3J5cHRvS2V5V3JhcE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFuZFN0b3Jl
TWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRNYXN0ZXJLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8v
b3BlbnNzbC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE9wZW5TU0wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRE
ZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0Zp
bGVSZWFkZXJMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcjo6
Y29udmVydFRvRGF0YVVSTCk6CisgICAgICAgICogaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBvcnQ6OmNyZWF0ZURpZ2VzdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAg
ICogaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGE6OmRlY29kZURhdGFUb0NvbnRlbnQp
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNIQTI1Nkhhc2gpOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcjo6YnVpbGRXZWJTb2NrZXRNZXNzYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlm
aWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNl
cHRXaXRoUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmludGVyY2VwdFdpdGhSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUGFnZUFnZW50OjphcmNoaXZlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkpOgorICAgICAgICAqIGxvYWRlci9Mb2FkZXJTdHJhdGVneS5oOgorICAgICAg
ICAqIGxvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6RXBoZW1lcmFsU291cmNlTm9uY2U6OmlzVmFsaWQg
Y29uc3QpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0KToK
KyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TUhUTUxBcmNoaXZlOjpnZW5lcmF0ZU1IVE1MRGF0YSk6CisgICAgICAgICog
bG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TUhUTUxQYXJzZXI6OnBhcnNlTmV4dFBhcnQpOgorICAgICAgICAqIGxvYWRlci9jb2NvYS9Qcml2
YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVVubGlua2FibGVUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQW5k
VXBkYXRlU291cmNlU2VjcmV0VG9rZW4pOgorICAgICAgICAqIHBhZ2UvQmFzZTY0VXRpbGl0aWVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2U2NFV0aWxpdGllczo6YnRvYSk6CisgICAgICAg
IChXZWJDb3JlOjpCYXNlNjRVdGlsaXRpZXM6OmF0b2IpOgorICAgICAgICAqIHBhZ2UvUGFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdl
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAgICAgICAg
KFdlYkNvcmU6OmV4dHJhY3RLZXlpZHNGcm9tQ2VuY0luaXREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OmV4dHJhY3RLZXlJZEZyb21XZWJNSW5pdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0RN
SW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdFNpbmZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZG
T2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQzo6cmVxdWVzdExpY2Vuc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2Jq
Qzo6ZGlkUHJvdmlkZVJlcXVlc3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRhdGFVUkwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVVuaXF1ZUZvbnROYW1lKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNh
aXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVVuaXF1ZUZvbnROYW1lKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bG9hZEJs
b2JSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJjZUhhbmRs
ZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRl
bnRpYWxCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxCYXNlOjpzZXJpYWxp
emF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9EYXRhVVJMRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVVJMRGVjb2Rlcjo6
ZGVjb2RlQmFzZTY0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVF
c2NhcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVTeW5jaHJv
bm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25v
dXNseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6aGFuZGxlRGF0YVVSTCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjphcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3Vw
TmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SG9zdFRMU0NlcnRpZmljYXRl
U2V0Ojpjb21wdXRlQ2VydGlmaWNhdGVIYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0Rl
Y29kZUVzY2FwZVNlcXVlbmNlcy5oOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzQXNEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9y
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0
cmluZyk6CisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1dTY3JpcHRTdG9yYWdlOjpzaGEySGFzaCBjb25zdCk6
CisKIDIwMjEtMDUtMTggIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0dQVVBdIFJlbW90ZUF1ZGlvU2Vzc2lvbiBjYWxscyBpbnRvIEFWQXVkaW9TZXNzaW9uIHdo
ZW4gR1BVUCBpcyBlbmFibGVkLCBjYXVzaW5nIGhhbmdzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVk
bWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDE1ICs4MCwx
NCBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+CiAgICAgICAgIGlm
ICgha2V5SUQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBWZWN0b3I8Y2hhcj4g
a2V5SUREYXRhOwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7IGtl
eUlERGF0YSB9KSkKKyAgICAgICAgYXV0byBrZXlJRERhdGEgPSBiYXNlNjRVUkxEZWNvZGUoa2V5
SUQpOworICAgICAgICBpZiAoIWtleUlERGF0YSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIGlmIChrZXlJRERhdGEuc2l6ZSgpIDwga0tleUlkc01pbktleUlkU2l6ZUluQnl0ZXMg
fHwga2V5SUREYXRhLnNpemUoKSA+IGtLZXlJZHNNYXhLZXlJZFNpemVJbkJ5dGVzKQorICAgICAg
ICBpZiAoa2V5SUREYXRhLT5zaXplKCkgPCBrS2V5SWRzTWluS2V5SWRTaXplSW5CeXRlcyB8fCBr
ZXlJRERhdGEtPnNpemUoKSA+IGtLZXlJZHNNYXhLZXlJZFNpemVJbkJ5dGVzKQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBSZWY8U2hhcmVkQnVmZmVyPiBrZXlJ
REJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5SUREYXRhKSk7Ci0gICAg
ICAgIGtleUlEcy5hcHBlbmQoV1RGTW92ZShrZXlJREJ1ZmZlcikpOworICAgICAgICBrZXlJRHMu
YXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKmtleUlERGF0YSkpKTsKICAgICB9
CiAKICAgICByZXR1cm4ga2V5SURzOwpAQCAtMTA1LDcgKzEwNCw3IEBAIHN0YXRpYyBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZUtleWkKICAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgYXV0byBraWRzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7
CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBrZXlJREJ1ZmZlci52YWx1ZSgpKQotICAgICAgICBr
aWRzQXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNvZGUoYnVmZmVyLT5kYXRhKCks
IGJ1ZmZlci0+c2l6ZSgpKSk7CisgICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhtYWtlU3Ry
aW5nKGJhc2U2NFVSTEVuY29kZWQoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSkpOwog
ICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtpZHNBcnJheSkpOwogCiAgICAg
Q1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vz
c2lvbkNsZWFyS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Vu
Y3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2Fj
eS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTMg
KzE2OSwxMyBAQCBib29sIENETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKFVpbnQ4QXJyCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBrZXlEYXRhOwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUocmF3S2V5
RGF0YSwga2V5RGF0YSkgfHwga2V5RGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8g
a2V5RGF0YSA9IGJhc2U2NERlY29kZShyYXdLZXlEYXRhKTsKKyAgICAgICAgICAgIGlmICgha2V5
RGF0YSB8fCBrZXlEYXRhLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBMT0coTWVkaWEs
ICJDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZSglcCkgLSBmYWlsZWQ6IHVuYWJsZSB0byBiYXNl
NjQgZGVjb2RlIGtleSIsIHRoaXMpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBtX2NhY2hlZEtleXMuc2V0KGtleUlkLCBXVEZNb3ZlKGtl
eURhdGEpKTsKKyAgICAgICAgICAgIG1fY2FjaGVkS2V5cy5zZXQoa2V5SWQsIFdURk1vdmUoKmtl
eURhdGEpKTsKICAgICAgICAgICAgIGZvdW5kVmFsaWRLZXkgPSB0cnVlOwogICAgICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMv
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjQzLDE0ICsyNDMsMTIgQEAgdm9pZCBRdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudDo6cG9zdEV2ZQogCiBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5D
b250ZXh0KE5TRGF0YSAqZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgSlNDb250ZXh0ICpj
b250ZXh0KQogewotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29k
ZShbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0sIGJhc2U2NERhdGEpOwotCisgICAgLy8gRklY
TUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IFN0
cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFtaW1lVHlwZS5p
c0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9ICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0
LCIgKyBiYXNlNjREYXRhOworICAgICAgICBkYXRhNjQgPSBtYWtlU3RyaW5nKCJkYXRhOiIsIG1p
bWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVu
Z3RoXSkpOwogICAgIGVsc2UKLSAgICAgICAgZGF0YTY0ID0gImRhdGE6dGV4dC9wbGFpbjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4
dC9wbGFpbjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0
aF0pKTsKIAogICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6KGlkKWRhdGE2NC5j
cmVhdGVDRlN0cmluZygpLmdldCgpIGluQ29udGV4dDpjb250ZXh0XTsKIH0KQEAgLTM0Miw5ICsz
NDAsNyBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlCiAgICAgICAg
IGlkIHZhbHVlID0gaXRlbS52YWx1ZTsKICAgICAgICAgTlNTdHJpbmcgKm1pbWVUeXBlID0gW1tp
dGVtIGV4dHJhQXR0cmlidXRlc10gb2JqZWN0Rm9yS2V5OkAiTUlNRXR5cGUiXTsKICAgICAgICAg
aWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXSAmJiBtaW1lVHlwZSkgewot
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgICAgICAgICBiYXNlNjRF
bmNvZGUoW3ZhbHVlIGJ5dGVzXSwgW3ZhbHVlIGxlbmd0aF0sIGJhc2U2NERhdGEpOwotICAgICAg
ICAgICAgU3RyaW5nIGRhdGE2NCA9ICJkYXRhOiIgKyBTdHJpbmcobWltZVR5cGUpICsgIjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CisgICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmco
ImRhdGE6IiwgU3RyaW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbdmFs
dWUgYnl0ZXNdLCBbdmFsdWUgbGVuZ3RoXSkpOwogICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0
T2JqZWN0OihfX2JyaWRnZSBOU1N0cmluZyAqKWRhdGE2NC5jcmVhdGVDRlN0cmluZygpLmdldCgp
IGZvcktleTpAInZhbHVlIl07CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgW2RpY3Rpb25h
cnkgc2V0T2JqZWN0OnZhbHVlIGZvcktleTpAInZhbHVlIl07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRp
bmF0b3IuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgc3RhdGljIFJlZjxBcnJheUJ1ZmZlcj4gcHJvZHVjZUNsaWVudERhdAogICAg
ICAgICBvYmplY3QtPnNldFN0cmluZygidHlwZSJfcywgIndlYmF1dGhuLmdldCJfcyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICBvYmplY3QtPnNldFN0cmluZygiY2hhbGxlbmdlIl9zLCBX
VEY6OmJhc2U2NFVSTEVuY29kZShjaGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVuZ2UubGVuZ3RoKCkp
KTsKKyAgICBvYmplY3QtPnNldFN0cmluZygiY2hhbGxlbmdlIl9zLCBtYWtlU3RyaW5nKGJhc2U2
NFVSTEVuY29kZWQoY2hhbGxlbmdlLmRhdGEoKSwgY2hhbGxlbmdlLmxlbmd0aCgpKSkpOwogICAg
IG9iamVjdC0+c2V0U3RyaW5nKCJvcmlnaW4iX3MsIG9yaWdpbi50b1Jhd1N0cmluZygpKTsKIAog
ICAgIGF1dG8gdXRmOEpTT05TdHJpbmcgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJs
aWNLZXlDcmVkZW50aWFsLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNyArNTQsNyBAQCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIFB1
CiB9CiAKIFB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwoUmVmPEF1dGhl
bnRpY2F0b3JSZXNwb25zZT4mJiByZXNwb25zZSkKLSAgICA6IEJhc2ljQ3JlZGVudGlhbChXVEY6
OmJhc2U2NFVSTEVuY29kZShyZXNwb25zZS0+cmF3SWQoKS0+ZGF0YSgpLCByZXNwb25zZS0+cmF3
SWQoKS0+Ynl0ZUxlbmd0aCgpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6OlJlbW90ZSkK
KyAgICA6IEJhc2ljQ3JlZGVudGlhbChtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVzcG9u
c2UtPnJhd0lkKCktPmRhdGEoKSwgcmVzcG9uc2UtPnJhd0lkKCktPmJ5dGVMZW5ndGgoKSkpLCBU
eXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQogICAgICwgbV9yZXNwb25zZShXVEZN
b3ZlKHJlc3BvbnNlKSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgU3RyaW5nIGdl
bmVyYXRlU2VjV2ViU29ja2V0S2V5KCkKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbmNlU2l6
ZSA9IDE2OwogICAgIHVuc2lnbmVkIGNoYXIga2V5W25vbmNlU2l6ZV07CiAgICAgY3J5cHRvZ3Jh
cGhpY2FsbHlSYW5kb21WYWx1ZXMoa2V5LCBub25jZVNpemUpOwotICAgIHJldHVybiBiYXNlNjRF
bmNvZGUoa2V5LCBub25jZVNpemUpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29k
ZWQoa2V5LCBub25jZVNpemUpKTsKIH0KIAogU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0
RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQoY29uc3QgU3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCkBA
IC0xMTAsNyArMTEwLDcgQEAgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRX
ZQogICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4od2Vi
U29ja2V0S2V5R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSk7CiAgICAgU0hBMTo6RGln
ZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICByZXR1cm4gYmFzZTY0
RW5jb2RlKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7CisgICAgcmV0dXJuIG1ha2VTdHJp
bmcoYmFzZTY0RW5jb2RlZChoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpKTsKIH0KIAogV2Vi
U29ja2V0SGFuZHNoYWtlOjpXZWJTb2NrZXRIYW5kc2hha2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcm
IGNsaWVudE9yaWdpbiwgYm9vbCBhbGxvd0Nvb2tpZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvY3J5cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gb2YgcHJv
dGVjdGlvbiBpcyBub3QgcmVxdWlyZWQgYnkgdGhlIHNwZWMgYXMgb2YgMTEgRGVjZW1iZXIgMjAx
NDoKIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XZWJDcnlwdG9BUEkvI3NlY3VyaXR5LWRldmVs
b3BlcnMKIAotV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5
KFZlY3Rvcjx1aW50OF90PiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGRl
bGV0ZURlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKIAogV0VCQ09SRV9FWFBPUlQgYm9vbCB3
cmFwU2VyaWFsaXplZENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSwg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5
cHQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0tleUVDR0NyeXB0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIzLDExICs1MjMsMTEg
QEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogICAgICAgICBpZiAo
cSAmJiBxLT5zaXplKCkgPT0gY3VydmVVbmNvbXByZXNzZWRQb2ludFNpemUobV9jdXJ2ZSkpIHsK
ICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBhOwogICAgICAgICAgICAgYS5hcHBlbmQocS0+
ZGF0YSgpICsgMSwgdW5jb21wcmVzc2VkRmllbGRFbGVtZW50U2l6ZSk7Ci0gICAgICAgICAgICBq
d2sueCA9IGJhc2U2NFVSTEVuY29kZShhKTsKKyAgICAgICAgICAgIGp3ay54ID0gbWFrZVN0cmlu
ZyhiYXNlNjRVUkxFbmNvZGVkKGEpKTsKIAogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGI7
CiAgICAgICAgICAgICBiLmFwcGVuZChxLT5kYXRhKCkgKyAxICsgdW5jb21wcmVzc2VkRmllbGRF
bGVtZW50U2l6ZSwgdW5jb21wcmVzc2VkRmllbGRFbGVtZW50U2l6ZSk7Ci0gICAgICAgICAgICBq
d2sueSA9IGJhc2U2NFVSTEVuY29kZShiKTsKKyAgICAgICAgICAgIGp3ay55ID0gbWFrZVN0cmlu
ZyhiYXNlNjRVUkxFbmNvZGVkKGIpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTQzLDcgKzU0
Myw3IEBAIGJvb2wgQ3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KICAgICAgICAg
ICAgICAgICAgICAgKmQgPSBXVEZNb3ZlKHBhZGRlZERhdGEpOwogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGp3ay5kID0gYmFzZTY0VVJMRW5jb2RlKCpkKTsKKyAgICAgICAg
ICAgICAgICBqd2suZCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgqZCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvU2Vy
aWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNSAr
MjksMTQgQEAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFz
dGVyS2V5KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVy
S2V5KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFVOVVNFRF9QQVJBTShtYXN0ZXJL
ZXkpOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAK
IC8vIEluaXRpYWxseSB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zIHdlcmUgaW50ZW5kZWQgdG8gcGVy
Zm9ybSBLRUsgd3JhcHBpbmcgYW5kIHVud3JhcHBpbmcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDEwICs4OCwxMCBAQCBSZWZQdHI8Q3J5cHRvS2V5QUVTPiBDcnlwdG9LZXlBRVM6OmltcG9y
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmsuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90PiBvY3RldFNlcXVlbmNl
OwotICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuaywgb2N0ZXRTZXF1ZW5jZSkpCisg
ICAgYXV0byBvY3RldFNlcXVlbmNlID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuayk7CisgICAg
aWYgKCFvY3RldFNlcXVlbmNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWNh
bGxiYWNrKG9jdGV0U2VxdWVuY2Uuc2l6ZSgpICogOCwga2V5RGF0YS5hbGcpKQorICAgIGlmICgh
Y2FsbGJhY2sob2N0ZXRTZXF1ZW5jZS0+c2l6ZSgpICogOCwga2V5RGF0YS5hbGcpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAodXNhZ2VzICYmICFrZXlEYXRhLnVzZS5pc051bGwo
KSAmJiBrZXlEYXRhLnVzZSAhPSAiZW5jIikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0x
MDAsMTQgKzEwMCwxNCBAQCBSZWZQdHI8Q3J5cHRvS2V5QUVTPiBDcnlwdG9LZXlBRVM6OmltcG9y
CiAgICAgaWYgKGtleURhdGEuZXh0ICYmICFrZXlEYXRhLmV4dC52YWx1ZSgpICYmIGV4dHJhY3Rh
YmxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q3J5cHRvS2V5QUVTKGFsZ29yaXRobSwgV1RGTW92ZShvY3RldFNlcXVlbmNlKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5QUVTKGFsZ29y
aXRobSwgV1RGTW92ZSgqb2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpKTsKIH0K
IAogSnNvbldlYktleSBDcnlwdG9LZXlBRVM6OmV4cG9ydEp3aygpIGNvbnN0CiB7CiAgICAgSnNv
bldlYktleSByZXN1bHQ7CiAgICAgcmVzdWx0Lmt0eSA9ICJvY3QiOwotICAgIHJlc3VsdC5rID0g
YmFzZTY0VVJMRW5jb2RlKG1fa2V5KTsKKyAgICByZXN1bHQuayA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChtX2tleSkpOwogICAgIHJlc3VsdC5rZXlfb3BzID0gdXNhZ2VzKCk7CiAgICAg
cmVzdWx0LmV4dCA9IGV4dHJhY3RhYmxlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTgsMjIgKzk4LDIyIEBAIFJlZlB0cjxDcnlwdG9LZXlFQz4gQ3J5cHRvS2V5
RUM6OmltcG9ydEoKIAogICAgIGlmIChrZXlEYXRhLnguaXNOdWxsKCkgfHwga2V5RGF0YS55Lmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4geDsK
LSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEueCwgeCkpCisgICAgYXV0byB4
ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEueCk7CisgICAgaWYgKCF4KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4geTsKLSAgICBpZiAoIVdURjo6YmFzZTY0
VVJMRGVjb2RlKGtleURhdGEueSwgeSkpCisgICAgYXV0byB5ID0gYmFzZTY0VVJMRGVjb2RlKGtl
eURhdGEueSk7CisgICAgaWYgKCF5KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
a2V5RGF0YS5kLmlzTnVsbCgpKSB7CiAgICAgICAgIC8vIGltcG9ydCBwdWJsaWMga2V5Ci0gICAg
ICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1B1YmxpYyhpZGVudGlmaWVyLCAqbmFtZWRDdXJ2
ZSwgV1RGTW92ZSh4KSwgV1RGTW92ZSh5KSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAg
IHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1B1YmxpYyhpZGVudGlmaWVyLCAqbmFtZWRDdXJ2ZSwg
V1RGTW92ZSgqeCksIFdURk1vdmUoKnkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAK
LSAgICBWZWN0b3I8dWludDhfdD4gZDsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtl
eURhdGEuZCwgZCkpCisgICAgYXV0byBkID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZCk7Cisg
ICAgaWYgKCFkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBpbXBvcnQgcHJpdmF0
ZSBrZXkKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBvcnRKV0tQcml2YXRlKGlkZW50aWZpZXIsICpu
YW1lZEN1cnZlLCBXVEZNb3ZlKHgpLCBXVEZNb3ZlKHkpLCBXVEZNb3ZlKGQpLCBleHRyYWN0YWJs
ZSwgdXNhZ2VzKTsKKyAgICByZXR1cm4gcGxhdGZvcm1JbXBvcnRKV0tQcml2YXRlKGlkZW50aWZp
ZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKCp4KSwgV1RGTW92ZSgqeSksIFdURk1vdmUoKmQpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKIH0KIAogUmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlF
Qzo6aW1wb3J0U3BraShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgY3VydmUsIFZlY3Rvcjx1aW50OF90PiYmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFi
bGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDggKzEwMyw4IEBAIFJlZlB0cjxDcnlwdG9LZXlITUFDPiBDcnlwdG9LZXlITUFDOjpp
bXAKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEuay5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG9jdGV0U2VxdWVu
Y2U7Ci0gICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rLCBvY3RldFNlcXVlbmNlKSkK
KyAgICBhdXRvIG9jdGV0U2VxdWVuY2UgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rKTsKKyAg
ICBpZiAoIW9jdGV0U2VxdWVuY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICgh
Y2FsbGJhY2soaGFzaCwga2V5RGF0YS5hbGcpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTExNSwxNCArMTE1LDE0IEBAIFJlZlB0cjxDcnlwdG9LZXlITUFDPiBDcnlwdG9LZXlITUFDOjpp
bXAKICAgICBpZiAoa2V5RGF0YS5leHQgJiYgIWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFj
dGFibGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIENyeXB0b0tleUhN
QUM6OmltcG9ydFJhdyhsZW5ndGhCaXRzLCBoYXNoLCBXVEZNb3ZlKG9jdGV0U2VxdWVuY2UpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICByZXR1cm4gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3
KGxlbmd0aEJpdHMsIGhhc2gsIFdURk1vdmUoKm9jdGV0U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwg
dXNhZ2VzKTsKIH0KIAogSnNvbldlYktleSBDcnlwdG9LZXlITUFDOjpleHBvcnRKd2soKSBjb25z
dAogewogICAgIEpzb25XZWJLZXkgcmVzdWx0OwogICAgIHJlc3VsdC5rdHkgPSAib2N0IjsKLSAg
ICByZXN1bHQuayA9IGJhc2U2NFVSTEVuY29kZShtX2tleSk7CisgICAgcmVzdWx0LmsgPSBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQobV9rZXkpKTsKICAgICByZXN1bHQua2V5X29wcyA9IHVz
YWdlcygpOwogICAgIHJlc3VsdC5leHQgPSBleHRyYWN0YWJsZSgpOwogICAgIHJldHVybiByZXN1
bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tl
eVJTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDY1ICs0NSw4NyBAQCBSZWZQdHI8Q3J5cHRv
S2V5UlNBPiBDcnlwdG9LZXlSU0E6OmltcG9yCiAKICAgICBpZiAoa2V5RGF0YS5uLmlzTnVsbCgp
IHx8IGtleURhdGEuZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgVmVj
dG9yPHVpbnQ4X3Q+IG1vZHVsdXM7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlE
YXRhLm4sIG1vZHVsdXMpKQorICAgIGF1dG8gbW9kdWx1cyA9IGJhc2U2NFVSTERlY29kZShrZXlE
YXRhLm4pOworICAgIGlmICghbW9kdWx1cykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
Ly8gUGVyIFJGQyA3NTE4IFNlY3Rpb24gNi4zLjEuMTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9o
dG1sL3JmYzc1MTgjc2VjdGlvbi02LjMuMS4xCi0gICAgaWYgKCFtb2R1bHVzLmlzRW1wdHkoKSAm
JiAhbW9kdWx1c1swXSkKLSAgICAgICAgbW9kdWx1cy5yZW1vdmUoMCk7Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IGV4cG9uZW50OwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5l
LCBleHBvbmVudCkpCisgICAgaWYgKCFtb2R1bHVzLT5pc0VtcHR5KCkgJiYgIW1vZHVsdXMtPmF0
KDApKQorICAgICAgICBtb2R1bHVzLT5yZW1vdmUoMCk7CisgICAgYXV0byBleHBvbmVudCA9IGJh
c2U2NFVSTERlY29kZShrZXlEYXRhLmUpOworICAgIGlmICghZXhwb25lbnQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmQuaXNOdWxsKCkpIHsKICAgICAgICAgLy8g
aW1wb3J0IHB1YmxpYyBrZXkKLSAgICAgICAgYXV0byBwdWJsaWNLZXlDb21wb25lbnRzID0gQ3J5
cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKFdURk1vdmUobW9kdWx1cyksIFdURk1v
dmUoZXhwb25lbnQpKTsKKyAgICAgICAgYXV0byBwdWJsaWNLZXlDb21wb25lbnRzID0gQ3J5cHRv
S2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKFdURk1vdmUoKm1vZHVsdXMpLCBXVEZNb3Zl
KCpleHBvbmVudCkpOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxkIG5vdCBoYXZlIGFueSBl
ZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlS
U0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpTSEFfMSksICEhaGFzaCwgKnB1YmxpY0tleUNvbXBvbmVudHMsIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogICAgIH0KIAogICAgIC8vIGltcG9ydCBwcml2YXRlIGtleQotICAgIFZlY3Rvcjx1
aW50OF90PiBwcml2YXRlRXhwb25lbnQ7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShr
ZXlEYXRhLmQsIHByaXZhdGVFeHBvbmVudCkpCisgICAgYXV0byBwcml2YXRlRXhwb25lbnQgPSBi
YXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBpZiAoIXByaXZhdGVFeHBvbmVudCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEucC5pc051bGwoKSAmJiBrZXlE
YXRhLnEuaXNOdWxsKCkgJiYga2V5RGF0YS5kcC5pc051bGwoKSAmJiBrZXlEYXRhLmRwLmlzTnVs
bCgpICYmIGtleURhdGEucWkuaXNOdWxsKCkpIHsKLSAgICAgICAgYXV0byBwcml2YXRlS2V5Q29t
cG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUoV1RGTW92ZSht
b2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUocHJpdmF0ZUV4cG9uZW50KSk7Cisg
ICAgICAgIGF1dG8gcHJpdmF0ZUtleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25lbnRz
OjpjcmVhdGVQcml2YXRlKFdURk1vdmUoKm1vZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVudCksIFdU
Rk1vdmUoKnByaXZhdGVFeHBvbmVudCkpOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxkIG5v
dCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJldHVy
biBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRzLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAKICAgICBpZiAoa2V5RGF0YS5wLmlzTnVsbCgp
IHx8IGtleURhdGEucS5pc051bGwoKSB8fCBrZXlEYXRhLmRwLmlzTnVsbCgpIHx8IGtleURhdGEu
ZHEuaXNOdWxsKCkgfHwga2V5RGF0YS5xaS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGZpcnN0UHJpbWVJbmZv
OwotICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBzZWNvbmRQcmltZUluZm87
Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLnAsIGZpcnN0UHJpbWVJbmZv
LnByaW1lRmFjdG9yKSkKKyAgICAKKyAgICBhdXRvIGZpcnN0UHJpbWVGYWN0b3IgPSBiYXNlNjRV
UkxEZWNvZGUoa2V5RGF0YS5wKTsKKyAgICBpZiAoIWZpcnN0UHJpbWVGYWN0b3IpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5k
cCwgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQpKQorICAgIGF1dG8gZmlyc3RGYWN0
b3JDUlRFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRwKTsKKyAgICBpZiAoIWZp
cnN0RmFjdG9yQ1JURXhwb25lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICgh
V1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5xLCBzZWNvbmRQcmltZUluZm8ucHJpbWVGYWN0
b3IpKQorICAgIGF1dG8gc2Vjb25kUHJpbWVGYWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0
YS5xKTsKKyAgICBpZiAoIXNlY29uZFByaW1lRmFjdG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZHEsIHNlY29uZFByaW1l
SW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisgICAgYXV0byBzZWNvbmRGYWN0b3JDUlRFeHBvbmVu
dCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRxKTsKKyAgICBpZiAoIXNlY29uZEZhY3RvckNS
VEV4cG9uZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIVdURjo6YmFzZTY0
VVJMRGVjb2RlKGtleURhdGEucWksIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRDb2VmZmljaWVu
dCkpCisgICAgYXV0byBzZWNvbmRGYWN0b3JDUlRDb2VmZmljaWVudCA9IGJhc2U2NFVSTERlY29k
ZShrZXlEYXRhLnFpKTsKKyAgICBpZiAoIXNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1l
SW5mbyBmaXJzdFByaW1lSW5mbzsKKyAgICBmaXJzdFByaW1lSW5mby5wcmltZUZhY3RvciA9IFdU
Rk1vdmUoKmZpcnN0UHJpbWVGYWN0b3IpOworICAgIGZpcnN0UHJpbWVJbmZvLmZhY3RvckNSVEV4
cG9uZW50ID0gV1RGTW92ZSgqZmlyc3RGYWN0b3JDUlRFeHBvbmVudCk7CisgICAgCisgICAgQ3J5
cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mbzsKKyAgICBzZWNv
bmRQcmltZUluZm8ucHJpbWVGYWN0b3IgPSBXVEZNb3ZlKCpzZWNvbmRQcmltZUZhY3Rvcik7Cisg
ICAgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50ID0gV1RGTW92ZSgqc2Vjb25kRmFj
dG9yQ1JURXhwb25lbnQpOworICAgIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRDb2VmZmljaWVu
dCA9IFdURk1vdmUoKnNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50KTsKKwogICAgIGlmICgha2V5
RGF0YS5vdGgpIHsKLSAgICAgICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tl
eVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEoV1RGTW92ZSht
b2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUocHJpdmF0ZUV4cG9uZW50KSwgV1RG
TW92ZShmaXJzdFByaW1lSW5mbyksIFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwgeyB9KTsKKyAg
ICAgICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6
OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1v
dmUoKmV4cG9uZW50KSwgV1RGTW92ZSgqcHJpdmF0ZUV4cG9uZW50KSwgV1RGTW92ZShmaXJzdFBy
aW1lSW5mbyksIFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwgeyB9KTsKICAgICAgICAgLy8gTm90
aWNlOiBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSBpcyBqdXN0IGEgcGxhY2Vob2xk
ZXIuIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkgZWZmZWN0IGlmIGhhc2ggaXMgV1RGOjpudWxsb3B0
LgogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBoYXNoLnZh
bHVlT3IoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsICpwcml2YXRl
S2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgfQogCiAgICAgVmVjdG9y
PENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbz4gb3RoZXJQcmltZUluZm9zOwogICAg
IGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiBrZXlEYXRhLm90aC52YWx1ZSgpKSB7Ci0gICAgICAg
IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBpbmZvOwotICAgICAgICBpZiAoIVdU
Rjo6YmFzZTY0VVJMRGVjb2RlKHZhbHVlLnIsIGluZm8ucHJpbWVGYWN0b3IpKQorICAgICAgICBh
dXRvIHByaW1lRmFjdG9yID0gYmFzZTY0VVJMRGVjb2RlKHZhbHVlLnIpOworICAgICAgICBpZiAo
IXByaW1lRmFjdG9yKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlmICgh
V1RGOjpiYXNlNjRVUkxEZWNvZGUodmFsdWUuZCwgaW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisg
ICAgICAgIGF1dG8gZmFjdG9yQ1JURXhwb25lbnQgPSBiYXNlNjRVUkxEZWNvZGUodmFsdWUuZCk7
CisgICAgICAgIGlmICghZmFjdG9yQ1JURXhwb25lbnQpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZSh2YWx1ZS50LCBpbmZvLmZh
Y3RvckNSVENvZWZmaWNpZW50KSkKKyAgICAgICAgYXV0byBmYWN0b3JDUlRDb2VmZmljaWVudCA9
IGJhc2U2NFVSTERlY29kZSh2YWx1ZS50KTsKKyAgICAgICAgaWYgKCFmYWN0b3JDUlRDb2VmZmlj
aWVudCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBvdGhlclByaW1lSW5m
b3MuYXBwZW5kKGluZm8pOworCisgICAgICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1l
SW5mbyBpbmZvOworICAgICAgICBpbmZvLnByaW1lRmFjdG9yID0gV1RGTW92ZSgqcHJpbWVGYWN0
b3IpOworICAgICAgICBpbmZvLmZhY3RvckNSVEV4cG9uZW50ID0gV1RGTW92ZSgqZmFjdG9yQ1JU
RXhwb25lbnQpOworICAgICAgICBpbmZvLmZhY3RvckNSVENvZWZmaWNpZW50ID0gV1RGTW92ZSgq
ZmFjdG9yQ1JUQ29lZmZpY2llbnQpOworCisgICAgICAgIG90aGVyUHJpbWVJbmZvcy5hcHBlbmQo
V1RGTW92ZShpbmZvKSk7CiAgICAgfQogCi0gICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9
IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEo
V1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUocHJpdmF0ZUV4cG9u
ZW50KSwgV1RGTW92ZShmaXJzdFByaW1lSW5mbyksIFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwg
V1RGTW92ZShvdGhlclByaW1lSW5mb3MpKTsKKyAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRz
ID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0
YShXVEZNb3ZlKCptb2R1bHVzKSwgV1RGTW92ZSgqZXhwb25lbnQpLCBXVEZNb3ZlKCpwcml2YXRl
RXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUlu
Zm8pLCBXVEZNb3ZlKG90aGVyUHJpbWVJbmZvcykpOwogICAgIC8vIE5vdGljZTogQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6U0hBXzEgaXMganVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQg
bm90IGhhdmUgYW55IGVmZmVjdCBpZiBoYXNoIGlzIFdURjo6bnVsbG9wdC4KICAgICByZXR1cm4g
Q3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBoYXNoLnZhbHVlT3IoQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsICpwcml2YXRlS2V5Q29tcG9uZW50cywgZXh0
cmFjdGFibGUsIHVzYWdlcyk7CiB9CkBAIC0xMTgsMzAgKzE0MCwzMCBAQCBKc29uV2ViS2V5IENy
eXB0b0tleVJTQTo6ZXhwb3J0SndrKCkgY29uCiAgICAgYXV0byByc2FDb21wb25lbnRzID0gZXhw
b3J0RGF0YSgpOwogCiAgICAgLy8gcHVibGljIGtleQotICAgIHJlc3VsdC5uID0gYmFzZTY0VVJM
RW5jb2RlKHJzYUNvbXBvbmVudHMtPm1vZHVsdXMoKSk7Ci0gICAgcmVzdWx0LmUgPSBiYXNlNjRV
UkxFbmNvZGUocnNhQ29tcG9uZW50cy0+ZXhwb25lbnQoKSk7CisgICAgcmVzdWx0Lm4gPSBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+bW9kdWx1cygpKSk7CisgICAg
cmVzdWx0LmUgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+ZXhw
b25lbnQoKSkpOwogICAgIGlmIChyc2FDb21wb25lbnRzLT50eXBlKCkgPT0gQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6VHlwZTo6UHVibGljKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAg
Ly8gcHJpdmF0ZSBrZXkKLSAgICByZXN1bHQuZCA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25l
bnRzLT5wcml2YXRlRXhwb25lbnQoKSk7CisgICAgcmVzdWx0LmQgPSBtYWtlU3RyaW5nKGJhc2U2
NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+cHJpdmF0ZUV4cG9uZW50KCkpKTsKICAgICBpZiAo
IXJzYUNvbXBvbmVudHMtPmhhc0FkZGl0aW9uYWxQcml2YXRlS2V5UGFyYW1ldGVycygpKQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmVzdWx0LnAgPSBiYXNlNjRVUkxFbmNvZGUocnNh
Q29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8oKS5wcmltZUZhY3Rvcik7Ci0gICAgcmVzdWx0LnEg
PSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkucHJpbWVG
YWN0b3IpOwotICAgIHJlc3VsdC5kcCA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5m
aXJzdFByaW1lSW5mbygpLmZhY3RvckNSVEV4cG9uZW50KTsKLSAgICByZXN1bHQuZHEgPSBiYXNl
NjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkuZmFjdG9yQ1JURXhw
b25lbnQpOwotICAgIHJlc3VsdC5xaSA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5z
ZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRDb2VmZmljaWVudCk7CisgICAgcmVzdWx0LnAgPSBt
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8o
KS5wcmltZUZhY3RvcikpOworICAgIHJlc3VsdC5xID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNv
ZGVkKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5mbygpLnByaW1lRmFjdG9yKSk7CisgICAg
cmVzdWx0LmRwID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKHJzYUNvbXBvbmVudHMtPmZp
cnN0UHJpbWVJbmZvKCkuZmFjdG9yQ1JURXhwb25lbnQpKTsKKyAgICByZXN1bHQuZHEgPSBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCku
ZmFjdG9yQ1JURXhwb25lbnQpKTsKKyAgICByZXN1bHQucWkgPSBtYWtlU3RyaW5nKGJhc2U2NFVS
TEVuY29kZWQocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkuZmFjdG9yQ1JUQ29lZmZp
Y2llbnQpKTsKICAgICBpZiAocnNhQ29tcG9uZW50cy0+b3RoZXJQcmltZUluZm9zKCkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgVmVjdG9yPFJzYU90aGVyUHJpbWVz
SW5mbz4gb3RoOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5mbyA6IHJzYUNvbXBvbmVudHMtPm90
aGVyUHJpbWVJbmZvcygpKSB7CiAgICAgICAgIFJzYU90aGVyUHJpbWVzSW5mbyBvdGhlckluZm87
Ci0gICAgICAgIG90aGVySW5mby5yID0gYmFzZTY0VVJMRW5jb2RlKGluZm8ucHJpbWVGYWN0b3Ip
OwotICAgICAgICBvdGhlckluZm8uZCA9IGJhc2U2NFVSTEVuY29kZShpbmZvLmZhY3RvckNSVEV4
cG9uZW50KTsKLSAgICAgICAgb3RoZXJJbmZvLnQgPSBiYXNlNjRVUkxFbmNvZGUoaW5mby5mYWN0
b3JDUlRDb2VmZmljaWVudCk7CisgICAgICAgIG90aGVySW5mby5yID0gbWFrZVN0cmluZyhiYXNl
NjRVUkxFbmNvZGVkKGluZm8ucHJpbWVGYWN0b3IpKTsKKyAgICAgICAgb3RoZXJJbmZvLmQgPSBt
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoaW5mby5mYWN0b3JDUlRFeHBvbmVudCkpOworICAg
ICAgICBvdGhlckluZm8udCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChpbmZvLmZhY3Rv
ckNSVENvZWZmaWNpZW50KSk7CiAgICAgICAgIG90aC5hcHBlbmQoV1RGTW92ZShvdGhlckluZm8p
KTsKICAgICB9CiAgICAgcmVzdWx0Lm90aCA9IFdURk1vdmUob3RoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1B
ZGRGaWVsZEVsZW1lbgogCiAgICAgaWYgKFVOTElLRUxZKChzaXplICE9IHB1YmxpY0tleVNpemUp
ICYmIChzaXplICE9IHByaXZhdGVLZXlTaXplKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBqd2sueCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHJlc3VsdC5kYXRhKCkgKyAxLCBrZXlTaXpl
SW5CeXRlcyk7Ci0gICAgandrLnkgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShyZXN1bHQuZGF0YSgp
ICsga2V5U2l6ZUluQnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRlcyk7CisgICAgandrLnggPSBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVzdWx0LmRhdGEoKSArIDEsIGtleVNpemVJbkJ5dGVz
KSk7CisgICAgandrLnkgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVzdWx0LmRhdGEo
KSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6ZUluQnl0ZXMpKTsKICAgICBpZiAoc2l6ZSA+
IHB1YmxpY0tleVNpemUpCi0gICAgICAgIGp3ay5kID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUocmVz
dWx0LmRhdGEoKSArIHB1YmxpY0tleVNpemUsIGtleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgandr
LmQgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVzdWx0LmRhdGEoKSArIHB1YmxpY0tl
eVNpemUsIGtleVNpemVJbkJ5dGVzKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5
V3JhcE1hYy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQAogI2ltcG9ydCA8Q29tbW9uQ3J5cHRvL0NvbW1vblN5bW1ldHJpY0tleXdyYXAuaD4K
ICNpbXBvcnQgPGNydF9leHRlcm5zLmg+CiAjaW1wb3J0IDx3dGYvQ3J5cHRvZ3JhcGhpY1V0aWxp
dGllcy5oPgorI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1By
aXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL3NwaS9j
b2NvYS9TZWN1cml0eVNQSS5oPgpAQCAtODAsMTEgKzgxLDExIEBAIHN0YXRpYyBOU1N0cmluZyog
bWFzdGVyS2V5QWNjb3VudE5hbWVGb3IKICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJjb20uYXBwbGUuV2ViS2l0LldlYkNyeXB0by5tYXN0ZXIrJUAiLCBidW5kbGVJZGVu
dGlmaWVyXTsKIH0KIAotc3RhdGljIGJvb2wgY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoVmVjdG9y
PHVpbnQ4X3Q+JiBtYXN0ZXJLZXlEYXRhKQorc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGhhc1By
b2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzQ3JlZGVudGlhbHMpKTsK
IAotICAgIG1hc3RlcktleURhdGEucmVzaXplKG1hc3RlcktleVNpemVJbkJ5dGVzKTsKKyAgICBW
ZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5RGF0YShtYXN0ZXJLZXlTaXplSW5CeXRlcyk7CiAgICAg
YXV0byByYyA9IENDUmFuZG9tR2VuZXJhdGVCeXRlcyhtYXN0ZXJLZXlEYXRhLmRhdGEoKSwgbWFz
dGVyS2V5RGF0YS5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJjID09IGtDQ1N1Y2Nlc3Mp
OwogCkBAIC0xMDcsNyArMTA4LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlQW5kU3RvcmVNYXN0ZXJL
ZXkoVmVjdAogICAgIHN0YXR1cyA9IFNlY0FjY2Vzc0NyZWF0ZSgoX19icmlkZ2UgQ0ZTdHJpbmdS
ZWYpbG9jYWxpemVkSXRlbU5hbWUsIG51bGxwdHIsICZhY2Nlc3NSZWYpOwogICAgIGlmIChzdGF0
dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3QgY3JlYXRlIGEgc2VjdXJpdHkgYWNj
ZXNzIG9iamVjdCBmb3Igc3RvcmluZyBXZWJDcnlwdG8gbWFzdGVyIGtleSwgZXJyb3IgJWQiLCAo
aW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPFNlY0FjY2Vzc1JlZj4gYWNjZXNzID0gYWRv
cHRDRihhY2Nlc3NSZWYpOwogCkBAIC0xMjAsMTkgKzEyMSwxOCBAQCBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19CRUdJTgogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAg
ICAgaWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBjcmVhdGUgYSB0
cnVzdGVkIGFwcGxpY2F0aW9uIG9iamVjdCBmb3Igc3RvcmluZyBXZWJDcnlwdG8gbWFzdGVyIGtl
eSwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPFNlY1RydXN0ZWRB
cHBsaWNhdGlvblJlZj4gdHJ1c3RlZEFwcCA9IGFkb3B0Q0YodHJ1c3RlZEFwcFJlZik7CiAKICAg
ICBzdGF0dXMgPSBTZWNBQ0xTZXRDb250ZW50cyhhY2wsIChfX2JyaWRnZSBDRkFycmF5UmVmKUBb
IChfX2JyaWRnZSBpZCl0cnVzdGVkQXBwLmdldCgpIF0sIChfX2JyaWRnZSBDRlN0cmluZ1JlZils
b2NhbGl6ZWRJdGVtTmFtZSwga1NlY0tleWNoYWluUHJvbXB0UmVxdWlyZVBhc3NwaGFzZSk7CiAg
ICAgaWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBzZXQgQUNMIGZv
ciBXZWJDcnlwdG8gbWFzdGVyIGtleSwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAjZW5k
aWYKIAotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YTsKLSAgICBi
YXNlNjRFbmNvZGUobWFzdGVyS2V5RGF0YSwgYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEpOwor
ICAgIGF1dG8gYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEgPSBiYXNlNjRFbmNvZGUobWFzdGVy
S2V5RGF0YSk7CiAKICAgICAvLyBDYW5ub3QgdXNlIGtTZWNDbGFzc0tleSBiZWNhdXNlIG9mIDxy
ZGFyOi8vcHJvYmxlbS8xNjA2ODIwNz4uCiAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0g
QHsKQEAgLTE1MCwxMiArMTUwLDEzIEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VO
RAogICAgIHN0YXR1cyA9IFNlY0l0ZW1BZGQoKENGRGljdGlvbmFyeVJlZilhdHRyaWJ1dGVzLCBu
dWxscHRyKTsKICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90
IHN0b3JlIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBtYXN0ZXJLZXlEYXRhOwogfQogCi1zdGF0
aWMgYm9vbCBmaW5kTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5RGF0YSkKK3N0
YXRpYyBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGZpbmRNYXN0ZXJLZXkoKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNj
ZXNzQ3JlZGVudGlhbHMpKTsKIApAQCAtMTcwLDIwICsxNzEsMjUgQEAgc3RhdGljIGJvb2wgZmlu
ZE1hc3RlcktleShWZWN0b3I8dWludDhfdAogICAgIGlmIChzdGF0dXMpIHsKICAgICAgICAgaWYg
KHN0YXR1cyAhPSBlcnJTZWNJdGVtTm90Rm91bmQgJiYgc3RhdHVzICE9IGVyclNlY1VzZXJDYW5j
ZWxlZCkKICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ291bGQgbm90IGZpbmQgV2ViQ3J5cHRv
IG1hc3RlciBrZXkgaW4gS2V5Y2hhaW4sIGVycm9yICVkIiwgKGludClzdGF0dXMpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogICAg
IFJldGFpblB0cjxDRkRhdGFSZWY+IGtleURhdGEgPSBhZG9wdENGKGtleURhdGFSZWYpOwotCi0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhID0gdmVjdG9yRnJv
bU5TRGF0YSgoX19icmlkZ2UgTlNEYXRhICopa2V5RGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIGJh
c2U2NERlY29kZSgoY29uc3QgY2hhciopYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEuZGF0YSgp
LCBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YS5zaXplKCksIG1hc3RlcktleURhdGEpOworICAg
IHJldHVybiBiYXNlNjREZWNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oQ0ZEYXRh
R2V0Qnl0ZVB0cihrZXlEYXRhLmdldCgpKSksIENGRGF0YUdldExlbmd0aChrZXlEYXRhLmdldCgp
KSk7CiB9CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShWZWN0b3I8dWludDhf
dD4mIG1hc3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSgpCiB7Ci0gICAgaWYgKCFmaW5kTWFzdGVyS2V5KG1hc3RlcktleSkgJiYgIWNy
ZWF0ZUFuZFN0b3JlTWFzdGVyS2V5KG1hc3RlcktleSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBSRUxFQVNFX0FTU0VSVChtYXN0ZXJLZXkuc2l6ZSgpID09IG1hc3RlcktleVNpemVJbkJ5
dGVzKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYXV0byBtYXN0ZXJLZXkgPSBmaW5kTWFz
dGVyS2V5KCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWFzdGVyS2V5LT5zaXplKCkgPT0g
bWFzdGVyS2V5U2l6ZUluQnl0ZXMpOworICAgICAgICByZXR1cm4gbWFzdGVyS2V5OworICAgIH0K
KworICAgIGlmIChhdXRvIG1hc3RlcktleSA9IGNyZWF0ZUFuZFN0b3JlTWFzdGVyS2V5KCkpIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWFzdGVyS2V5LT5zaXplKCkgPT0gbWFzdGVyS2V5U2l6
ZUluQnl0ZXMpOworICAgICAgICByZXR1cm4gbWFzdGVyS2V5OworICAgIH0KKworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CiAKIGJvb2wgZGVsZXRlRGVmYXVsdFdlYkNyeXB0b01hc3Rlcktl
eSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcE9wZW5TU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9v
cGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwT3BlblNTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwxNCBAQAogI2lmIEVO
QUJMRShXRUJfQ1JZUFRPKQogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGdldERlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCitPcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogLy8gSW5pdGlhbGx5IHRo
ZXNlIGhlbHBlciBmdW5jdGlvbnMgd2VyZSBpbnRlbmRlZCB0byBwZXJmb3JtIEtFSyB3cmFwcGlu
ZyBhbmQgdW53cmFwcGluZywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRl
ckxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyTG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9GaWxlUmVhZGVyTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDI2ICszMzMsMTIg
QEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9UZXh0KCkKIAogdm9pZCBGaWxlUmVh
ZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRhVVJMKCkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJkYXRhOiIpOwotCiAgICAgaWYgKCFtX2J5
dGVzTG9hZGVkKSB7Ci0gICAgICAgIG1fc3RyaW5nUmVzdWx0ID0gYnVpbGRlci50b1N0cmluZygp
OworICAgICAgICBtX3N0cmluZ1Jlc3VsdCA9ICJkYXRhOiJfczsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChtX2RhdGFUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwotICAgIGVsc2UKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQobV9kYXRhVHlwZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI7YmFz
ZTY0LCIpOwotCi0gICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICBiYXNlNjRFbmNvZGUobV9yYXdE
YXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQsIG91dCk7Ci0gICAgb3V0LmFwcGVuZCgnXDAnKTsK
LSAgICBidWlsZGVyLmFwcGVuZChvdXQuZGF0YSgpKTsKLQotICAgIG1fc3RyaW5nUmVzdWx0ID0g
YnVpbGRlci50b1N0cmluZygpOworICAgIG1fc3RyaW5nUmVzdWx0ID0gbWFrZVN0cmluZygiZGF0
YTo7YmFzZTY0LCIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSIgOiBtX2RhdGFUeXBlLCBiYXNlNjRFbmNvZGVkKG1fcmF3RGF0YS0+ZGF0YSgpLCBtX2J5
dGVzTG9hZGVkKSwgJ1wwJyk7CiB9CiAKIGJvb2wgRmlsZVJlYWRlckxvYWRlcjo6aXNDb21wbGV0
ZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjksMTQgKzQyOSwxNCBAQCBz
dGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNoOwogICAgICAgICAgICAgYXR0cnNTSEEx
LmNvbXB1dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9
IGJhc2U2NEVuY29kZShhdHRyc0hhc2guZGF0YSgpLCAxMCk7CisgICAgICAgICAgICBkaWdlc3Qt
PmF0dHJzU0hBMSA9IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChhdHRyc0hhc2guZGF0YSgpLCAx
MCkpOwogICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIGRpZ2VzdC0+YXR0cnNTSEEx
KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEu
Y29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlKGhhc2gu
ZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVk
KGhhc2guZGF0YSgpLCAxMCkpOwogICAgIGlmICh1bnVzZWROb2Rlc01hcCkKICAgICAgICAgdW51
c2VkTm9kZXNNYXAtPmFkZChkaWdlc3QtPnNoYTEsIGRpZ2VzdC5nZXQoKSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDExICs1OTgsMTEgQEAgYm9v
bCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghbV9jbGllbnQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAg
IGlmICghYmFzZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSwgZGF0YSkpCisgICAgYXV0
byBkYXRhID0gYmFzZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSk7CisgICAgaWYgKCFk
YXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3Rl
bmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOwogICAgIE9w
dGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogICAgIGRlY29kZXIgPj4g
Y2VydGlmaWNhdGVJbmZvOwogICAgIGlmICghY2VydGlmaWNhdGVJbmZvKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNl
c0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdW5zaWduZWQgTmV0
d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRAogICAgICAgICBtX2NvbnRlbnQgPSBtX2RlY29k
ZXItPmRlY29kZUFuZEZsdXNoKG1fZGF0YUJ1ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBtX2Jhc2U2NEVuY29kZWQgPSB0cnVlOwotICAgICAgICBtX2Nv
bnRlbnQgPSBiYXNlNjRFbmNvZGUobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOwor
ICAgICAgICBtX2NvbnRlbnQgPSBtYWtlU3RyaW5nKFdURjo6YmFzZTY0RW5jb2RlZChtX2RhdGFC
dWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCkpOwogICAgIH0KIAogICAgIG1fZGF0YUJ1ZmZlciA9
IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MDksNyArMTcwOSw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1
cml0eVBvbGkKICAgICBhdXRvIGNyeXB0b0RpZ2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVh
dGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7CiAgICAgY3J5cHRvRGln
ZXN0LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVudC5zaXplKCkpOwogICAgIGF1dG8g
ZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlKGRpZ2VzdC5kYXRhKCksIGRpZ2VzdC5zaXplKCkp
KTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29kZWQoZGlnZXN0
LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOwogfQogCiBSZWY8UHJvdG9jb2w6OkRPTTo6Tm9kZT4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBpbnQgZGVw
dGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
TmV0d29ya0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDcgKzE3NSw3IEBAIFJlZjxQ
cm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGIKICAgICByZXR1cm4gUHJvdG9jb2w6
Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQogICAgICAgICAuc2V0T3Bjb2RlKGZy
YW1lLm9wQ29kZSkKICAgICAgICAgLnNldE1hc2soZnJhbWUubWFza2VkKQotICAgICAgICAuc2V0
UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGlu
MUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpIDogYmFzZTY0RW5j
b2RlKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKQorICAgICAgICAuc2V0UGF5
bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZh
bGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpIDogbWFrZVN0cmluZyhi
YXNlNjRFbmNvZGVkKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKSkKICAgICAg
ICAgLnNldFBheWxvYWRMZW5ndGgoZnJhbWUucGF5bG9hZExlbmd0aCkKICAgICAgICAgLnJlbGVh
c2UoKTsKIH0KQEAgLTU4Niw3ICs1ODYsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
ZGlkUmVjZWl2ZURhCiAgICAgICAgIC8vIE9mdGVuIHRoZSBkYXRhIGlzIHRleHQgYW5kIHdlIHdv
dWxkIGhhdmUgYSBkZWNvZGVyLCBidXQgZm9yIG5vbi10ZXh0IHdlIHdvbid0IGhhdmUgYSBkZWNv
ZGVyLgogICAgICAgICAvLyBTeW5jIFhIUnMgbWF5IG5vdCBoYXZlIGEgY2FjaGVkIHJlc291cmNl
LCB3aGlsZSBub24tc3luYyBYSFJzIHVzdWFsbHkgdHJhbnNmZXIgZGF0YSBvdmVyIG9uIGNvbXBs
ZXRpb24uCiAgICAgICAgIGlmIChtX2xvYWRpbmdYSFJTeW5jaHJvbm91c2x5ICYmIHJlc291cmNl
RGF0YSAmJiAhcmVzb3VyY2VEYXRhLT5oYXNCdWZmZXJlZERhdGEoKSAmJiAhcmVzb3VyY2VEYXRh
LT5jYWNoZWRSZXNvdXJjZSgpKQotICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNv
dXJjZUNvbnRlbnQocmVxdWVzdElkLCBiYXNlNjRFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCksIHRy
dWUpOworICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQocmVx
dWVzdElkLCBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoZGF0YSwgZGF0YUxlbmd0aCkpLCB0cnVl
KTsKICAgICB9CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGF0YVJlY2VpdmVkKHJlcXVl
c3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKQEAgLTEw
MDQsNyArMTAwNCw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8K
IAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNp
c3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2Rlciwg
Y2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShlbmNvZGVyLmJ1
ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFz
ZTY0RW5jb2RlZChlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSkpOwogfQog
CiBXZWJTb2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVzdElk
KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKQEAgLTEyMDIs
MTEgKzEyMDIsMTEgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgog
ICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZHMoV1RGTW92ZShleHBsaWNpdEhlYWRl
cnMpKTsKICAgICB9CiAgICAgaWYgKCEhcG9zdERhdGEpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUocG9zdERhdGEsIGJ1ZmZlcikp
CisgICAgICAgIGF1dG8gYnVmZmVyID0gYmFzZTY0RGVjb2RlKHBvc3REYXRhKTsKKyAgICAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0
byBkZWNvZGUgZ2l2ZW4gcG9zdERhdGEiX3MpOwogCi0gICAgICAgIHJlcXVlc3Quc2V0SFRUUEJv
ZHkoRm9ybURhdGE6OmNyZWF0ZShidWZmZXIpKTsKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9k
eShGb3JtRGF0YTo6Y3JlYXRlKFdURk1vdmUoKmJ1ZmZlcikpKTsKICAgICB9CiAgICAgLy8gRklY
TUU6IGZpZ3VyZSBvdXQgaG93IHRvIGlkZW50aWZ5IHdoZW4gYSByZXF1ZXN0IGhhcyBiZWVuIG92
ZXJyaWRkZW4gd2hlbiB3ZSBhZGQgdGhpcyB0byB0aGUgZnJvbnRlbmQuCiAgICAgcGVuZGluZ1Jl
cXVlc3QtPmNvbnRpbnVlV2l0aFJlcXVlc3QocmVxdWVzdCk7CkBAIC0xMjQyLDExICsxMjQyLDEx
IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck4KIAogICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IG92ZXJyaWRlRGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewot
ICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29k
ZShjb250ZW50LCBidWZmZXIpKQorICAgICAgICBhdXRvIGJ1ZmZlciA9IGJhc2U2NERlY29kZShj
b250ZW50KTsKKyAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfcyk7CiAKLSAgICAgICAg
b3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpKTsKKyAg
ICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqYnVmZmVy
KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG92ZXJyaWRlRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwgY29udGVudC51dGY4KCkubGVuZ3RoKCkpOwogCkBA
IC0xMjY4LDExICsxMjY4LDExIEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3Rvck4KIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CiAgICAgaWYgKGJhc2U2NEVu
Y29kZWQpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFi
YXNlNjREZWNvZGUoY29udGVudCwgYnVmZmVyKSkKKyAgICAgICAgYXV0byBidWZmZXIgPSBiYXNl
NjREZWNvZGUoY29udGVudCk7CisgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZGVjb2RlIGdpdmVuIGNvbnRlbnQiX3MpOwog
Ci0gICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwor
ICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqYnVmZmVyKSk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LnV0
ZjgoKS5kYXRhKCksIGNvbnRlbnQudXRmOCgpLmxlbmd0aCgpKTsKIApAQCAtMTQwNSw3ICsxNDA1
LDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cgogICAgICAgICB9
CiAKICAgICAgICAgKmJhc2U2NEVuY29kZWQgPSB0cnVlOwotICAgICAgICAqcmVzdWx0ID0gYmFz
ZTY0RW5jb2RlKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgICAgICpyZXN1
bHQgPSBtYWtlU3RyaW5nKFdURjo6YmFzZTY0RW5jb2RlZChidWZmZXItPmRhdGEoKSwgYnVmZmVy
LT5zaXplKCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcg
QEAgYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbgogYm9vbCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUs
IGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBT
dHJpbmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2NEVuY29kZSkgewotICAgICAgICAq
cmVzdWx0ID0gYmFzZTY0RW5jb2RlKGRhdGEsIHNpemUpOworICAgICAgICAqcmVzdWx0ID0gbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKGRhdGEsIHNpemUpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkBAIC0xMTAyLDcgKzExMDIsNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IEluc3BlY3RvCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90
IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfcyk7CiAKICAgICBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKTsKLSAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdldCgpKSwgQ0ZE
YXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2
NEVuY29kZWQoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgo
YnVmZmVyLmdldCgpKSkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExOCw3ICszMTE4LDcgQEAgdW5z
aWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlUwogICAgICAgICBBU1NFUlQoIW5l
d1JlcXVlc3QuaXNOdWxsKCkpOwogCiAgICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIoKS0+YXBw
bGljYXRpb25DYWNoZUhvc3QoKS5tYXliZUxvYWRTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVy
cm9yLCByZXNwb25zZSwgZGF0YSkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7
CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwogICAgICAgICAgICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoKnRoaXMsIGlkZW50aWZpZXIsIG5ld1JlcXVlc3QsIGNsaWVudENyZWRlbnRpYWxQb2xpY3ks
IG9wdGlvbnMsIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIGVycm9yLCByZXNwb25zZSwgYnVmZmVy
KTsKICAgICAgICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZl
cikpOwogICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3Qo
KS5tYXliZUxvYWRGYWxsYmFja1N5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3Bv
bnNlLCBkYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3ku
aAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdHJ1Y3QgRmV0Y2hPcHRpb25zOwog
Y2xhc3MgV0VCQ09SRV9FWFBPUlQgTG9hZGVyU3RyYXRlZ3kgewogcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UoRnJhbWUmLCBDYWNoZWRSZXNvdXJjZSYsIFJlc291cmNlUmVx
dWVzdCYmLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4mJik+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ2xpZW50Q3JlZGVudGlhbFBvbGlj
eSwgY29uc3QgRmV0Y2hPcHRpb25zJiwgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJy
b3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIENsaWVudENyZWRlbnRp
YWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0aW9ucyYsIGNvbnN0IEhUVFBIZWFkZXJNYXAmLCBSZXNv
dXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBwYWdlTG9hZENvbXBsZXRlZChQYWdlJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBicm93c2luZ0NvbnRleHRSZW1vdmVkKEZyYW1lJikgPSAwOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Qcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwxMCArMTg5LDEwIEBAIGJvb2wg
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkVwaGVtZXJhbFMKIHsKICAgICAvLyBGSVhNRTogSW52
ZXN0aWdhdGUgaWYgd2UgY2FuIGRvIHdpdGggYSBzaW1wbGUgbGVuZ3RoIGNoZWNrIGluc3RlYWQg
b2YgZGVjb2RpbmcuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMTk0NQotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7Ci0gICAgaWYgKCFiYXNlNjRV
UkxEZWNvZGUobm9uY2UsIGRpZ2VzdCkpCisgICAgYXV0byBkaWdlc3QgPSBiYXNlNjRVUkxEZWNv
ZGUobm9uY2UpOworICAgIGlmICghZGlnZXN0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIGRpZ2VzdC5zaXplKCkgPT0gRXBoZW1lcmFsU291cmNlTm9uY2VSZXF1aXJlZE51bWJl
ck9mQnl0ZXM7CisgICAgcmV0dXJuIGRpZ2VzdC0+c2l6ZSgpID09IEVwaGVtZXJhbFNvdXJjZU5v
bmNlUmVxdWlyZWROdW1iZXJPZkJ5dGVzOwogfQogCiB2b2lkIFByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpzZXRFcGhlbWVyYWxTb3VyY2VOb25jZShFcGhlbWVyYWxTb3VyY2VOb25jZSYmIG5vbmNl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OSwxNCArNjksMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAog
ICAgIGlmIChidWZmZXIucG9zaXRpb24oKSA9PSBiZWdpbkhhc2hWYWx1ZSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7CiAgICAgU3Ry
aW5nVmlldyBoYXNoVmFsdWUoYmVnaW5IYXNoVmFsdWUsIGJ1ZmZlci5wb3NpdGlvbigpIC0gYmVn
aW5IYXNoVmFsdWUpOwotICAgIGlmICghYmFzZTY0RGVjb2RlKGhhc2hWYWx1ZSwgZGlnZXN0LCBC
YXNlNjRWYWxpZGF0ZVBhZGRpbmcpKSB7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGhh
c2hWYWx1ZSwgZGlnZXN0KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
fQogCi0gICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0s
IFdURk1vdmUoZGlnZXN0KSB9OworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NERlY29kZSho
YXNoVmFsdWUsIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZykpCisgICAgICAg
IHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyAqYWxnb3JpdGhtLCBXVEZNb3Zl
KCpkaWdlc3QpIH07CisKKyAgICBpZiAoYXV0byBkaWdlc3QgPSBiYXNlNjRVUkxEZWNvZGUoaGFz
aFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICph
bGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiB9CiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9n
cmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBidWZmZXIpCkBAIC0xMjQs
MTMgKzEyNSwxMyBAQCBPcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnCiAK
IE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0JiBlbmNvZGVkRGlnZXN0KQogewotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7Ci0g
ICAgaWYgKCFiYXNlNjREZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdlc3QsIGRpZ2VzdCwgQmFzZTY0
VmFsaWRhdGVQYWRkaW5nKSkgewotICAgICAgICBpZiAoIWJhc2U2NFVSTERlY29kZShlbmNvZGVk
RGlnZXN0LmRpZ2VzdCwgZGlnZXN0KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgfQorICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NERlY29kZShlbmNvZGVkRGlnZXN0
LmRpZ2VzdCwgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAg
cmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGVuY29kZWREaWdlc3QuYWxnb3Jp
dGhtLCBXVEZNb3ZlKCpkaWdlc3QpIH07CisKKyAgICBpZiAoYXV0byBkaWdlc3QgPSBiYXNlNjRV
UkxEZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdlc3QpKQorICAgICAgICByZXR1cm4gUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERpZ2VzdC5hbGdvcml0aG0sIFdURk1vdmUoKmRp
Z2VzdCkgfTsKIAotICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyBlbmNv
ZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZShkaWdlc3QpIH07CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIH0KIAogc3RhdGljIFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG0gdG9Dcnlw
dG9EaWdlc3RBbGdvcml0aG0oUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0g
YWxnb3JpdGhtKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhU
TUxBcmNoaXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODksMTUgKzE4OSwxNSBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6Omdl
bmVyYXRlCiAgICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlIHdvdWxkIGVuY29kZSB0aGUgY29u
dGVudCBhcyBhIHN0cmVhbSB3aXRob3V0IGhhdmluZyB0byBmZXRjaCBpdCBhbGwuCiAgICAgICAg
IGNvbnN0IGNoYXIqIGRhdGEgPSByZXNvdXJjZS5kYXRhLT5kYXRhKCk7CiAgICAgICAgIHNpemVf
dCBkYXRhTGVuZ3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgpOwotICAgICAgICBWZWN0b3I8Y2hh
cj4gZW5jb2RlZERhdGE7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkRGF0YTsKICAg
ICAgICAgaWYgKCFzdHJjbXAoY29udGVudEVuY29kaW5nLCBxdW90ZWRQcmludGFibGUpKSB7Ci0g
ICAgICAgICAgICBxdW90ZWRQcmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCwgZW5jb2Rl
ZERhdGEpOworICAgICAgICAgICAgZW5jb2RlZERhdGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUo
ZGF0YSwgZGF0YUxlbmd0aCk7CiAgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZChlbmNvZGVk
RGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUoKSk7CiAgICAgICAgICAgICBtaHRtbERhdGEt
PmFwcGVuZCgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJU
KCFzdHJjbXAoY29udGVudEVuY29kaW5nLCBiYXNlNjQpKTsKICAgICAgICAgICAgIC8vIFdlIGFy
ZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0cnVlIGJlbG93IGFzIGl0IHdvdWxkIGN1dCB0
aGUgbGluZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJlcXVpcmVzIENSTEZzLgotICAgICAgICAgICAg
YmFzZTY0RW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhKTsKKyAgICAgICAgICAg
IGVuY29kZWREYXRhID0gYmFzZTY0RW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgpOwogICAgICAgICAg
ICAgY29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gNzY7CiAgICAgICAgICAgICBzaXpl
X3QgaW5kZXggPSAwOwogICAgICAgICAgICAgc2l6ZV90IGVuY29kZWREYXRhTGVuZ3RoID0gZW5j
b2RlZERhdGEuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0
bWwvTUhUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTIsMTYgKzE5MiwxOSBAQCBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBNSFRNTFBh
cnNlcjo6cGFyCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIFZlY3Rvcjxj
aGFyPiBkYXRhOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIHN3aXRjaCAobWltZUhl
YWRlci5jb250ZW50VHJhbnNmZXJFbmNvZGluZygpKSB7Ci0gICAgY2FzZSBNSU1FSGVhZGVyOjpC
YXNlNjQ6Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVu
dC0+c2l6ZSgpLCBkYXRhKSkgeworICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OiB7CisgICAg
ICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250
ZW50LT5zaXplKCkpOworICAgICAgICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBM
T0dfRVJST1IoIkludmFsaWQgYmFzZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQorICAgICAgICBkYXRhID0gV1RGTW92
ZSgqZGVjb2RlZERhdGEpOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBNSU1FSGVh
ZGVyOjpRdW90ZWRQcmludGFibGU6Ci0gICAgICAgIHF1b3RlZFByaW50YWJsZURlY29kZShjb250
ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSwgZGF0YSk7CisgICAgICAgIGRhdGEgPSBxdW90
ZWRQcmludGFibGVEZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCkpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIE1JTUVIZWFkZXI6OlNldmVuQml0OgogICAgIGNhc2UgTUlN
RUhlYWRlcjo6QmluYXJ5OgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NvY29hL1ByaXZh
dGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0JKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJl
bWVudENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAgYm9vbCBQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogewogI2lmIEhBVkUoUlNBX0JTU0EpCiAg
ICAgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gc2VydmVyUHVibGljS2V5RGF0YTsKLSAgICAg
ICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoc2VydmVyUHVibGljS2V5QmFzZTY0VVJMLCBzZXJ2ZXJQ
dWJsaWNLZXlEYXRhKSkKKyAgICAgICAgYXV0byBzZXJ2ZXJQdWJsaWNLZXlEYXRhID0gYmFzZTY0
VVJMRGVjb2RlKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCk7CisgICAgICAgIGlmICghc2VydmVy
UHVibGljS2V5RGF0YSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byBz
ZXJ2ZXJQdWJsaWNLZXkgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNl
cnZlclB1YmxpY0tleURhdGEuZGF0YSgpIGxlbmd0aDpzZXJ2ZXJQdWJsaWNLZXlEYXRhLnNpemUo
KV0pOworICAgICAgICBhdXRvIHNlcnZlclB1YmxpY0tleSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxs
b2NdIGluaXRXaXRoQnl0ZXM6c2VydmVyUHVibGljS2V5RGF0YS0+ZGF0YSgpIGxlbmd0aDpzZXJ2
ZXJQdWJsaWNLZXlEYXRhLT5zaXplKCldKTsKIAogICAgICAgICAvLyBGSVhNRSgyMjIwMTgpOiBD
aGVjayBlcnJvci4KICAgICAgICAgbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4uYmxpbmRlciA9IGFk
b3B0TlMoW1BBTDo6YWxsb2NSU0FCU1NBVG9rZW5CbGluZGVySW5zdGFuY2UoKSBpbml0V2l0aFB1
YmxpY0tleTpzZXJ2ZXJQdWJsaWNLZXkuZ2V0KCkgZXJyb3I6bnVsbHB0cl0pOwpAQCAtNTAsNyAr
NTAsNyBAQCBib29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBCiAgICAgaWYg
KCFtX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4pCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIG1fc291cmNlVW5saW5rYWJsZVRva2VuLnZhbHVlQmFzZTY0VVJMID0gV1RG
OjpiYXNlNjRVUkxFbmNvZGUoW21fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBi
bGluZGVkTWVzc2FnZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9r
ZW4gYmxpbmRlZE1lc3NhZ2VdLmxlbmd0aCk7CisgICAgbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4u
dmFsdWVCYXNlNjRVUkwgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW21fc291cmNlVW5s
aW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBibGluZGVkTWVzc2FnZV0uYnl0ZXMsIFttX3NvdXJj
ZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4gYmxpbmRlZE1lc3NhZ2VdLmxlbmd0aCkpOwog
ICAgIHJldHVybiB0cnVlOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2VydmVyUHVibGljS2V5
QmFzZTY0VVJMKTsKQEAgLTY1LDEwICs2NSwxMCBAQCBib29sIFByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpjYWxjdWxhdGVBCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHsKLSAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHNlcnZlclJlc3BvbnNlRGF0YTsKLSAgICAgICAgaWYgKCFiYXNlNjRV
UkxEZWNvZGUoc2VydmVyUmVzcG9uc2VCYXNlNjRVUkwsIHNlcnZlclJlc3BvbnNlRGF0YSkpCisg
ICAgICAgIGF1dG8gc2VydmVyUmVzcG9uc2VEYXRhID0gYmFzZTY0VVJMRGVjb2RlKHNlcnZlclJl
c3BvbnNlQmFzZTY0VVJMKTsKKyAgICAgICAgaWYgKCFzZXJ2ZXJSZXNwb25zZURhdGEpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gc2VydmVyUmVzcG9uc2UgPSBhZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZlclJlc3BvbnNlRGF0YS5kYXRh
KCkgbGVuZ3RoOnNlcnZlclJlc3BvbnNlRGF0YS5zaXplKCldKTsKKyAgICAgICAgYXV0byBzZXJ2
ZXJSZXNwb25zZSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2VydmVy
UmVzcG9uc2VEYXRhLT5kYXRhKCkgbGVuZ3RoOnNlcnZlclJlc3BvbnNlRGF0YS0+c2l6ZSgpXSk7
CiAKICAgICAgICAgLy8gRklYTUUoMjIyMDE4KTogQ2hlY2sgZXJyb3IuCiAgICAgICAgIG1fc291
cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gPSBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4u
d2FpdGluZ1Rva2VuIGFjdGl2YXRlVG9rZW5XaXRoU2VydmVyUmVzcG9uc2U6c2VydmVyUmVzcG9u
c2UuZ2V0KCkgZXJyb3I6bnVsbHB0cl07CkBAIC03Nyw5ICs3Nyw5IEBAIGJvb2wgUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUEKICAgICB9CiAKICAgICBTb3VyY2VTZWNyZXRUb2tl
biB0b2tlbjsKLSAgICB0b2tlbi50b2tlbkJhc2U2NFVSTCA9IFdURjo6YmFzZTY0VVJMRW5jb2Rl
KFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHRva2VuQ29udGVudF0uYnl0ZXMs
IFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHRva2VuQ29udGVudF0ubGVuZ3Ro
KTsKLSAgICB0b2tlbi5rZXlJREJhc2U2NFVSTCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKFttX3Nv
dXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIGtleUlkXS5ieXRlcywgW21fc291cmNlVW5s
aW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRdLmxlbmd0aCk7Ci0gICAgdG9rZW4uc2lnbmF0
dXJlQmFzZTY0VVJMID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoW21fc291cmNlVW5saW5rYWJsZVRv
a2VuLnJlYWR5VG9rZW4gc2lnbmF0dXJlXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2Vu
LnJlYWR5VG9rZW4gc2lnbmF0dXJlXS5sZW5ndGgpOworICAgIHRva2VuLnRva2VuQmFzZTY0VVJM
ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5y
ZWFkeVRva2VuIHRva2VuQ29udGVudF0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5y
ZWFkeVRva2VuIHRva2VuQ29udGVudF0ubGVuZ3RoKSk7CisgICAgdG9rZW4ua2V5SURCYXNlNjRV
UkwgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW21fc291cmNlVW5saW5rYWJsZVRva2Vu
LnJlYWR5VG9rZW4ga2V5SWRdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlU
b2tlbiBrZXlJZF0ubGVuZ3RoKSk7CisgICAgdG9rZW4uc2lnbmF0dXJlQmFzZTY0VVJMID0gbWFr
ZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRv
a2VuIHNpZ25hdHVyZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2Vu
IHNpZ25hdHVyZV0ubGVuZ3RoKSk7CiAKICAgICBtX3NvdXJjZVNlY3JldFRva2VuID0gV1RGTW92
ZSh0b2tlbik7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Jh
c2U2NFV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9CYXNl
NjRVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0Jhc2U2NFV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgRXhj
ZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmJ0bwogICAgIGlmICghc3RyaW5nVG9F
bmNvZGUuaXNBbGxMYXRpbjEoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRD
aGFyYWN0ZXJFcnJvciB9OwogCi0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShzdHJpbmdUb0VuY29k
ZS5sYXRpbjEoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChzdHJpbmdU
b0VuY29kZS5sYXRpbjEoKSkpOwogfQogCiBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxp
dGllczo6YXRvYihjb25zdCBTdHJpbmcmIGVuY29kZWRTdHJpbmcpCkBAIC00NiwxMSArNDYsMTEg
QEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0bwogICAgIGlmIChlbmNv
ZGVkU3RyaW5nLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBWZWN0
b3I8Y2hhcj4gb3V0OwotICAgIGlmICghYmFzZTY0RGVjb2RlKGVuY29kZWRTdHJpbmcsIG91dCwg
QmFzZTY0VmFsaWRhdGVQYWRkaW5nIHwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgfCBC
YXNlNjREaXNjYXJkVmVydGljYWxUYWIpKQorICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjRE
ZWNvZGUoZW5jb2RlZFN0cmluZywgeyBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRp
bmcsIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzLCBCYXNlNjRE
ZWNvZGVPcHRpb25zOjpEaXNjYXJkVmVydGljYWxUYWIgfSk7CisgICAgaWYgKCFkZWNvZGVkRGF0
YSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRDaGFyYWN0ZXJFcnJvciB9Owog
Ci0gICAgcmV0dXJuIFN0cmluZyhvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpKTsKKyAgICByZXR1cm4g
U3RyaW5nKGRlY29kZWREYXRhLT5kYXRhKCksIGRlY29kZWREYXRhLT5zaXplKCkpOwogfQogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NDgsOSArMTg0OCw4IEBAIHZv
aWQgUGFnZTo6dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQKICAgICBpZiAodXJsLnByb3Rv
Y29sSXNEYXRhKCkgJiYgdXJsLnN0cmluZygpLnN0YXJ0c1dpdGgoImRhdGE6dGV4dC9jc3M7Y2hh
cnNldD11dGYtODtiYXNlNjQsIikpIHsKICAgICAgICAgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQg
PSB0cnVlOwogCi0gICAgICAgIFZlY3RvcjxjaGFyPiBzdHlsZVNoZWV0QXNVVEY4OwotICAgICAg
ICBpZiAoYmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCku
c3Vic3RyaW5nKDM1KSksIHN0eWxlU2hlZXRBc1VURjgsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5l
d0xpbmVzKSkKLSAgICAgICAgICAgIG1fdXNlclN0eWxlU2hlZXQgPSBTdHJpbmc6OmZyb21VVEY4
KHN0eWxlU2hlZXRBc1VURjguZGF0YSgpLCBzdHlsZVNoZWV0QXNVVEY4LnNpemUoKSk7CisgICAg
ICAgIGlmIChhdXRvIHN0eWxlU2hlZXRBc1VURjggPSBiYXNlNjREZWNvZGUoZGVjb2RlVVJMRXNj
YXBlU2VxdWVuY2VzKHVybC5zdHJpbmcoKS5zdWJzdHJpbmcoMzUpKSwgQmFzZTY0RGVjb2RlT3B0
aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpKQorICAgICAgICAgICAgbV91c2VyU3R5bGVT
aGVldCA9IFN0cmluZzo6ZnJvbVVURjgoc3R5bGVTaGVldEFzVVRGOC0+ZGF0YSgpLCBzdHlsZVNo
ZWV0QXNVVEY4LT5zaXplKCkpOwogICAgIH0KIAogICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9j
dW1lbnQmIGRvY3VtZW50KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEyICs3OSwx
NSBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+CiAgICAgICAgICAg
ICBpZiAoIWtleVZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICAgICAgS2V5SURUeXBlIGtleUlERGF0YTsKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBr
ZXlIYW5kbGVWYWx1ZURhdGE7Ci0gICAgICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2Rl
KGtleUlELCB7IGtleUlERGF0YSB9KSB8fCAhV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUs
IHsga2V5SGFuZGxlVmFsdWVEYXRhIH0pKQorICAgICAgICAgICAgYXV0byBrZXlJRERhdGEgPSBi
YXNlNjRVUkxEZWNvZGUoa2V5SUQpOworICAgICAgICAgICAgaWYgKCFrZXlJRERhdGEpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgICAgIGF1dG8ga2V5
SGFuZGxlVmFsdWVEYXRhID0gYmFzZTY0VVJMRGVjb2RlKGtleVZhbHVlKTsKKyAgICAgICAgICAg
IGlmICgha2V5SGFuZGxlVmFsdWVEYXRhKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtleUhhbmRsZTo6Y3JlYXRlKENETUlu
c3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFdURk1vdmUoa2V5SUREYXRhKSwgV1RG
TW92ZShrZXlIYW5kbGVWYWx1ZURhdGEpKSk7CisgICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBl
bmQoS2V5SGFuZGxlOjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJs
ZSwgV1RGTW92ZSgqa2V5SUREYXRhKSwgV1RGTW92ZSgqa2V5SGFuZGxlVmFsdWVEYXRhKSkpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0pOwogICAgIGlmICghdmFsaWRGb3Jt
YXQpCkBAIC0yMTUsOCArMjE4LDcgQEAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGV4dHJhY3RL
ZXlpZHNGcgogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFycmF5IG9mIGtleSBJRHMuIEVhY2gg
ZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUgb2N0
ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZhbHVlLgogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBrZXlJZENvdW50OyBpKyspIHsKLSAgICAgICAgU3RyaW5nIGtleUlkID0g
V1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRhdGFbaW5kZXhdLCBDbGVhcktleTo6S2V5SURTaXplSW5C
eXRlcyk7Ci0gICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGtleUlkKTsKKyAgICAgICAg
a2V5SWRzQXJyYXktPnB1c2hTdHJpbmcobWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCZkYXRh
W2luZGV4XSwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpKSk7CiAgICAgICAgIGluZGV4ICs9
IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0KIApAQCAtMjQzLDggKzI0NSw3IEBA
IHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5SWRGcm8KICAgICAvLyBUaGUgZm9y
bWF0IGlzIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIG1lbWJlcnM6CiAg
ICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9m
IHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5j
ZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCi0gICAgU3RyaW5nIGtleUlkID0gV1RGOjpi
YXNlNjRVUkxFbmNvZGUoaW5pdERhdGEuZGF0YSgpLCBpbml0RGF0YS5zaXplKCkpOwotICAgIGtl
eUlkc0FycmF5LT5wdXNoU3RyaW5nKGtleUlkKTsKKyAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmlu
ZyhtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoaW5pdERhdGEuZGF0YSgpLCBpbml0RGF0YS5z
aXplKCkpKSk7CiAKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNB
cnJheSkpOwogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0
ZjgoKTsKQEAgLTU4Nyw3ICs1ODgsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5
OjpyZW1vdmVTCiAgICAgICAgICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgp
OwogICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleVN0b3JlKSB7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKGtleS0+aWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhX
VEY6OmJhc2U2NFVSTEVuY29kZShrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7
CisgICAgICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcobWFrZVN0cmluZyhiYXNlNjRVUkxF
bmNvZGVkKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5zaXplKCkpKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJheSgia2lkcyIsIFdURk1vdmUoYXJy
YXkpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJl
YW1pbmcuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTMsMTEgKzExMywxMSBAQCBzdGF0aWMgVmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+
PiBleHRyYWN0CiAgICAgICAgIGlmICgha2V5SUQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBWZWN0b3I8Y2hhcj4gc2luZkRhdGE7Ci0gICAgICAgIGlmICghV1RGOjpiYXNlNjRE
ZWNvZGUoa2V5SUQsIHsgc2luZkRhdGEgfSwgV1RGOjpCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdM
aW5lcykpCisgICAgICAgIGF1dG8gc2luZkRhdGEgPSBiYXNlNjREZWNvZGUoa2V5SUQsIEJhc2U2
NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKTsKKyAgICAgICAgaWYgKCFz
aW5mRGF0YSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHNpbmZzLnVuY2hlY2tl
ZEFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKHNpbmZEYXRhKSkpOworICAgICAg
ICBzaW5mcy51bmNoZWNrZWRBcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqc2lu
ZkRhdGEpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHNpbmZzOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWlu
Z0FWRk9iakMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MTUsNyArNzE1LDcgQEAgdm9pZCBDRE1JbnN0
YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICBpZGVudGlmaWVyID0gYWRvcHRO
UyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6aW5pdERhdGEtPmNyZWF0ZU5TRGF0YSgp
LmdldCgpIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CiAjaWYgSEFWRShGQUlSUExB
WVNUUkVBTUlOR19DRU5DX0lOSVREQVRBKQogICAgIGVsc2UgaWYgKGluaXREYXRhVHlwZSA9PSBJ
bml0RGF0YVJlZ2lzdHJ5OjpjZW5jTmFtZSgpKSB7Ci0gICAgICAgIFN0cmluZyBwc3NoU3RyaW5n
ID0gYmFzZTY0RW5jb2RlKGluaXREYXRhLT5kYXRhKCksIGluaXREYXRhLT5zaXplKCkpOworICAg
ICAgICBhdXRvIHBzc2hTdHJpbmcgPSBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoaW5pdERhdGEt
PmRhdGEoKSwgaW5pdERhdGEtPnNpemUoKSkpOwogICAgICAgICBpbml0aWFsaXphdGlvbkRhdGEg
PSBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6QHsgQCJwc3NoIjogKE5T
U3RyaW5nKilwc3NoU3RyaW5nIH0gb3B0aW9uczpOU0pTT05Xcml0aW5nUHJldHR5UHJpbnRlZCBl
cnJvcjpuaWxdOwogICAgIH0KICNlbmRpZgpAQCAtODUwLDExICs4NTAsMTEgQEAgdm9pZCBDRE1J
bnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICAgICAgaWYgKCFrZXlJRFN0
cmluZykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBrZXlJRFZlY3RvcjsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGtl
eUlEU3RyaW5nLCBrZXlJRFZlY3RvcikpCisgICAgICAgICAgICBhdXRvIGtleUlEVmVjdG9yID0g
YmFzZTY0RGVjb2RlKGtleUlEU3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChrZXlJRFZlY3RvcikK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGF1dG8ga2V5SUQg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGtleUlEVmVjdG9yKSk7CisgICAgICAgICAg
ICBhdXRvIGtleUlEID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqa2V5SURWZWN0b3Ip
KTsKICAgICAgICAgICAgIGF1dG8gZm91bmRJbmRleCA9IG1fY3VycmVudFJlcXVlc3QudmFsdWUo
KS5yZXF1ZXN0cy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiByZXF1ZXN0KSB7CiAgICAgICAgICAg
ICAgICAgYXV0byBrZXlJRHMgPSBrZXlJRHNGb3JSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBrZXlJRHMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBSZWY8U2hh
cmVkQnVmZmVyPiYgaWQpIHsKQEAgLTg4NSwxMCArODg1LDEwIEBAIHZvaWQgQ0RNSW5zdGFuY2VT
ZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAgICAgICAgICAgICBhdXRvIHBheWxvYWRTdHJp
bmcgPSBwYXlsb2FkRmluZFJlc3VsdHMtPnZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAg
ICAgIGlmICghcGF5bG9hZFN0cmluZykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBwYXlsb2FkVmVjdG9yOwotICAgICAg
ICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKHBheWxvYWRTdHJpbmcsIHBheWxvYWRWZWN0b3Ip
KQorICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZFZlY3RvciA9IGJhc2U2NERlY29kZShwYXls
b2FkU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWRWZWN0b3IpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBhdXRvIHBheWxvYWRE
YXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShwYXlsb2FkVmVjdG9yKSk7CisgICAg
ICAgICAgICAgICAgYXV0byBwYXlsb2FkRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1v
dmUoKnBheWxvYWRWZWN0b3IpKTsKICAgICAgICAgICAgICAgICBbcmVxdWVzdCBwcm9jZXNzQ29u
dGVudEtleVJlc3BvbnNlOltQQUw6OmdldEFWQ29udGVudEtleVJlc3BvbnNlQ2xhc3MoKSBjb250
ZW50S2V5UmVzcG9uc2VXaXRoRmFpclBsYXlTdHJlYW1pbmdLZXlSZXNwb25zZURhdGE6cGF5bG9h
ZERhdGEtPmNyZWF0ZU5TRGF0YSgpLmdldCgpXV07CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTExOTUsOCArMTE5NSw4IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNz
aW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgYXV0byYga2V5SUQgPSByZXF1ZXN0RGF0YS5maXJz
dDsKICAgICAgICAgICAgIGF1dG8mIHBheWxvYWQgPSByZXF1ZXN0RGF0YS5zZWNvbmQ7Ci0gICAg
ICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29kZShrZXlJRC0+ZGF0
YSgpLCBrZXlJRC0+c2l6ZSgpKSk7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJwYXls
b2FkIiwgYmFzZTY0RW5jb2RlKHBheWxvYWQuZ2V0KCkuYnl0ZXMsIHBheWxvYWQuZ2V0KCkubGVu
Z3RoKSk7CisgICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIG1ha2VTdHJpbmco
YmFzZTY0RW5jb2RlZChrZXlJRC0+ZGF0YSgpLCBrZXlJRC0+c2l6ZSgpKSkpOworICAgICAgICAg
ICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChw
YXlsb2FkLmdldCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpKTsKICAgICAgICAgICAg
IHJlcXVlc3RKU09OLT5wdXNoT2JqZWN0KFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgfQogICAg
ICAgICBhdXRvIHJlcXVlc3RCdWZmZXIgPSB1dGY4QnVmZmVyKHJlcXVlc3RKU09OLT50b0pTT05T
dHJpbmcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMCArMTMw
LDcgQEAgU3RyaW5nIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUgogICAgIGlmIChl
bmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gImRhdGE6LCI7CiAKLSAgICBW
ZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRh
dGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRh
dGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgcmV0dXJuIG1h
a2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoZW5j
b2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSkpOwogfQogCiBWZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3NCwxMCArMTc0LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShj
b25zdAogCiBTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUo
Q0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRh
KTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQs
IiwgYmFzZTY0RW5jb2RlZChDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgo
ZGF0YSkpKTsKIH0KIAogU3RyaW5nIGRhdGFVUkwoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVV
bmlxdWVGb250TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZv
bnRVdWlkKTsKIAotICAgIFN0cmluZyBmb250TmFtZSA9IGJhc2U2NEVuY29kZShyZWludGVycHJl
dF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZv
bnROYW1lID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpKTsKICAgICBBU1NFUlQoZm9udE5hbWUubGVu
Z3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFD
YWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBTdHJp
bmcgY3JlYXRlVW5pcXVlRm9udE5hbWUoKQogICAgIEdVSUQgZm9udFV1aWQ7CiAgICAgQ29DcmVh
dGVHdWlkKCZmb250VXVpZCk7CiAKLSAgICBTdHJpbmcgZm9udE5hbWUgPSBiYXNlNjRFbmNvZGUo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSk7Cisg
ICAgYXV0byBmb250TmFtZSA9IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChyZWludGVycHJldF9j
YXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKSk7CiAgICAgQVNTRVJUKGZv
bnROYW1lLmxlbmd0aCgpIDwgTEZfRkFDRVNJWkUpOwogICAgIHJldHVybiBmb250TmFtZTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRv
ck1hYy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1NTTEtleUdlbmVyYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw3IEBA
IHN0YXRpYyBTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmcKICAgICBpZiAoU2VjQXNu
MUVuY29kZUl0ZW0oY29kZXIsICZzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UsIHNpZ25lZFB1
YmxpY0tleUFuZENoYWxsZW5nZVRlbXBsYXRlLCAmZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZSkgIT0gbm9FcnIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVy
biBiYXNlNjRFbmNvZGUoZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBl
bmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxlbmd0aCk7CisgICAgcmV0dXJuIG1h
a2VTdHJpbmcoYmFzZTY0RW5jb2RlZChlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdl
LkRhdGEsIGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuTGVuZ3RoKSk7CiB9CiAK
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3Ry
eUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyBSZWY8UmVz
b3VyY2VIYW5kbGU+IGNyZWF0ZUJsb2JSZXMKICAgICByZXR1cm4gYmxvYlJlZ2lzdHJ5KCkuYmxv
YlJlZ2lzdHJ5SW1wbCgpLT5jcmVhdGVSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQpOwog
fQogCi1zdGF0aWMgdm9pZCBsb2FkQmxvYlJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5n
Q29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQorc3RhdGljIHZvaWQgbG9hZEJsb2JSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBhdXRv
KiBibG9iRGF0YSA9IGJsb2JSZWdpc3RyeSgpLmJsb2JSZWdpc3RyeUltcGwoKS0+Z2V0QmxvYkRh
dGFGcm9tVVJMKHJlcXVlc3QudXJsKCkpOwogICAgIEJsb2JSZXNvdXJjZUhhbmRsZTo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseShibG9iRGF0YSwgcmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBk
YXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNl
SGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgewogCiBjbGFzcyBCbG9iUmVzb3VyY2VTeW5j
aHJvbm91c0xvYWRlciA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7CiBwdWJsaWM6Ci0g
ICAgQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mKTsKKyAgICBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xv
YWRlcihSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYp
OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSosIFJl
c291cmNlUmVzcG9uc2UmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKICAg
ICB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgZmlu
YWw7CkBAIC04NSwxMCArODUsMTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBSZXNvdXJjZUVy
cm9yJiBtX2Vycm9yOwogICAgIFJlc291cmNlUmVzcG9uc2UmIG1fcmVzcG9uc2U7Ci0gICAgVmVj
dG9yPGNoYXI+JiBtX2RhdGE7CisgICAgVmVjdG9yPHVpbnQ4X3Q+JiBtX2RhdGE7CiB9OwogCi1C
bG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6QmxvYlJlc291cmNlU3luY2hyb25vdXNMb2Fk
ZXIoUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0
b3I8Y2hhcj4mIGRhdGEpCitCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6QmxvYlJlc291
cmNlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiAgICAgOiBtX2Vycm9yKGVycm9y
KQogICAgICwgbV9yZXNwb25zZShyZXNwb25zZSkKICAgICAsIG1fZGF0YShkYXRhKQpAQCAtMTIy
LDcgKzEyMiw3IEBAIHZvaWQgQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXI6OmRpZFIKIAog
ICAgIC8vIFJlYWQgYWxsIHRoZSBkYXRhLgogICAgIG1fZGF0YS5yZXNpemUoc3RhdGljX2Nhc3Q8
c2l6ZV90PihyZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSkpOwotICAgIHN0YXRpY19j
YXN0PEJsb2JSZXNvdXJjZUhhbmRsZSo+KGhhbmRsZSktPnJlYWRTeW5jKG1fZGF0YS5kYXRhKCks
IHN0YXRpY19jYXN0PGludD4obV9kYXRhLnNpemUoKSkpOworICAgIHN0YXRpY19jYXN0PEJsb2JS
ZXNvdXJjZUhhbmRsZSo+KGhhbmRsZSktPnJlYWRTeW5jKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KG1fZGF0YS5kYXRhKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fZGF0YS5zaXplKCkpKTsKICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwogfQogCkBAIC0xNDEsNyArMTQxLDcgQEAgUmVmPEJsb2JSZXNv
dXJjZUhhbmRsZT4gQmxvYlJlc291cmNlSGFuZAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJs
b2JSZXNvdXJjZUhhbmRsZShibG9iRGF0YSwgcmVxdWVzdCwgY2xpZW50LCB0cnVlKSk7CiB9CiAK
LXZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEJsb2JE
YXRhKiBibG9iRGF0YSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVy
cm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0
YSkKK3ZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEJs
b2JEYXRhKiBibG9iRGF0YSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90
PiYgZGF0YSkKIHsKICAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHJlcXVl
c3QuaHR0cE1ldGhvZCgpLCAiZ2V0IikpIHsKICAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9y
KHdlYktpdEJsb2JSZXNvdXJjZURvbWFpbiwgc3RhdGljX2Nhc3Q8aW50PihFcnJvcjo6TWV0aG9k
Tm90QWxsb3dlZCksIHJlc3BvbnNlLnVybCgpLCAiUmVxdWVzdCBtZXRob2QgbXVzdCBiZSBHRVQi
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFu
ZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NyArNDgsNyBAQCBjbGFzcyBCbG9iUmVzb3VyY2VIYW5kbGUgZmluYWwgOiBwdWJsaWMgCiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxCbG9iUmVzb3VyY2VIYW5kbGU+IGNyZWF0ZUFzeW5jKEJsb2JE
YXRhKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKTsKIAot
ICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQmxvYkRhdGEqLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZl
Y3RvcjxjaGFyPiYgZGF0YSk7CisgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25v
dXNseShCbG9iRGF0YSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKIAogICAgIHZvaWQgc3Rh
cnQoKTsKICAgICBpbnQgcmVhZFN5bmMoY2hhciosIGludCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDcmVkZW50
aWFsQmFzZS5oIgogCiAjaW5jbHVkZSAiQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk0LDQgKzk1LDEwIEBAIGJv
b2wgQ3JlZGVudGlhbEJhc2U6OmNvbXBhcmUoY29uc3QgQ3JlZGUKICAgICByZXR1cm4gQ3JlZGVu
dGlhbDo6cGxhdGZvcm1Db21wYXJlKGEsIGIpOwogfQogCitTdHJpbmcgQ3JlZGVudGlhbEJhc2U6
OnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSBjb25zdAoreworICAg
IGF1dG8gY3JlZGVudGlhbFN0cmluZ0RhdGEgPSBtYWtlU3RyaW5nKG1fdXNlciwgJzonLCBtX3Bh
c3N3b3JkKS51dGY4KCk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkJhc2ljICIsIGJhc2U2NEVu
Y29kZWQoY3JlZGVudGlhbFN0cmluZ0RhdGEpKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuaAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIGVudW0gQ3JlZGVudGlhbFBlcnNpc3Rl
bmNlIHsKIH07CiAKIGNsYXNzIENyZWRlbnRpYWxCYXNlIHsKLQogcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgIApAQCAtNTIsNiArNTEsOCBAQCBw
dWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBjb21wYXJlKGNvbnN0IENy
ZWRlbnRpYWwmLCBjb25zdCBDcmVkZW50aWFsJik7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0OworCiBw
cm90ZWN0ZWQ6CiAgICAgV0VCQ09SRV9FWFBPUlQgQ3JlZGVudGlhbEJhc2UoKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBDcmVkZW50aWFsQmFzZShjb25zdCBTdHJpbmcmIHVzZXIsIGNvbnN0IFN0cmlu
ZyYgcGFzc3dvcmQsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCwzNiArMTQ4LDI2IEBAIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8RGVjb2RlVGFzaz4gY3JlYXQKICAgICApOwogfQogCi1zdGF0aWMgYm9vbCBkZWNv
ZGVCYXNlNjQoRGVjb2RlVGFzayYgdGFzaywgTW9kZSBtb2RlKQorc3RhdGljIE9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gZGVjb2RlQmFzZTY0KGNvbnN0IERlY29kZVRhc2smIHRhc2ssIE1vZGUg
bW9kZSkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOwotICAgIGlmIChtb2RlID09IE1vZGU6
OkZvcmdpdmluZ0Jhc2U2NCkgewotICAgICAgICBhdXRvIHVuZXNjYXBlZFN0cmluZyA9IGRlY29k
ZVVSTEVzY2FwZVNlcXVlbmNlcyh0YXNrLmVuY29kZWREYXRhLnRvU3RyaW5nV2l0aG91dENvcHlp
bmcoKSk7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKHVuZXNjYXBlZFN0cmluZywgYnVmZmVy
LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgfCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyB8
IEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfSBlbHNlIHsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1vZGU6OkZvcmdpdmlu
Z0Jhc2U2NDoKKyAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZShkZWNvZGVVUkxFc2NhcGVTZXF1
ZW5jZXModGFzay5lbmNvZGVkRGF0YSksIHsgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQ
YWRkaW5nLCBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcywgQmFz
ZTY0RGVjb2RlT3B0aW9uczo6RGlzY2FyZFZlcnRpY2FsVGFifSk7CisKKyAgICBjYXNlIE1vZGU6
OkxlZ2FjeToKICAgICAgICAgLy8gRmlyc3QgdHJ5IGJhc2U2NHVybC4KLSAgICAgICAgaWYgKCFi
YXNlNjRVUkxEZWNvZGUodGFzay5lbmNvZGVkRGF0YS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCks
IGJ1ZmZlcikpIHsKLSAgICAgICAgICAgIC8vIERpZG4ndCB3b3JrLCB0cnkgdW5lc2NhcGluZyBh
bmQgZGVjb2RpbmcgYXMgYmFzZTY0LgotICAgICAgICAgICAgYXV0byB1bmVzY2FwZWRTdHJpbmcg
PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModGFzay5lbmNvZGVkRGF0YS50b1N0cmluZ1dpdGhv
dXRDb3B5aW5nKCkpOwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUodW5lc2NhcGVkU3Ry
aW5nLCBidWZmZXIsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzIHwgQmFzZTY0RGlzY2Fy
ZFZlcnRpY2FsVGFiKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjRVUkxEZWNvZGUodGFzay5lbmNv
ZGVkRGF0YSkpCisgICAgICAgICAgICByZXR1cm4gZGVjb2RlZERhdGE7CisgICAgICAgIC8vIERp
ZG4ndCB3b3JrLCB0cnkgdW5lc2NhcGluZyBhbmQgZGVjb2RpbmcgYXMgYmFzZTY0LgorICAgICAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0YXNrLmVuY29k
ZWREYXRhKSwgeyBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcywg
QmFzZTY0RGVjb2RlT3B0aW9uczo6RGlzY2FyZFZlcnRpY2FsVGFiIH0pOwogICAgIH0KLSAgICBi
dWZmZXIuc2hyaW5rVG9GaXQoKTsKLSAgICB0YXNrLnJlc3VsdC5kYXRhID0gV1RGTW92ZShidWZm
ZXIpOwotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGRlY29kZUVzY2FwZWQo
RGVjb2RlVGFzayYgdGFzaykKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gZGVjb2RlRXNjYXBlZChj
b25zdCBEZWNvZGVUYXNrJiB0YXNrKQogewogICAgIFRleHRFbmNvZGluZyBlbmNvZGluZ0Zyb21D
aGFyc2V0KHRhc2sucmVzdWx0LmNoYXJzZXQpOwogICAgIGF1dG8mIGVuY29kaW5nID0gZW5jb2Rp
bmdGcm9tQ2hhcnNldC5pc1ZhbGlkKCkgPyBlbmNvZGluZ0Zyb21DaGFyc2V0IDogVVRGOEVuY29k
aW5nKCk7Ci0gICAgYXV0byBidWZmZXIgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEo
dGFzay5lbmNvZGVkRGF0YSwgZW5jb2RpbmcpOwotCi0gICAgYnVmZmVyLnNocmlua1RvRml0KCk7
Ci0gICAgdGFzay5yZXN1bHQuZGF0YSA9IFdURk1vdmUoYnVmZmVyKTsKKyAgICByZXR1cm4gZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKHRhc2suZW5jb2RlZERhdGEsIGVuY29kaW5nKTsK
IH0KIAogc3RhdGljIE9wdGlvbmFsPFJlc3VsdD4gZGVjb2RlU3luY2hyb25vdXNseShEZWNvZGVU
YXNrJiB0YXNrLCBNb2RlIG1vZGUpCkBAIC0xODYsMTEgKzE3NiwxNCBAQCBzdGF0aWMgT3B0aW9u
YWw8UmVzdWx0PiBkZWNvZGVTeW5jaHJvbm91CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKICAgICBpZiAodGFzay5pc0Jhc2U2NCkgewotICAgICAgICBpZiAoIWRlY29kZUJhc2U2NCh0
YXNrLCBtb2RlKSkKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGRlY29kZUJhc2U2NCh0YXNr
LCBtb2RlKTsKKyAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgIHRhc2sucmVzdWx0LmRhdGEgPSBXVEZNb3ZlKCpkZWNvZGVk
RGF0YSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGRlY29kZUVzY2FwZWQodGFzayk7CisgICAgICAg
IHRhc2sucmVzdWx0LmRhdGEgPSBkZWNvZGVFc2NhcGVkKHRhc2spOwogCisgICAgdGFzay5yZXN1
bHQuZGF0YS5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiBXVEZNb3ZlKHRhc2sucmVzdWx0KTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVS
TERlY29kZXIuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9EYXRhVVJMRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IHN0cnVjdCBSZXN1bHQgewogICAgIFN0cmluZyBtaW1lVHlwZTsKICAgICBTdHJpbmcgY2hhcnNl
dDsKICAgICBTdHJpbmcgY29udGVudFR5cGU7Ci0gICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiB9OwogCiB1c2luZyBEZWNvZGVDb21wbGV0aW9uSGFuZGxl
ciA9IFdURjo6RnVuY3Rpb248dm9pZCAoT3B0aW9uYWw8UmVzdWx0Pik+OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6ZmFpbHVyZVRpbWVyRmlyZWQoKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5l
dHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYg
ZGF0YSkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNl
RXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQogewogICAgIGlmIChhdXRvIGNvbnN0cnVjdG9yID0gYnVpbHRpblJlc291cmNlSGFu
ZGxlU3luY2hyb25vdXNMb2FkZXJNYXAoKS5nZXQocmVxdWVzdC51cmwoKS5wcm90b2NvbCgpLnRv
U3RyaW5nV2l0aG91dENvcHlpbmcoKSkpIHsKICAgICAgICAgY29uc3RydWN0b3IoY29udGV4dCwg
cmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGVycm9yLCByZXNwb25zZSwgZGF0YSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgY2xh
c3MgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU7CiBjbGFzcyBSZXNvdXJjZUhhbmRsZSA6IHB1
YmxpYyBSZWZDb3VudGVkPFJlc291cmNlSGFuZGxlPiwgcHVibGljIEF1dGhlbnRpY2F0aW9uQ2xp
ZW50IHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFJlc291cmNl
SGFuZGxlPiBjcmVhdGUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRD
b250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ29udGVudEVuY29kaW5nU25pZmYpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2lu
Z0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8
dWludDhfdD4mIGRhdGEpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlc291cmNlSGFu
ZGxlKCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNFKENGVVJMQ09OTkVDVElPTikKQEAg
LTE5Myw3ICsxOTMsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBSZWY8UmVzb3VyY2VIYW5kbGU+
ICgqQnVpbHRpbkNvbnN0cnVjdG9yKShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJl
c291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQnVp
bHRpbkNvbnN0cnVjdG9yKGNvbnN0IEF0b21TdHJpbmcmIHByb3RvY29sLCBCdWlsdGluQ29uc3Ry
dWN0b3IpOwogCi0gICAgdHlwZWRlZiB2b2lkICgqQnVpbHRpblN5bmNocm9ub3VzTG9hZGVyKShO
ZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRp
YWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFy
PiYgZGF0YSk7CisgICAgdHlwZWRlZiB2b2lkICgqQnVpbHRpblN5bmNocm9ub3VzTG9hZGVyKShO
ZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRp
YWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50
OF90PiYgZGF0YSk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCdWlsdGluU3luY2hyb25vdXNM
b2FkZXIoY29uc3QgQXRvbVN0cmluZyYgcHJvdG9jb2wsIEJ1aWx0aW5TeW5jaHJvbm91c0xvYWRl
cik7CiAKIHByb3RlY3RlZDoKQEAgLTIxMyw3ICsyMTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
c2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlKTsKIAogICAgIGJvb2wgc3RhcnQoKTsKLSAgICBz
dGF0aWMgdm9pZCBwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0Nv
bnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwg
UmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOwor
ICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3Jr
aW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSk7CiAKICAgICB2b2lkIHJlZkF1dGhlbnRpY2F0aW9uQ2xpZW50KCkgb3ZlcnJpZGUgeyBy
ZWYoKTsgfQogICAgIHZvaWQgZGVyZWZBdXRoZW50aWNhdGlvbkNsaWVudCgpIG92ZXJyaWRlIHsg
ZGVyZWYoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJv
bm91c0xvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGll
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgU3luY2hyb25vdXNM
b2FkZXJDbGllbnQ6OmRpZFJlY2VpdmUKIAogdm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6
ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgsIGludCAvKmVuY29kZWREYXRhTGVuZ3RoKi8pCiB7Ci0gICAgbV9kYXRhLmFwcGVu
ZChkYXRhLCBsZW5ndGgpOworICAgIG1fZGF0YS5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCk7CiB9CiAKIHZvaWQgU3luY2hyb25vdXNMb2FkZXJD
bGllbnQ6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3Vz
TG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEFsbG93U3RvcmVkQ3JlZGVudGlh
bHMoYm9vbCBhbGxvdykgeyBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBhbGxvdzsgfQogICAg
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNw
b25zZTsgfQotICAgIFZlY3RvcjxjaGFyPiYgbXV0YWJsZURhdGEoKSB7IHJldHVybiBtX2RhdGE7
IH0KKyAgICBWZWN0b3I8dWludDhfdD4mIG11dGFibGVEYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9
CiAgICAgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9y
OyB9CiAgICAgU3luY2hyb25vdXNMb2FkZXJNZXNzYWdlUXVldWUmIG1lc3NhZ2VRdWV1ZSgpIHsg
cmV0dXJuIG1fbWVzc2FnZVF1ZXVlLmdldCgpOyB9CiAKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzIHsgZmFsc2UgfTsKICAgICBS
ZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7Ci0gICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gbV9kYXRhOwogICAgIFJlc291cmNlRXJyb3IgbV9lcnJvcjsKICAg
ICBSZWY8U3luY2hyb25vdXNMb2FkZXJNZXNzYWdlUXVldWU+IG1fbWVzc2FnZVF1ZXVlOwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVD
Rk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODUsOSArODUsNyBAQCBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFJldGFpblB0
cjxDRkRhdGFSCiAKIHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsK
LSAgICBTdHJpbmcgYXV0aGVudGljYXRpb25IZWFkZXIgPSAiQmFzaWMgIiArIGJhc2U2NEVuY29k
ZShTdHJpbmcoY3JlZGVudGlhbC51c2VyKCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3b3JkKCkp
LnV0ZjgoKSk7Ci0KLSAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6QXV0aG9yaXphdGlvbiwgYXV0aGVudGljYXRpb25IZWFkZXIpOworICAgIHJlcXVlc3Quc2V0
SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uLCBjcmVkZW50aWFs
LnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSk7CiB9CiAKIFJlc291
cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKQEAgLTUyNCw3ICs1
MjIsNyBAQCBzdGF0aWMgdm9pZCBlbXB0eVBlcmZvcm0odm9pZCopCiB7CiB9CiAKLXZvaWQgUmVz
b3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRD
cmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYg
ZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2
b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNl
RXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQogewogICAgIExPRyhOZXR3b3JrLCAiUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9h
ZFJlc291cmNlU3luY2hyb25vdXNseTolcyBzc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6JXUiLCBy
ZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw3ICszNjgs
NyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZXN0YXJ0UmVxdWVzdFdpdGhDCiAgICAgZC0+bV9j
dXJsUmVxdWVzdC0+c3RhcnQoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1M
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBs
YXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQoIXJlcXVlc3QuaXNFbXB0eSgpKTsKQEAgLTU2
Miw5ICs1NjIsOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKCkKIAogICAg
ICAgICAvLyBkaWRSZWNlaXZlUmVzcG9uc2UgbWlnaHQgY2F1c2UgdGhlIGNsaWVudCB0byBiZSBk
ZWxldGVkLgogICAgICAgICBpZiAoY2xpZW50KCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFy
PiBvdXQ7Ci0gICAgICAgICAgICBpZiAoYmFzZTY0RGVjb2RlKGRhdGEsIG91dCwgQmFzZTY0SWdu
b3JlU3BhY2VzQW5kTmV3TGluZXMpICYmIG91dC5zaXplKCkgPiAwKQotICAgICAgICAgICAgICAg
IGNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKHRoaXMsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG91
dC5kYXRhKCksIG91dC5zaXplKCkpLCBvcmlnaW5hbFNpemUpOworICAgICAgICAgICAgYXV0byBk
ZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShkYXRhLCBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25v
cmVTcGFjZXNBbmROZXdMaW5lcyk7CisgICAgICAgICAgICBpZiAoZGVjb2RlZERhdGEgJiYgZGVj
b2RlZERhdGEtPnNpemUoKSA+IDApCisgICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZFJlY2Vp
dmVCdWZmZXIodGhpcywgU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGVjb2RlZERhdGEtPmRhdGEoKSwg
ZGVjb2RlZERhdGEtPnNpemUoKSksIG9yaWdpbmFsU2l6ZSk7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewogICAgICAgICBUZXh0RW5jb2RpbmcgZW5jb2RpbmcoY2hhcnNldCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhh
bmRsZU1hYy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTY3LDkg
KzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogc3RhdGljIHZvaWQgYXBwbHlCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDcmVk
ZW50aWFsJiBjcmVkZW50aWFsKQogewotICAgIFN0cmluZyBhdXRoZW50aWNhdGlvbkhlYWRlciA9
ICJCYXNpYyAiICsgYmFzZTY0RW5jb2RlKFN0cmluZyhjcmVkZW50aWFsLnVzZXIoKSArICI6IiAr
IGNyZWRlbnRpYWwucGFzc3dvcmQoKSkudXRmOCgpKTsKLQotICAgIHJlcXVlc3Quc2V0SFRUUEhl
YWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uLCBhdXRoZW50aWNhdGlvbkhl
YWRlcik7CisgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkF1
dGhvcml6YXRpb24sIGNyZWRlbnRpYWwuc2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlv
bkhlYWRlcigpKTsKIH0KIAogc3RhdGljIE5TT3BlcmF0aW9uUXVldWUgKm9wZXJhdGlvblF1ZXVl
Rm9yQXN5bmNDbGllbnRzKCkKQEAgLTM1Miw3ICszNTAsNyBAQCBDRlN0cmluZ1JlZiBSZXNvdXJj
ZUhhbmRsZTo6c3luY2hyb25vdXNMCiAgICAgcmV0dXJuIENGU1RSKCJXZWJDb3JlU3luY2hyb25v
dXNMb2FkZXJSdW5Mb29wTW9kZSIpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9y
bUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6
cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBMT0co
TmV0d29yaywgIlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHk6JUAgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6JXUiLCByZXF1ZXN0Lm5zVVJMUmVxdWVzdChI
VFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVT
b3VwLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3
ICsxMjcsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3Jt
TG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVz
b3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0
Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYs
IFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mKQogewogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nl
c3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGRpZ2VzdC0+YWRkQnl0ZXMoY2VydGlmaWNhdGVEYXRhLT5kYXRhLCBjZXJ0aWZpY2F0ZURh
dGEtPmxlbik7CiAKICAgICAgICAgYXV0byBoYXNoID0gZGlnZXN0LT5jb21wdXRlSGFzaCgpOwot
ICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGhhc2guZGF0YSgpKSwgaGFzaC5zaXplKCkpOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhi
YXNlNjRFbmNvZGVkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGhhc2guZGF0YSgpKSwg
aGFzaC5zaXplKCkpKTsKICAgICB9CiAKICAgICBIYXNoU2V0PFN0cmluZz4gbV9jZXJ0aWZpY2F0
ZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVl
bmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2Rl
RXNjYXBlU2VxdWVuY2VzLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1
NCwxMSArMTU0LDExIEBAIFN0cmluZyBkZWNvZGVFc2NhcGVTZXF1ZW5jZXMoU3RyaW5nVmlldyAK
ICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLWlubGluZSBWZWN0b3I8Y2hhcj4g
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBU
ZXh0RW5jb2RpbmcmIGVuY29kaW5nKQoraW5saW5lIFZlY3Rvcjx1aW50OF90PiBkZWNvZGVVUkxF
c2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGlu
ZyYgZW5jb2RpbmcpCiB7CiAgICAgQVNTRVJUKGVuY29kaW5nLmlzVmFsaWQoKSk7CiAKLSAgICBW
ZWN0b3I8Y2hhcj4gcmVzdWx0OworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAgICAgc2l6
ZV90IGRlY29kZWRQb3NpdGlvbiA9IDA7CiAgICAgc2l6ZV90IHNlYXJjaFBvc2l0aW9uID0gMDsK
ICAgICB3aGlsZSAodHJ1ZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9R
dW90ZWRQcmludGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4aW11bUxpbmVMZW5ndGggPSAK
IAogc3RhdGljIGNvbnN0IGNoYXIgY3JsZkxpbmVFbmRpbmdbXSA9ICJcclxuIjsKIAotc3RhdGlj
IHNpemVfdCBsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4KGNvbnN0IGNoYXIqIGlucHV0LCBzaXpl
X3QgaW5wdXRMZW5ndGgsIHNpemVfdCBpbmRleCkKK3N0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5l
RW5kaW5nQXRJbmRleChjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoLCBz
aXplX3QgaW5kZXgpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5k
ZXggPCBpbnB1dExlbmd0aCk7CiAgICAgaWYgKGlucHV0W2luZGV4XSA9PSAnXG4nKQpAQCAtNTUs
MTkgKzU1LDE5IEBAIHN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRleCgKICAg
ICByZXR1cm4gMDsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9y
PGNoYXI+JiBpbiwgVmVjdG9yPGNoYXI+JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCiB7Ci0gICAgcXVvdGVk
UHJpbnRhYmxlRW5jb2RlKGluLmRhdGEoKSwgaW4uc2l6ZSgpLCBvdXQpOworICAgIHJldHVybiBx
dW90ZWRQcmludGFibGVFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwogfQogCi12
b2lkIHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBjaGFyKiBpbnB1dCwgc2l6ZV90IGlucHV0
TGVuZ3RoLCBWZWN0b3I8Y2hhcj4mIG91dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFi
bGVFbmNvZGUoY29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCkKIHsKLSAg
ICBvdXQuY2xlYXIoKTsKLSAgICBvdXQucmVzZXJ2ZUNhcGFjaXR5KGlucHV0TGVuZ3RoKTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gb3V0OworICAgIG91dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGlu
cHV0TGVuZ3RoKTsKICAgICBzaXplX3QgY3VycmVudExpbmVMZW5ndGggPSAwOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7ICsraSkgewogICAgICAgICBib29sIGlzTGFz
dENoYXJhY3RlciA9IChpID09IGlucHV0TGVuZ3RoIC0gMSk7Ci0gICAgICAgIGNoYXIgY3VycmVu
dENoYXJhY3RlciA9IGlucHV0W2ldOworICAgICAgICB1aW50OF90IGN1cnJlbnRDaGFyYWN0ZXIg
PSBpbnB1dFtpXTsKICAgICAgICAgYm9vbCByZXF1aXJlc0VuY29kaW5nID0gZmFsc2U7CiAgICAg
ICAgIC8vIEFsbCBub24tcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMgYW5kID0gcmVxdWlyZSBl
bmNvZGluZy4KICAgICAgICAgaWYgKChjdXJyZW50Q2hhcmFjdGVyIDwgJyAnIHx8IGN1cnJlbnRD
aGFyYWN0ZXIgPiAnficgfHwgY3VycmVudENoYXJhY3RlciA9PSAnPScpICYmIGN1cnJlbnRDaGFy
YWN0ZXIgIT0gJ1x0JykKQEAgLTExMiwxOCArMTEyLDIwIEBAIHZvaWQgcXVvdGVkUHJpbnRhYmxl
RW5jb2RlKGNvbnN0IGNoYXIqIGkKICAgICAgICAgICAgIGN1cnJlbnRMaW5lTGVuZ3RoKys7CiAg
ICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4gb3V0OwogfQogCi12b2lkIHF1b3RlZFByaW50
YWJsZURlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBWZWN0b3I8Y2hhcj4mIG91dCkKK1Zl
Y3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBpbnB1dCkKIHsKLSAgICBxdW90ZWRQcmludGFibGVEZWNvZGUoaW4uZGF0YSgpLCBpbi5zaXpl
KCksIG91dCk7CisgICAgcmV0dXJuIHF1b3RlZFByaW50YWJsZURlY29kZShpbnB1dC5kYXRhKCks
IGlucHV0LnNpemUoKSk7CiB9CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoLCBWZWN0b3I8Y2hhcj4mIG91dCkKK1ZlY3Rvcjx1
aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IGRhdGFMZW5ndGgpCiB7Ci0gICAgb3V0LmNsZWFyKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91
dDsKICAgICBpZiAoIWRhdGFMZW5ndGgpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG91dDsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIGNoYXIgY3VycmVudENoYXJhY3RlciA9IGRhdGFbaV07CkBAIC0xNDksOCArMTUxLDkg
QEAgdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgY2hhciogZAogICAgICAgICAgICAg
b3V0LmFwcGVuZChsb3dlckNoYXJhY3Rlcik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQotICAgICAgICBvdXQuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KHRvQVNDSUlIZXhWYWx1
ZSh1cHBlckNoYXJhY3RlciwgbG93ZXJDaGFyYWN0ZXIpKSk7CisgICAgICAgIG91dC5hcHBlbmQo
dG9BU0NJSUhleFZhbHVlKHVwcGVyQ2hhcmFjdGVyLCBsb3dlckNoYXJhY3RlcikpOwogICAgIH0K
KyAgICByZXR1cm4gb3V0OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1F1b3RlZFByaW50YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDE5ICsyOCwxNiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFF1b3RlZFBy
aW50YWJsZV9oCi0jZGVmaW5lIFF1b3RlZFByaW50YWJsZV9oCisjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBxdW90
ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgVmVjdG9yPGNoYXI+Jik7Ci12
b2lkIHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBjaGFyKiwgc2l6ZV90LCBWZWN0b3I8Y2hh
cj4mKTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+Jik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0
IHVpbnQ4X3QqLCBzaXplX3QpOwogCi12b2lkIHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBW
ZWN0b3I8Y2hhcj4mLCBWZWN0b3I8Y2hhcj4mKTsKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRGVjb2Rl
KGNvbnN0IGNoYXIqLCBzaXplX3QsIFZlY3RvcjxjaGFyPiYpOworVmVjdG9yPHVpbnQ4X3Q+IHF1
b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKK1ZlY3Rvcjx1aW50
OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFF1b3RlZFByaW50YWJsZV9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9yV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9yV2lu
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NT
TEtleUdlbmVyYXRvcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgU3Ry
aW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZwogICAgICAgICBpZiAoIUNyeXB0
U2lnbkFuZEVuY29kZUNlcnRpZmljYXRlKGhDb250ZXh0LCBBVF9LRVlFWENIQU5HRSwgWDUwOV9B
U05fRU5DT0RJTkcsIFg1MDlfS0VZR0VOX1JFUVVFU1RfVE9fQkVfU0lHTkVELCAmcmVxdWVzdElu
Zm8sICZzaWduQWxnbywgMCwgcmVpbnRlcnByZXRfY2FzdDxMUEJZVEU+KGJpbmFyeS5kYXRhKCkp
LCAmZHdFbmNvZGVkTGVuZ3RoKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGtleVN0
cmluZyA9IGJhc2U2NEVuY29kZShiaW5hcnkpOworICAgICAgICBrZXlTdHJpbmcgPSBtYWtlU3Ry
aW5nKGJhc2U2NEVuY29kZWQoYmluYXJ5KSk7CiAgICAgfSB3aGlsZSgwKTsKIAogICAgIGlmIChw
UHViSW5mbykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dT
Y3JpcHRTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBTdHJpbmcgU1dTY3JpcHRTdG9yYWdlOjpz
aGEySGFzaChjb25zdCBTCiAgICAgYXV0byBpbnB1dFV0ZjggPSBpbnB1dC51dGY4KCk7CiAgICAg
Y3J5cHRvLT5hZGRCeXRlcyhpbnB1dFV0ZjguZGF0YSgpLCBpbnB1dFV0ZjgubGVuZ3RoKCkpOwog
ICAgIGF1dG8gaGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1cm4gV1RGOjpi
YXNlNjRVUkxFbmNvZGUoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICByZXR1cm4gbWFr
ZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSkpOwogfQog
CiBTdHJpbmcgU1dTY3JpcHRTdG9yYWdlOjpzaGEySGFzaChjb25zdCBVUkwmIGlucHV0KSBjb25z
dApJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzY1NCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWlu
aWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2Rpbmcv
ZGVjb2RpbmcgdG8gbWF0Y2ggbW9yZSBtb2Rlcm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMu
aW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6c2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlc3QpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmlyZUNvbnZl
cnNpb25SZXF1ZXN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0
YVRhc2tDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6YXBwbHlCYXNpY0F1dGhvcml6YXRpb25I
ZWFkZXIpOgorICAgICAgICAqIFNoYXJlZC9BUEkvQVBJRGF0YS5oOgorICAgICAgICAoQVBJOjpE
YXRhOjpjcmVhdGUpOgorICAgICAgICAoQVBJOjpEYXRhOjpmcmVlVmVjdG9yQnl0ZXMpOgorICAg
ICAgICAqIFNoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbToKKyAgICAgICAgKFdlYktp
dDo6c2FuZGJveEZpbGVQYXRoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNw
cDoKKyAgICAgICAgKFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW06CisgICAgICAg
IChwcm9kdWNlQ2xpZW50RGF0YUpzb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9u
L2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViS2l0Ojpi
YXNlNjRFbmNvZGVkUE5HRGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRp
b25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50Ojp3ZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0
b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcyk6CisgICAgICAgICogVUlQcm9j
ZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1TYXZlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNw
ZWN0b3JVSVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5
OjpwbGF0Zm9ybVNhdmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1Jl
bW90ZUluc3BlY3RvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tOgorICAgICAgICAoV2ViS2l0
OjpMb2NhbEF1dGhlbnRpY2F0b3JJbnRlcm5hbDo6cHJvZHVjZUhhc2hTZXQpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKToKKyAgICAgICAgKFdl
YktpdDo6TG9jYWxBdXRoZW50aWNhdG9yOjpnZXRBc3NlcnRpb24pOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tIaWRDb25uZWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TW9ja0hpZENvbm5lY3Rpb246OmZlZWRSZXBvcnRzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tOgor
ICAgICAgICAoV2ViS2l0OjpNb2NrTG9jYWxDb25uZWN0aW9uOjpmaWx0ZXJSZXNwb25zZXMgY29u
c3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViVVJMU2NoZW1lVGFzay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFNjaGVtZVRh
c2s6OmRpZENvbXBsZXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxvYWRlclN0cmF0ZWd5Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMU2NoZW1lSGFuZGxlclByb3h5Ojpsb2FkU3luY2hy
b25vdXNseSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRs
ZXJQcm94eS5oOgorCiAyMDIxLTA1LTE4ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXN1cnJlY3QgV0tXZWJWaWV3IG1lZGlhIGNvbnRyb2xzIEFQSSByZW1v
dmVkIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE5MjkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBA
QAogbWVzc2FnZXMgLT4gTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgTGVnYWN5UmVjZWl2
ZXIgewogCiAgICAgU2NoZWR1bGVSZXNvdXJjZUxvYWQoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKQotICAgIFBlcmZvcm1TeW5jaHJv
bm91c0xvYWQoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzKSAtPiAoV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSwgVmVjdG9yPGNoYXI+IGRhdGEpIFN5bmNocm9ub3Vz
CisgICAgUGVyZm9ybVN5bmNocm9ub3VzTG9hZChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzIHJlc291cmNlTG9hZFBhcmFtZXRlcnMpIC0+IChXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yIGVycm9yLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBWZWN0b3I8dWlu
dDhfdD4gZGF0YSkgU3luY2hyb25vdXMKICAgICBUZXN0UHJvY2Vzc0luY29taW5nU3luY01lc3Nh
Z2VzV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkoV2ViS2l0OjpXZWJQYWdlUHJveHlJZGVudGlmaWVy
IHBhZ2VJRCkgLT4gKGJvb2wgaGFuZGxlZCkgU3luY2hyb25vdXMKICAgICBMb2FkUGluZyhXZWJL
aXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIHJlc291cmNlTG9hZFBhcmFtZXRlcnMp
CiAgICAgUmVtb3ZlTG9hZElkZW50aWZpZXIodWludDY0X3QgcmVzb3VyY2VMb2FkSWRlbnRpZmll
cikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgdm9pZCBzZW5kUmVwbHlUb1N5bmNocm9ub3VzUmVxdWVz
CiAgICAgQVNTRVJUKGRhdGEuZGVsYXllZFJlcGx5KTsKICAgICBBU1NFUlQoIWRhdGEucmVzcG9u
c2UuaXNOdWxsKCkgfHwgIWRhdGEuZXJyb3IuaXNOdWxsKCkpOwogCi0gICAgVmVjdG9yPGNoYXI+
IHJlc3BvbnNlQnVmZmVyOworICAgIFZlY3Rvcjx1aW50OF90PiByZXNwb25zZUJ1ZmZlcjsKICAg
ICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+c2l6ZSgpKQogICAgICAgICByZXNwb25zZUJ1ZmZlci5h
cHBlbmQoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKIApJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTUsMTQgKzMxNSwxNSBAQCB2b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50
TWFuYWdlcjo6ZmlyCiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHB1YmxpY0tleURhdGE7Ci0gICAgICAgIFdURjo6
YmFzZTY0VVJMRGVjb2RlKHB1YmxpY0tleUJhc2U2NFVSTCwgcHVibGljS2V5RGF0YSk7CisgICAg
ICAgIGF1dG8gcHVibGljS2V5RGF0YSA9IGJhc2U2NFVSTERlY29kZShwdWJsaWNLZXlCYXNlNjRV
UkwpOworICAgICAgICBpZiAoIXB1YmxpY0tleURhdGEpCisgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgYXV0byBjcnlwdG8gPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6Q3J5
cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwotICAgICAgICBjcnlwdG8tPmFkZEJ5dGVz
KHB1YmxpY0tleURhdGEuZGF0YSgpLCBwdWJsaWNLZXlEYXRhLnNpemUoKSk7CisgICAgICAgIGNy
eXB0by0+YWRkQnl0ZXMocHVibGljS2V5RGF0YS0+ZGF0YSgpLCBwdWJsaWNLZXlEYXRhLT5zaXpl
KCkpOwogICAgICAgICBhdXRvIHB1YmxpY0tleURhdGFIYXNoID0gY3J5cHRvLT5jb21wdXRlSGFz
aCgpOwogCi0gICAgICAgIGF1dG8ga2V5SUQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShwdWJsaWNL
ZXlEYXRhSGFzaC5kYXRhKCksIHB1YmxpY0tleURhdGFIYXNoLnNpemUoKSk7CisgICAgICAgIGF1
dG8ga2V5SUQgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocHVibGljS2V5RGF0YUhhc2gu
ZGF0YSgpLCBwdWJsaWNLZXlEYXRhSGFzaC5zaXplKCkpKTsKICAgICAgICAgaWYgKGtleUlEICE9
IGF0dHJpYnV0aW9uLnNvdXJjZVVubGlua2FibGVUb2tlbigpLT5rZXlJREJhc2U2NFVSTCkKICAg
ICAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRh
VGFza0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogI2lmIFVTRShDUkVERU5USUFMX1NUT1JBR0VfV0lUSF9ORVRXT1JLX1NFU1NJT04p
CiBzdGF0aWMgdm9pZCBhcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcihXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRp
YWwpCiB7Ci0gICAgU3RyaW5nIGF1dGhlbnRpY2F0aW9uSGVhZGVyID0gIkJhc2ljICIgKyBiYXNl
NjRFbmNvZGUoU3RyaW5nKGNyZWRlbnRpYWwudXNlcigpICsgIjoiICsgY3JlZGVudGlhbC5wYXNz
d29yZCgpKS51dGY4KCkpOwotICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKFdlYkNvcmU6
OkhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uLCBhdXRoZW50aWNhdGlvbkhlYWRlcik7Cisg
ICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OkF1
dGhvcml6YXRpb24sIGNyZWRlbnRpYWwuc2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlv
bkhlYWRlcigpKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkv
QVBJRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElEYXRh
LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElEYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IG1lbWNweShjb3BpZWRCeXRlcywgYnl0ZXMsIHNpemUpOwogICAgICAgICB9CiAKLSAgICAgICAg
cmV0dXJuIGNyZWF0ZVdpdGhvdXRDb3B5aW5nKGNvcGllZEJ5dGVzLCBzaXplLCBmYXN0RnJlZUJ5
dGVzLCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVdpdGhvdXRDb3B5aW5nKGNvcGll
ZEJ5dGVzLCBzaXplLCBbXSAodW5zaWduZWQgY2hhciogYnl0ZXMsIGNvbnN0IHZvaWQqKSB7Cisg
ICAgICAgICAgICBpZiAoYnl0ZXMpCisgICAgICAgICAgICAgICAgZmFzdEZyZWUoc3RhdGljX2Nh
c3Q8dm9pZCo+KGJ5dGVzKSk7CisgICAgICAgIH0sIG51bGxwdHIpOwogICAgIH0KICAgICAKICAg
ICBzdGF0aWMgUmVmPERhdGE+IGNyZWF0ZShjb25zdCBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIGJ1
ZmZlcikKQEAgLTY4LDYgKzcxLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZShi
dWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUmVmPERh
dGE+IGNyZWF0ZShWZWN0b3I8dW5zaWduZWQgY2hhcj4mJiBidWZmZXIpCisgICAgeworICAgICAg
ICBhdXRvIGJ1ZmZlclNpemUgPSBidWZmZXIuc2l6ZSgpOworICAgICAgICBhdXRvIGJ1ZmZlclBv
aW50ZXIgPSBidWZmZXIucmVsZWFzZUJ1ZmZlcigpLmxlYWtQdHIoKTsKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZVdpdGhvdXRDb3B5aW5nKGJ1ZmZlclBvaW50ZXIsIGJ1ZmZlclNpemUsIFtdICh1bnNp
Z25lZCBjaGFyKiBieXRlcywgY29uc3Qgdm9pZCopIHsKKyAgICAgICAgICAgIGlmIChieXRlcykK
KyAgICAgICAgICAgICAgICBXVEY6OlZlY3Rvck1hbGxvYzo6ZnJlZShieXRlcyk7CisgICAgICAg
IH0sIG51bGxwdHIpOworICAgIH0KKwogICAgIHN0YXRpYyBSZWZQdHI8RGF0YT4gY3JlYXRlKGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOwogICAgIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAt
OTYsMTIgKzEwOSw2IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGZhc3RGcmVlQnl0ZXModW5zaWduZWQgY2hhciogYnl0ZXMsIGNvbnN0IHZvaWQqKQotICAgIHsK
LSAgICAgICAgaWYgKGJ5dGVzKQotICAgICAgICAgICAgZmFzdEZyZWUoc3RhdGljX2Nhc3Q8dm9p
ZCo+KGJ5dGVzKSk7Ci0gICAgfQotCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogbV9ieXRlcyB7
IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTMxNSwxOCArMzE1LDEzIEBAIHN0YXRpYyBTdHJpbmcgc2FuZGJv
eERpcmVjdG9yeShXZWJDb3JlOjoKIAogc3RhdGljIFN0cmluZyBzYW5kYm94RmlsZVBhdGgoY29u
c3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoLCBjb25zdCBDU3RyaW5nJiBoZWFkZXIpCiB7Ci0gICAg
U3RyaW5nQnVpbGRlciBzYW5kYm94RmlsZTsKLSAgICBzYW5kYm94RmlsZS5hcHBlbmQoZGlyZWN0
b3J5UGF0aCk7Ci0gICAgc2FuZGJveEZpbGUuYXBwZW5kKCIvQ29tcGlsZWRTYW5kYm94KyIpOwot
CiAgICAgLy8gTWFrZSB0aGUgZmlsZW5hbWUgc2VtaS11bmlxdWUgYmFzZWQgb24gdGhlIGNvbnRl
bnRzIG9mIHRoZSBoZWFkZXIuCisKICAgICBhdXRvIGNyeXB0byA9IFBBTDo6Q3J5cHRvRGlnZXN0
OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7CiAgICAgY3J5
cHRvLT5hZGRCeXRlcyhoZWFkZXIuZGF0YSgpLCBoZWFkZXIubGVuZ3RoKCkpOwotICAgIFZlY3Rv
cjx1aW50OF90PiBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotICAgIFN0cmluZyByZWFk
YWJsZUhhc2ggPSBXVEY6OmJhc2U2NFVSTEVuY29kZShoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkp
OworICAgIGF1dG8gaGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKIAotICAgIHNhbmRib3hG
aWxlLmFwcGVuZChyZWFkYWJsZUhhc2gpOwotICAgIHJldHVybiBzYW5kYm94RmlsZS50b1N0cmlu
ZygpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGRpcmVjdG9yeVBhdGgsICIvQ29tcGlsZWRTYW5k
Ym94KyIsIGJhc2U2NFVSTEVuY29kZWQoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKSk7CiB9CiAK
IHN0YXRpYyBib29sIGVuc3VyZVNhbmRib3hDYWNoZURpcmVjdG9yeShjb25zdCBTYW5kYm94SW5m
byYgaW5mbykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTIwLDcgKzUy
MCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAKICAgICBTdGFydFVSTFNjaGVtZVRh
c2soc3RydWN0IFdlYktpdDo6VVJMU2NoZW1lVGFza1BhcmFtZXRlcnMgcGFyYW1ldGVycykKICAg
ICBTdG9wVVJMU2NoZW1lVGFzayh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3Qg
dGFza0lkZW50aWZpZXIpCi0gICAgTG9hZFN5bmNocm9ub3VzVVJMU2NoZW1lVGFzayhzdHJ1Y3Qg
V2ViS2l0OjpVUkxTY2hlbWVUYXNrUGFyYW1ldGVycyBwYXJhbWV0ZXJzKSAtPiAoV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwg
VmVjdG9yPGNoYXI+IGRhdGEpIFN5bmNocm9ub3VzCisgICAgTG9hZFN5bmNocm9ub3VzVVJMU2No
ZW1lVGFzayhzdHJ1Y3QgV2ViS2l0OjpVUkxTY2hlbWVUYXNrUGFyYW1ldGVycyBwYXJhbWV0ZXJz
KSAtPiAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSwgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciBlcnJvciwgVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAKICNpZiBF
TkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgIFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRp
b25BbmRNb3Rpb25BY2Nlc3MoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIHN0cnVj
dCBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgZnJhbWVJbmZvLCBib29sIG1heVByb21wdCkgLT4gKGVu
dW06dWludDhfdCBXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbk9yTW90aW9uUGVybWlzc2lvblN0
YXRlIHBlcm1pc3Npb25TdGF0ZSkgQXN5bmMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlVSTFNjaGVtZUhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBzdHJ1Y3QgVVJMU2NoZW1lVGFza1BhcmFtZXRlcnM7CiBjbGFzcyBXZWJQ
YWdlUHJveHk7CiBjbGFzcyBXZWJQcm9jZXNzUHJveHk7CiAKLXVzaW5nIFN5bmNMb2FkQ29tcGxl
dGlvbkhhbmRsZXIgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgVmVjdG9y
PGNoYXI+Jik+OwordXNpbmcgU3luY0xvYWRDb21wbGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBWZWN0b3I8dWludDhfdD4mKT47CiAKIGNsYXNzIFdl
YlVSTFNjaGVtZUhhbmRsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJVUkxTY2hlbWVIYW5kbGVy
PiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVVJMU2NoZW1lSGFuZGxlcik7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmNwcAkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiwxMCArMjEyLDEwIEBAIGF1dG8gV2ViVVJMU2NoZW1l
VGFzazo6ZGlkQ29tcGxldGUoY29uc3QKICAgICBtX2NvbXBsZXRlZCA9IHRydWU7CiAgICAgCiAg
ICAgaWYgKGlzU3luYygpKSB7Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgICAgICBW
ZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICAgICAgaWYgKG1fc3luY0RhdGEpIHsKICAgICAgICAg
ICAgIGRhdGEucmVzaXplKG1fc3luY0RhdGEtPnNpemUoKSk7Ci0gICAgICAgICAgICBtZW1jcHko
ZGF0YS5kYXRhKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1fc3luY0RhdGEtPmRh
dGEoKSksIG1fc3luY0RhdGEtPnNpemUoKSk7CisgICAgICAgICAgICBtZW1jcHkoZGF0YS5kYXRh
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fc3luY0RhdGEtPmRhdGEoKSks
IG1fc3luY0RhdGEtPnNpemUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBtX3N5bmNDb21wbGV0
aW9uSGFuZGxlcihtX3N5bmNSZXNwb25zZSwgZXJyb3IsIFdURk1vdmUoZGF0YSkpOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHN0cnVjdCBVUkxTY2hlbWVUYXNrUGFyYW1ldGVy
czsKIGNsYXNzIFdlYlVSTFNjaGVtZUhhbmRsZXI7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiAKLXVz
aW5nIFN5bmNMb2FkQ29tcGxldGlvbkhhbmRsZXIgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJiwgY29uc3QgVmVjdG9yPGNoYXI+Jik+OwordXNpbmcgU3luY0xvYWRDb21wbGV0aW9uSGFu
ZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBWZWN0b3I8dWludDhf
dD4mKT47CiAKIGNsYXNzIFdlYlVSTFNjaGVtZVRhc2sgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBs
PEFQSTo6T2JqZWN0OjpUeXBlOjpVUkxTY2hlbWVUYXNrPiwgcHVibGljIEluc3RhbmNlQ291bnRl
ZDxXZWJVUkxTY2hlbWVUYXNrPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVVJMU2No
ZW1lVGFzayk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMzgsMTMgKzIzMzgsMTQgQEAgdm9pZCBXS1BhZ2VT
ZXRQYWdlTmF2aWdhdGlvbkNsaWVudChXS1BhZwogICAgICAgICAgICAgaWYgKG1fY2xpZW50LmNv
cHlXZWJDcnlwdG9NYXN0ZXJLZXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKHRv
SW1wbChtX2NsaWVudC5jb3B5V2ViQ3J5cHRvTWFzdGVyS2V5KHRvQVBJKCZwYWdlKSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKSkpOwogCi0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gbWFz
dGVyS2V5OwogI2lmIEVOQUJMRShXRUJfQ1JZUFRPKQotICAgICAgICAgICAgaWYgKCFnZXREZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkpCisgICAgICAgICAgICBhdXRvIG1hc3Rl
cktleSA9IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICAgICAgICAgIGlmICghbWFz
dGVyS2V5KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0
dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKFdURk1vdmUoKm1hc3RlcktleSkpOworI2Vsc2UKKyAgICAg
ICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShudWxscHRyLCAwKTsKICNlbmRpZgotCi0g
ICAgICAgICAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUobWFzdGVyS2V5LmRhdGEoKSwgbWFz
dGVyS2V5LnNpemUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBSZWZQdHI8QVBJOjpTdHJpbmc+
IHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhXZWJQYWdlUHJveHkmIHBhZ2UsIHVu
c2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgUmVmUHRyPEFQSTo6U3RyaW5nPiYgY2hhbGxlbmdl
U3RyaW5nLCBjb25zdCBVUkwmIHVybCkgb3ZlcnJpZGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQkod29ya2luZyBjb3B5KQpAQCAt
NjgsNyArNjgsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TRGF0YT4gcHJvZHVjZUNsaWVudERhCiAg
ICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpAIndlYmF1dGhuLmdldCIgZm9yS2V5OkAidHlw
ZSJdOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OldU
Rjo6YmFzZTY0VVJMRW5jb2RlKGNoYWxsZW5nZS5ieXRlcywgY2hhbGxlbmdlLmxlbmd0aCkgZm9y
S2V5OkAiY2hhbGxlbmdlIl07CisgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om1ha2VTdHJpbmco
YmFzZTY0VVJMRW5jb2RlZChjaGFsbGVuZ2UuYnl0ZXMsIGNoYWxsZW5nZS5sZW5ndGgpKSBmb3JL
ZXk6QCJjaGFsbGVuZ2UiXTsKICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6b3JpZ2luIGZvcktl
eTpAIm9yaWdpbiJdOwogCiAgICAgcmV0dXJuIFtOU0pTT05TZXJpYWxpemF0aW9uIGRhdGFXaXRo
SlNPTk9iamVjdDpkaWN0aW9uYXJ5LmdldCgpIG9wdGlvbnM6TlNKU09OV3JpdGluZ1NvcnRlZEtl
eXMgZXJyb3I6bmlsXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24v
Y2Fpcm8vV2ViQXV0b21hdGlvblNlc3Npb25DYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9jYWlyby9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNh
aXJvLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9jYWlyby9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBiYXNlNjRFbmNvZGVk
UE5HCiAgICAgaWYgKHBuZ0RhdGEuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShwbmdEYXRhKTsKKyAgICByZXR1cm4gbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKHBuZ0RhdGEpKTsKIH0KIAogT3B0aW9uYWw8U3RyaW5nPiBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGxhdGZvcm1HZXRCYXNlNjRFbmNvZGVkUE5HRGF0YShjb25z
dCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlKQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQkocmV2aXNpb24gMjc3NTY5
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTM1LDExICsxMTM1LDExIEBAIFJlZlB0cjxBUEk6OkRhdGE+IE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWcKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAo
IW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViQ3J5cHRv
TWFzdGVyS2V5Rm9yV2ViVmlldykgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5
OwotICAgICAgICBpZiAoIWdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkK
KyAgICAgICAgYXV0byBtYXN0ZXJLZXkgPSBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7Cisg
ICAgICAgIGlmICghbWFzdGVyS2V5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKG1hc3RlcktleS5kYXRhKCksIG1hc3Rlcktl
eS5zaXplKCkpOworICAgICAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUoV1RGTW92ZSgqbWFz
dGVyS2V5KSk7CiAgICAgfQogCiAgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmln
YXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90
ZUluc3BlY3RvckNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5NCwxMyArMTk0LDExIEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50
OjpzZXR1cENvbm5lY3QKIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29t
bWFuZHMoY29uc3QgY2hhciogYmFja2VuZENvbW1hbmRzKQogewogICAgIGlmICghYmFja2VuZENv
bW1hbmRzIHx8ICFiYWNrZW5kQ29tbWFuZHNbMF0pIHsKLSAgICAgICAgbV9iYWNrZW5kQ29tbWFu
ZHNVUkwgPSBTdHJpbmcoKTsKKyAgICAgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSB7IH07CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAg
ICBiYXNlNjRFbmNvZGUoYmFja2VuZENvbW1hbmRzLCBzdHJsZW4oYmFja2VuZENvbW1hbmRzKSwg
YmFzZTY0RGF0YSk7Ci0gICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSAiZGF0YTp0ZXh0L2phdmFz
Y3JpcHQ7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0g
bWFrZVN0cmluZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQo
YmFja2VuZENvbW1hbmRzLCBzdHJsZW4oYmFja2VuZENvbW1hbmRzKSkpOwogfQogCiB2b2lkIFJl
bW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVjdGlvbkRpZENsb3NlKCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0
ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDkgKzE0MiwxMSBAQCB2b2lkIFJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtCiAgICAgVmVjdG9yPGNoYXI+IGRhdGFW
ZWN0b3I7CiAgICAgQ1N0cmluZyBkYXRhU3RyaW5nOwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7
Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZh
bGlkYXRlUGFkZGluZykpCisgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUo
Y29udGVudCwgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKTsKKyAgICAgICAg
aWYgKCFkZWNvZGVkRGF0YSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YVZlY3Rv
ci5zaHJpbmtUb0ZpdCgpOworICAgICAgICBkZWNvZGVkRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAg
ICAgICAgZGF0YVZlY3RvciA9IFdURk1vdmUoKmRlY29kZWREYXRhKTsKICAgICB9IGVsc2UKICAg
ICAgICAgZGF0YVN0cmluZyA9IGNvbnRlbnQudXRmOCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVj
dG9yVUlQcm94eUd0ay5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU0MSw5ICs1NDEsMTEgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybVNhdmUoYwogICAgIFZlY3RvcjxjaGFyPiBkYXRhVmVjdG9yOwogICAgIENTdHJpbmcgZGF0
YVN0cmluZzsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICBpZiAoIWJhc2U2NERl
Y29kZShjb250ZW50LCBkYXRhVmVjdG9yLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAg
ICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQsIEJhc2U2NERlY29kZU9w
dGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAgICAg
ICAgZGVjb2RlZERhdGEtPnNocmlua1RvRml0KCk7CisgICAgICAgIGRhdGFWZWN0b3IgPSBXVEZN
b3ZlKCpkZWNvZGVkRGF0YSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGRhdGFTdHJpbmcgPSBjb250
ZW50LnV0ZjgoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21h
Yy9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1h
Yy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzQsMTAgKzE3NCwxMCBAQCB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtCiAgICAgICAgIG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dlc3RlZFVSTENv
cHksIGFjdHVhbFVSTCk7CiAKICAgICAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAg
ICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250
ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICAgICAgYXV0byBk
ZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50Q29weSwgQmFzZTY0RGVjb2RlT3B0aW9u
czo6VmFsaWRhdGVQYWRkaW5nKTsKKyAgICAgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNv
bnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkg
bGVuZ3RoOm91dC5zaXplKCldKTsKKyAgICAgICAgICAgIGF1dG8gZGF0YUNvbnRlbnQgPSBhZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmRlY29kZWREYXRhLT5kYXRhKCkgbGVu
Z3RoOmRlY29kZWREYXRhLT5zaXplKCldKTsKICAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0
ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgW2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVu
Y29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5z
cGVjdG9yVUlQcm94eU1hYy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01MDksMTAgKzUwOSwxMCBAQCB2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtU2F2ZShjCiAgICAgICAgIG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dl
c3RlZFVSTENvcHksIGFjdHVhbFVSTCk7CiAKICAgICAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsK
LSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERl
Y29kZShjb250ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICAg
ICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50Q29weSwgQmFzZTY0RGVj
b2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKTsKKyAgICAgICAgICAgIGlmICghZGVjb2RlZERh
dGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0
YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91
dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKKyAgICAgICAgICAgIGF1dG8gZGF0YUNvbnRl
bnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmRlY29kZWREYXRhLT5k
YXRhKCkgbGVuZ3RoOmRlY29kZWREYXRhLT5zaXplKCldKTsKICAgICAgICAgICAgIFtkYXRhQ29u
dGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2Fs
bHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBSZW1vdGVJ
bnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDbwogICAgIGlmICghZXZlbnQubWVzc2FnZSB8fCBl
dmVudC5tZXNzYWdlLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fYmFja2Vu
ZENvbW1hbmRzVVJMID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIs
IGJhc2U2NEVuY29kZShldmVudC5tZXNzYWdlLT51dGY4KCkpKTsKKyAgICBtX2JhY2tlbmRDb21t
YW5kc1VSTCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNl
NjRFbmNvZGVkKGV2ZW50Lm1lc3NhZ2UtPnV0ZjgoKSkpOwogfQogCiB2b2lkIFJlbW90ZUluc3Bl
Y3RvckNsaWVudDo6c2V0VGFyZ2V0TGlzdChjb25zdCBFdmVudCYgZXZlbnQpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRp
Y2F0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1
dGhlbnRpY2F0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTgyLDEwICs4Miw4IEBAIHN0YXRpYyBp
bmxpbmUgSGFzaFNldDxTdHJpbmc+IHByb2R1Y2VIYXMKIHsKICAgICBIYXNoU2V0PFN0cmluZz4g
cmVzdWx0OwogICAgIGZvciAoYXV0byYgY3JlZGVudGlhbERlc2NyaXB0b3IgOiBjcmVkZW50aWFs
RGVzY3JpcHRvcnMpIHsKLSAgICAgICAgaWYgKGVtcHR5VHJhbnNwb3J0c09yQ29udGFpbihjcmVk
ZW50aWFsRGVzY3JpcHRvci50cmFuc3BvcnRzLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRl
cm5hbCkKLSAgICAgICAgICAgICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLnR5cGUgPT0gUHVibGlj
S2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleQotICAgICAgICAgICAgJiYgY3JlZGVudGlhbERl
c2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpID09IGNyZWRlbnRpYWxJZExlbmd0aCkKLSAgICAgICAg
ICAgIHJlc3VsdC5hZGQoYmFzZTY0RW5jb2RlKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9y
LmRhdGEoKSwgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpKSk7CisgICAgICAg
IGlmIChlbXB0eVRyYW5zcG9ydHNPckNvbnRhaW4oY3JlZGVudGlhbERlc2NyaXB0b3IudHJhbnNw
b3J0cywgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpICYmIGNyZWRlbnRpYWxEZXNj
cmlwdG9yLnR5cGUgPT0gUHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSAmJiBjcmVk
ZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkgPT0gY3JlZGVudGlhbElkTGVuZ3RoKQor
ICAgICAgICAgICAgcmVzdWx0LmFkZChtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoY3JlZGVudGlh
bERlc2NyaXB0b3IuaWRWZWN0b3IuZGF0YSgpLCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rv
ci5zaXplKCkpKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yNDEsNyArMjM5
LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKAogICAgICAgICBp
ZiAobm90Rm91bmQgIT0gbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRNYXRjaGluZyhbJmV4Y2x1
ZGVDcmVkZW50aWFsSWRzXSAoYXV0byYgY3JlZGVudGlhbCkgewogICAgICAgICAgICAgYXV0byog
cmF3SWQgPSBjcmVkZW50aWFsLT5yYXdJZCgpOwogICAgICAgICAgICAgQVNTRVJUKHJhd0lkKTsK
LSAgICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRF
bmNvZGUocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICAgICAg
cmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNvbnRhaW5zKG1ha2VTdHJpbmcoYmFzZTY0RW5j
b2RlZChyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSkpOwogICAgICAgICB9KSkg
ewogICAgICAgICAgICAgcmVjZWl2ZUV4Y2VwdGlvbih7IE5vdEFsbG93ZWRFcnJvciwgIkF0IGxl
YXN0IG9uZSBjcmVkZW50aWFsIG1hdGNoZXMgYW4gZW50cnkgb2YgdGhlIGV4Y2x1ZGVDcmVkZW50
aWFscyBsaXN0IGluIHRoZSBwbGF0Zm9ybSBhdHRhY2hlZCBhdXRoZW50aWNhdG9yLiJfcyB9LCBX
ZWJBdXRoZW50aWNhdGlvblN0YXR1czo6TEFFeGNsdWRlQ3JlZGVudGlhbHNNYXRjaGVkKTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTUxOCw3ICs1MTYsNyBAQCB2b2lkIExvY2FsQXV0aGVudGlj
YXRvcjo6Z2V0QXNzZXJ0aW9uKCkKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8qIHJhd0lkID0g
Y3JlZGVudGlhbC0+cmF3SWQoKTsKLSAgICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250
YWlucyhiYXNlNjRFbmNvZGUocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpKQor
ICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKG1ha2VTdHJpbmcoYmFzZTY0
RW5jb2RlZChyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSkpKQogICAgICAgICAg
ICAgYXNzZXJ0aW9uUmVzcG9uc2VzLnVuY2hlY2tlZEFwcGVuZChjcmVkZW50aWFsLmNvcHlSZWYo
KSk7CiAgICAgfQogICAgIGlmIChhc3NlcnRpb25SZXNwb25zZXMuaXNFbXB0eSgpKSB7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tIaWRD
b25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9Nb2NrL01vY2tIaWRDb25uZWN0aW9uLmNwcAkocmV2aXNpb24gMjc3NTY5
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2Nr
SGlkQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MSwxNSArMjYxLDEzIEBAIHZv
aWQgTW9ja0hpZENvbm5lY3Rpb246OmZlZWRSZXBvcnRzKCkKICAgICAgICAgaWYgKHN0YWdlc01h
dGNoKCkgJiYgbV9jb25maWd1cmF0aW9uLmhpZC0+ZXJyb3IgPT0gTW9jazo6SGlkRXJyb3I6OlVu
c3VwcG9ydGVkT3B0aW9ucyAmJiAobV9yZXF1aXJlUmVzaWRlbnRLZXkgfHwgbV9yZXF1aXJlVXNl
clZlcmlmaWNhdGlvbikpCiAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3NhZ2U6OmNy
ZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a0Nib3IsIHsgc3Rh
dGljX2Nhc3Q8dWludDhfdD4oQ3RhcERldmljZVJlc3BvbnNlQ29kZTo6a0N0YXAyRXJyVW5zdXBw
b3J0ZWRPcHRpb24pIH0pOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50
OF90PiBwYXlsb2FkOwogICAgICAgICAgICAgQVNTRVJUKCFtX2NvbmZpZ3VyYXRpb24uaGlkLT5w
YXlsb2FkQmFzZTY0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBhdXRvIHN0YXR1cyA9IGJhc2U2
NERlY29kZShtX2NvbmZpZ3VyYXRpb24uaGlkLT5wYXlsb2FkQmFzZTY0WzBdLCBwYXlsb2FkKTsK
KyAgICAgICAgICAgIGF1dG8gcGF5bG9hZCA9IGJhc2U2NERlY29kZShtX2NvbmZpZ3VyYXRpb24u
aGlkLT5wYXlsb2FkQmFzZTY0WzBdKTsKICAgICAgICAgICAgIG1fY29uZmlndXJhdGlvbi5oaWQt
PnBheWxvYWRCYXNlNjQucmVtb3ZlKDApOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdGF0
dXMsIHN0YXR1cyk7CiAgICAgICAgICAgICBpZiAoIW1fY29uZmlndXJhdGlvbi5oaWQtPmlzVTJm
KQotICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3Vy
cmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21tYW5kOjprQ2JvciwgcGF5bG9hZCk7CisgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hh
bm5lbCwgRmlkb0hpZERldmljZUNvbW1hbmQ6OmtDYm9yLCBXVEZNb3ZlKCpwYXlsb2FkKSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZpZG9IaWRNZXNzYWdl
OjpjcmVhdGUobV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNvbW1hbmQ6OmtNc2csIHBh
eWxvYWQpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRl
KG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21tYW5kOjprTXNnLCBXVEZNb3ZlKCpw
YXlsb2FkKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01v
Y2tMb2NhbENvbm5lY3Rpb24ubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgTW9ja0xvY2FsQ29ubmVjdGlv
bjo6ZmlsdGVyUmVzcG9uc2UKICAgICBmb3IgKDsgaXRyICE9IHJlc3BvbnNlcy5lbmQoKTsgKytp
dHIpIHsKICAgICAgICAgYXV0byogcmF3SWQgPSBpdHItPmdldCgpLnJhd0lkKCk7CiAgICAgICAg
IEFTU0VSVChyYXdJZCk7Ci0gICAgICAgIGF1dG8gcmF3SWRCYXNlNjQgPSBiYXNlNjRFbmNvZGUo
cmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGF1dG8gcmF3SWRC
YXNlNjQgPSBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5
dGVMZW5ndGgoKSkpOwogICAgICAgICBpZiAocmF3SWRCYXNlNjQgPT0gcHJlZmVycmVkQ3JlZGVu
dGlhbElkQmFzZTY0KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsv
V2ViTG9hZGVyU3RyYXRlZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzgsNyArNTc4LDcgQEAg
T3B0aW9uYWw8V2ViTG9hZGVyU3RyYXRlZ3k6OlN5bmNMb2FkUmVzdQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgV2ViTG9hZGVyU3RyYXRlZ3k6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyLCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElk
ZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2xpZW50Q3JlZGVudGlh
bFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9saWN5LCAgY29uc3QgRmV0Y2hPcHRpb25zJiBvcHRp
b25zLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBvcmlnaW5hbFJlcXVlc3RIZWFkZXJzLCBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYg
ZGF0YSkKK3ZvaWQgV2ViTG9hZGVyU3RyYXRlZ3k6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
RnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyLCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50
aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2xpZW50Q3JlZGVudGlhbFBv
bGljeSBjbGllbnRDcmVkZW50aWFsUG9saWN5LCAgY29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25z
LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBvcmlnaW5hbFJlcXVlc3RIZWFkZXJzLCBSZXNvdXJjZUVy
cm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSkKIHsKICAgICBhdXRvKiB3ZWJGcmFtZUxvYWRlckNsaWVudCA9IHRvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQoZnJhbWVMb2FkZXIuY2xpZW50KCkpOwogICAgIGF1dG8qIHdlYkZyYW1lID0gd2Vi
RnJhbWVMb2FkZXJDbGllbnQgPyAmd2ViRnJhbWVMb2FkZXJDbGllbnQtPndlYkZyYW1lKCkgOiBu
dWxscHRyOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVy
U3RyYXRlZ3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29y
ay9XZWJMb2FkZXJTdHJhdGVneS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB+V2ViTG9hZGVyU3RyYXRlZ3koKSBmaW5hbDsK
ICAgICAKICAgICB2b2lkIGxvYWRSZXNvdXJjZShXZWJDb3JlOjpGcmFtZSYsIFdlYkNvcmU6OkNh
Y2hlZFJlc291cmNlJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyT3B0aW9ucyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdl
YkNvcmU6OlN1YnJlc291cmNlTG9hZGVyPiYmKT4mJikgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZyBy
ZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBX
ZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBXZWJDb3JlOjpGZXRjaE9wdGlv
bnMmLCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIGZpbmFs
OworICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpGcmFtZUxvYWRl
ciYsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3Qg
V2ViQ29yZTo6RmV0Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYsIFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PHVpbnQ4X3Q+JiBkYXRhKSBmaW5hbDsKICAgICB2b2lkIHBhZ2VMb2FkQ29tcGxldGVkKFdlYkNv
cmU6OlBhZ2UmKSBmaW5hbDsKICAgICB2b2lkIGJyb3dzaW5nQ29udGV4dFJlbW92ZWQoV2ViQ29y
ZTo6RnJhbWUmKSBmaW5hbDsKIApAQCAtMTAxLDcgKzEwMSw3IEBAIHByaXZhdGU6CiAgICAgc3Ry
dWN0IFN5bmNMb2FkUmVzdWx0IHsKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBy
ZXNwb25zZTsKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvcjsKLSAgICAgICAg
VmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIH07
CiAgICAgT3B0aW9uYWw8U3luY0xvYWRSZXN1bHQ+IHRyeUxvYWRpbmdTeW5jaHJvbm91c2x5VXNp
bmdVUkxTY2hlbWVIYW5kbGVyKFdlYkNvcmU6OkZyYW1lTG9hZGVyJiwgUmVzb3VyY2VMb2FkSWRl
bnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgU3luY0xvYWRS
ZXN1bHQgbG9hZERhdGFVUkxTeW5jaHJvbm91c2x5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2No
ZW1lSGFuZGxlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVy
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgV2ViVVJMU2No
ZW1lSGFuZGxlclByb3h5OjpzdGFydE5ld1QKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5z
dGFydExvYWRpbmcoKTsKIH0KIAotdm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OmxvYWRT
eW5jaHJvbm91c2x5KFJlc291cmNlTG9hZElkZW50aWZpZXIgbG9hZElkZW50aWZpZXIsIFdlYkZy
YW1lJiB3ZWJGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFZlY3RvcjxjaGFyPiYgZGF0
YSkKK3ZvaWQgV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5Ojpsb2FkU3luY2hyb25vdXNseShSZXNv
dXJjZUxvYWRJZGVudGlmaWVyIGxvYWRJZGVudGlmaWVyLCBXZWJGcmFtZSYgd2ViRnJhbWUsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFJlc291cmNlRXJyb3ImIGVycm9yLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgZGF0
YS5zaHJpbmsoMCk7CiAgICAgaWYgKCFtX3dlYlBhZ2Uuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6TG9hZFN5bmNocm9ub3VzVVJMU2NoZW1lVGFzayhVUkxTY2hlbWVUYXNrUGFyYW1l
dGVycyB7IG1faWRlbnRpZmllciwgbG9hZElkZW50aWZpZXIsIHJlcXVlc3QsIHdlYkZyYW1lLmlu
Zm8oKSB9KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TG9hZFN5bmNocm9ub3VzVVJMU2NoZW1l
VGFzazo6UmVwbHkocmVzcG9uc2UsIGVycm9yLCBkYXRhKSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRs
ZXJQcm94eS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydE5ld1Rhc2soV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkZXImLCBXZWJGcmFtZSYpOwogICAgIHZvaWQgc3RvcEFsbFRhc2tzKCk7CiAKLSAgICB2
b2lkIGxvYWRTeW5jaHJvbm91c2x5KFJlc291cmNlTG9hZElkZW50aWZpZXIsIFdlYkZyYW1lJiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYsIFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBWZWN0b3I8Y2hhcj4mKTsKKyAgICB2b2lkIGxv
YWRTeW5jaHJvbm91c2x5KFJlc291cmNlTG9hZElkZW50aWZpZXIsIFdlYkZyYW1lJiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImLCBWZWN0b3I8dWludDhfdD4mKTsKIAogICAgIHVpbnQ2NF90
IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KICAgICBXZWJQYWdl
JiBwYWdlKCkgeyByZXR1cm4gbV93ZWJQYWdlOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwko
cmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5p
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0
byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6CisgICAgICAgIFVwZGF0ZSB0byBtYXRjaCBuZXcgc2ln
bmF0dXJlLiBjaGFyIC0+IHVpbnQ4X3QuCisKIDIwMjEtMDUtMTQgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUo
KSB0byBGaWxlU3lzdGVtOjpmaWxlU2l6ZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L1dl
YkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVT
dXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
Nyw3ICsxMDcsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bG9hZFJlc291CiAg
ICAgfSk7CiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciwgdW5zaWduZWQgbG9uZywgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25z
dCBGZXRjaE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IEhUVFBIZWFkZXJNYXAmLCBSZXNvdXJjZUVy
cm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0
YSkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciwgdW5zaWduZWQgbG9uZywgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBGZXRjaE9w
dGlvbnMmIG9wdGlvbnMsIGNvbnN0IEhUVFBIZWFkZXJNYXAmLCBSZXNvdXJjZUVycm9yJiBlcnJv
ciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsK
ICAgICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShmcmFtZUxvYWRl
ci5uZXR3b3JraW5nQ29udGV4dCgpLCByZXF1ZXN0LCBvcHRpb25zLmNyZWRlbnRpYWxzID09IEZl
dGNoT3B0aW9uczo6Q3JlZGVudGlhbHM6Ok9taXQgPyBTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6
RG9Ob3RVc2UgOiBTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlLCBlcnJvciwgcmVzcG9uc2Us
IGRhdGEpOwogfQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5
L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9h
ZFNjaGVkdWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAg
ICBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKIAogICAgIHZvaWQgbG9hZFJlc291cmNlKFdl
YkNvcmU6OkZyYW1lJiwgV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2UmLCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI+JiYpPiYm
KSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6RnJh
bWVMb2FkZXImLCB1bnNpZ25lZCBsb25nLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBXZWJDb3JlOjpGZXRjaE9w
dGlvbnMmLCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiwgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mKSBmaW5hbDsK
KyAgICB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6RnJhbWVMb2FkZXIm
LCB1bnNpZ25lZCBsb25nLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3Jl
OjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBXZWJDb3JlOjpGZXRjaE9wdGlvbnMmLCBj
b25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mKSBmaW5hbDsKICAgICB2
b2lkIHBhZ2VMb2FkQ29tcGxldGVkKFdlYkNvcmU6OlBhZ2UmKSBmaW5hbDsKICAgICB2b2lkIGJy
b3dzaW5nQ29udGV4dFJlbW92ZWQoV2ViQ29yZTo6RnJhbWUmKSBmaW5hbDsKIApJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MjEtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0
ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdG8gbWF0Y2ggbW9yZSBtb2Rlcm4gV2ViS2l0IGNv
bnZlbnRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjU5MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9t
ZUNsaWVudDo6d3JhcENyeXB0b0tleSBjb25zdCk6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6
OnVud3JhcENyeXB0b0tleSBjb25zdCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IE9wdGlv
bmFsIHJldHVybmluZyBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW06CisgICAgICAgIChXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6c2F2ZSk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IE9wdGlv
bmFsIHJldHVybmluZyBiYXNlNjREZWNvZGUoKS4KKwogMjAyMS0wNS0xNSAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBEZWxldGUgV2ViU1FMIGNvZGUgZnJvbSBX
ZWJLaXQyCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEwNjYsMjggKzEwNjYsMzQgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6
OmV4aXRGdWxsU2NyZWVuRm9yRQogCiBib29sIFdlYkNocm9tZUNsaWVudDo6d3JhcENyeXB0b0tl
eShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiB3cmFwcGVkS2V5
KSBjb25zdAogewotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAgICAgU0VMIHNlbGVj
dG9yID0gQHNlbGVjdG9yKHdlYkNyeXB0b01hc3RlcktleUZvcldlYlZpZXc6KTsKICAgICBpZiAo
W1ttX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkgewog
ICAgICAgICBOU0RhdGEgKmtleURhdGEgPSBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIHNlbGVj
dG9yKTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICAgICAgICAgbWFzdGVy
S2V5LmFwcGVuZChzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDx2b2lkKj4oW2tleURh
dGEgYnl0ZXNdKSksIFtrZXlEYXRhIGxlbmd0aF0pOwotICAgIH0gZWxzZSBpZiAoIWdldERlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKKyAgICAgICAgcmV0dXJuIHdyYXBTZXJp
YWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwga2V5LCB3cmFwcGVkS2V5KTsKKyAgICB9CisgICAg
CisgICAgYXV0byBtYXN0ZXJLZXkgPSBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAg
aWYgKCFtYXN0ZXJLZXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB3cmFw
U2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIGtleSwgd3JhcHBlZEtleSk7CisgICAgcmV0
dXJuIHdyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KFdURk1vdmUoKm1hc3RlcktleSksIGtleSwgd3Jh
cHBlZEtleSk7CiB9CiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojp1bndyYXBDcnlwdG9LZXkoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiB3cmFwcGVkS2V5LCBWZWN0b3I8dWludDhfdD4mIGtleSkgY29u
c3QKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogICAgIFNFTCBzZWxlY3RvciA9
IEBzZWxlY3Rvcih3ZWJDcnlwdG9NYXN0ZXJLZXlGb3JXZWJWaWV3Oik7CiAgICAgaWYgKFtbbV93
ZWJWaWV3IFVJRGVsZWdhdGVdIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pIHsKKyAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICAgICAgICAgTlNEYXRhICprZXlEYXRhID0g
Q2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBzZWxlY3Rvcik7CiAgICAgICAgIG1hc3RlcktleS5h
cHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KFtrZXlEYXRhIGJ5
dGVzXSkpLCBba2V5RGF0YSBsZW5ndGhdKTsKLSAgICB9IGVsc2UgaWYgKCFnZXREZWZhdWx0V2Vi
Q3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCB3cmFwcGVkS2V5
LCBrZXkpOworICAgIH0KIAotICAgIHJldHVybiB1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1h
c3RlcktleSwgd3JhcHBlZEtleSwga2V5KTsKKyAgICBhdXRvIG1hc3RlcktleSA9IGRlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBpZiAoIW1hc3RlcktleSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KFdURk1vdmUoKm1h
c3RlcktleSksIHdyYXBwZWRLZXksIGtleSk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC00MDgsMTAgKzQwOCwxMCBAQCB2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzYXZl
KGNvCiAgICAgICAgIG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dlc3RlZFVSTENv
cHksIGFjdHVhbFVSTCk7CiAKICAgICAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAg
ICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250
ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICAgICAgYXV0byBk
ZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50LCBCYXNlNjREZWNvZGVPcHRpb25zOjpW
YWxpZGF0ZVBhZGRpbmcpOworICAgICAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVu
dCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5n
dGg6b3V0LnNpemUoKV0pOworICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRl
bnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmRlY29kZWREYXRhLT5k
YXRhKCkgbGVuZ3RoOmRlY29kZWREYXRhLT5zaXplKCldKTsKICAgICAgICAgICAgIFtkYXRhQ29u
dGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2Fs
bHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwpJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
Mjc3Njk3KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMjEtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdG8gbWF0Y2ggbW9yZSBtb2Rlcm4gV2Vi
S2l0IGNvbnZlbnRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjU5MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRDUFNlcnZlcjo6c3RhcnRTZWN1cmVDb25uZWN0aW9uKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRDUFNlcnZlcjo6dGVzdENlcnRpZmljYXRlKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRDUFNlcnZlcjo6dGVzdFByaXZhdGVLZXkpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVT
VCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1ByaXZhdGVD
bGlja01lYXN1cmVtZW50Q29jb2EubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbToK
KyAgICAgICAgKHRlc3RJZGVudGl0eTIpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvRXZlbnRBdHRyaWJ1dGlvbi5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdlbmVyYXRv
ci5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29u
bmVjdGlvbjo6d2ViU29ja2V0SGFuZHNoYWtlKToKKwogMjAyMS0wNS0xOCAgQWRpdHlhIEtlZXJ0
aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBUaXRsZWJhciBzZXBh
cmF0b3IgZG9lc24ndCBzaG93IHdoZW4gV0tXZWJWaWV3IGlzIHNjcm9sbGVkCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UQ1BTZXJ2ZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1RDUFNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw5ICsxNTUsOCBAQCB2
b2lkIFRDUFNlcnZlcjo6c3RhcnRTZWN1cmVDb25uZWN0aW9uKFNvCiAgICAgImxkWTlhdmNUR1N3
YndvaXVJcXYwalRMMWZIRm56eTNSSE1MRGgrTHB2b2xjNURTclNKSENQNVd1SzBlZUpYaHIiCiAg
ICAgIlQ1b1FwSEw5ei9jQ0RMQUtDS1JhNHVWMGZoRWRPV0JxeVI5cDh5NWpKdHllNzJ0NkN1RlVW
NWlxY3BGNEJINGYiCiAgICAgImoyVk5Id3NTckp3a0Q0UVVHbFV0SDd2d25RbXlDRnhaTW1XQUpn
PT0iKTsKLSAgICBWZWN0b3I8dWludDhfdD4gY2VydERFUjsKLSAgICBiYXNlNjREZWNvZGUoY2Vy
dFBFTSwgY2VydERFUiwgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsK
LSAgICBzc2w6OnVuaXF1ZV9wdHI8Q1JZUFRPX0JVRkZFUj4gY2VydChDUllQVE9fQlVGRkVSX25l
dyhjZXJ0REVSLmRhdGEoKSwgY2VydERFUi5zaXplKCksIG51bGxwdHIpKTsKKyAgICBhdXRvIGNl
cnRERVIgPSBiYXNlNjREZWNvZGUoY2VydFBFTSk7CisgICAgc3NsOjp1bmlxdWVfcHRyPENSWVBU
T19CVUZGRVI+IGNlcnQoQ1JZUFRPX0JVRkZFUl9uZXcoY2VydERFUi0+ZGF0YSgpLCBjZXJ0REVS
LT5zaXplKCksIG51bGxwdHIpKTsKICAgICBBU1NFUlQoY2VydCk7CiAKICAgICAvLyBUaGlzIGlz
IGEgdGVzdCBrZXkgZnJvbSBCb3JpbmdTU0wuCkBAIC00MTIsOSArNDExLDggQEAgVmVjdG9yPHVp
bnQ4X3Q+IFRDUFNlcnZlcjo6dGVzdENlcnRpZmljYQogICAgICJHM1BGblliVzh1ckgwTlNKRy9X
Ky85REErWTdBYTBjczRUUHB1QkdaME5VMVc5NE9vQ01vNGxrTzZIL3k2TGV1IgogICAgICIzdmpa
RDN5OWtaazdtcmU5WEh3a0k4TWRLNXM9Iik7CiAgICAgCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvcjsKLSAgICBiYXNlNjREZWNvZGUocGVtRW5jb2RlZENlcnRpZmljYXRlLCB2ZWN0b3IsIFdU
Rjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6QmFzZTY0RGVmYXVsdCk7Ci0gICAgcmV0dXJuIHZlY3Rv
cjsKKyAgICBhdXRvIGRlY29kZWRDZXJ0aWZpY2F0ZSA9IGJhc2U2NERlY29kZShwZW1FbmNvZGVk
Q2VydGlmaWNhdGUpOworICAgIHJldHVybiBXVEZNb3ZlKCpkZWNvZGVkQ2VydGlmaWNhdGUpOwog
fQogCiBWZWN0b3I8dWludDhfdD4gVENQU2VydmVyOjp0ZXN0UHJpdmF0ZUtleSgpCkBAIC00NzEs
OSArNDY5LDggQEAgVmVjdG9yPHVpbnQ4X3Q+IFRDUFNlcnZlcjo6dGVzdFByaXZhdGVLZQogICAg
ICJkRU9idmNwU2hQMjJJdE9WalNhbXBSdUF1UkcyNlplbUViR0NJM0o2TXF4M3k2bSs2SHd1bHRz
Z3RkekRnckZlIgogICAgICJxSmZVOGJiZGJ1MnBpNDdZNEZkSkswSExmZmw1Unc9PSIpOwogCi0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsKLSAgICBiYXNlNjREZWNvZGUocGVtRW5jb2RlZFBy
aXZhdGVLZXksIHZlY3RvciwgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0
KTsKLSAgICByZXR1cm4gdmVjdG9yOworICAgIGF1dG8gZGVjb2RlZFByaXZhdGVLZXkgPSBiYXNl
NjREZWNvZGUocGVtRW5jb2RlZFByaXZhdGVLZXkpOworICAgIHJldHVybiBXVEZNb3ZlKCpkZWNv
ZGVkUHJpdmF0ZUtleSk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcAkocmV2
aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0lTT0Jv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDExICs0MiwxMSBAQCBzdGF0aWMgY29uc3QgY2hh
ciogYmFzZTY0RW5jb2RlZFNpbmZXaXRoCiAKIFRFU1QoSVNPQm94LCBJU09Qcm90ZWN0aW9uU2No
ZW1lSW5mb0JveCkKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gc2luZkFycmF5OwotICAgIEFTU0VS
VF9UUlVFKGJhc2U2NERlY29kZShTdHJpbmdWaWV3KGJhc2U2NEVuY29kZWRTaW5mV2l0aEtleUlE
MyksIHNpbmZBcnJheSkpOwotICAgIEFTU0VSVF9FUSg5N1VMLCBzaW5mQXJyYXkuc2l6ZSgpKTsK
KyAgICBhdXRvIHNpbmZBcnJheSA9IGJhc2U2NERlY29kZShTdHJpbmdWaWV3KGJhc2U2NEVuY29k
ZWRTaW5mV2l0aEtleUlEMykpOworICAgIEFTU0VSVF9UUlVFKHNpbmZBcnJheSk7CisgICAgQVNT
RVJUX0VRKDk3VUwsIHNpbmZBcnJheS0+c2l6ZSgpKTsKIAotICAgIGF1dG8gdmlldyA9IEpTQzo6
RGF0YVZpZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKHNpbmZBcnJheS5kYXRhKCksIHNp
bmZBcnJheS5zaXplKCkpLCAwLCBzaW5mQXJyYXkuc2l6ZSgpKTsKKyAgICBhdXRvIHZpZXcgPSBK
U0M6OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShzaW5mQXJyYXktPmRhdGEo
KSwgc2luZkFycmF5LT5zaXplKCkpLCAwLCBzaW5mQXJyYXktPnNpemUoKSk7CiAKICAgICBJU09Q
cm90ZWN0aW9uU2NoZW1lSW5mb0JveCBzaW5mQm94OwogICAgIEFTU0VSVF9UUlVFKHNpbmZCb3gu
cmVhZCh2aWV3KSk7CkBAIC03OCwxMSArNzgsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGJhc2U2
NEVuY29kZWRQc3NoV2l0aAogCiBURVNUKElTT0JveCwgSVNPRmFpclBsYXlTdHJlYW1pbmdQc3No
Qm94KQogewotICAgIFZlY3Rvcjx1aW50OF90PiBwc3NoQXJyYXk7Ci0gICAgQVNTRVJUX1RSVUUo
YmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2RlZFBzc2hXaXRoQXNzZXRJZCksIHBz
c2hBcnJheSkpOwotICAgIEFTU0VSVF9FUSgxNzZVTCwgcHNzaEFycmF5LnNpemUoKSk7CisgICAg
YXV0byBwc3NoQXJyYXkgPSBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNvZGVkUHNz
aFdpdGhBc3NldElkKSk7CisgICAgQVNTRVJUX1RSVUUocHNzaEFycmF5KTsKKyAgICBBU1NFUlRf
RVEoMTc2VUwsIHBzc2hBcnJheS0+c2l6ZSgpKTsKIAotICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0
YVZpZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKHBzc2hBcnJheS5kYXRhKCksIHBzc2hB
cnJheS5zaXplKCkpLCAwLCBwc3NoQXJyYXkuc2l6ZSgpKTsKKyAgICBhdXRvIHZpZXcgPSBKU0M6
OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShwc3NoQXJyYXktPmRhdGEoKSwg
cHNzaEFycmF5LT5zaXplKCkpLCAwLCBwc3NoQXJyYXktPnNpemUoKSk7CiAKICAgICBJU09GYWly
UGxheVN0cmVhbWluZ1Bzc2hCb3ggcHNzaEJveDsKIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1ByaXZh
dGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENv
Y29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIFRFU1QoUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQsIFZhbGlkQmxpbmQKICAgICBhdXRvICpuc1Nwa2lEYXRhID0gKF9fYnJpZGdl
IE5TRGF0YSAqKXNwa2lEYXRhLmdldCgpOwogCiAgICAgLy8gQ29udGludWUgdGhlIHRlc3QuCi0g
ICAgRVhQRUNUX1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVVubGlua2FibGVUb2tl
bihXVEY6OmJhc2U2NFVSTEVuY29kZShuc1Nwa2lEYXRhLmJ5dGVzLCBuc1Nwa2lEYXRhLmxlbmd0
aCkpKTsKKyAgICBFWFBFQ1RfVFJVRShwY20uY2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5r
YWJsZVRva2VuKG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChuc1Nwa2lEYXRhLmJ5dGVzLCBu
c1Nwa2lEYXRhLmxlbmd0aCkpKSk7CiAgICAgYXV0byBzb3VyY2VTZWNyZXRUb2tlbiA9IHBjbS50
b2tlblNpZ25hdHVyZUpTT04oKTsKICAgICBFWFBFQ1RfRVEoc291cmNlU2VjcmV0VG9rZW4tPmFz
T2JqZWN0KCktPnNpemUoKSwgNHVsKTsKICAgICBFWFBFQ1RfU1RSRVEoc291cmNlU2VjcmV0VG9r
ZW4tPmdldFN0cmluZygic291cmNlX2VuZ2FnZW1lbnRfdHlwZSJfcykudXRmOCgpLmRhdGEoKSwg
ImNsaWNrIik7CkBAIC05MCwxNCArOTAsMTMgQEAgVEVTVChQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dCwgVmFsaWRCbGluZAogICAgIEVYUEVDVF9FUShzb3VyY2VTZWNyZXRUb2tlbi0+Z2V0SW50ZWdl
cigidmVyc2lvbiJfcyksIDIpOwogCiAgICAgLy8gR2VuZXJhdGUgdGhlIHNpZ25hdHVyZS4KLSAg
ICBWZWN0b3I8dWludDhfdD4gYmxpbmRlZE1lc3NhZ2U7Ci0gICAgYmFzZTY0VVJMRGVjb2RlKHNv
dXJjZVNlY3JldFRva2VuLT5nZXRTdHJpbmcoInNvdXJjZV9zZWNyZXRfdG9rZW4iX3MpLCBibGlu
ZGVkTWVzc2FnZSk7CisgICAgYXV0byBibGluZGVkTWVzc2FnZSA9IGJhc2U2NFVSTERlY29kZShz
b3VyY2VTZWNyZXRUb2tlbi0+Z2V0U3RyaW5nKCJzb3VyY2Vfc2VjcmV0X3Rva2VuIl9zKSk7CiAK
LSAgICBhdXRvIGJsaW5kZWRTaWduYXR1cmUgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxv
Y10gaW5pdFdpdGhMZW5ndGg6IG1vZHVsdXNOQnl0ZXNdKTsKLSAgICBjY3JzYWJzc2Ffc2lnbl9i
bGluZGVkX21lc3NhZ2UoY2lwaGVyc3VpdGUsIHJzYVByaXZhdGVLZXksIGJsaW5kZWRNZXNzYWdl
LmRhdGEoKSwgYmxpbmRlZE1lc3NhZ2Uuc2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50OF90ICo+KFti
bGluZGVkU2lnbmF0dXJlIG11dGFibGVCeXRlc10pLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhd
LCBybmcpOworICAgIGF1dG8gYmxpbmRlZFNpZ25hdHVyZSA9IGFkb3B0TlMoW1tOU011dGFibGVE
YXRhIGFsbG9jXSBpbml0V2l0aExlbmd0aDptb2R1bHVzTkJ5dGVzXSk7CisgICAgY2Nyc2Fic3Nh
X3NpZ25fYmxpbmRlZF9tZXNzYWdlKGNpcGhlcnN1aXRlLCByc2FQcml2YXRlS2V5LCBibGluZGVk
TWVzc2FnZS0+ZGF0YSgpLCBibGluZGVkTWVzc2FnZS0+c2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50
OF90ICo+KFtibGluZGVkU2lnbmF0dXJlIG11dGFibGVCeXRlc10pLCBbYmxpbmRlZFNpZ25hdHVy
ZSBsZW5ndGhdLCBybmcpOwogCiAgICAgLy8gQ29udGludWUgdGhlIHRlc3QuCi0gICAgRVhQRUNU
X1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVNlY3JldFRva2VuKFdURjo6YmFzZTY0
VVJMRW5jb2RlKFtibGluZGVkU2lnbmF0dXJlIGJ5dGVzXSwgW2JsaW5kZWRTaWduYXR1cmUgbGVu
Z3RoXSkpKTsKKyAgICBFWFBFQ1RfVFJVRShwY20uY2FsY3VsYXRlQW5kVXBkYXRlU291cmNlU2Vj
cmV0VG9rZW4obWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKFtibGluZGVkU2lnbmF0dXJlIGJ5
dGVzXSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSkpKSk7CiAgICAgYXV0byYgcGVyc2lzdGVu
dFRva2VuID0gcGNtLnNvdXJjZVVubGlua2FibGVUb2tlbigpOwogICAgIEVYUEVDVF9UUlVFKHBl
cnNpc3RlbnRUb2tlbik7CiAgICAgRVhQRUNUX0ZBTFNFKHBlcnNpc3RlbnRUb2tlbi0+dG9rZW5C
YXNlNjRVUkwuaXNFbXB0eSgpKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jb2NvYS9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvU2VyaWFsaXplZENyeXB0b0tleVdy
YXAubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jb2NvYS9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDQsMzcgKzQ0LDM3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1URVNUX0YoU2VyaWFsaXplZENy
eXB0b0tleVdyYXBUZXN0LCBHZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KQorVEVTVF9GKFNl
cmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVzdCwgRGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSkKIHsK
LSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5MTsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3Jl
OjpnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleTEpKTsKKyAgICBhdXRvIG1h
c3RlcktleTEgPSBXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQ
RUNUX1RSVUUobWFzdGVyS2V5MSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5MjsK
LSAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1h
c3RlcktleTIpKTsKKyAgICBhdXRvIG1hc3RlcktleTIgPSBXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5
cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5Mik7CiAKICAgICBFWFBF
Q1RfVFJVRShtYXN0ZXJLZXkxID09IG1hc3RlcktleTIpOwogfQogCiBURVNUX0YoU2VyaWFsaXpl
ZENyeXB0b0tleVdyYXBUZXN0LCBEZWxldGVEZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KQogewot
ICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXkxOwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6
OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5MSkpOworICAgIGF1dG8gbWFz
dGVyS2V5MSA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBF
Q1RfVFJVRShtYXN0ZXJLZXkxKTsKICAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpkZWxldGVEZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkpOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3Rlcktl
eTI7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3Rlcktl
eShtYXN0ZXJLZXkyKSk7CisgICAgYXV0byBtYXN0ZXJLZXkyID0gV2ViQ29yZTo6ZGVmYXVsdFdl
YkNyeXB0b01hc3RlcktleSgpOworICAgIEVYUEVDVF9UUlVFKG1hc3RlcktleTIpOwogCiAgICAg
RVhQRUNUX1RSVUUobWFzdGVyS2V5MSAhPSBtYXN0ZXJLZXkyKTsKIH0KIAogVEVTVF9GKFNlcmlh
bGl6ZWRDcnlwdG9LZXlXcmFwVGVzdCwgU2VyaWFsaXplZENyeXB0b0tleVdyYXBVbndyYXApCiB7
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3Jl
OjpnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkpOworICAgIGF1dG8gbWFz
dGVyS2V5ID0gV2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIEVYUEVD
VF9UUlVFKG1hc3RlcktleSk7CiAKICAgICBWZWN0b3I8dWludDhfdD4gY3J5cHRvS2V5KDE2LCAx
KTsKICAgICBWZWN0b3I8dWludDhfdD4gd3JhcHBlZEtleTsKLSAgICBFWFBFQ1RfVFJVRShXZWJD
b3JlOjp3cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIGNyeXB0b0tleSwgd3JhcHBl
ZEtleSkpOworICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5
KCptYXN0ZXJLZXksIGNyeXB0b0tleSwgd3JhcHBlZEtleSkpOwogICAgIEVYUEVDVF9UUlVFKGNy
eXB0b0tleSAhPSB3cmFwcGVkS2V5KTsKICAgICAvLyBlbnN1cmUgd3JhcHBlZEtleSBkb2Vzbid0
IGNvbnRhaW4gY3J5cHRvS2V5CiAgICAgYm9vbCBub3RDb250YWluZWQgPSB0cnVlOwpAQCAtOTAs
NyArOTAsNyBAQCBURVNUX0YoU2VyaWFsaXplZENyeXB0b0tleVdyYXBUZXN0LCBTZXJpCiAgICAg
RVhQRUNUX1RSVUUobm90Q29udGFpbmVkKTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB1bndyYXBw
ZWRLZXk7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6dW53cmFwU2VyaWFsaXplZENyeXB0b0tl
eShtYXN0ZXJLZXksIHdyYXBwZWRLZXksIHVud3JhcHBlZEtleSkpOworICAgIEVYUEVDVF9UUlVF
KFdlYkNvcmU6OnVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoKm1hc3RlcktleSwgd3JhcHBlZEtl
eSwgdW53cmFwcGVkS2V5KSk7CiAgICAgRVhQRUNUX1RSVUUodW53cmFwcGVkS2V5ID09IGNyeXB0
b0tleSk7CiB9CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
Q2hhbGxlbmdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvQ2hhbGxlbmdlLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTc2LDEzICsxNzYsMTAgQEAgUmV0YWluUHRyPFNlY0lkZW50aXR5UmVmPiB0ZXN0SWRlbnRpdHky
KAogICAgICJKQUgybnhLR3VxdEFLMmhXYkFDdTYxUlQ1Z0FxQXYvaEI5SlluYzJPaVEyVm1qWWtP
azJHRWRJam4weFNnWDdXIgogICAgICJtSS9oSGJ4S01HM1JrdjlxMUN4K1dCL3YxdDg9Iik7CiAK
LSAgICBWZWN0b3I8dWludDhfdD4gcHJpdmF0ZUtleUJ5dGVzOwotICAgIGJhc2U2NERlY29kZShw
ZW1FbmNvZGVkUHJpdmF0ZUtleSwgcHJpdmF0ZUtleUJ5dGVzLCBXVEY6OkJhc2U2NERlY29kZU9w
dGlvbnM6OkJhc2U2NERlZmF1bHQpOworICAgIGF1dG8gcHJpdmF0ZUtleUJ5dGVzID0gYmFzZTY0
RGVjb2RlKHBlbUVuY29kZWRQcml2YXRlS2V5KTsKKyAgICBhdXRvIGNlcnRpZmljYXRlQnl0ZXMg
PSBiYXNlNjREZWNvZGUocGVtRW5jb2RlZENlcnRpZmljYXRlKTsKIAotICAgIFZlY3Rvcjx1aW50
OF90PiBjZXJ0aWZpY2F0ZUJ5dGVzOwotICAgIGJhc2U2NERlY29kZShwZW1FbmNvZGVkQ2VydGlm
aWNhdGUsIGNlcnRpZmljYXRlQnl0ZXMsIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6QmFzZTY0
RGVmYXVsdCk7Ci0KLSAgICByZXR1cm4gY3JlYXRlVGVzdElkZW50aXR5KHByaXZhdGVLZXlCeXRl
cywgY2VydGlmaWNhdGVCeXRlcyk7CisgICAgcmV0dXJuIGNyZWF0ZVRlc3RJZGVudGl0eShXVEZN
b3ZlKCpwcml2YXRlS2V5Qnl0ZXMpLCBXVEZNb3ZlKCpjZXJ0aWZpY2F0ZUJ5dGVzKSk7CiB9CiAK
IHN0YXRpYyBSZXRhaW5QdHI8TlNVUkxDcmVkZW50aWFsPiBjcmVkZW50aWFsV2l0aElkZW50aXR5
KCkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRXZlbnRBdHRy
aWJ1dGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0V2ZW50QXR0cmlidXRpb24ubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRXZlbnRBdHRyaWJ1dGlvbi5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTg0LDEzICsxODQsMTIgQEAgVEVTVChFdmVudEF0dHJpYnV0aW9uLCBGcmF1
ZFByZXZlbnRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGVuZCA9IHJlcXVlc3Qy
U3RyaW5nLmZpbmQoJyInLCBzdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRv
a2VuID0gcmVxdWVzdDJTdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBibGluZGVkTWVzc2FnZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NFVSTERlY29kZSh0b2tlbiwgYmxpbmRlZE1lc3Nh
Z2UpOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBibGluZGVkTWVzc2FnZSA9IGJhc2U2
NFVSTERlY29kZSh0b2tlbik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj
dCBjY3JzYWJzc2FfY2lwaGVyc3VpdGUgKmNpcGhlcnN1aXRlID0gJmNjcnNhYnNzYV9jaXBoZXJz
dWl0ZV9yc2E0MDk2X3NoYTM4NDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gYmxpbmRl
ZFNpZ25hdHVyZSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0aExlbmd0
aDogbW9kdWx1c05CeXRlc10pOwotICAgICAgICAgICAgICAgICAgICAgICAgY2Nyc2Fic3NhX3Np
Z25fYmxpbmRlZF9tZXNzYWdlKGNpcGhlcnN1aXRlLCByc2FQcml2YXRlS2V5LCBibGluZGVkTWVz
c2FnZS5kYXRhKCksIGJsaW5kZWRNZXNzYWdlLnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAq
PihbYmxpbmRlZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVu
Z3RoXSwgcm5nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5saW5rYWJsZVRva2Vu
ID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoW2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBbYmxpbmRl
ZFNpZ25hdHVyZSBsZW5ndGhdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gYmxpbmRl
ZFNpZ25hdHVyZSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0aExlbmd0
aDptb2R1bHVzTkJ5dGVzXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjY3JzYWJzc2Ffc2ln
bl9ibGluZGVkX21lc3NhZ2UoY2lwaGVyc3VpdGUsIHJzYVByaXZhdGVLZXksIGJsaW5kZWRNZXNz
YWdlLT5kYXRhKCksIGJsaW5kZWRNZXNzYWdlLT5zaXplKCksIHN0YXRpY19jYXN0PHVpbnQ4X3Qg
Kj4oW2JsaW5kZWRTaWduYXR1cmUgbXV0YWJsZUJ5dGVzXSksIFtibGluZGVkU2lnbmF0dXJlIGxl
bmd0aF0sIHJuZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVubGlua2FibGVUb2tl
biA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChbYmxpbmRlZFNpZ25hdHVyZSBieXRlc10s
IFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0pKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRXhhbXBsZSByZXNwb25zZTogeyAidW5saW5rYWJsZV90b2tlbiI6ICJBQkNEIiB9LiAiQUJD
RCIgc2hvdWxkIGJlIEJhc2U2NFVSTCBlbmNvZGVkLgogICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byByZXNwb25zZSA9IG1ha2VTdHJpbmcoIkhUVFAvMS4xIDIwMCBPS1xyXG4iCkBAIC0yMjIs
MTggKzIyMSwxNiBAQCBURVNUKEV2ZW50QXR0cmlidXRpb24sIEZyYXVkUHJldmVudGlvbikKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArPSBrZXkubGVuZ3Ro
KCkgKyAzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZW5k
ID0gcmVxdWVzdDRTdHJpbmcuZmluZCgnIicsIHN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvIHRva2VuID0gcmVxdWVzdDRTdHJpbmcuc3Vic3RyaW5n
KHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRva2VuVmVjdG9yOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJhc2U2NFVSTERlY29kZSh0b2tlbiwgdG9rZW5WZWN0b3IpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdG9rZW5EYXRhID0g
YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczp0b2tlblZlY3Rvci5kYXRhKCkg
bGVuZ3RoOnRva2VuVmVjdG9yLnNpemUoKV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gdG9rZW5WZWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUodG9rZW4pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdG9rZW5EYXRhID0g
YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczp0b2tlblZlY3Rvci0+ZGF0YSgp
IGxlbmd0aDp0b2tlblZlY3Rvci0+c2l6ZSgpXSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrZXkgPSBTdHJpbmcoInNvdXJjZV9zZWNyZXRfdG9rZW5fc2lnbmF0
dXJlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBy
ZXF1ZXN0NFN0cmluZy5maW5kKGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnQgKz0ga2V5Lmxlbmd0aCgpICsgMzsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQgPSByZXF1ZXN0NFN0cmluZy5maW5kKCciJywgc3RhcnQp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2lnbmF0dXJl
ID0gcmVxdWVzdDRTdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNpZ25hdHVy
ZVZlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjRV
UkxEZWNvZGUoc2lnbmF0dXJlLCBzaWduYXR1cmVWZWN0b3IpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2lnbmF0dXJlRGF0YSA9IGFkb3B0TlMoW1tOU0Rh
dGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2lnbmF0dXJlVmVjdG9yLmRhdGEoKSBsZW5ndGg6c2ln
bmF0dXJlVmVjdG9yLnNpemUoKV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gc2lnbmF0dXJlVmVjdG9yID0gYmFzZTY0VVJMRGVjb2RlKHNpZ25hdHVyZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzaWduYXR1cmVE
YXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzaWduYXR1cmVWZWN0
b3ItPmRhdGEoKSBsZW5ndGg6c2lnbmF0dXJlVmVjdG9yLT5zaXplKCldKTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKFNlY0tleVZlcmlmeVNp
Z25hdHVyZShzZWNLZXkuZ2V0KCksIGtTZWNLZXlBbGdvcml0aG1SU0FTaWduYXR1cmVNZXNzYWdl
UFNTU0hBMzg0LCAoX19icmlkZ2UgQ0ZEYXRhUmVmKXRva2VuRGF0YS5nZXQoKSwgKF9fYnJpZGdl
IENGRGF0YVJlZilzaWduYXR1cmVEYXRhLmdldCgpLCBOVUxMKSk7CiAKSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdlbmVyYXRvci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW0JKHJldmlzaW9u
IDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdlbmVyYXRv
ci5tbQkod29ya2luZyBjb3B5KQpAQCAtOTgsOCArOTgsOCBAQCBURVNUX0YoU1NMS2V5R2VuZXJh
dG9yVGVzdCwgRGVmYXVsdFRlc3QpCiAgICAgY2hhciBjaGFsbGVuZ2VbXSA9ICIwMTIzNDU2Nzg5
IjsKICAgICBhdXRvIHJhd1Jlc3VsdCA9IFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxs
ZW5nZVN0cmluZygwLCBjaGFsbGVuZ2UsIHVybCk7CiAgICAgQVNTRVJUX0ZBTFNFKHJhd1Jlc3Vs
dC5pc0VtcHR5KCkpOwotICAgIFZlY3Rvcjx1aW50OF90PiBkZXJSZXN1bHQ7Ci0gICAgQVNTRVJU
X1RSVUUoYmFzZTY0RGVjb2RlKHJhd1Jlc3VsdCwgZGVyUmVzdWx0KSk7CisgICAgYXV0byBkZXJS
ZXN1bHQgPSBiYXNlNjREZWNvZGUocmF3UmVzdWx0KTsKKyAgICBBU1NFUlRfVFJVRShkZXJSZXN1
bHQpOwogCiAgICAgU2VjQXNuMUNvZGVyUmVmIGNvZGVyID0gbnVsbHB0cjsKICAgICBBU1NFUlRf
RVEoZXJyU2VjU3VjY2VzcywgU2VjQXNuMUNvZGVyQ3JlYXRlKCZjb2RlcikpOwpAQCAtMTA4LDcg
KzEwOCw3IEBAIFRFU1RfRihTU0xLZXlHZW5lcmF0b3JUZXN0LCBEZWZhdWx0VGVzdCkKICAgICB9
KTsKIAogICAgIFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSBkZWNvZGVkUmVzdWx0IHsgfTsK
LSAgICBTZWNBc24xSXRlbSBkZXJSZXN1bHRJdGVtIHsgZGVyUmVzdWx0LnNpemUoKSwgZGVyUmVz
dWx0LmRhdGEoKSB9OworICAgIFNlY0FzbjFJdGVtIGRlclJlc3VsdEl0ZW0geyBkZXJSZXN1bHQt
PnNpemUoKSwgZGVyUmVzdWx0LT5kYXRhKCkgfTsKICAgICBBU1NFUlRfRVEoZXJyU2VjU3VjY2Vz
cywgU2VjQXNuMURlY29kZURhdGEoY29kZXIsICZkZXJSZXN1bHRJdGVtLCBzaWduZWRQdWJsaWNL
ZXlBbmRDaGFsbGVuZ2VUZW1wbGF0ZSwgJmRlY29kZWRSZXN1bHQpKTsKIAogICAgIC8vIENoZWNr
IGNoYWxsZW5nZQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQko
cmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVy
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDQsNyArMzQ0LDcgQEAgdm9pZCBDb25uZWN0aW9uOjp3
ZWJTb2NrZXRIYW5kc2hha2UoQ29tcAogICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNv
Y2tldEtleUdVSUQpKTsKICAgICAgICAgICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgICAgICAg
ICAgc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNv
ZGUoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtl
U3RyaW5nKGJhc2U2NEVuY29kZWQoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKSk7CiAgICAg
ICAgIH07CiAKICAgICAgICAgY29ubmVjdGlvbi5zZW5kKEhUVFBSZXNwb25zZSgxMDEsIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429007</attachid>
            <date>2021-05-18 17:41:10 -0700</date>
            <delta_ts>2021-05-18 17:42:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210518174109.patch</filename>
            <type>text/plain</type>
            <size>190319</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIHd0Zi90ZXh0
L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVybmFsKToKKyAgICAg
ICAgKFdURjo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRV
UkxEZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5oOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgor
ICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNv
ZGUpOgorICAgICAgICAoV1RGOjppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdURjo6Y2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNl
NjRFbmNvZGVkKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlZCk6CisgICAgICAgIChX
VEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpTdHJpbmdUeXBlQWRh
cHRlcik6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRp
b24+OjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNl
NjRTcGVjaWZpY2F0aW9uPjo6aXM4Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlw
ZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46OndyaXRlVG8gY29uc3QpOgorCiAyMDIxLTA1
LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXpl
IC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dURi93
dGYvdGV4dC9CYXNlNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAg
IENvcHlyaWdodCAoQykgMjAwMC0yMDAxIERhd2l0IEFsZW1heWVodSA8YWRhd2l0QGtkZS5vcmc+
CiAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9y
Zz4KLSAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5z
dGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMTMgKzI1
LDE2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbmNsdWRlIDxsaW1pdHMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNvbnN0IGNoYXIgbm9uQWxwaGFiZXQgPSAtMTsK
IAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RW5jTWFwWzY0XSA9IHsKK3N0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgZW5jb2RlTWFwU2l6ZSA9IDY0Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBkZWNvZGVNYXBTaXplID0gMTI4OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRFbmNNYXBb
ZW5jb2RlTWFwU2l6ZV0gPSB7CiAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0
NiwgMHg0NywgMHg0OCwKICAgICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAw
eDRGLCAweDUwLAogICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcs
IDB4NTgsCkBAIC00Miw3ICs0NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVuY01hcFs2
NF0gPSB7CiAgICAgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHgy
RgogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RGVjTWFwWzEyOF0gPSB7CitzdGF0aWMg
Y29uc3QgY2hhciBiYXNlNjREZWNNYXBbZGVjb2RlTWFwU2l6ZV0gPSB7CiAgICAgbm9uQWxwaGFi
ZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCkBAIC02MSw3ICs2NCw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyIGJhc2U2NERlY01hcFsxMjhdID0gewogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJl
dAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IHsKK3N0YXRp
YyBjb25zdCBjaGFyIGJhc2U2NFVSTEVuY01hcFtlbmNvZGVNYXBTaXplXSA9IHsKICAgICAweDQx
LCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAogICAgIDB4NDksIDB4
NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCiAgICAgMHg1MSwgMHg1Miwg
MHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKQEAgLTcyLDcgKzc1LDcgQEAgc3Rh
dGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IAogICAgIDB4MzQsIDB4MzUsIDB4
MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4MkQsIDB4NUYKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFy
IGJhc2U2NFVSTERlY01hcFsxMjhdID0geworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRGVj
TWFwW2RlY29kZU1hcFNpemVdID0gewogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9u
QWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsCiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LApAQCAtOTEsMjQzICs5NCwyMTggQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJM
RGVjTWFwWzEyOF0gPQogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0LCBub25BbHBo
YWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsKIAotc3RhdGlj
IGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3ksIGNvbnN0IGNoYXIgKCZlbmNvZGVNYXApWzY0XSkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVpbnQ4
X3QqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUq
IGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNs
ZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVzdGlu
YXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUo
aW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5ndGgpOwogCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSAib3V0TGVuZ3Ro
IiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkg
cHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0gICAgY29uc3QgdW5zaWduZWQg
bWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwotICAg
IGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRv
IGVuY29kZU1hcCA9IChtYXAgPT0gQmFzZTY0RW5jb2RlTWFwOjpVUkwpID8gYmFzZTY0VVJMRW5j
TWFwIDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9IDA7CiAgICAgdW5zaWdu
ZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0gICAgdW5zaWduZWQgb3V0
TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGluc2VydExGcyA9IChwb2xp
Y3kgPT0gQmFzZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnMgJiYgZGVzdGluYXRpb25MZW5ndGgg
PiBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOwogCi0gICAgLy8gRGVh
bCB3aXRoIHRoZSA3NiBjaGFyYWN0ZXIgcGVyIGxpbmUgbGltaXQgc3BlY2lmaWVkIGluIFJGQyAy
MDQ1LgotICAgIGJvb2wgaW5zZXJ0TEZzID0gKHBvbGljeSA9PSBCYXNlNjRJbnNlcnRMRnMgJiYg
b3V0TGVuZ3RoID4gNzYpOwotICAgIGlmIChpbnNlcnRMRnMpCi0gICAgICAgIG91dExlbmd0aCAr
PSAoKG91dExlbmd0aCAtIDEpIC8gNzYpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBvdXQu
Z3JvdyhvdXRMZW5ndGgpOwotCi0gICAgLy8gMy1ieXRlIHRvIDQtYnl0ZSBjb252ZXJzaW9uICsg
MC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgotICAgIGlmIChsZW4gPiAxKSB7Ci0g
ICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAgIGlmIChpbnB1dExlbmd0aCA+IDEp
IHsKKyAgICAgICAgd2hpbGUgKHNpZHggPCBpbnB1dExlbmd0aCAtIDIpIHsKICAgICAgICAgICAg
IGlmIChpbnNlcnRMRnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoY291bnQgJiYgIShjb3VudCAl
IDc2KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOworICAgICAgICAg
ICAgICAgIGlmIChjb3VudCAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVu
SW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHgrK10gPSAnXG4nOwogICAgICAgICAgICAgICAgIGNvdW50ICs9IDQ7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA+PiAy
KSAmIDA3N107Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lk
eCArIDFdID4+IDQpICYgMDE3KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3NyldOwotICAgICAg
ICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAyXSA+PiA2KSAmIDAw
MykgfCAoKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlk
eCsrXSA9IGVuY29kZU1hcFtkYXRhW3NpZHggKyAyXSAmIDA3N107CisKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXREYXRhQnVmZmVy
W3NpZHggICAgXSA+PiAyKSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZm
ZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPj4gNCkg
JiAwMTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3KV07CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0
RGF0YUJ1ZmZlcltzaWR4ICsgMl0gPj4gNikgJiAwMDMpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lk
eCArIDFdIDw8IDIpICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJb
ZGlkeCsrXSA9IGVuY29kZU1hcFsgIGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0gICAgICAgJiAw
NzddOwogICAgICAgICAgICAgc2lkeCArPSAzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KHNpZHggPCBsZW4pIHsKLSAgICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAh
KGNvdW50ICUgNzYpKQotICAgICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7Ci0KLSAgICAgICAg
b3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzddOwotICAgICAg
ICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2Rl
TWFwWygoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYg
MDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4ICsg
MV0gPDwgMikgJiAwNzddOworICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsKKyAgICAgICAg
aWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExp
bmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlcltkaWR4KytdID0gJ1xuJzsKKworICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlk
eCsrXSA9IGVuY29kZU1hcFsoaW5wdXREYXRhQnVmZmVyW3NpZHhdID4+IDIpICYgMDc3XTsKKyAg
ICAgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHgg
KyAxXSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA8PCA0KSAmIDA3Nyld
OworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBb
IChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA8PCA0KSAm
IDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29k
ZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzddOwogICAgIH0KIAot
ICAgIC8vIEFkZCBwYWRkaW5nCi0gICAgaWYgKHBvbGljeSA9PSBCYXNlNjRVUkxQb2xpY3kpCi0g
ICAgICAgIG91dC5yZXNpemUoZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdoaWxlIChkaWR4
IDwgb3V0LnNpemUoKSkgewotICAgICAgICAgICAgb3V0W2RpZHhdID0gJz0nOwotICAgICAgICAg
ICAgKytkaWR4OwotICAgICAgICB9CisgICAgQVNTRVJUKHBvbGljeSAhPSBCYXNlNjRFbmNvZGVQ
b2xpY3k6OlVSTCB8fCBkaWR4ID09IGRlc3RpbmF0aW9uTGVuZ3RoKTsKKworICAgIHdoaWxlIChk
aWR4IDwgZGVzdGluYXRpb25MZW5ndGgpIHsKKyAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHhdID0gJz0nOworICAgICAgICArK2RpZHg7CiAgICAgfQogfQogCi1TdHJpbmcgYmFzZTY0
RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSkKK3N0YXRpYyBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBWZWN0b3I8
Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5j
TWFwKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwor
ICAgIGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShp
bnB1dExlbmd0aCwgcG9saWN5KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGRlc3RpbmF0aW9uVmVjdG9yKGRlc3Rp
bmF0aW9uTGVuZ3RoKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChpbnB1dERhdGFCdWZmZXIs
IGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvblZlY3Rvci5kYXRhKCksIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uVmVjdG9yOwogfQogCi12b2lk
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFy
PiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQorVmVjdG9yPGNoYXI+IGJhc2U2NEVu
Y29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJh
c2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRh
KSwgbGVuLCBvdXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5j
b2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciks
IGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUo
Y29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBiYXNlNjRFbmNvZGUoY29u
c3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBCYXNlNjRVUkxQb2xpY3ksIGJh
c2U2NFVSTEVuY01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQu
c2l6ZSgpKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm47Cisg
ICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0
aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0
IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQpCit2b2lkIGJhc2U2
NEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3Ro
LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0
aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
ZGF0YSksIGxlbiwgb3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7CisgICAg
aWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGJhc2U2NEVuY29k
ZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZmZXIpLCBp
bnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9s
aWN5LCBtYXApOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBib29s
IGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyJiBvdXQsIHVuc2lnbmVkIG9wdGlvbnMsIGNv
bnN0IGNoYXIgKCZkZWNvZGVNYXApWzEyOF0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBp
bnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICBvdXQuY2xl
YXIoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFp
bnB1dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIFZlY3Rvcjx1aW50OF90PiB7IH07CiAKLSAgICBv
dXQuZ3JvdyhsZW5ndGgpOworICAgIGF1dG8gZGVjb2RlTWFwID0gKG1hcCA9PSBCYXNlNjREZWNv
ZGVNYXA6OlVSTCkgPyBiYXNlNjRVUkxEZWNNYXAgOiBiYXNlNjREZWNNYXA7CisKKyAgICBWZWN0
b3I8dWludDhfdD4gZGVzdGluYXRpb24oaW5wdXRMZW5ndGgpOwogCiAgICAgdW5zaWduZWQgZXF1
YWxzU2lnbkNvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBvdXRMZW5ndGggPSAwOwotICAgIGJvb2wg
aGFkRXJyb3IgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbmd0
aDsgKytpZHgpIHsKLSAgICAgICAgdW5zaWduZWQgY2ggPSBkYXRhW2lkeF07CisgICAgdW5zaWdu
ZWQgZGVzdGluYXRpb25MZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4
IDwgaW5wdXRMZW5ndGg7ICsraWR4KSB7CisgICAgICAgIHVuc2lnbmVkIGNoID0gaW5wdXREYXRh
QnVmZmVyW2lkeF07CiAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKICAgICAgICAgICAgICsrZXF1
YWxzU2lnbkNvdW50OwogICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIG5ldmVyIGJlIG1vcmUg
dGhhbiAyIHBhZGRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChvcHRpb25zICYgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKLSAgICAgICAgICAg
ICAgICBoYWRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAob3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRp
bmcpICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y2hhciBkZWNvZGVkQ2hhcmFjdGVyID0gY2ggPCBXVEZfQVJSQVlfTEVOR1RIKGRlY29kZU1hcCkg
PyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFiZXQ7CisgICAgICAgICAgICBjaGFyIGRlY29kZWRD
aGFyYWN0ZXIgPSBjaCA8IGRlY29kZU1hcFNpemUgPyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFi
ZXQ7CiAgICAgICAgICAgICBpZiAoZGVjb2RlZENoYXJhY3RlciAhPSBub25BbHBoYWJldCkgewot
ICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaGFkRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3V0W291dExlbmd0aCsrXSA9IGRlY29kZWRDaGFy
YWN0ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucyAmIEJhc2U2NElnbm9yZVNw
YWNlc0FuZE5ld0xpbmVzKQotICAgICAgICAgICAgICAgIHx8ICghaXNMYXRpbjEoY2gpIHx8ICFp
c0FTQ0lJU3BhY2UoY2gpIHx8ICgob3B0aW9ucyAmIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikg
JiYgY2ggPT0gJ1x2JykpKSB7Ci0gICAgICAgICAgICAgICAgaGFkRXJyb3IgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAg
ICAgZGVzdGluYXRpb25bZGVzdGluYXRpb25MZW5ndGgrK10gPSBkZWNvZGVkQ2hhcmFjdGVyOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRp
b25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykgfHwgKCFpc0xhdGluMShjaCkgfHwgIWlzQVND
SUlTcGFjZShjaCkgfHwgKG9wdGlvbnMuY29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlz
Y2FyZFZlcnRpY2FsVGFiKSAmJiBjaCA9PSAnXHYnKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Ly8gTWFrZSBzdXJlIHdlIHNocmluayBiYWNrIHRoZSBWZWN0b3IgYmVmb3JlIHJldHVybmluZy4g
b3V0TGVuZ3RoIG1heSBiZSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQKKyAgICAvLyBNYWtlIHN1cmUg
d2Ugc2hyaW5rIGJhY2sgdGhlIFZlY3RvciBiZWZvcmUgcmV0dXJuaW5nLiBkZXN0aW5hdGlvbkxl
bmd0aCBtYXkgYmUgc2hvcnRlciB0aGFuIGV4cGVjdGVkCiAgICAgLy8gaW4gY2FzZSBvZiBlcnJv
ciBvciBpbiBjYXNlIG9mIGlnbm9yZWQgc3BhY2VzLgotICAgIGlmIChvdXRMZW5ndGggPCBvdXQu
c2l6ZSgpKQotICAgICAgICBvdXQuc2hyaW5rKG91dExlbmd0aCk7Ci0KLSAgICBpZiAoaGFkRXJy
b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGggPCBk
ZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNocmluayhkZXN0aW5hdGlv
bkxlbmd0aCk7CiAKLSAgICBpZiAoIW91dExlbmd0aCkKLSAgICAgICAgcmV0dXJuICFlcXVhbHNT
aWduQ291bnQ7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkgeworICAgICAgICBpZiAoIWVx
dWFsc1NpZ25Db3VudCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IHJldHVybiBWZWN0b3I8dWludDhfdD4geyB9OworICAgIH0KIAogICAgIC8vIFRoZSBzaG91bGQg
YmUgbm8gcGFkZGluZyBpZiBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiA0LgotICAgIC8vIFdlIHVz
ZSAob3V0TGVuZ3RoICsgZXF1YWxzU2lnbkNvdW50KSBpbnN0ZWFkIG9mIGxlbmd0aCBiZWNhdXNl
IHdlIGRvbid0IHdhbnQgdG8gYWNjb3VudCBmb3IgaWdub3JlZCBjaGFyYWN0ZXJzIChpLmUuIHNw
YWNlcykuCi0gICAgaWYgKG9wdGlvbnMgJiBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgJiYgZXF1YWxz
U2lnbkNvdW50ICYmIChvdXRMZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIC8vIFdlIHVzZSAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNT
aWduQ291bnQpIGluc3RlYWQgb2YgbGVuZ3RoIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhY2Nv
dW50IGZvciBpZ25vcmVkIGNoYXJhY3RlcnMgKGkuZS4gc3BhY2VzKS4KKyAgICBpZiAob3B0aW9u
cy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpICYmIGVxdWFs
c1NpZ25Db3VudCAmJiAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFZhbGlkIGRhdGEgaXMgKG4g
KiA0ICsgWzAsMiwzXSkgY2hhcmFjdGVycyBsb25nLgotICAgIGlmICgob3V0TGVuZ3RoICUgNCkg
PT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoZGVzdGluYXRpb25MZW5ndGgg
JSA0KSA9PSAxKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIC8vIDQt
Ynl0ZSB0byAzLWJ5dGUgY29udmVyc2lvbgotICAgIG91dExlbmd0aCAtPSAob3V0TGVuZ3RoICsg
MykgLyA0OwotICAgIGlmICghb3V0TGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVzdGluYXRpb25MZW5ndGggLT0gKGRlc3RpbmF0aW9uTGVuZ3RoICsgMykgLyA0OworICAgIGlm
ICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICB1bnNpZ25lZCBzaWR4ID0gMDsKICAgICB1bnNpZ25lZCBkaWR4ID0gMDsKLSAgICBpZiAob3V0
TGVuZ3RoID4gMSkgewotICAgICAgICB3aGlsZSAoZGlkeCA8IG91dExlbmd0aCAtIDIpIHsKLSAg
ICAgICAgICAgIG91dFtkaWR4XSA9ICgoKG91dFtzaWR4XSA8PCAyKSAmIDI1NSkgfCAoKG91dFtz
aWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsKLSAgICAgICAgICAgIG91dFtkaWR4ICsgMV0gPSAoKChv
dXRbc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgob3V0W3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OwotICAgICAgICAgICAgb3V0W2RpZHggKyAyXSA9ICgoKG91dFtzaWR4ICsgMl0gPDwgNikgJiAy
NTUpIHwgKG91dFtzaWR4ICsgM10gJiAwNzcpKTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGgg
PiAxKSB7CisgICAgICAgIHdoaWxlIChkaWR4IDwgZGVzdGluYXRpb25MZW5ndGggLSAyKSB7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbltkaWR4ICAgIF0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICAg
IF0gPDwgMikgJiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2RpZHggKyAxXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHgg
KyAxXSA8PCA0KSAmIDI1NSkgfCAoKGRlc3RpbmF0aW9uW3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OworICAgICAgICAgICAgZGVzdGluYXRpb25bZGlkeCArIDJdID0gKCgoZGVzdGluYXRpb25bc2lk
eCArIDJdIDw8IDYpICYgMjU1KSB8ICAoZGVzdGluYXRpb25bc2lkeCArIDNdICAgICAgICYgMDc3
KSk7CiAgICAgICAgICAgICBzaWR4ICs9IDQ7CiAgICAgICAgICAgICBkaWR4ICs9IDM7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2Rp
ZHhdID0gKCgob3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHggKyAxXSA+PiA0KSAm
IDAwMykpOwotCi0gICAgaWYgKCsrZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2RpZHhd
ID0gKCgob3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikg
JiAwMTcpKTsKKyAgICBpZiAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0
aW5hdGlvbltkaWR4XSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggICAgXSA8PCAyKSAmIDI1NSkgfCAo
KGRlc3RpbmF0aW9uW3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOwogCi0gICAgaWYgKG91dExlbmd0
aCA8IG91dC5zaXplKCkpCi0gICAgICAgIG91dC5zaHJpbmsob3V0TGVuZ3RoKTsKKyAgICBpZiAo
KytkaWR4IDwgZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0aW9uW2RpZHhdID0g
KCgoZGVzdGluYXRpb25bc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lk
eCArIDJdID4+IDIpICYgMDE3KSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGVzdGlu
YXRpb25MZW5ndGggPCBkZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNo
cmluayhkZXN0aW5hdGlvbkxlbmd0aCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwogfQogCi1i
b29sIGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZl
Y3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBs
ZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBvcHRpb25zLCBiYXNl
NjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlm
ICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2Rl
SW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3Ro
LCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29kZShTdHJpbmdWaWV3IGluLCBT
aWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQor
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5n
dGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChp
bi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwg
b3V0LCBvcHRpb25zLCBiYXNlNjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNl
NjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNsZWFy
KCk7Ci0KLSAgICAvLyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdl
LCBqdXN0IHJldHVybiBub3RoaW5nLgotICAgIGlmIChpbi5zaXplKCkgPiBVSU5UX01BWCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihpbi5kYXRhKCkpLCBpbi5zaXplKCksIG91dCwg
b3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKKyAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7CiB9
CiAKLWJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJh
c2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuLCBvdXQsIG9wdGlvbnMsIGJh
c2U2NERlY01hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1i
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbi5s
ZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0LCBCYXNl
NjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2
NFVSTERlY01hcCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAg
aWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0g
ICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwg
YmFzZTY0VVJMRGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hh
cmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXAp
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
KyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxl
bmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0KQogewotICAgIG91dC5jbGVhcigpOwotCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICBpZiAoaW4uc2l6ZSgpID4gVUlOVF9NQVgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oaW4uZGF0YSgpKSwgaW4uc2l6ZSgpLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJh
c2U2NFVSTERlY01hcCk7CisgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJM
KTsKIH0KIAotYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQogewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRV
UkxEZWNNYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDI1ICsyNywzNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdURiB7CiAKLWVudW0gQmFzZTY0RW5jb2RlUG9saWN5IHsKLSAgICBCYXNl
NjREb05vdEluc2VydExGcywKLSAgICBCYXNlNjRJbnNlcnRMRnMsCi0gICAgQmFzZTY0VVJMUG9s
aWN5IC8vIE5vIHBhZGRpbmcsIG5vIExGcy4KK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlUG9saWN5
IHsKKyAgICBEb05vdEluc2VydExGcywKKyAgICBJbnNlcnRMRnMsCisgICAgVVJMIC8vIE5vIHBh
ZGRpbmcsIG5vIExGcy4KIH07CiAKLWVudW0gQmFzZTY0RGVjb2RlT3B0aW9ucyB7Ci0gICAgQmFz
ZTY0RGVmYXVsdCA9IDAsCi0gICAgQmFzZTY0VmFsaWRhdGVQYWRkaW5nID0gMSA8PCAwLAotICAg
IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzID0gMSA8PCAxLAotICAgIEJhc2U2NERpc2Nh
cmRWZXJ0aWNhbFRhYiA9IDEgPDwgMiwKK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlTWFwIHsgRGVm
YXVsdCwgVVJMIH07CisKK2VudW0gY2xhc3MgQmFzZTY0RGVjb2RlT3B0aW9ucyA6IHVpbnQ4X3Qg
eworICAgIFZhbGlkYXRlUGFkZGluZyAgICAgICAgID0gMSA8PCAwLAorICAgIElnbm9yZVNwYWNl
c0FuZE5ld0xpbmVzID0gMSA8PCAxLAorICAgIERpc2NhcmRWZXJ0aWNhbFRhYiAgICAgID0gMSA8
PCAyLAogfTsKIAorZW51bSBjbGFzcyBCYXNlNjREZWNvZGVNYXAgeyBEZWZhdWx0LCBVUkwgfTsK
Kworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5J
bnNlcnRpbmdMRnMgPSA3NjsKKworLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2lj
YWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90aGluZy4KKy8vIFJhdGhlciB0aGFuIGJlaW5nIHBl
cmZlY3RseSBwcmVjaXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZhdGl2ZS4KK3N0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwor
CiBjbGFzcyBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgewogcHVibGljOgogICAg
IFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8Y2hhcj4mIHZlY3RvcikK
QEAgLTE0NCw5MCArMTU0LDE2MyBAQCBwcml2YXRlOgogICAgIH0gbV92ZWN0b3I7CiB9OwogCi1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExG
cyk7Ci12b2lkIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNl
cnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLVdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29k
ZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBD
U3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOworV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVu
c2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwg
VUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5
OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwg
dW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29k
ZU1hcDo6RGVmYXVsdCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JV
bnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOworVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9S
VF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0
cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2Rl
TWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8
QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29k
ZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQp
OworCitpbmxpbmUgVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlciBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFz
ZTY0RW5jb2RlTWFwIG1hcCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Cit9CisKK2lubGluZSBWZWN0b3I8Y2hhcj4g
YmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9s
aWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW5w
dXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOworfQorCisKKy8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBBbGwgdGhlIHNhbWUgZnVuY3Rpb25zIG1vZGlm
aWVkIGZvciBiYXNlNjR1cmwsIGFzIGRlZmluZWQgaW4gUkZDIDQ2NDguCisvLyBUaGlzIGZvcm1h
dCB1c2VzICctJyBhbmQgJ18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5Lgor
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9y
QWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOwotV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcsIFNpZ25lZE9yVW5zaWduZWRDaGFy
VmVjdG9yQWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOwotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYsIFNpZ25l
ZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERl
ZmF1bHQpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIq
LCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBv
cHRpb25zID0gQmFzZTY0RGVmYXVsdCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNv
bnN0IHZvaWQqLCB1bnNpZ25lZCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKENvbnN0
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKK1ZlY3RvcjxjaGFyPiBiYXNlNjRV
UkxFbmNvZGUoY29uc3QgQ1N0cmluZyYpOworCitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7CitXVEZfRVhQ
T1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoU3Ry
aW5nVmlldyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7CitXVEZfRVhQT1JUX1BSSVZBVEUg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciosIHVu
c2lnbmVkKTsKIAotaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25l
ZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91dCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZv
aWQqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRhdGEo
KSwgaW4uc2l6ZSgpLCBvdXQsIHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbnB1
dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwp
OwogfQogCi1pbmxpbmUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3Rv
cjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoraW5saW5lIFZlY3Rvcjxj
aGFyPiBiYXNlNjRVUkxFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgaW5wdXQpCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIG91
dCwgcG9saWN5KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQu
c2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFy
VmVjdG9yQWRhcHRlciBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0
b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGlucHV0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIHBvbGljeSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNv
ZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5n
IGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBp
c0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIHBvbGljeSk7CisgICAgcmV0
dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLycgfHwgYyA9
PSAnLScgfHwgYyA9PSAnXyc7CiB9CiAKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0vLyBBbGwgdGhlIHNhbWUgZnVuY3Rpb25zIG1vZGlmaWVkIGZvciBiYXNlNjR1cmwsIGFzIGRl
ZmluZWQgaW4gUkZDIDQ2NDguCi0vLyBUaGlzIGZvcm1hdCB1c2VzICctJyBhbmQgJ18nIGluc3Rl
YWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5LgotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KK2lubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZSh1bnNp
Z25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3sKKyAgICBpZiAo
IWlucHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgVmVjdG9yPGNoYXI+Jik7
Ci12b2lkIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgVmVjdG9yPGNoYXI+Jik7Ci12b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5n
JiwgVmVjdG9yPGNoYXI+Jik7CisgICAgaWYgKGlucHV0TGVuZ3RoID4gbWF4aW11bUJhc2U2NEVu
Y29kZXJJbnB1dEJ1ZmZlclNpemUpCisgICAgICAgIHJldHVybiAwOwogCi1XVEZfRVhQT1JUX1BS
SVZBVEUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
cik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmKTsKKyAgICBhdXRvIGJh
c2VQYWRkZWRFbmNvZGVkU2l6ZSA9IFsmXSB7CisgICAgICAgIHJldHVybiAoKGlucHV0TGVuZ3Ro
ICsgMikgLyAzKSAqIDQ7CisgICAgfTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0
VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
cik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldywg
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVdURl9FWFBPUlRfUFJJVkFURSBi
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBTaWduZWRPclVuc2lnbmVk
Q2hhclZlY3RvckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyKTsKKyAgICBhdXRvIGJhc2VVbnBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAgICAg
cmV0dXJuICgoaW5wdXRMZW5ndGggKiA0KSArIDIpIC8gMzsKKyAgICB9OworCisgICAgc3dpdGNo
IChwb2xpY3kpIHsKKyAgICBjYXNlIEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnM6
CisgICAgICAgIHJldHVybiBiYXNlUGFkZGVkRW5jb2RlZFNpemUoKTsKKworICAgIGNhc2UgQmFz
ZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnM6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBiYXNl
UGFkZGVkRW5jb2RlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0g
MSkgLyBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOworICAgIH0KIAot
aW5saW5lIHZvaWQgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91dCkKKyAgICBjYXNlIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMOgorICAgICAgICByZXR1cm4gYmFzZVVucGFkZGVkRW5jb2RlZFNpemUoKTsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3Ry
dWN0IEJhc2U2NFNwZWNpZmljYXRpb24geworICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKKyAg
ICB1bnNpZ25lZCBpbnB1dExlbmd0aDsKKyAgICBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5Owor
ICAgIEJhc2U2NEVuY29kZU1hcCBtYXA7Cit9OworCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KQogewotICAgIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLnNpemUoKSwgb3V0KTsKKyAg
ICByZXR1cm4geyBpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCB9OwogfQogCi1p
bmxpbmUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3RvcjxjaGFy
PiYgb3V0KQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChDb25zdFNp
Z25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCiB7Ci0gICAgYmFz
ZTY0VVJMRW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIG91dCk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSk7CiB9CiAKLWlu
bGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGluKQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChj
b25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NFVSTEVuY29k
ZShpbi5kYXRhKCksIGluLnNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQu
ZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5KTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNl
NjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4pCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0
aCgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNCYXNlNjRP
ckJhc2U2NFVSTENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCitpbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIGlucHV0KQogewotICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMg
PT0gJysnIHx8IGMgPT0gJy8nIHx8IGMgPT0gJy0nIHx8IGMgPT0gJ18nOworICAgIHJldHVybiBi
YXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xp
Y3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworfQorCitpbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IENTdHJpbmcmIGlucHV0KQoreworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKK3RlbXBsYXRlPD4g
Y2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj4geworcHVibGljOgor
ICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IEJhc2U2NFNwZWNpZmljYXRpb24mIGJhc2U2NCkK
KyAgICAgICAgOiBtX2Jhc2U2NCB7IGJhc2U2NCB9CisgICAgICAgICwgbV9lbmNvZGVkTGVuZ3Ro
IHsgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoYmFzZTY0LmlucHV0TGVuZ3RoLCBiYXNlNjQu
cG9saWN5KSB9CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5jb2RlZExlbmd0aDsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3
cml0ZVRvKENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAg
YmFzZTY0RW5jb2RlKG1fYmFzZTY0LmlucHV0RGF0YSwgbV9iYXNlNjQuaW5wdXRMZW5ndGgsIGRl
c3RpbmF0aW9uLCBtX2VuY29kZWRMZW5ndGgsIG1fYmFzZTY0LnBvbGljeSwgbV9iYXNlNjQubWFw
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzZTY0U3BlY2lmaWNhdGlvbiBtX2Jhc2U2NDsK
KyAgICB1bnNpZ25lZCBtX2VuY29kZWRMZW5ndGg7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAordXNpbmcgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOwogdXNpbmcgV1RGOjpCYXNlNjRFbmNv
ZGVQb2xpY3k7Ci11c2luZyBXVEY6OkJhc2U2NERvTm90SW5zZXJ0TEZzOwotdXNpbmcgV1RGOjpC
YXNlNjRJbnNlcnRMRnM7Ci11c2luZyBXVEY6OkJhc2U2NFZhbGlkYXRlUGFkZGluZzsKLXVzaW5n
IFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXM7Ci11c2luZyBXVEY6OkJhc2U2NERp
c2NhcmRWZXJ0aWNhbFRhYjsKLXVzaW5nIFdURjo6YmFzZTY0RW5jb2RlOwordXNpbmcgV1RGOjpC
YXNlNjRTcGVjaWZpY2F0aW9uOwogdXNpbmcgV1RGOjpiYXNlNjREZWNvZGU7Cit1c2luZyBXVEY6
OmJhc2U2NEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0RW5jb2RlZDsKK3VzaW5nIFdURjo6YmFz
ZTY0VVJMRGVjb2RlOwogdXNpbmcgV1RGOjpiYXNlNjRVUkxEZWNvZGU7Cit1c2luZyBXVEY6OmJh
c2U2NFVSTEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0VVJMRW5jb2RlZDsKIHVzaW5nIFdURjo6
aXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3RlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3
NzY4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1NSBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1v
ZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L0luaXREYXRhUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleUlEc0tl
eWlkcyk6CisgICAgICAgIChXZWJDb3JlOjpzYW5pdGl6ZUtleWlkcyk6CisgICAgICAgICogTW9k
dWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKToKKyAgICAgICAg
KiBNb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW06CisgICAgICAg
IChXZWJDb3JlOjpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
anNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlbUluQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXV0aGVudGljYXRvckNvb3JkaW5hdG9ySW50ZXJuYWw6OnByb2R1Y2VDbGllbnREYXRhSnNvbik6
CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwp
OgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVTZWNXZWJTb2NrZXRLZXkpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNvY2tldEFjY2VwdCk6Cisg
ICAgICAgICogY3J5cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmg6CisgICAgICAgICogY3J5
cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKiBjcnlw
dG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5QUVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6aW1w
b3J0SndrKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6ZXhwb3J0SndrIGNvbnN0
KToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9LZXlFQzo6aW1wb3J0SndrKToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9Dcnlw
dG9LZXlITUFDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmltcG9ydEp3
ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjpleHBvcnRKd2sgY29uc3QpOgor
ICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXlSU0E6OmltcG9ydEp3ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlS
U0E6OmV4cG9ydEp3ayBjb25zdCk6CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01h
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVs
ZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmluZE1hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpkZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICAqIGNyeXB0by9vcGVuc3NsL1Nlcmlh
bGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRh
VVJMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
TmV0d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291
cmNlc0RhdGE6OlJlc291cmNlRGF0YTo6ZGVjb2RlRGF0YVRvQ29udGVudCk6CisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaCk6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yOjpidWlsZFdlYlNvY2tldE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0
aFJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50
ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCk6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUGFnZUFnZW50OjpkYXRhQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmFyY2hpdmUpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6
CisgICAgICAgICogbG9hZGVyL0xvYWRlclN0cmF0ZWd5Lmg6CisgICAgICAgICogbG9hZGVyL1By
aXZhdGVDbGlja01lYXN1cmVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50OjpFcGhlbWVyYWxTb3VyY2VOb25jZTo6aXNWYWxpZCBjb25zdCk6CisgICAg
ICAgICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OmRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAgICAqIGxv
YWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
SFRNTEFyY2hpdmU6OmdlbmVyYXRlTUhUTUxEYXRhKToKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSFRNTFBhcnNlcjo6
cGFyc2VOZXh0UGFydCk6CisgICAgICAgICogbG9hZGVyL2NvY29hL1ByaXZhdGVDbGlja01lYXN1
cmVtZW50Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dDo6Y2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJsZVRva2VuKToKKyAgICAgICAgKFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VT
ZWNyZXRUb2tlbik6CisgICAgICAgICogcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmFzZTY0VXRpbGl0aWVzOjpidG9hKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2U2NFV0aWxpdGllczo6YXRvYik6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vuc2VGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0
cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtl
eUlkRnJvbVdlYk1Jbml0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
OjpyZXF1ZXN0TGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25G
YWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUxpY2Vuc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjpkaWRQcm92aWRl
UmVxdWVzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVW5pcXVlRm9udE5hbWUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlVW5pcXVlRm9udE5hbWUpOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsb2FkQmxvYlJlc291cmNlU3lu
Y2hyb25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5k
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJj
ZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q3JlZGVudGlhbEJhc2U6OnNlcmlhbGl6YXRpb25Gb3JCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbEJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNv
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVCYXNlNjQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRlY29kZUVzY2FwZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRlY29kZVN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9T
eW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91
c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25v
dXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIb3N0VExTQ2VydGlmaWNhdGVTZXQ6OmNvbXB1dGVD
ZXJ0aWZpY2F0ZUhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2Vx
dWVuY2VzLmg6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoIGNvbnN0KToKKwogMjAyMS0wNS0x
OCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVUF0gUmVt
b3RlQXVkaW9TZXNzaW9uIGNhbGxzIGludG8gQVZBdWRpb1Nlc3Npb24gd2hlbiBHUFVQIGlzIGVu
YWJsZWQsIGNhdXNpbmcgaGFuZ3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlw
dGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0
YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTUgKzgwLDE0IEBAIHN0YXRpYyBP
cHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4KICAgICAgICAgaWYgKCFrZXlJRCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFZlY3RvcjxjaGFyPiBrZXlJRERhdGE7Ci0g
ICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pKQor
ICAgICAgICBhdXRvIGtleUlERGF0YSA9IGJhc2U2NFVSTERlY29kZShrZXlJRCk7CisgICAgICAg
IGlmICgha2V5SUREYXRhKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGtl
eUlERGF0YS5zaXplKCkgPCBrS2V5SWRzTWluS2V5SWRTaXplSW5CeXRlcyB8fCBrZXlJRERhdGEu
c2l6ZSgpID4ga0tleUlkc01heEtleUlkU2l6ZUluQnl0ZXMpCisgICAgICAgIGlmIChrZXlJRERh
dGEtPnNpemUoKSA8IGtLZXlJZHNNaW5LZXlJZFNpemVJbkJ5dGVzIHx8IGtleUlERGF0YS0+c2l6
ZSgpID4ga0tleUlkc01heEtleUlkU2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgICAgIFJlZjxTaGFyZWRCdWZmZXI+IGtleUlEQnVmZmVyID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlJRERhdGEpKTsKLSAgICAgICAga2V5SURzLmFw
cGVuZChXVEZNb3ZlKGtleUlEQnVmZmVyKSk7CisgICAgICAgIGtleUlEcy5hcHBlbmQoU2hhcmVk
QnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqa2V5SUREYXRhKSkpOwogICAgIH0KIAogICAgIHJldHVy
biBrZXlJRHM7CkBAIC0xMDUsNyArMTA0LDcgQEAgc3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IHNhbml0aXplS2V5aQogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBhdXRvIGtpZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1
dG8mIGJ1ZmZlciA6IGtleUlEQnVmZmVyLnZhbHVlKCkpCi0gICAgICAgIGtpZHNBcnJheS0+cHVz
aFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXpl
KCkpKTsKKyAgICAgICAga2lkc0FycmF5LT5wdXNoU3RyaW5nKG1ha2VTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlZChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpKSk7CiAgICAgb2JqZWN0LT5z
ZXRBcnJheSgia2lkcyIsIFdURk1vdmUoa2lkc0FycmF5KSk7CiAKICAgICBDU3RyaW5nIGpzb25E
YXRhID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
bGVnYWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNl
c3Npb25DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwxMyArMTY5LDEzIEBAIGJv
b2wgQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoVWludDhBcnIKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtl
eURhdGE7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShyYXdLZXlEYXRhLCBrZXlEYXRh
KSB8fCBrZXlEYXRhLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBrZXlEYXRhID0gYmFz
ZTY0RGVjb2RlKHJhd0tleURhdGEpOworICAgICAgICAgICAgaWYgKCFrZXlEYXRhIHx8IGtleURh
dGEtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25D
bGVhcktleTo6dXBkYXRlKCVwKSAtIGZhaWxlZDogdW5hYmxlIHRvIGJhc2U2NCBkZWNvZGUga2V5
IiwgdGhpcyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIG1fY2FjaGVkS2V5cy5zZXQoa2V5SWQsIFdURk1vdmUoa2V5RGF0YSkpOworICAg
ICAgICAgICAgbV9jYWNoZWRLZXlzLnNldChrZXlJZCwgV1RGTW92ZSgqa2V5RGF0YSkpOwogICAg
ICAgICAgICAgZm91bmRWYWxpZEtleSA9IHRydWU7CiAgICAgICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudC5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDMsMTQgKzI0MywxMiBAQCB2b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojpw
b3N0RXZlCiAKIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQoTlNEYXRh
ICpkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBKU0NvbnRleHQgKmNvbnRleHQpCiB7Ci0g
ICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKFtkYXRhIGJ5dGVz
XSwgW2RhdGEgbGVuZ3RoXSwgYmFzZTY0RGF0YSk7Ci0KKyAgICAvLyBGSVhNRTogQWRkIG1ha2VD
RlN0cmluZy9tYWtlTlNTdHJpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkgU3RyaW5nIGFsbG9jYXRp
b24uCiAgICAgU3RyaW5nIGRhdGE2NDsKICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAg
ICAgICAgZGF0YTY0ID0gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERh
dGE7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFz
ZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKSk7CiAgICAg
ZWxzZQotICAgICAgICBkYXRhNjQgPSAiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKKyAgICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2
NCwiLCBiYXNlNjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOwogCiAgICAg
cmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDooaWQpZGF0YTY0LmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQpAQCAtMzQyLDkgKzM0MCw3IEBAIHN0YXRp
YyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGUKICAgICAgICAgaWQgdmFsdWUgPSBp
dGVtLnZhbHVlOwogICAgICAgICBOU1N0cmluZyAqbWltZVR5cGUgPSBbW2l0ZW0gZXh0cmFBdHRy
aWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJNSU1FdHlwZSJdOwogICAgICAgICBpZiAoW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dICYmIG1pbWVUeXBlKSB7Ci0gICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICAgICAgICAgIGJhc2U2NEVuY29kZShbdmFsdWUg
Ynl0ZXNdLCBbdmFsdWUgbGVuZ3RoXSwgYmFzZTY0RGF0YSk7Ci0gICAgICAgICAgICBTdHJpbmcg
ZGF0YTY0ID0gImRhdGE6IiArIFN0cmluZyhtaW1lVHlwZSkgKyAiO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKKyAgICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToiLCBTdHJp
bmcobWltZVR5cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFt2YWx1ZSBieXRlc10sIFt2
YWx1ZSBsZW5ndGhdKSk7CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6KF9fYnJp
ZGdlIE5TU3RyaW5nICopZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5OkAidmFs
dWUiXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBz
dGF0aWMgUmVmPEFycmF5QnVmZmVyPiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9iamVjdC0+
c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIFdURjo6YmFzZTY0VVJM
RW5jb2RlKGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOworICAgIG9iamVj
dC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChj
aGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVuZ2UubGVuZ3RoKCkpKSk7CiAgICAgb2JqZWN0LT5zZXRT
dHJpbmcoIm9yaWdpbiJfcywgb3JpZ2luLnRvUmF3U3RyaW5nKCkpOwogCiAgICAgYXV0byB1dGY4
SlNPTlN0cmluZyA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRp
YWwuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3
IEBAIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgUHUKIH0KIAogUHVibGlj
S2V5Q3JlZGVudGlhbDo6UHVibGljS2V5Q3JlZGVudGlhbChSZWY8QXV0aGVudGljYXRvclJlc3Bv
bnNlPiYmIHJlc3BvbnNlKQotICAgIDogQmFzaWNDcmVkZW50aWFsKFdURjo6YmFzZTY0VVJMRW5j
b2RlKHJlc3BvbnNlLT5yYXdJZCgpLT5kYXRhKCksIHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlTGVu
Z3RoKCkpLCBUeXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQorICAgIDogQmFzaWND
cmVkZW50aWFsKG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyZXNwb25zZS0+cmF3SWQoKS0+
ZGF0YSgpLCByZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSksIFR5cGU6OlB1YmxpY0tl
eSwgRGlzY292ZXJ5OjpSZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2Up
KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dEhhbmRzaGFrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZWNXZWJT
b2NrZXRLZXkoKQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uY2VTaXplID0gMTY7CiAgICAg
dW5zaWduZWQgY2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRv
bVZhbHVlcyhrZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShrZXksIG5v
bmNlU2l6ZSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChrZXksIG5vbmNl
U2l6ZSkpOwogfQogCiBTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNv
Y2tldEFjY2VwdChjb25zdCBTdHJpbmcmIHNlY1dlYlNvY2tldEtleSkKQEAgLTExMCw3ICsxMTAs
NyBAQCBTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlCiAgICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlE
KSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAg
ICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaGFzaC5k
YXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNv
ZGVkKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSkpOwogfQogCiBXZWJTb2NrZXRIYW5kc2hh
a2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90
b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgY2xpZW50T3JpZ2lu
LCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TZXJpYWxp
emVkQ3J5cHRvS2V5V3JhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9T
ZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBvZiBwcm90ZWN0aW9uIGlzIG5v
dCByZXF1aXJlZCBieSB0aGUgc3BlYyBhcyBvZiAxMSBEZWNlbWJlciAyMDE0OgogLy8gaHR0cHM6
Ly93d3cudzMub3JnL1RSL1dlYkNyeXB0b0FQSS8jc2VjdXJpdHktZGV2ZWxvcGVycwogCi1XRUJD
T1JFX0VYUE9SVCBib29sIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4
X3Q+Jik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkoKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZGVsZXRlRGVmYXVsdFdl
YkNyeXB0b01hc3RlcktleSgpOwogCiBXRUJDT1JFX0VYUE9SVCBib29sIHdyYXBTZXJpYWxpemVk
Q3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5LCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNH
Q3J5cHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjMsMTEgKzUyMywxMSBAQCBib29sIENyeXB0
b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVuCiAgICAgICAgIGlmIChxICYmIHEtPnNpemUo
KSA9PSBjdXJ2ZVVuY29tcHJlc3NlZFBvaW50U2l6ZShtX2N1cnZlKSkgewogICAgICAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGE7CiAgICAgICAgICAgICBhLmFwcGVuZChxLT5kYXRhKCkgKyAxLCB1
bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplKTsKLSAgICAgICAgICAgIGp3ay54ID0gYmFzZTY0
VVJMRW5jb2RlKGEpOworICAgICAgICAgICAgandrLnggPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoYSkpOwogCiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYjsKICAgICAgICAgICAg
IGIuYXBwZW5kKHEtPmRhdGEoKSArIDEgKyB1bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplLCB1
bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplKTsKLSAgICAgICAgICAgIGp3ay55ID0gYmFzZTY0
VVJMRW5jb2RlKGIpOworICAgICAgICAgICAgandrLnkgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoYikpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NDMsNyArNTQzLDcgQEAgYm9vbCBD
cnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogICAgICAgICAgICAgICAgICAgICAq
ZCA9IFdURk1vdmUocGFkZGVkRGF0YSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGUoKmQpOworICAgICAgICAgICAgICAgIGp3ay5k
ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCpkKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1NlcmlhbGl6
ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcEdDcnlwdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE1ICsyOSwxNCBAQAogI2lm
IEVOQUJMRShXRUJfQ1JZUFRPKQogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGdldERl
ZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCitPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogLy8gSW5pdGlhbGx5
IHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgd2VyZSBpbnRlbmRlZCB0byBwZXJmb3JtIEtFSyB3cmFw
cGluZyBhbmQgdW53cmFwcGluZywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUFFUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5QUVTLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTAgKzg4LDEw
IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEuay5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG9jdGV0U2VxdWVuY2U7Ci0gICAgaWYgKCFi
YXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rLCBvY3RldFNlcXVlbmNlKSkKKyAgICBhdXRvIG9jdGV0
U2VxdWVuY2UgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rKTsKKyAgICBpZiAoIW9jdGV0U2Vx
dWVuY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghY2FsbGJhY2sob2N0ZXRT
ZXF1ZW5jZS5zaXplKCkgKiA4LCBrZXlEYXRhLmFsZykpCisgICAgaWYgKCFjYWxsYmFjayhvY3Rl
dFNlcXVlbmNlLT5zaXplKCkgKiA4LCBrZXlEYXRhLmFsZykpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGlmICh1c2FnZXMgJiYgIWtleURhdGEudXNlLmlzTnVsbCgpICYmIGtleURhdGEu
dXNlICE9ICJlbmMiKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMCwxNCArMTAwLDE0
IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICBpZiAoa2V5
RGF0YS5leHQgJiYgIWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFjdGFibGUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMo
YWxnb3JpdGhtLCBXVEZNb3ZlKG9jdGV0U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCBXVEZNb3Zl
KCpvY3RldFNlcXVlbmNlKSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwogfQogCiBKc29uV2ViS2V5
IENyeXB0b0tleUFFUzo6ZXhwb3J0SndrKCkgY29uc3QKIHsKICAgICBKc29uV2ViS2V5IHJlc3Vs
dDsKICAgICByZXN1bHQua3R5ID0gIm9jdCI7Ci0gICAgcmVzdWx0LmsgPSBiYXNlNjRVUkxFbmNv
ZGUobV9rZXkpOworICAgIHJlc3VsdC5rID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKG1f
a2V5KSk7CiAgICAgcmVzdWx0LmtleV9vcHMgPSB1c2FnZXMoKTsKICAgICByZXN1bHQuZXh0ID0g
ZXh0cmFjdGFibGUoKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OCwyMiArOTgsMjIgQEAgUmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6aW1wb3J0Sgog
CiAgICAgaWYgKGtleURhdGEueC5pc051bGwoKSB8fCBrZXlEYXRhLnkuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90PiB4OwotICAgIGlmICghV1RG
OjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS54LCB4KSkKKyAgICBhdXRvIHggPSBiYXNlNjRVUkxE
ZWNvZGUoa2V5RGF0YS54KTsKKyAgICBpZiAoIXgpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIFZlY3Rvcjx1aW50OF90PiB5OwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5
RGF0YS55LCB5KSkKKyAgICBhdXRvIHkgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS55KTsKKyAg
ICBpZiAoIXkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmQuaXNO
dWxsKCkpIHsKICAgICAgICAgLy8gaW1wb3J0IHB1YmxpYyBrZXkKLSAgICAgICAgcmV0dXJuIHBs
YXRmb3JtSW1wb3J0SldLUHVibGljKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKHgp
LCBXVEZNb3ZlKHkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmV0dXJuIHBsYXRm
b3JtSW1wb3J0SldLUHVibGljKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKCp4KSwg
V1RGTW92ZSgqeSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgIH0KIAotICAgIFZlY3Rvcjx1
aW50OF90PiBkOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kLCBkKSkK
KyAgICBhdXRvIGQgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBpZiAoIWQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIGltcG9ydCBwcml2YXRlIGtleQotICAgIHJl
dHVybiBwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3VydmUsIFdU
Rk1vdmUoeCksIFdURk1vdmUoeSksIFdURk1vdmUoZCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwor
ICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3Vy
dmUsIFdURk1vdmUoKngpLCBXVEZNb3ZlKCp5KSwgV1RGTW92ZSgqZCksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogfQogCiBSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjppbXBvcnRTcGtp
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBjdXJ2
ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5
VXNhZ2VCaXRtYXAgdXNhZ2VzKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5SE1BQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5SE1BQy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOCArMTAz
LDggQEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5rLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4gb2N0ZXRTZXF1ZW5jZTsKLSAgICBpZiAo
IWJhc2U2NFVSTERlY29kZShrZXlEYXRhLmssIG9jdGV0U2VxdWVuY2UpKQorICAgIGF1dG8gb2N0
ZXRTZXF1ZW5jZSA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmspOworICAgIGlmICghb2N0ZXRT
ZXF1ZW5jZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFjYWxsYmFjayhoYXNo
LCBrZXlEYXRhLmFsZykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTE1LDE0ICsxMTUs
MTQgQEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgIGlmIChr
ZXlEYXRhLmV4dCAmJiAha2V5RGF0YS5leHQudmFsdWUoKSAmJiBleHRyYWN0YWJsZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3
KGxlbmd0aEJpdHMsIGhhc2gsIFdURk1vdmUob2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOworICAgIHJldHVybiBDcnlwdG9LZXlITUFDOjppbXBvcnRSYXcobGVuZ3RoQml0cywg
aGFzaCwgV1RGTW92ZSgqb2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQog
CiBKc29uV2ViS2V5IENyeXB0b0tleUhNQUM6OmV4cG9ydEp3aygpIGNvbnN0CiB7CiAgICAgSnNv
bldlYktleSByZXN1bHQ7CiAgICAgcmVzdWx0Lmt0eSA9ICJvY3QiOwotICAgIHJlc3VsdC5rID0g
YmFzZTY0VVJMRW5jb2RlKG1fa2V5KTsKKyAgICByZXN1bHQuayA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChtX2tleSkpOwogICAgIHJlc3VsdC5rZXlfb3BzID0gdXNhZ2VzKCk7CiAgICAg
cmVzdWx0LmV4dCA9IGV4dHJhY3RhYmxlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNjUgKzQ1LDg3IEBAIFJlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0
b0tleVJTQTo6aW1wb3IKIAogICAgIGlmIChrZXlEYXRhLm4uaXNOdWxsKCkgfHwga2V5RGF0YS5l
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4g
bW9kdWx1czsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEubiwgbW9kdWx1
cykpCisgICAgYXV0byBtb2R1bHVzID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEubik7CisgICAg
aWYgKCFtb2R1bHVzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBQZXIgUkZDIDc1
MTggU2VjdGlvbiA2LjMuMS4xOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUxOCNz
ZWN0aW9uLTYuMy4xLjEKLSAgICBpZiAoIW1vZHVsdXMuaXNFbXB0eSgpICYmICFtb2R1bHVzWzBd
KQotICAgICAgICBtb2R1bHVzLnJlbW92ZSgwKTsKLSAgICBWZWN0b3I8dWludDhfdD4gZXhwb25l
bnQ7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLmUsIGV4cG9uZW50KSkK
KyAgICBpZiAoIW1vZHVsdXMtPmlzRW1wdHkoKSAmJiAhbW9kdWx1cy0+YXQoMCkpCisgICAgICAg
IG1vZHVsdXMtPnJlbW92ZSgwKTsKKyAgICBhdXRvIGV4cG9uZW50ID0gYmFzZTY0VVJMRGVjb2Rl
KGtleURhdGEuZSk7CisgICAgaWYgKCFleHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgaWYgKGtleURhdGEuZC5pc051bGwoKSkgewogICAgICAgICAvLyBpbXBvcnQgcHVibGlj
IGtleQotICAgICAgICBhdXRvIHB1YmxpY0tleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21w
b25lbnRzOjpjcmVhdGVQdWJsaWMoV1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCkp
OworICAgICAgICBhdXRvIHB1YmxpY0tleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25l
bnRzOjpjcmVhdGVQdWJsaWMoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50KSk7
CiAgICAgICAgIC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEgaXMg
anVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBpZiBoYXNo
IGlzIFdURjo6bnVsbG9wdC4KICAgICAgICAgcmV0dXJuIENyeXB0b0tleVJTQTo6Y3JlYXRlKGFs
Z29yaXRobSwgaGFzaC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xKSwg
ISFoYXNoLCAqcHVibGljS2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAg
fQogCiAgICAgLy8gaW1wb3J0IHByaXZhdGUga2V5Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZh
dGVFeHBvbmVudDsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZCwgcHJp
dmF0ZUV4cG9uZW50KSkKKyAgICBhdXRvIHByaXZhdGVFeHBvbmVudCA9IGJhc2U2NFVSTERlY29k
ZShrZXlEYXRhLmQpOworICAgIGlmICghcHJpdmF0ZUV4cG9uZW50KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5wLmlzTnVsbCgpICYmIGtleURhdGEucS5pc051bGwo
KSAmJiBrZXlEYXRhLmRwLmlzTnVsbCgpICYmIGtleURhdGEuZHAuaXNOdWxsKCkgJiYga2V5RGF0
YS5xaS5pc051bGwoKSkgewotICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5
cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZN
b3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpKTsKKyAgICAgICAgYXV0byBw
cml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZh
dGUoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50KSwgV1RGTW92ZSgqcHJpdmF0
ZUV4cG9uZW50KSk7CiAgICAgICAgIC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cjo6U0hBXzEgaXMganVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVm
ZmVjdCBpZiBoYXNoIGlzIFdURjo6bnVsbG9wdC4KICAgICAgICAgcmV0dXJuIENyeXB0b0tleVJT
QTo6Y3JlYXRlKGFsZ29yaXRobSwgaGFzaC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OlNIQV8xKSwgISFoYXNoLCAqcHJpdmF0ZUtleUNvbXBvbmVudHMsIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogICAgIH0KIAogICAgIGlmIChrZXlEYXRhLnAuaXNOdWxsKCkgfHwga2V5RGF0YS5x
LmlzTnVsbCgpIHx8IGtleURhdGEuZHAuaXNOdWxsKCkgfHwga2V5RGF0YS5kcS5pc051bGwoKSB8
fCBrZXlEYXRhLnFpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBDcnlw
dG9LZXlSU0FDb21wb25lbnRzOjpQcmltZUluZm8gZmlyc3RQcmltZUluZm87Ci0gICAgQ3J5cHRv
S2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mbzsKLSAgICBpZiAoIVdU
Rjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEucCwgZmlyc3RQcmltZUluZm8ucHJpbWVGYWN0b3Ip
KQorICAgIAorICAgIGF1dG8gZmlyc3RQcmltZUZhY3RvciA9IGJhc2U2NFVSTERlY29kZShrZXlE
YXRhLnApOworICAgIGlmICghZmlyc3RQcmltZUZhY3RvcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRwLCBmaXJzdFByaW1l
SW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisgICAgYXV0byBmaXJzdEZhY3RvckNSVEV4cG9uZW50
ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZHApOworICAgIGlmICghZmlyc3RGYWN0b3JDUlRF
eHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVS
TERlY29kZShrZXlEYXRhLnEsIHNlY29uZFByaW1lSW5mby5wcmltZUZhY3RvcikpCisgICAgYXV0
byBzZWNvbmRQcmltZUZhY3RvciA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLnEpOworICAgIGlm
ICghc2Vjb25kUHJpbWVGYWN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICgh
V1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kcSwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNS
VEV4cG9uZW50KSkKKyAgICBhdXRvIHNlY29uZEZhY3RvckNSVEV4cG9uZW50ID0gYmFzZTY0VVJM
RGVjb2RlKGtleURhdGEuZHEpOworICAgIGlmICghc2Vjb25kRmFjdG9yQ1JURXhwb25lbnQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5
RGF0YS5xaSwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KSkKKyAgICBhdXRv
IHNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEucWkp
OworICAgIGlmICghc2Vjb25kRmFjdG9yQ1JUQ29lZmZpY2llbnQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGZpcnN0UHJp
bWVJbmZvOworICAgIGZpcnN0UHJpbWVJbmZvLnByaW1lRmFjdG9yID0gV1RGTW92ZSgqZmlyc3RQ
cmltZUZhY3Rvcik7CisgICAgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZN
b3ZlKCpmaXJzdEZhY3RvckNSVEV4cG9uZW50KTsKKyAgICAKKyAgICBDcnlwdG9LZXlSU0FDb21w
b25lbnRzOjpQcmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOworICAgIHNlY29uZFByaW1lSW5mby5w
cmltZUZhY3RvciA9IFdURk1vdmUoKnNlY29uZFByaW1lRmFjdG9yKTsKKyAgICBzZWNvbmRQcmlt
ZUluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZNb3ZlKCpzZWNvbmRGYWN0b3JDUlRFeHBvbmVu
dCk7CisgICAgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50ID0gV1RGTW92ZSgq
c2Vjb25kRmFjdG9yQ1JUQ29lZmZpY2llbnQpOworCiAgICAgaWYgKCFrZXlEYXRhLm90aCkgewot
ICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50
czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZN
b3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJp
bWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCB7IH0pOworICAgICAgICBhdXRvIHBy
aXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0
ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKCptb2R1bHVzKSwgV1RGTW92ZSgqZXhwb25lbnQp
LCBXVEZNb3ZlKCpwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RG
TW92ZShzZWNvbmRQcmltZUluZm8pLCB7IH0pOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxk
IG5vdCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJl
dHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRz
LCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAKICAgICBWZWN0b3I8Q3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclByaW1lSW5mb3M7CiAgICAgZm9yIChjb25zdCBh
dXRvJiB2YWx1ZSA6IGtleURhdGEub3RoLnZhbHVlKCkpIHsKLSAgICAgICAgQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87Ci0gICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxE
ZWNvZGUodmFsdWUuciwgaW5mby5wcmltZUZhY3RvcikpCisgICAgICAgIGF1dG8gcHJpbWVGYWN0
b3IgPSBiYXNlNjRVUkxEZWNvZGUodmFsdWUucik7CisgICAgICAgIGlmICghcHJpbWVGYWN0b3Ip
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVS
TERlY29kZSh2YWx1ZS5kLCBpbmZvLmZhY3RvckNSVEV4cG9uZW50KSkKKyAgICAgICAgYXV0byBm
YWN0b3JDUlRFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZSh2YWx1ZS5kKTsKKyAgICAgICAgaWYg
KCFmYWN0b3JDUlRFeHBvbmVudCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKHZhbHVlLnQsIGluZm8uZmFjdG9yQ1JUQ29lZmZp
Y2llbnQpKQorICAgICAgICBhdXRvIGZhY3RvckNSVENvZWZmaWNpZW50ID0gYmFzZTY0VVJMRGVj
b2RlKHZhbHVlLnQpOworICAgICAgICBpZiAoIWZhY3RvckNSVENvZWZmaWNpZW50KQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG90aGVyUHJpbWVJbmZvcy5hcHBlbmQoaW5m
byk7CisKKyAgICAgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87Cisg
ICAgICAgIGluZm8ucHJpbWVGYWN0b3IgPSBXVEZNb3ZlKCpwcmltZUZhY3Rvcik7CisgICAgICAg
IGluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZNb3ZlKCpmYWN0b3JDUlRFeHBvbmVudCk7Cisg
ICAgICAgIGluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQgPSBXVEZNb3ZlKCpmYWN0b3JDUlRDb2Vm
ZmljaWVudCk7CisKKyAgICAgICAgb3RoZXJQcmltZUluZm9zLmFwcGVuZChXVEZNb3ZlKGluZm8p
KTsKICAgICB9CiAKLSAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKG1vZHVs
dXMpLCBXVEZNb3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpLCBXVEZNb3Zl
KGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCBXVEZNb3ZlKG90aGVy
UHJpbWVJbmZvcykpOworICAgIGF1dG8gcHJpdmF0ZUtleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlS
U0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKFdURk1vdmUoKm1v
ZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVudCksIFdURk1vdmUoKnByaXZhdGVFeHBvbmVudCksIFdU
Rk1vdmUoZmlyc3RQcmltZUluZm8pLCBXVEZNb3ZlKHNlY29uZFByaW1lSW5mbyksIFdURk1vdmUo
b3RoZXJQcmltZUluZm9zKSk7CiAgICAgLy8gTm90aWNlOiBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpTSEFfMSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkg
ZWZmZWN0IGlmIGhhc2ggaXMgV1RGOjpudWxsb3B0LgogICAgIHJldHVybiBDcnlwdG9LZXlSU0E6
OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRzLCBleHRyYWN0YWJsZSwgdXNh
Z2VzKTsKIH0KQEAgLTExOCwzMCArMTQwLDMwIEBAIEpzb25XZWJLZXkgQ3J5cHRvS2V5UlNBOjpl
eHBvcnRKd2soKSBjb24KICAgICBhdXRvIHJzYUNvbXBvbmVudHMgPSBleHBvcnREYXRhKCk7CiAK
ICAgICAvLyBwdWJsaWMga2V5Ci0gICAgcmVzdWx0Lm4gPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29t
cG9uZW50cy0+bW9kdWx1cygpKTsKLSAgICByZXN1bHQuZSA9IGJhc2U2NFVSTEVuY29kZShyc2FD
b21wb25lbnRzLT5leHBvbmVudCgpKTsKKyAgICByZXN1bHQubiA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5tb2R1bHVzKCkpKTsKKyAgICByZXN1bHQuZSA9IG1h
a2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5leHBvbmVudCgpKSk7CiAg
ICAgaWYgKHJzYUNvbXBvbmVudHMtPnR5cGUoKSA9PSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpU
eXBlOjpQdWJsaWMpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvLyBwcml2YXRlIGtl
eQotICAgIHJlc3VsdC5kID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnByaXZhdGVF
eHBvbmVudCgpKTsKKyAgICByZXN1bHQuZCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChy
c2FDb21wb25lbnRzLT5wcml2YXRlRXhwb25lbnQoKSkpOwogICAgIGlmICghcnNhQ29tcG9uZW50
cy0+aGFzQWRkaXRpb25hbFByaXZhdGVLZXlQYXJhbWV0ZXJzKCkpCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAKLSAgICByZXN1bHQucCA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5m
aXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9yKTsKLSAgICByZXN1bHQucSA9IGJhc2U2NFVSTEVu
Y29kZShyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5wcmltZUZhY3Rvcik7Ci0gICAg
cmVzdWx0LmRwID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPmZpcnN0UHJpbWVJbmZv
KCkuZmFjdG9yQ1JURXhwb25lbnQpOwotICAgIHJlc3VsdC5kcSA9IGJhc2U2NFVSTEVuY29kZShy
c2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBvbmVudCk7Ci0gICAg
cmVzdWx0LnFpID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5m
bygpLmZhY3RvckNSVENvZWZmaWNpZW50KTsKKyAgICByZXN1bHQucCA9IG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5maXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9y
KSk7CisgICAgcmVzdWx0LnEgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9u
ZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkucHJpbWVGYWN0b3IpKTsKKyAgICByZXN1bHQuZHAgPSBt
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8o
KS5mYWN0b3JDUlRFeHBvbmVudCkpOworICAgIHJlc3VsdC5kcSA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBv
bmVudCkpOworICAgIHJlc3VsdC5xaSA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FD
b21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRDb2VmZmljaWVudCkpOwogICAg
IGlmIChyc2FDb21wb25lbnRzLT5vdGhlclByaW1lSW5mb3MoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAKICAgICBWZWN0b3I8UnNhT3RoZXJQcmltZXNJbmZvPiBvdGg7CiAg
ICAgZm9yIChjb25zdCBhdXRvJiBpbmZvIDogcnNhQ29tcG9uZW50cy0+b3RoZXJQcmltZUluZm9z
KCkpIHsKICAgICAgICAgUnNhT3RoZXJQcmltZXNJbmZvIG90aGVySW5mbzsKLSAgICAgICAgb3Ro
ZXJJbmZvLnIgPSBiYXNlNjRVUkxFbmNvZGUoaW5mby5wcmltZUZhY3Rvcik7Ci0gICAgICAgIG90
aGVySW5mby5kID0gYmFzZTY0VVJMRW5jb2RlKGluZm8uZmFjdG9yQ1JURXhwb25lbnQpOwotICAg
ICAgICBvdGhlckluZm8udCA9IGJhc2U2NFVSTEVuY29kZShpbmZvLmZhY3RvckNSVENvZWZmaWNp
ZW50KTsKKyAgICAgICAgb3RoZXJJbmZvLnIgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQo
aW5mby5wcmltZUZhY3RvcikpOworICAgICAgICBvdGhlckluZm8uZCA9IG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChpbmZvLmZhY3RvckNSVEV4cG9uZW50KSk7CisgICAgICAgIG90aGVySW5m
by50ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKGluZm8uZmFjdG9yQ1JUQ29lZmZpY2ll
bnQpKTsKICAgICAgICAgb3RoLmFwcGVuZChXVEZNb3ZlKG90aGVySW5mbykpOwogICAgIH0KICAg
ICByZXN1bHQub3RoID0gV1RGTW92ZShvdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRv
L21hYy9DcnlwdG9LZXlFQ01hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcsMTAgKzE5NywxMCBAQCBib29sIENyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVu
CiAKICAgICBpZiAoVU5MSUtFTFkoKHNpemUgIT0gcHVibGljS2V5U2l6ZSkgJiYgKHNpemUgIT0g
cHJpdmF0ZUtleVNpemUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGp3ay54ID0gV1RG
OjpiYXNlNjRVUkxFbmNvZGUocmVzdWx0LmRhdGEoKSArIDEsIGtleVNpemVJbkJ5dGVzKTsKLSAg
ICBqd2sueSA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHJlc3VsdC5kYXRhKCkgKyBrZXlTaXplSW5C
eXRlcyArIDEsIGtleVNpemVJbkJ5dGVzKTsKKyAgICBqd2sueCA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsgMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2su
eSA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUlu
Qnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRlcykpOwogICAgIGlmIChzaXplID4gcHVibGljS2V5U2l6
ZSkKLSAgICAgICAgandrLmQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShyZXN1bHQuZGF0YSgpICsg
cHVibGljS2V5U2l6ZSwga2V5U2l6ZUluQnl0ZXMpOworICAgICAgICBqd2suZCA9IG1ha2VTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6
ZUluQnl0ZXMpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1w
b3J0IDxDb21tb25DcnlwdG8vQ29tbW9uU3ltbWV0cmljS2V5d3JhcC5oPgogI2ltcG9ydCA8Y3J0
X2V4dGVybnMuaD4KICNpbXBvcnQgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CisjaW1w
b3J0IDx3dGYvT3B0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5
U1BJLmg+CkBAIC04MCwxMSArODEsMTEgQEAgc3RhdGljIE5TU3RyaW5nKiBtYXN0ZXJLZXlBY2Nv
dW50TmFtZUZvcgogICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImNvbS5h
cHBsZS5XZWJLaXQuV2ViQ3J5cHRvLm1hc3RlcislQCIsIGJ1bmRsZUlkZW50aWZpZXJdOwogfQog
Ci1zdGF0aWMgYm9vbCBjcmVhdGVBbmRTdG9yZU1hc3RlcktleShWZWN0b3I8dWludDhfdD4mIG1h
c3RlcktleURhdGEpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBjcmVhdGVBbmRT
dG9yZU1hc3RlcktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVn
ZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFscykpOwogCi0gICAgbWFzdGVy
S2V5RGF0YS5yZXNpemUobWFzdGVyS2V5U2l6ZUluQnl0ZXMpOworICAgIFZlY3Rvcjx1aW50OF90
PiBtYXN0ZXJLZXlEYXRhKG1hc3RlcktleVNpemVJbkJ5dGVzKTsKICAgICBhdXRvIHJjID0gQ0NS
YW5kb21HZW5lcmF0ZUJ5dGVzKG1hc3RlcktleURhdGEuZGF0YSgpLCBtYXN0ZXJLZXlEYXRhLnNp
emUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmMgPT0ga0NDU3VjY2Vzcyk7CiAKQEAgLTEwNyw3
ICsxMDgsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVBbmRTdG9yZU1hc3RlcktleShWZWN0CiAgICAg
c3RhdHVzID0gU2VjQWNjZXNzQ3JlYXRlKChfX2JyaWRnZSBDRlN0cmluZ1JlZilsb2NhbGl6ZWRJ
dGVtTmFtZSwgbnVsbHB0ciwgJmFjY2Vzc1JlZik7CiAgICAgaWYgKHN0YXR1cykgewogICAgICAg
ICBXVEZMb2dBbHdheXMoIkNhbm5vdCBjcmVhdGUgYSBzZWN1cml0eSBhY2Nlc3Mgb2JqZWN0IGZv
ciBzdG9yaW5nIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IH0KICAgICBSZXRhaW5QdHI8U2VjQWNjZXNzUmVmPiBhY2Nlc3MgPSBhZG9wdENGKGFjY2Vzc1Jl
Zik7CiAKQEAgLTEyMCwxOSArMTIxLDE4IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICBpZiAoc3RhdHVz
KSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IGNyZWF0ZSBhIHRydXN0ZWQgYXBwbGlj
YXRpb24gb2JqZWN0IGZvciBzdG9yaW5nIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIs
IChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIH0KICAgICBSZXRhaW5QdHI8U2VjVHJ1c3RlZEFwcGxpY2F0aW9uUmVm
PiB0cnVzdGVkQXBwID0gYWRvcHRDRih0cnVzdGVkQXBwUmVmKTsKIAogICAgIHN0YXR1cyA9IFNl
Y0FDTFNldENvbnRlbnRzKGFjbCwgKF9fYnJpZGdlIENGQXJyYXlSZWYpQFsgKF9fYnJpZGdlIGlk
KXRydXN0ZWRBcHAuZ2V0KCkgXSwgKF9fYnJpZGdlIENGU3RyaW5nUmVmKWxvY2FsaXplZEl0ZW1O
YW1lLCBrU2VjS2V5Y2hhaW5Qcm9tcHRSZXF1aXJlUGFzc3BoYXNlKTsKICAgICBpZiAoc3RhdHVz
KSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IHNldCBBQ0wgZm9yIFdlYkNyeXB0byBt
YXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KICNlbmRpZgogCi0gICAgVmVj
dG9yPGNoYXI+IGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhOwotICAgIGJhc2U2NEVuY29kZSht
YXN0ZXJLZXlEYXRhLCBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YSk7CisgICAgYXV0byBiYXNl
NjRFbmNvZGVkTWFzdGVyS2V5RGF0YSA9IGJhc2U2NEVuY29kZShtYXN0ZXJLZXlEYXRhKTsKIAog
ICAgIC8vIENhbm5vdCB1c2Uga1NlY0NsYXNzS2V5IGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVt
LzE2MDY4MjA3Pi4KICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBAewpAQCAtMTUwLDEy
ICsxNTAsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgc3RhdHVz
ID0gU2VjSXRlbUFkZCgoQ0ZEaWN0aW9uYXJ5UmVmKWF0dHJpYnV0ZXMsIG51bGxwdHIpOwogICAg
IGlmIChzdGF0dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3Qgc3RvcmUgV2ViQ3J5
cHRvIG1hc3RlciBrZXksIGVycm9yICVkIiwgKGludClzdGF0dXMpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiB0
cnVlOworCisgICAgcmV0dXJuIG1hc3RlcktleURhdGE7CiB9CiAKLXN0YXRpYyBib29sIGZpbmRN
YXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXlEYXRhKQorc3RhdGljIE9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gZmluZE1hc3RlcktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
aGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFs
cykpOwogCkBAIC0xNzAsMjAgKzE3MSwyNSBAQCBzdGF0aWMgYm9vbCBmaW5kTWFzdGVyS2V5KFZl
Y3Rvcjx1aW50OF90CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBpZiAoc3RhdHVzICE9IGVy
clNlY0l0ZW1Ob3RGb3VuZCAmJiBzdGF0dXMgIT0gZXJyU2VjVXNlckNhbmNlbGVkKQogICAgICAg
ICAgICAgV1RGTG9nQWx3YXlzKCJDb3VsZCBub3QgZmluZCBXZWJDcnlwdG8gbWFzdGVyIGtleSBp
biBLZXljaGFpbiwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPENG
RGF0YVJlZj4ga2V5RGF0YSA9IGFkb3B0Q0Yoa2V5RGF0YVJlZik7Ci0KLSAgICBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEgPSB2ZWN0b3JGcm9tTlNEYXRhKChfX2Jy
aWRnZSBOU0RhdGEgKilrZXlEYXRhLmdldCgpKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlKChj
b25zdCBjaGFyKiliYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YS5kYXRhKCksIGJhc2U2NEVuY29k
ZWRNYXN0ZXJLZXlEYXRhLnNpemUoKSwgbWFzdGVyS2V5RGF0YSk7CisgICAgcmV0dXJuIGJhc2U2
NERlY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKGtl
eURhdGEuZ2V0KCkpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGtleURhdGEuZ2V0KCkpKTsKIH0KIAotYm9v
bCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5
KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkK
IHsKLSAgICBpZiAoIWZpbmRNYXN0ZXJLZXkobWFzdGVyS2V5KSAmJiAhY3JlYXRlQW5kU3RvcmVN
YXN0ZXJLZXkobWFzdGVyS2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJFTEVBU0Vf
QVNTRVJUKG1hc3RlcktleS5zaXplKCkgPT0gbWFzdGVyS2V5U2l6ZUluQnl0ZXMpOwotICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChhdXRvIG1hc3RlcktleSA9IGZpbmRNYXN0ZXJLZXkoKSkgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtYXN0ZXJLZXktPnNpemUoKSA9PSBtYXN0ZXJLZXlTaXpl
SW5CeXRlcyk7CisgICAgICAgIHJldHVybiBtYXN0ZXJLZXk7CisgICAgfQorCisgICAgaWYgKGF1
dG8gbWFzdGVyS2V5ID0gY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoKSkgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtYXN0ZXJLZXktPnNpemUoKSA9PSBtYXN0ZXJLZXlTaXplSW5CeXRlcyk7Cisg
ICAgICAgIHJldHVybiBtYXN0ZXJLZXk7CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIH0KIAogYm9vbCBkZWxldGVEZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNT
TC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2VyaWFs
aXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2VyaWFsaXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDE0IEBACiAjaWYgRU5BQkxFKFdFQl9DUllQ
VE8pCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleShWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICBVTlVTRURfUEFSQU0obWFzdGVyS2V5KTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiAvLyBJbml0aWFsbHkgdGhlc2UgaGVscGVyIGZ1
bmN0aW9ucyB3ZXJlIGludGVuZGVkIHRvIHBlcmZvcm0gS0VLIHdyYXBwaW5nIGFuZCB1bndyYXBw
aW5nLApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsMjYgKzMzMywxMiBAQCB2b2lkIEZpbGVS
ZWFkZXJMb2FkZXI6OmNvbnZlcnRUb1RleHQoKQogCiB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNv
bnZlcnRUb0RhdGFVUkwoKQogewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoImRhdGE6Iik7Ci0KICAgICBpZiAoIW1fYnl0ZXNMb2FkZWQpIHsK
LSAgICAgICAgbV9zdHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIG1f
c3RyaW5nUmVzdWx0ID0gImRhdGE6Il9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKG1fZGF0YVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtIik7Ci0gICAgZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVuZCht
X2RhdGFUeXBlKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjtiYXNlNjQsIik7Ci0KLSAg
ICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgIGJhc2U2NEVuY29kZShtX3Jhd0RhdGEtPmRhdGEoKSwg
bV9ieXRlc0xvYWRlZCwgb3V0KTsKLSAgICBvdXQuYXBwZW5kKCdcMCcpOwotICAgIGJ1aWxkZXIu
YXBwZW5kKG91dC5kYXRhKCkpOwotCi0gICAgbV9zdHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3Ry
aW5nKCk7CisgICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3RyaW5nKCJkYXRhOjtiYXNlNjQsIiwg
bV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0
YVR5cGUsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQpLCAn
XDAnKTsKIH0KIAogYm9vbCBGaWxlUmVhZGVyTG9hZGVyOjppc0NvbXBsZXRlZCgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOSwxNCArNDI5LDE0IEBAIHN0ZDo6dW5pcXVlX3B0
cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNI
QTE6OkRpZ2VzdCBhdHRyc0hhc2g7CiAgICAgICAgICAgICBhdHRyc1NIQTEuY29tcHV0ZUhhc2go
YXR0cnNIYXNoKTsKLSAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0gYmFzZTY0RW5jb2Rl
KGF0dHJzSGFzaC5kYXRhKCksIDEwKTsKKyAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0g
bWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGF0dHJzSGFzaC5kYXRhKCksIDEwKSk7CiAgICAgICAg
ICAgICBhZGRTdHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaCho
YXNoKTsKLSAgICBkaWdlc3QtPnNoYTEgPSBiYXNlNjRFbmNvZGUoaGFzaC5kYXRhKCksIDEwKTsK
KyAgICBkaWdlc3QtPnNoYTEgPSBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoaGFzaC5kYXRhKCks
IDEwKSk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+
YWRkKGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsMTEgKzU5OCwxMSBAQCBib29sIEluc3BlY3RvckZy
b250ZW5kSG9zdDo6c2hvd0NlcnRpZmljCiAgICAgaWYgKCFtX2NsaWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYgKCFiYXNlNjRE
ZWNvZGUoc2VyaWFsaXplZENlcnRpZmljYXRlLCBkYXRhKSkKKyAgICBhdXRvIGRhdGEgPSBiYXNl
NjREZWNvZGUoc2VyaWFsaXplZENlcnRpZmljYXRlKTsKKyAgICBpZiAoIWRhdGEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2Rlcihk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CiAgICAgT3B0aW9uYWw8Q2VydGlm
aWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUlu
Zm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB1bnNpZ25lZCBOZXR3b3JrUmVzb3VyY2Vz
RGF0YTo6UmVzb3VyY2VECiAgICAgICAgIG1fY29udGVudCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5k
Rmx1c2gobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIG1fYmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0gICAgICAgIG1fY29udGVudCA9IGJhc2U2
NEVuY29kZShtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCk7CisgICAgICAgIG1fY29u
dGVudCA9IG1ha2VTdHJpbmcoV1RGOjpiYXNlNjRFbmNvZGVkKG1fZGF0YUJ1ZmZlci0+ZGF0YSgp
LCBkYXRhTGVuZ3RoKSk7CiAgICAgfQogCiAgICAgbV9kYXRhQnVmZmVyID0gbnVsbHB0cjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwOSw3
ICsxNzA5LDcgQEAgc3RhdGljIFN0cmluZyBjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saQogICAg
IGF1dG8gY3J5cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0
b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVz
KGNvbnRlbnQuZGF0YSgpLCBjb250ZW50LnNpemUoKSk7CiAgICAgYXV0byBkaWdlc3QgPSBjcnlw
dG9EaWdlc3QtPmNvbXB1dGVIYXNoKCk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1Ni0i
LCBiYXNlNjRFbmNvZGUoZGlnZXN0LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOworICAgIHJldHVy
biBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChkaWdlc3QuZGF0YSgpLCBkaWdl
c3Quc2l6ZSgpKSk7CiB9CiAKIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01B
Z2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwgTm9kZVRvSWRN
YXAqIG5vZGVzTWFwKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAgUmVmPFByb3RvY29sOjpOZXR3
b3JrOjpXZWJTb2NrZXRGcmFtZT4gYgogICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6V2Vi
U29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQog
ICAgICAgICAuc2V0TWFzayhmcmFtZS5tYXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShm
cmFtZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJh
bWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNlNjRFbmNvZGUoZnJhbWUucGF5
bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpCisgICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFt
ZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUu
cGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQo
ZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpKQogICAgICAgICAuc2V0UGF5bG9h
ZExlbmd0aChmcmFtZS5wYXlsb2FkTGVuZ3RoKQogICAgICAgICAucmVsZWFzZSgpOwogfQpAQCAt
NTg2LDcgKzU4Niw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGEK
ICAgICAgICAgLy8gT2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBhIGRl
Y29kZXIsIGJ1dCBmb3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAgICAg
IC8vIFN5bmMgWEhScyBtYXkgbm90IGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5vbi1z
eW5jIFhIUnMgdXN1YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAgICAg
ICAgaWYgKG1fbG9hZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFyZXNv
dXJjZURhdGEtPmhhc0J1ZmZlcmVkRGF0YSgpICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291
cmNlKCkpCi0gICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChy
ZXF1ZXN0SWQsIGJhc2U2NEVuY29kZShkYXRhLCBkYXRhTGVuZ3RoKSwgdHJ1ZSk7CisgICAgICAg
ICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIG1ha2VT
dHJpbmcoYmFzZTY0RW5jb2RlZChkYXRhLCBkYXRhTGVuZ3RoKSksIHRydWUpOwogICAgIH0KIAog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kYXRhUmVjZWl2ZWQocmVxdWVzdElkLCB0aW1lc3Rh
bXAoKSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGFMZW5ndGgpOwpAQCAtMTAwNCw3ICsxMDA0LDcg
QEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0bwogCiAgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIFdURjo6UGVyc2lzdGVuY2U6OkNvZGVy
PFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZShlbmNvZGVyLCBjZXJ0aWZpY2F0ZS52
YWx1ZSgpKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGVu
Y29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKSk7CiB9CiAKIFdlYlNvY2tldCog
SW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9j
b2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQpAQCAtMTIwMiwxMSArMTIwMiwxMSBA
QCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOCiAgICAgICAgIHJlcXVl
c3Quc2V0SFRUUEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0SGVhZGVycykpOwogICAgIH0K
ICAgICBpZiAoISFwb3N0RGF0YSkgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwot
ICAgICAgICBpZiAoIWJhc2U2NERlY29kZShwb3N0RGF0YSwgYnVmZmVyKSkKKyAgICAgICAgYXV0
byBidWZmZXIgPSBiYXNlNjREZWNvZGUocG9zdERhdGEpOworICAgICAgICBpZiAoIWJ1ZmZlcikK
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZl
biBwb3N0RGF0YSJfcyk7CiAKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShGb3JtRGF0YTo6
Y3JlYXRlKGJ1ZmZlcikpOworICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KEZvcm1EYXRhOjpj
cmVhdGUoV1RGTW92ZSgqYnVmZmVyKSkpOwogICAgIH0KICAgICAvLyBGSVhNRTogZmlndXJlIG91
dCBob3cgdG8gaWRlbnRpZnkgd2hlbiBhIHJlcXVlc3QgaGFzIGJlZW4gb3ZlcnJpZGRlbiB3aGVu
IHdlIGFkZCB0aGlzIHRvIHRoZSBmcm9udGVuZC4KICAgICBwZW5kaW5nUmVxdWVzdC0+Y29udGlu
dWVXaXRoUmVxdWVzdChyZXF1ZXN0KTsKQEAgLTEyNDIsMTEgKzEyNDIsMTEgQEAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gb3ZlcnJpZGVEYXRhOwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1
ZmZlcikpCisgICAgICAgIGF1dG8gYnVmZmVyID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQpOworICAg
ICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5h
YmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zKTsKIAotICAgICAgICBvdmVycmlkZURhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICBvdmVycmlk
ZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVs
c2UKICAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC51
dGY4KCkuZGF0YSgpLCBjb250ZW50LnV0ZjgoKS5sZW5ndGgoKSk7CiAKQEAgLTEyNjgsMTEgKzEy
NjgsMTEgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgogCiAgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAg
ICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShj
b250ZW50LCBidWZmZXIpKQorICAgICAgICBhdXRvIGJ1ZmZlciA9IGJhc2U2NERlY29kZShjb250
ZW50KTsKKyAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfcyk7CiAKLSAgICAgICAgZGF0
YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIGRhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVsc2UKICAg
ICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwg
Y29udGVudC51dGY4KCkubGVuZ3RoKCkpOwogCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCBib29sIElu
c3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3VyCiAgICAgICAgIH0KIAogICAgICAgICAq
YmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGUoYnVm
ZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgKnJlc3VsdCA9IG1ha2VTdHJp
bmcoV1RGOjpiYXNlNjRFbmNvZGVkKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBib29sIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29uCiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZGF0YUNvbnRlbnQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaW5n
JiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0
KQogewogICAgIGlmICh3aXRoQmFzZTY0RW5jb2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNl
NjRFbmNvZGUoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1bHQgPSBtYWtlU3RyaW5nKGJhc2U2
NEVuY29kZWQoZGF0YSwgc2l6ZSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTExMDIsNyArMTEwMiw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG8KICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBh
cmNoaXZlIGZvciBtYWluIGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1
ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgIHJldHVybiBiYXNl
NjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgo
YnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChDRkRh
dGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkp
KSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTE4LDcgKzMxMTgsNyBAQCB1bnNpZ25lZCBsb25nIEZy
YW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTCiAgICAgICAgIEFTU0VSVCghbmV3UmVxdWVzdC5pc051
bGwoKSk7CiAKICAgICAgICAgaWYgKCFkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLm1heWJlTG9hZFN5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNl
LCBkYXRhKSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAgICAgICAg
IFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CiAgICAgICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSgqdGhpcywgaWRl
bnRpZmllciwgbmV3UmVxdWVzdCwgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgb3B0aW9ucywgb3Jp
Z2luYWxSZXF1ZXN0SGVhZGVycywgZXJyb3IsIHJlc3BvbnNlLCBidWZmZXIpOwogICAgICAgICAg
ICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CiAgICAgICAg
ICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLm1heWJlTG9hZEZh
bGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBGZXRjaE9wdGlvbnM7CiBjbGFzcyBXRUJDT1JF
X0VYUE9SVCBMb2FkZXJTdHJhdGVneSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZShGcmFtZSYsIENhY2hlZFJlc291cmNlJiwgUmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0
IFJlc291cmNlTG9hZGVyT3B0aW9ucyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiYmKT4mJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBGZXRj
aE9wdGlvbnMmLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29u
c3QgRmV0Y2hPcHRpb25zJiwgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHBhZ2VMb2FkQ29tcGxldGVkKFBhZ2UmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGJy
b3dzaW5nQ29udGV4dFJlbW92ZWQoRnJhbWUmKSA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL1ByaXZhdGVDbGlja01lYXN1cmVtZW50LmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1ByaXZhdGVDbGlja01lYXN1cmVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDEwICsxODksMTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudDo6RXBoZW1lcmFsUwogewogICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBpZiB3
ZSBjYW4gZG8gd2l0aCBhIHNpbXBsZSBsZW5ndGggY2hlY2sgaW5zdGVhZCBvZiBkZWNvZGluZy4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxOTQ1Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKLSAgICBpZiAoIWJhc2U2NFVSTERlY29kZShub25j
ZSwgZGlnZXN0KSkKKyAgICBhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShub25jZSk7Cisg
ICAgaWYgKCFkaWdlc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZGlnZXN0
LnNpemUoKSA9PSBFcGhlbWVyYWxTb3VyY2VOb25jZVJlcXVpcmVkTnVtYmVyT2ZCeXRlczsKKyAg
ICByZXR1cm4gZGlnZXN0LT5zaXplKCkgPT0gRXBoZW1lcmFsU291cmNlTm9uY2VSZXF1aXJlZE51
bWJlck9mQnl0ZXM7CiB9CiAKIHZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OnNldEVwaGVt
ZXJhbFNvdXJjZU5vbmNlKEVwaGVtZXJhbFNvdXJjZU5vbmNlJiYgbm9uY2UpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDE0ICs2OSwxNSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgCiAgICAgaWYgKGJ1ZmZl
ci5wb3NpdGlvbigpID09IGJlZ2luSGFzaFZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKICAgICBTdHJpbmdWaWV3IGhhc2hW
YWx1ZShiZWdpbkhhc2hWYWx1ZSwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbkhhc2hWYWx1ZSk7
Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoaGFzaFZhbHVlLCBkaWdlc3QsIEJhc2U2NFZhbGlkYXRl
UGFkZGluZykpIHsKLSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoaGFzaFZhbHVlLCBkaWdl
c3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CiAKLSAgICByZXR1
cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgV1RGTW92ZShkaWdl
c3QpIH07CisgICAgaWYgKGF1dG8gZGlnZXN0ID0gYmFzZTY0RGVjb2RlKGhhc2hWYWx1ZSwgQmFz
ZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsK
KworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShoYXNoVmFsdWUpKQorICAg
ICAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgV1RG
TW92ZSgqZGlnZXN0KSB9OworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogT3B0aW9u
YWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3Qo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIGJ1ZmZlcikKQEAgLTEyNCwxMyArMTI1LDEzIEBA
IE9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWcKIAogT3B0aW9uYWw8UmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0KGNvbnN0IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QmIGVuY29k
ZWREaWdlc3QpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKLSAgICBpZiAoIWJhc2U2
NERlY29kZShlbmNvZGVkRGlnZXN0LmRpZ2VzdCwgZGlnZXN0LCBCYXNlNjRWYWxpZGF0ZVBhZGRp
bmcpKSB7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGVuY29kZWREaWdlc3QuZGlnZXN0
LCBkaWdlc3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CisgICAg
aWYgKGF1dG8gZGlnZXN0ID0gYmFzZTY0RGVjb2RlKGVuY29kZWREaWdlc3QuZGlnZXN0LCBCYXNl
NjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICByZXR1cm4gUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERpZ2VzdC5hbGdvcml0aG0sIFdURk1vdmUo
KmRpZ2VzdCkgfTsKKworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShlbmNv
ZGVkRGlnZXN0LmRpZ2VzdCkpCisgICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QgeyBlbmNvZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZSgqZGlnZXN0KSB9OwogCi0g
ICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGVuY29kZWREaWdlc3QuYWxn
b3JpdGhtLCBXVEZNb3ZlKGRpZ2VzdCkgfTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
CiBzdGF0aWMgUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobSB0b0NyeXB0b0RpZ2VzdEFsZ29y
aXRobShSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG0pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1M
QXJjaGl2ZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw5ICsx
NjcsNyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlCiAKICAgICBm
b3IgKGF1dG8mIHJlc291cmNlIDogcmVzb3VyY2VzKSB7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
Y2xlYXIoKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNvdXJjZUJvdW5k
YXJ5KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQtVHlwZTogIik7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291cmNlLm1pbWVUeXBlKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNvdXJjZUJvdW5kYXJ5LCAiQ29udGVudC1UeXBl
OiAiLCByZXNvdXJjZS5taW1lVHlwZSk7CiAKICAgICAgICAgY29uc3QgY2hhciogY29udGVudEVu
Y29kaW5nID0gbnVsbHB0cjsKICAgICAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSmF2YVNjcmlwdE1JTUVUeXBlKHJlc291cmNlLm1pbWVUeXBlKSB8fCBNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUocmVzb3VyY2UubWltZVR5cGUpKQpAQCAt
MTc3LDExICsxNzUsNyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRl
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZyA9IGJhc2U2NDsKIAot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rp
bmc6ICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjb250ZW50RW5jb2RpbmcpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtTG9jYXRpb246ICIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyZXNvdXJjZS51cmwuc3RyaW5nKCkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcblxyXG4iKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIlxyXG5Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAiLCBjb250ZW50RW5j
b2RpbmcsICJcclxuQ29udGVudC1Mb2NhdGlvbjogIiwgcmVzb3VyY2UudXJsLnN0cmluZygpLCAi
XHJcblxyXG4iKTsKIAogICAgICAgICBhc2NpaVN0cmluZyA9IHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKS51dGY4KCk7CiAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEo
KSwgYXNjaWlTdHJpbmcubGVuZ3RoKCkpOwpAQCAtMTg5LDE1ICsxODMsMTYgQEAgUmVmPFNoYXJl
ZEJ1ZmZlcj4gTUhUTUxBcmNoaXZlOjpnZW5lcmF0ZQogICAgICAgICAvLyBGSVhNRTogaWRlYWxs
eSB3ZSB3b3VsZCBlbmNvZGUgdGhlIGNvbnRlbnQgYXMgYSBzdHJlYW0gd2l0aG91dCBoYXZpbmcg
dG8gZmV0Y2ggaXQgYWxsLgogICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gcmVzb3VyY2UuZGF0
YS0+ZGF0YSgpOwogICAgICAgICBzaXplX3QgZGF0YUxlbmd0aCA9IHJlc291cmNlLmRhdGEtPnNp
emUoKTsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOworICAgICAgICBWZWN0b3I8
dWludDhfdD4gZW5jb2RlZERhdGE7CiAgICAgICAgIGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGlu
ZywgcXVvdGVkUHJpbnRhYmxlKSkgewotICAgICAgICAgICAgcXVvdGVkUHJpbnRhYmxlRW5jb2Rl
KGRhdGEsIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhKTsKKyAgICAgICAgICAgIGVuY29kZWREYXRh
ID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRh
dGEpLCBkYXRhTGVuZ3RoKTsKICAgICAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGVuY29kZWRE
YXRhLmRhdGEoKSwgZW5jb2RlZERhdGEuc2l6ZSgpKTsKICAgICAgICAgICAgIG1odG1sRGF0YS0+
YXBwZW5kKCJcclxuIiwgMik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQo
IXN0cmNtcChjb250ZW50RW5jb2RpbmcsIGJhc2U2NCkpOwogICAgICAgICAgICAgLy8gV2UgYXJl
IG5vdCBzcGVjaWZ5aW5nIGluc2VydExGcyA9IHRydWUgYmVsb3cgYXMgaXQgd291bGQgY3V0IHRo
ZSBsaW5lcyB3aXRoIExGcyBhbmQgTUhUTUwgcmVxdWlyZXMgQ1JMRnMuCi0gICAgICAgICAgICBi
YXNlNjRFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGEpOworICAgICAgICAgICAg
aWYgKGF1dG8gYmFzZTY0RW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGUoZGF0YSwgZGF0YUxlbmd0
aCkpCisgICAgICAgICAgICAgICAgZW5jb2RlZERhdGEgPSBXVEZNb3ZlKCpiYXNlNjRFbmNvZGVk
RGF0YSk7CiAgICAgICAgICAgICBjb25zdCBzaXplX3QgbWF4aW11bUxpbmVMZW5ndGggPSA3NjsK
ICAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IDA7CiAgICAgICAgICAgICBzaXplX3QgZW5jb2Rl
ZERhdGFMZW5ndGggPSBlbmNvZGVkRGF0YS5zaXplKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MiwxNiArMTkyLDE5IEBAIFJlZlB0cjxBcmNoaXZl
UmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCi0gICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAg
ICAgc3dpdGNoIChtaW1lSGVhZGVyLmNvbnRlbnRUcmFuc2ZlckVuY29kaW5nKCkpIHsKLSAgICBj
YXNlIE1JTUVIZWFkZXI6OkJhc2U2NDoKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVu
dC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCksIGRhdGEpKSB7CisgICAgY2FzZSBNSU1FSGVhZGVy
OjpCYXNlNjQ6IHsKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250
ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGlmICghZGVjb2RlZERhdGEp
IHsKICAgICAgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBiYXNlNjQgY29udGVudCBmb3IgTUhU
TUwgcGFydC4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CisgICAg
ICAgIGRhdGEgPSBXVEZNb3ZlKCpkZWNvZGVkRGF0YSk7CiAgICAgICAgIGJyZWFrOworICAgIH0K
ICAgICBjYXNlIE1JTUVIZWFkZXI6OlF1b3RlZFByaW50YWJsZToKLSAgICAgICAgcXVvdGVkUHJp
bnRhYmxlRGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+c2l6ZSgpLCBkYXRhKTsKKyAg
ICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURlY29kZShjb250ZW50LT5kYXRhKCksIGNvbnRl
bnQtPnNpemUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTUlNRUhlYWRlcjo6U2V2ZW5C
aXQ6CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpCaW5hcnk6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2Nv
YS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NvY29hL1By
aXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICsz
NCwxMCBAQCBib29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBCiB7CiAjaWYg
SEFWRShSU0FfQlNTQSkKICAgICB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBzZXJ2ZXJQdWJs
aWNLZXlEYXRhOwotICAgICAgICBpZiAoIWJhc2U2NFVSTERlY29kZShzZXJ2ZXJQdWJsaWNLZXlC
YXNlNjRVUkwsIHNlcnZlclB1YmxpY0tleURhdGEpKQorICAgICAgICBhdXRvIHNlcnZlclB1Ymxp
Y0tleURhdGEgPSBiYXNlNjRVUkxEZWNvZGUoc2VydmVyUHVibGljS2V5QmFzZTY0VVJMKTsKKyAg
ICAgICAgaWYgKCFzZXJ2ZXJQdWJsaWNLZXlEYXRhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBhdXRvIHNlcnZlclB1YmxpY0tleSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2Nd
IGluaXRXaXRoQnl0ZXM6c2VydmVyUHVibGljS2V5RGF0YS5kYXRhKCkgbGVuZ3RoOnNlcnZlclB1
YmxpY0tleURhdGEuc2l6ZSgpXSk7CisgICAgICAgIGF1dG8gc2VydmVyUHVibGljS2V5ID0gYWRv
cHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzZXJ2ZXJQdWJsaWNLZXlEYXRhLT5k
YXRhKCkgbGVuZ3RoOnNlcnZlclB1YmxpY0tleURhdGEtPnNpemUoKV0pOwogCiAgICAgICAgIC8v
IEZJWE1FKDIyMjAxOCk6IENoZWNrIGVycm9yLgogICAgICAgICBtX3NvdXJjZVVubGlua2FibGVU
b2tlbi5ibGluZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1JTQUJTU0FUb2tlbkJsaW5kZXJJbnN0
YW5jZSgpIGluaXRXaXRoUHVibGljS2V5OnNlcnZlclB1YmxpY0tleS5nZXQoKSBlcnJvcjpudWxs
cHRyXSk7CkBAIC01MCw3ICs1MCw3IEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OmNh
bGN1bGF0ZUEKICAgICBpZiAoIW1fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4udmFs
dWVCYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxpbmthYmxlVG9r
ZW4ud2FpdGluZ1Rva2VuIGJsaW5kZWRNZXNzYWdlXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJs
ZVRva2VuLndhaXRpbmdUb2tlbiBibGluZGVkTWVzc2FnZV0ubGVuZ3RoKTsKKyAgICBtX3NvdXJj
ZVVubGlua2FibGVUb2tlbi52YWx1ZUJhc2U2NFVSTCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5j
b2RlZChbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuIGJsaW5kZWRNZXNzYWdl
XS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBibGluZGVkTWVz
c2FnZV0ubGVuZ3RoKSk7CiAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShzZXJ2ZXJQdWJsaWNLZXlCYXNlNjRVUkwpOwpAQCAtNjUsMTAgKzY1LDEwIEBAIGJvb2wgUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUEKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gc2VydmVyUmVzcG9uc2VEYXRhOwotICAg
ICAgICBpZiAoIWJhc2U2NFVSTERlY29kZShzZXJ2ZXJSZXNwb25zZUJhc2U2NFVSTCwgc2VydmVy
UmVzcG9uc2VEYXRhKSkKKyAgICAgICAgYXV0byBzZXJ2ZXJSZXNwb25zZURhdGEgPSBiYXNlNjRV
UkxEZWNvZGUoc2VydmVyUmVzcG9uc2VCYXNlNjRVUkwpOworICAgICAgICBpZiAoIXNlcnZlclJl
c3BvbnNlRGF0YSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byBzZXJ2
ZXJSZXNwb25zZSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2VydmVy
UmVzcG9uc2VEYXRhLmRhdGEoKSBsZW5ndGg6c2VydmVyUmVzcG9uc2VEYXRhLnNpemUoKV0pOwor
ICAgICAgICBhdXRvIHNlcnZlclJlc3BvbnNlID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5p
dFdpdGhCeXRlczpzZXJ2ZXJSZXNwb25zZURhdGEtPmRhdGEoKSBsZW5ndGg6c2VydmVyUmVzcG9u
c2VEYXRhLT5zaXplKCldKTsKIAogICAgICAgICAvLyBGSVhNRSgyMjIwMTgpOiBDaGVjayBlcnJv
ci4KICAgICAgICAgbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiA9IFttX3NvdXJj
ZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4gYWN0aXZhdGVUb2tlbldpdGhTZXJ2ZXJSZXNw
b25zZTpzZXJ2ZXJSZXNwb25zZS5nZXQoKSBlcnJvcjpudWxscHRyXTsKQEAgLTc3LDkgKzc3LDkg
QEAgYm9vbCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogICAgIH0KIAogICAg
IFNvdXJjZVNlY3JldFRva2VuIHRva2VuOwotICAgIHRva2VuLnRva2VuQmFzZTY0VVJMID0gV1RG
OjpiYXNlNjRVUkxFbmNvZGUoW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gdG9r
ZW5Db250ZW50XS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gdG9r
ZW5Db250ZW50XS5sZW5ndGgpOwotICAgIHRva2VuLmtleUlEQmFzZTY0VVJMID0gV1RGOjpiYXNl
NjRVUkxFbmNvZGUoW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRdLmJ5
dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBrZXlJZF0ubGVuZ3RoKTsK
LSAgICB0b2tlbi5zaWduYXR1cmVCYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9z
b3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1cmVdLmJ5dGVzLCBbbV9zb3Vy
Y2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1cmVdLmxlbmd0aCk7CisgICAgdG9r
ZW4udG9rZW5CYXNlNjRVUkwgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW21fc291cmNl
VW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50XS5ieXRlcywgW21fc291cmNl
VW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50XS5sZW5ndGgpKTsKKyAgICB0
b2tlbi5rZXlJREJhc2U2NFVSTCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChbbV9zb3Vy
Y2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBrZXlJZF0uYnl0ZXMsIFttX3NvdXJjZVVubGlu
a2FibGVUb2tlbi5yZWFkeVRva2VuIGtleUlkXS5sZW5ndGgpKTsKKyAgICB0b2tlbi5zaWduYXR1
cmVCYXNlNjRVUkwgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW21fc291cmNlVW5saW5r
YWJsZVRva2VuLnJlYWR5VG9rZW4gc2lnbmF0dXJlXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJs
ZVRva2VuLnJlYWR5VG9rZW4gc2lnbmF0dXJlXS5sZW5ndGgpKTsKIAogICAgIG1fc291cmNlU2Vj
cmV0VG9rZW4gPSBXVEZNb3ZlKHRva2VuKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YnRvCiAg
ICAgaWYgKCFzdHJpbmdUb0VuY29kZS5pc0FsbExhdGluMSgpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKLSAgICByZXR1cm4gYmFzZTY0RW5j
b2RlKHN0cmluZ1RvRW5jb2RlLmxhdGluMSgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNl
NjRFbmNvZGVkKHN0cmluZ1RvRW5jb2RlLmxhdGluMSgpKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPFN0
cmluZz4gQmFzZTY0VXRpbGl0aWVzOjphdG9iKGNvbnN0IFN0cmluZyYgZW5jb2RlZFN0cmluZykK
QEAgLTQ2LDExICs0NiwxMSBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6
YXRvCiAgICAgaWYgKGVuY29kZWRTdHJpbmcuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKIAotICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoZW5j
b2RlZFN0cmluZywgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgfCBCYXNlNjRJZ25vcmVTcGFj
ZXNBbmROZXdMaW5lcyB8IEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikpCisgICAgYXV0byBkZWNv
ZGVkRGF0YSA9IGJhc2U2NERlY29kZShlbmNvZGVkU3RyaW5nLCB7IEJhc2U2NERlY29kZU9wdGlv
bnM6OlZhbGlkYXRlUGFkZGluZywgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5k
TmV3TGluZXMsIEJhc2U2NERlY29kZU9wdGlvbnM6OkRpc2NhcmRWZXJ0aWNhbFRhYiB9KTsKKyAg
ICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZENo
YXJhY3RlckVycm9yIH07CiAKLSAgICByZXR1cm4gU3RyaW5nKG91dC5kYXRhKCksIG91dC5zaXpl
KCkpOworICAgIHJldHVybiBTdHJpbmcoZGVjb2RlZERhdGEtPmRhdGEoKSwgZGVjb2RlZERhdGEt
PnNpemUoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMjc3NTY5
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0
OCw5ICsxODQ4LDggQEAgdm9pZCBQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZAog
ICAgIGlmICh1cmwucHJvdG9jb2xJc0RhdGEoKSAmJiB1cmwuc3RyaW5nKCkuc3RhcnRzV2l0aCgi
ZGF0YTp0ZXh0L2NzcztjaGFyc2V0PXV0Zi04O2Jhc2U2NCwiKSkgewogICAgICAgICBtX2RpZExv
YWRVc2VyU3R5bGVTaGVldCA9IHRydWU7CiAKLSAgICAgICAgVmVjdG9yPGNoYXI+IHN0eWxlU2hl
ZXRBc1VURjg7Ci0gICAgICAgIGlmIChiYXNlNjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVu
Y2VzKHVybC5zdHJpbmcoKS5zdWJzdHJpbmcoMzUpKSwgc3R5bGVTaGVldEFzVVRGOCwgQmFzZTY0
SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpKQotICAgICAgICAgICAgbV91c2VyU3R5bGVTaGVldCA9
IFN0cmluZzo6ZnJvbVVURjgoc3R5bGVTaGVldEFzVVRGOC5kYXRhKCksIHN0eWxlU2hlZXRBc1VU
Rjguc2l6ZSgpKTsKKyAgICAgICAgaWYgKGF1dG8gc3R5bGVTaGVldEFzVVRGOCA9IGJhc2U2NERl
Y29kZShkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnN0cmluZygpLnN1YnN0cmluZygzNSkp
LCBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykpCisgICAgICAg
ICAgICBtX3VzZXJTdHlsZVNoZWV0ID0gU3RyaW5nOjpmcm9tVVRGOChzdHlsZVNoZWV0QXNVVEY4
LT5kYXRhKCksIHN0eWxlU2hlZXRBc1VURjgtPnNpemUoKSk7CiAgICAgfQogCiAgICAgZm9yRWFj
aERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDYg
KzE4OCwxMSBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IGNoYXIqIGRhCiAgICAg
QVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCit2b2lkIFNoYXJlZEJ1ZmZlcjo6
YXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXBwZW5k
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBsZW5ndGgpOworfQorCiB2b2lk
IFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKFZlY3RvcjxjaGFyPiYmIGRhdGEpCiB7CiAgICAgQVNTRVJU
KCFtX2hhc0JlZW5Db21iaW5lZEludG9PbmVTZWdtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NoYXJlZEJ1ZmZlci5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwogICAg
IHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0
IHVpbnQ4X3QqLCBzaXplX3QpOwogICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxjaGFyPiYmKTsKIAog
ICAgIHZvaWQgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTIgKzc5LDE1
IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4KICAgICAgICAgICAg
IGlmICgha2V5VmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
ICAgICBLZXlJRFR5cGUga2V5SUREYXRhOwotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtl
eUhhbmRsZVZhbHVlRGF0YTsKLSAgICAgICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUo
a2V5SUQsIHsga2V5SUREYXRhIH0pIHx8ICFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlWYWx1ZSwg
eyBrZXlIYW5kbGVWYWx1ZURhdGEgfSkpCisgICAgICAgICAgICBhdXRvIGtleUlERGF0YSA9IGJh
c2U2NFVSTERlY29kZShrZXlJRCk7CisgICAgICAgICAgICBpZiAoIWtleUlERGF0YSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAgICAgYXV0byBrZXlI
YW5kbGVWYWx1ZURhdGEgPSBiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUpOworICAgICAgICAgICAg
aWYgKCFrZXlIYW5kbGVWYWx1ZURhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5SGFuZGxlOjpjcmVhdGUoQ0RNSW5z
dGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZN
b3ZlKGtleUhhbmRsZVZhbHVlRGF0YSkpKTsKKyAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVu
ZChLZXlIYW5kbGU6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxl
LCBXVEZNb3ZlKCprZXlJRERhdGEpLCBXVEZNb3ZlKCprZXlIYW5kbGVWYWx1ZURhdGEpKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSk7CiAgICAgaWYgKCF2YWxpZEZvcm1h
dCkKQEAgLTIxNSw4ICsyMTgsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtl
eWlkc0ZyCiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBl
bGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3Rl
dCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGtleUlkQ291bnQ7IGkrKykgewotICAgICAgICBTdHJpbmcga2V5SWQgPSBX
VEY6OmJhc2U2NFVSTEVuY29kZSgmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5
dGVzKTsKLSAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOworICAgICAgICBr
ZXlJZHNBcnJheS0+cHVzaFN0cmluZyhtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoJmRhdGFb
aW5kZXhdLCBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlcykpKTsKICAgICAgICAgaW5kZXggKz0g
Q2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXM7CiAgICAgfQogCkBAIC0yNDMsOCArMjQ1LDcgQEAg
c3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGV4dHJhY3RLZXlJZEZybwogICAgIC8vIFRoZSBmb3Jt
YXQgaXMgYSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKICAg
ICAvLyAia2lkcyIKICAgICAvLyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2Yg
dGhlIGFycmF5IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNl
IGNvbnRhaW5pbmcgdGhlIGtleSBJRCB2YWx1ZS4KLSAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJh
c2U2NFVSTEVuY29kZShpbml0RGF0YS5kYXRhKCksIGluaXREYXRhLnNpemUoKSk7Ci0gICAga2V5
SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOworICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5n
KG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChpbml0RGF0YS5kYXRhKCksIGluaXREYXRhLnNp
emUoKSkpKTsKIAogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtleUlkc0Fy
cmF5KSk7CiAgICAgQ1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRm
OCgpOwpAQCAtNTg3LDcgKzU4OCw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6
OnJlbW92ZVMKICAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsKICAgICAg
ICAgICAgICAgICBBU1NFUlQoa2V5LT5pZCgpLnNpemUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKFdU
Rjo6YmFzZTY0VVJMRW5jb2RlKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5zaXplKCkpKTsK
KyAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoa2V5LT5pZCgpLmRhdGEoKSwga2V5LT5pZCgpLnNpemUoKSkpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJvb3RPYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShhcnJh
eSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVh
bWluZy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMywxMSArMTEzLDExIEBAIHN0YXRpYyBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+
IGV4dHJhY3QKICAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIFZlY3RvcjxjaGFyPiBzaW5mRGF0YTsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NERl
Y29kZShrZXlJRCwgeyBzaW5mRGF0YSB9LCBXVEY6OkJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xp
bmVzKSkKKyAgICAgICAgYXV0byBzaW5mRGF0YSA9IGJhc2U2NERlY29kZShrZXlJRCwgQmFzZTY0
RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpOworICAgICAgICBpZiAoIXNp
bmZEYXRhKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc2luZnMudW5jaGVja2Vk
QXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoc2luZkRhdGEpKSk7CisgICAgICAg
IHNpbmZzLnVuY2hlY2tlZEFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpzaW5m
RGF0YSkpKTsKICAgICB9CiAKICAgICByZXR1cm4gc2luZnM7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5
U3RyZWFtaW5nQVZGT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTcxNSw3ICs3MTUsNyBAQCB2b2lkIENETUluc3Rh
bmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgIGlkZW50aWZpZXIgPSBhZG9wdE5T
KFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTppbml0RGF0YS0+Y3JlYXRlTlNEYXRhKCku
Z2V0KCkgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKICNpZiBIQVZFKEZBSVJQTEFZ
U1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCiAgICAgZWxzZSBpZiAoaW5pdERhdGFUeXBlID09IElu
aXREYXRhUmVnaXN0cnk6OmNlbmNOYW1lKCkpIHsKLSAgICAgICAgU3RyaW5nIHBzc2hTdHJpbmcg
PSBiYXNlNjRFbmNvZGUoaW5pdERhdGEtPmRhdGEoKSwgaW5pdERhdGEtPnNpemUoKSk7CisgICAg
ICAgIGF1dG8gcHNzaFN0cmluZyA9IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChpbml0RGF0YS0+
ZGF0YSgpLCBpbml0RGF0YS0+c2l6ZSgpKSk7CiAgICAgICAgIGluaXRpYWxpemF0aW9uRGF0YSA9
IFtOU0pTT05TZXJpYWxpemF0aW9uIGRhdGFXaXRoSlNPTk9iamVjdDpAeyBAInBzc2giOiAoTlNT
dHJpbmcqKXBzc2hTdHJpbmcgfSBvcHRpb25zOk5TSlNPTldyaXRpbmdQcmV0dHlQcmludGVkIGVy
cm9yOm5pbF07CiAgICAgfQogI2VuZGlmCkBAIC04NTAsMTEgKzg1MCwxMSBAQCB2b2lkIENETUlu
c3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgICAgICBpZiAoIWtleUlEU3Ry
aW5nKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGtleUlEVmVjdG9yOwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoa2V5
SURTdHJpbmcsIGtleUlEVmVjdG9yKSkKKyAgICAgICAgICAgIGF1dG8ga2V5SURWZWN0b3IgPSBi
YXNlNjREZWNvZGUoa2V5SURTdHJpbmcpOworICAgICAgICAgICAgaWYgKGtleUlEVmVjdG9yKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgYXV0byBrZXlJRCA9
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5SURWZWN0b3IpKTsKKyAgICAgICAgICAg
IGF1dG8ga2V5SUQgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCprZXlJRFZlY3Rvcikp
OwogICAgICAgICAgICAgYXV0byBmb3VuZEluZGV4ID0gbV9jdXJyZW50UmVxdWVzdC52YWx1ZSgp
LnJlcXVlc3RzLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIHJlcXVlc3QpIHsKICAgICAgICAgICAg
ICAgICBhdXRvIGtleUlEcyA9IGtleUlEc0ZvclJlcXVlc3QocmVxdWVzdC5nZXQoKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGtleUlEcy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IFJlZjxTaGFy
ZWRCdWZmZXI+JiBpZCkgewpAQCAtODg1LDEwICs4ODUsMTAgQEAgdm9pZCBDRE1JbnN0YW5jZVNl
c3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZFN0cmlu
ZyA9IHBheWxvYWRGaW5kUmVzdWx0cy0+dmFsdWUtPmFzU3RyaW5nKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFwYXlsb2FkU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHBheWxvYWRWZWN0b3I7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUocGF5bG9hZFN0cmluZywgcGF5bG9hZFZlY3Rvcikp
CisgICAgICAgICAgICAgICAgYXV0byBwYXlsb2FkVmVjdG9yID0gYmFzZTY0RGVjb2RlKHBheWxv
YWRTdHJpbmcpOworICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZFZlY3RvcikKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZERh
dGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKHBheWxvYWRWZWN0b3IpKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIHBheWxvYWREYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92
ZSgqcGF5bG9hZFZlY3RvcikpOwogICAgICAgICAgICAgICAgIFtyZXF1ZXN0IHByb2Nlc3NDb250
ZW50S2V5UmVzcG9uc2U6W1BBTDo6Z2V0QVZDb250ZW50S2V5UmVzcG9uc2VDbGFzcygpIGNvbnRl
bnRLZXlSZXNwb25zZVdpdGhGYWlyUGxheVN0cmVhbWluZ0tleVJlc3BvbnNlRGF0YTpwYXlsb2Fk
RGF0YS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCldXTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMTE5NSw4ICsxMTk1LDggQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Np
b25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICAgICAgYXV0byBlbnRyeSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBhdXRvJiBrZXlJRCA9IHJlcXVlc3REYXRhLmZpcnN0
OwogICAgICAgICAgICAgYXV0byYgcGF5bG9hZCA9IHJlcXVlc3REYXRhLnNlY29uZDsKLSAgICAg
ICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImtleUlEIiwgYmFzZTY0RW5jb2RlKGtleUlELT5kYXRh
KCksIGtleUlELT5zaXplKCkpKTsKLSAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoInBheWxv
YWQiLCBiYXNlNjRFbmNvZGUocGF5bG9hZC5nZXQoKS5ieXRlcywgcGF5bG9hZC5nZXQoKS5sZW5n
dGgpKTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImtleUlEIiwgbWFrZVN0cmluZyhi
YXNlNjRFbmNvZGVkKGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKSk7CisgICAgICAgICAg
ICBlbnRyeS0+c2V0U3RyaW5nKCJwYXlsb2FkIiwgbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHBh
eWxvYWQuZ2V0KCkuYnl0ZXMsIHBheWxvYWQuZ2V0KCkubGVuZ3RoKSkpOwogICAgICAgICAgICAg
cmVxdWVzdEpTT04tPnB1c2hPYmplY3QoV1RGTW92ZShlbnRyeSkpOwogICAgICAgICB9CiAgICAg
ICAgIGF1dG8gcmVxdWVzdEJ1ZmZlciA9IHV0ZjhCdWZmZXIocmVxdWVzdEpTT04tPnRvSlNPTlN0
cmluZygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDEwICsxMzAs
NyBAQCBTdHJpbmcgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSCiAgICAgaWYgKGVu
Y29kZWRJbWFnZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAotICAgIFZl
Y3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0
YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0
YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICByZXR1cm4gbWFr
ZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChlbmNv
ZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpKSk7CiB9CiAKIFZlY3Rvcjx1aW50
OF90PiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTc0LDEwICsxNzQsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNv
bnN0CiAKIFN0cmluZyBkYXRhVVJMKENGRGF0YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQogewotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShD
RkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEp
OwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjRE
YXRhOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwi
LCBiYXNlNjRFbmNvZGVkKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChk
YXRhKSkpOwogfQogCiBTdHJpbmcgZGF0YVVSTChjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVu
aXF1ZUZvbnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgmZm9u
dFV1aWQpOwogCi0gICAgU3RyaW5nIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9u
dE5hbWUgPSBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
JmZvbnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSkpOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5n
dGgoKSA8IExGX0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNh
aXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGFDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFN0cmlu
ZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsKICAgICBDb0NyZWF0
ZUd1aWQoJmZvbnRVdWlkKTsKIAotICAgIFN0cmluZyBmb250TmFtZSA9IGJhc2U2NEVuY29kZShy
ZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAg
ICBhdXRvIGZvbnROYW1lID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpKTsKICAgICBBU1NFUlQoZm9u
dE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9y
TWFjLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U1NMS2V5R2VuZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAg
c3RhdGljIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlmIChTZWNBc24x
RW5jb2RlSXRlbShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwgc2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hh
bGxlbmdlKSAhPSBub0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJu
IGJhc2U2NEVuY29kZShlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkRhdGEsIGVu
Y29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuTGVuZ3RoKTsKKyAgICByZXR1cm4gbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2Uu
RGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpKTsKIH0KIAog
QUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIFJlZjxSZXNv
dXJjZUhhbmRsZT4gY3JlYXRlQmxvYlJlcwogICAgIHJldHVybiBibG9iUmVnaXN0cnkoKS5ibG9i
UmVnaXN0cnlJbXBsKCktPmNyZWF0ZVJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCk7CiB9
CiAKLXN0YXRpYyB2b2lkIGxvYWRCbG9iUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFs
c1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCBWZWN0b3I8Y2hhcj4mIGRhdGEpCitzdGF0aWMgdm9pZCBsb2FkQmxvYlJlc291cmNlU3luY2hy
b25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIGF1dG8q
IGJsb2JEYXRhID0gYmxvYlJlZ2lzdHJ5KCkuYmxvYlJlZ2lzdHJ5SW1wbCgpLT5nZXRCbG9iRGF0
YUZyb21VUkwocmVxdWVzdC51cmwoKSk7CiAgICAgQmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KGJsb2JEYXRhLCByZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRh
dGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VI
YW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYlJlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSB7CiAKIGNsYXNzIEJsb2JSZXNvdXJjZVN5bmNo
cm9ub3VzTG9hZGVyIDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKIHB1YmxpYzoKLSAg
ICBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VS
ZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpOworICAgIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9h
ZGVyKFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+Jik7
CiAKICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiwgUmVz
b3VyY2VSZXNwb25zZSYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwogICAg
IHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKSBmaW5h
bDsKQEAgLTg1LDEwICs4NSwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlc291cmNlRXJy
b3ImIG1fZXJyb3I7CiAgICAgUmVzb3VyY2VSZXNwb25zZSYgbV9yZXNwb25zZTsKLSAgICBWZWN0
b3I8Y2hhcj4mIG1fZGF0YTsKKyAgICBWZWN0b3I8dWludDhfdD4mIG1fZGF0YTsKIH07CiAKLUJs
b2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyOjpCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRl
cihSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rv
cjxjaGFyPiYgZGF0YSkKK0Jsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyOjpCbG9iUmVzb3Vy
Y2VTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKICAgICA6IG1fZXJyb3IoZXJyb3Ip
CiAgICAgLCBtX3Jlc3BvbnNlKHJlc3BvbnNlKQogICAgICwgbV9kYXRhKGRhdGEpCkBAIC0xMjIs
NyArMTIyLDcgQEAgdm9pZCBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUgogCiAg
ICAgLy8gUmVhZCBhbGwgdGhlIGRhdGEuCiAgICAgbV9kYXRhLnJlc2l6ZShzdGF0aWNfY2FzdDxz
aXplX3Q+KHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpKSk7Ci0gICAgc3RhdGljX2Nh
c3Q8QmxvYlJlc291cmNlSGFuZGxlKj4oaGFuZGxlKS0+cmVhZFN5bmMobV9kYXRhLmRhdGEoKSwg
c3RhdGljX2Nhc3Q8aW50PihtX2RhdGEuc2l6ZSgpKSk7CisgICAgc3RhdGljX2Nhc3Q8QmxvYlJl
c291cmNlSGFuZGxlKj4oaGFuZGxlKS0+cmVhZFN5bmMocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
bV9kYXRhLmRhdGEoKSksIHN0YXRpY19jYXN0PGludD4obV9kYXRhLnNpemUoKSkpOwogICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKQEAgLTE0MSw3ICsxNDEsNyBAQCBSZWY8QmxvYlJlc291
cmNlSGFuZGxlPiBCbG9iUmVzb3VyY2VIYW5kCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmxv
YlJlc291cmNlSGFuZGxlKGJsb2JEYXRhLCByZXF1ZXN0LCBjbGllbnQsIHRydWUpKTsKIH0KIAot
dm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQmxvYkRh
dGEqIGJsb2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJy
b3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRh
KQordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQmxv
YkRhdGEqIGJsb2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNl
RXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQogewogICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocmVxdWVz
dC5odHRwTWV0aG9kKCksICJnZXQiKSkgewogICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3Io
d2ViS2l0QmxvYlJlc291cmNlRG9tYWluLCBzdGF0aWNfY2FzdDxpbnQ+KEVycm9yOjpNZXRob2RO
b3RBbGxvd2VkKSwgcmVzcG9uc2UudXJsKCksICJSZXF1ZXN0IG1ldGhvZCBtdXN0IGJlIEdFVCIp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5k
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JS
ZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw3IEBAIGNsYXNzIEJsb2JSZXNvdXJjZUhhbmRsZSBmaW5hbCA6IHB1YmxpYyAKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPEJsb2JSZXNvdXJjZUhhbmRsZT4gY3JlYXRlQXN5bmMoQmxvYkRh
dGEqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCopOwogCi0g
ICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSosIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVj
dG9yPGNoYXI+JiBkYXRhKTsKKyAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KEJsb2JEYXRhKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJl
c291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgdm9pZCBzdGFy
dCgpOwogICAgIGludCByZWFkU3luYyhjaGFyKiwgaW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNyZWRlbnRp
YWxCYXNlLmgiCiAKICNpbmNsdWRlICJDcmVkZW50aWFsLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
QmFzZTY0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTQsNCArOTUsMTAgQEAgYm9v
bCBDcmVkZW50aWFsQmFzZTo6Y29tcGFyZShjb25zdCBDcmVkZQogICAgIHJldHVybiBDcmVkZW50
aWFsOjpwbGF0Zm9ybUNvbXBhcmUoYSwgYik7CiB9CiAKK1N0cmluZyBDcmVkZW50aWFsQmFzZTo6
c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0Cit7CisgICAg
YXV0byBjcmVkZW50aWFsU3RyaW5nRGF0YSA9IG1ha2VTdHJpbmcobV91c2VyLCAnOicsIG1fcGFz
c3dvcmQpLnV0ZjgoKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQmFzaWMgIiwgYmFzZTY0RW5j
b2RlZChjcmVkZW50aWFsU3RyaW5nRGF0YSkpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5oCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgZW51bSBDcmVkZW50aWFsUGVyc2lzdGVu
Y2UgewogfTsKIAogY2xhc3MgQ3JlZGVudGlhbEJhc2UgewotCiBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICAgCkBAIC01Miw2ICs1MSw4IEBAIHB1
YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgQ3Jl
ZGVudGlhbCYsIGNvbnN0IENyZWRlbnRpYWwmKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkgY29uc3Q7CisKIHBy
b3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBDcmVkZW50aWFsQmFzZSgpOwogICAgIFdFQkNP
UkVfRVhQT1JUIENyZWRlbnRpYWxCYXNlKGNvbnN0IFN0cmluZyYgdXNlciwgY29uc3QgU3RyaW5n
JiBwYXNzd29yZCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDM2ICsxNDgsMjYgQEAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxEZWNvZGVUYXNrPiBjcmVhdAogICAgICk7CiB9CiAKLXN0YXRpYyBib29sIGRlY29k
ZUJhc2U2NChEZWNvZGVUYXNrJiB0YXNrLCBNb2RlIG1vZGUpCitzdGF0aWMgT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBkZWNvZGVCYXNlNjQoY29uc3QgRGVjb2RlVGFzayYgdGFzaywgTW9kZSBt
b2RlKQogewotICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7Ci0gICAgaWYgKG1vZGUgPT0gTW9kZTo6
Rm9yZ2l2aW5nQmFzZTY0KSB7Ci0gICAgICAgIGF1dG8gdW5lc2NhcGVkU3RyaW5nID0gZGVjb2Rl
VVJMRXNjYXBlU2VxdWVuY2VzKHRhc2suZW5jb2RlZERhdGEudG9TdHJpbmdXaXRob3V0Q29weWlu
ZygpKTsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUodW5lc2NhcGVkU3RyaW5nLCBidWZmZXIs
IEJhc2U2NFZhbGlkYXRlUGFkZGluZyB8IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzIHwg
QmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9IGVsc2UgeworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTW9kZTo6Rm9yZ2l2aW5n
QmFzZTY0OgorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyh0YXNrLmVuY29kZWREYXRhKSwgeyBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBh
ZGRpbmcsIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzLCBCYXNl
NjREZWNvZGVPcHRpb25zOjpEaXNjYXJkVmVydGljYWxUYWJ9KTsKKworICAgIGNhc2UgTW9kZTo6
TGVnYWN5OgogICAgICAgICAvLyBGaXJzdCB0cnkgYmFzZTY0dXJsLgotICAgICAgICBpZiAoIWJh
c2U2NFVSTERlY29kZSh0YXNrLmVuY29kZWREYXRhLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwg
YnVmZmVyKSkgewotICAgICAgICAgICAgLy8gRGlkbid0IHdvcmssIHRyeSB1bmVzY2FwaW5nIGFu
ZCBkZWNvZGluZyBhcyBiYXNlNjQuCi0gICAgICAgICAgICBhdXRvIHVuZXNjYXBlZFN0cmluZyA9
IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0YXNrLmVuY29kZWREYXRhLnRvU3RyaW5nV2l0aG91
dENvcHlpbmcoKSk7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZSh1bmVzY2FwZWRTdHJp
bmcsIGJ1ZmZlciwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgfCBCYXNlNjREaXNjYXJk
VmVydGljYWxUYWIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQor
ICAgICAgICBpZiAoYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NFVSTERlY29kZSh0YXNrLmVuY29k
ZWREYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVkRGF0YTsKKyAgICAgICAgLy8gRGlk
bid0IHdvcmssIHRyeSB1bmVzY2FwaW5nIGFuZCBkZWNvZGluZyBhcyBiYXNlNjQuCisgICAgICAg
IHJldHVybiBiYXNlNjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRhc2suZW5jb2Rl
ZERhdGEpLCB7IEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzLCBC
YXNlNjREZWNvZGVPcHRpb25zOjpEaXNjYXJkVmVydGljYWxUYWIgfSk7CiAgICAgfQotICAgIGJ1
ZmZlci5zaHJpbmtUb0ZpdCgpOwotICAgIHRhc2sucmVzdWx0LmRhdGEgPSBXVEZNb3ZlKGJ1ZmZl
cik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgZGVjb2RlRXNjYXBlZChE
ZWNvZGVUYXNrJiB0YXNrKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBkZWNvZGVFc2NhcGVkKGNv
bnN0IERlY29kZVRhc2smIHRhc2spCiB7CiAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nRnJvbUNo
YXJzZXQodGFzay5yZXN1bHQuY2hhcnNldCk7CiAgICAgYXV0byYgZW5jb2RpbmcgPSBlbmNvZGlu
Z0Zyb21DaGFyc2V0LmlzVmFsaWQoKSA/IGVuY29kaW5nRnJvbUNoYXJzZXQgOiBVVEY4RW5jb2Rp
bmcoKTsKLSAgICBhdXRvIGJ1ZmZlciA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0YSh0
YXNrLmVuY29kZWREYXRhLCBlbmNvZGluZyk7Ci0KLSAgICBidWZmZXIuc2hyaW5rVG9GaXQoKTsK
LSAgICB0YXNrLnJlc3VsdC5kYXRhID0gV1RGTW92ZShidWZmZXIpOworICAgIHJldHVybiBkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEodGFzay5lbmNvZGVkRGF0YSwgZW5jb2RpbmcpOwog
fQogCiBzdGF0aWMgT3B0aW9uYWw8UmVzdWx0PiBkZWNvZGVTeW5jaHJvbm91c2x5KERlY29kZVRh
c2smIHRhc2ssIE1vZGUgbW9kZSkKQEAgLTE4NiwxMSArMTc2LDE0IEBAIHN0YXRpYyBPcHRpb25h
bDxSZXN1bHQ+IGRlY29kZVN5bmNocm9ub3UKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIGlmICh0YXNrLmlzQmFzZTY0KSB7Ci0gICAgICAgIGlmICghZGVjb2RlQmFzZTY0KHRh
c2ssIG1vZGUpKQorICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gZGVjb2RlQmFzZTY0KHRhc2ss
IG1vZGUpOworICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgdGFzay5yZXN1bHQuZGF0YSA9IFdURk1vdmUoKmRlY29kZWRE
YXRhKTsKICAgICB9IGVsc2UKLSAgICAgICAgZGVjb2RlRXNjYXBlZCh0YXNrKTsKKyAgICAgICAg
dGFzay5yZXN1bHQuZGF0YSA9IGRlY29kZUVzY2FwZWQodGFzayk7CiAKKyAgICB0YXNrLnJlc3Vs
dC5kYXRhLnNocmlua1RvRml0KCk7CiAgICAgcmV0dXJuIFdURk1vdmUodGFzay5yZXN1bHQpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJM
RGVjb2Rlci5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAg
c3RydWN0IFJlc3VsdCB7CiAgICAgU3RyaW5nIG1pbWVUeXBlOwogICAgIFN0cmluZyBjaGFyc2V0
OwogICAgIFN0cmluZyBjb250ZW50VHlwZTsKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBW
ZWN0b3I8dWludDhfdD4gZGF0YTsKIH07CiAKIHVzaW5nIERlY29kZUNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGOjpGdW5jdGlvbjx2b2lkIChPcHRpb25hbDxSZXN1bHQ+KT47CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFJlc291
cmNlSGFuZGxlOjpmYWlsdXJlVGltZXJGaXJlZCgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNl
RXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBk
YXRhKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VF
cnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4m
IGRhdGEpCiB7CiAgICAgaWYgKGF1dG8gY29uc3RydWN0b3IgPSBidWlsdGluUmVzb3VyY2VIYW5k
bGVTeW5jaHJvbm91c0xvYWRlck1hcCgpLmdldChyZXF1ZXN0LnVybCgpLnByb3RvY29sKCkudG9T
dHJpbmdXaXRob3V0Q29weWluZygpKSkgewogICAgICAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBy
ZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBjbGFz
cyBDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTsKIGNsYXNzIFJlc291cmNlSGFuZGxlIDogcHVi
bGljIFJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGU+LCBwdWJsaWMgQXV0aGVudGljYXRpb25DbGll
bnQgewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8UmVzb3VyY2VI
YW5kbGU+IGNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENv
bnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5n
Q29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5
LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRl
bnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1
aW50OF90PiYgZGF0YSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVzb3VyY2VIYW5k
bGUoKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQ0ZVUkxDT05ORUNUSU9OKQpAQCAt
MTkzLDcgKzE5Myw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFJlZjxSZXNvdXJjZUhhbmRsZT4g
KCpCdWlsdGluQ29uc3RydWN0b3IpKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVz
b3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCdWls
dGluQ29uc3RydWN0b3IoY29uc3QgQXRvbVN0cmluZyYgcHJvdG9jb2wsIEJ1aWx0aW5Db25zdHJ1
Y3Rvcik7CiAKLSAgICB0eXBlZGVmIHZvaWQgKCpCdWlsdGluU3luY2hyb25vdXNMb2FkZXIpKE5l
dHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+
JiBkYXRhKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpCdWlsdGluU3luY2hyb25vdXNMb2FkZXIpKE5l
dHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhKTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJ1aWx0aW5TeW5jaHJvbm91c0xv
YWRlcihjb25zdCBBdG9tU3RyaW5nJiBwcm90b2NvbCwgQnVpbHRpblN5bmNocm9ub3VzTG9hZGVy
KTsKIAogcHJvdGVjdGVkOgpAQCAtMjEzLDcgKzIxMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBz
Y2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUpOwogCiAgICAgYm9vbCBzdGFydCgpOwotICAgIHN0
YXRpYyB2b2lkIHBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29u
dGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBS
ZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7Cisg
ICAgc3RhdGljIHZvaWQgcGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtp
bmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBk
YXRhKTsKIAogICAgIHZvaWQgcmVmQXV0aGVudGljYXRpb25DbGllbnQoKSBvdmVycmlkZSB7IHJl
ZigpOyB9CiAgICAgdm9pZCBkZXJlZkF1dGhlbnRpY2F0aW9uQ2xpZW50KCkgb3ZlcnJpZGUgeyBk
ZXJlZigpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9u
b3VzTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBTeW5jaHJvbm91c0xv
YWRlckNsaWVudDo6ZGlkUmVjZWl2ZQogCiB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojpk
aWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVk
IGxlbmd0aCwgaW50IC8qZW5jb2RlZERhdGFMZW5ndGgqLykKIHsKLSAgICBtX2RhdGEuYXBwZW5k
KGRhdGEsIGxlbmd0aCk7CisgICAgbV9kYXRhLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoKTsKIH0KIAogdm9pZCBTeW5jaHJvbm91c0xvYWRlckNs
aWVudDo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNM
b2FkZXJDbGllbnQuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NSw3ICs1NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0QWxsb3dTdG9yZWRDcmVkZW50aWFs
cyhib29sIGFsbG93KSB7IG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IGFsbG93OyB9CiAgICAg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3Bv
bnNlOyB9Ci0gICAgVmVjdG9yPGNoYXI+JiBtdXRhYmxlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsg
fQorICAgIFZlY3Rvcjx1aW50OF90PiYgbXV0YWJsZURhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0K
ICAgICBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7
IH0KICAgICBTeW5jaHJvbm91c0xvYWRlck1lc3NhZ2VRdWV1ZSYgbWVzc2FnZVF1ZXVlKCkgeyBy
ZXR1cm4gbV9tZXNzYWdlUXVldWUuZ2V0KCk7IH0KIApAQCAtNzUsNyArNzUsNyBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwogICAgIFJl
c291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKLSAgICBWZWN0b3I8Y2hhcj4gbV9kYXRhOworICAg
IFZlY3Rvcjx1aW50OF90PiBtX2RhdGE7CiAgICAgUmVzb3VyY2VFcnJvciBtX2Vycm9yOwogICAg
IFJlZjxTeW5jaHJvbm91c0xvYWRlck1lc3NhZ2VRdWV1ZT4gbV9tZXNzYWdlUXVldWU7CiB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNG
TmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NSw5ICs4NSw3IEBAIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRy
PENGRGF0YVIKIAogc3RhdGljIHZvaWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogewot
ICAgIFN0cmluZyBhdXRoZW50aWNhdGlvbkhlYWRlciA9ICJCYXNpYyAiICsgYmFzZTY0RW5jb2Rl
KFN0cmluZyhjcmVkZW50aWFsLnVzZXIoKSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKSku
dXRmOCgpKTsKLQotICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1l
OjpBdXRob3JpemF0aW9uLCBhdXRoZW50aWNhdGlvbkhlYWRlcik7CisgICAgcmVxdWVzdC5zZXRI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGNyZWRlbnRpYWwu
c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpKTsKIH0KIAogUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQpAQCAtNTI0LDcgKzUy
Miw3IEBAIHN0YXRpYyB2b2lkIGVtcHR5UGVyZm9ybSh2b2lkKikKIHsKIH0KIAotdm9pZCBSZXNv
dXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3Zv
aWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VF
cnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4m
IGRhdGEpCiB7CiAgICAgTE9HKE5ldHdvcmssICJSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5OiVzIHNzdG9yZWRDcmVkZW50aWFsc1BvbGljeToldSIsIHJl
cXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCw3
IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlc3RhcnRSZXF1ZXN0V2l0aEMKICAgICBkLT5tX2N1
cmxSZXF1ZXN0LT5zdGFydCgpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxh
dGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5
IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCghcmVxdWVzdC5pc0VtcHR5KCkpOwpAQCAtNTYy
LDkgKzU2Miw5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwoKQogCiAgICAg
ICAgIC8vIGRpZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYXVzZSB0aGUgY2xpZW50IHRvIGJlIGRl
bGV0ZWQuCiAgICAgICAgIGlmIChjbGllbnQoKSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+
IG91dDsKLSAgICAgICAgICAgIGlmIChiYXNlNjREZWNvZGUoZGF0YSwgb3V0LCBCYXNlNjRJZ25v
cmVTcGFjZXNBbmROZXdMaW5lcykgJiYgb3V0LnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAg
Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIodGhpcywgU2hhcmVkQnVmZmVyOjpjcmVhdGUob3V0
LmRhdGEoKSwgb3V0LnNpemUoKSksIG9yaWdpbmFsU2l6ZSk7CisgICAgICAgICAgICBhdXRvIGRl
Y29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGRhdGEsIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9y
ZVNwYWNlc0FuZE5ld0xpbmVzKTsKKyAgICAgICAgICAgIGlmIChkZWNvZGVkRGF0YSAmJiBkZWNv
ZGVkRGF0YS0+c2l6ZSgpID4gMCkKKyAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2
ZUJ1ZmZlcih0aGlzLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkZWNvZGVkRGF0YS0+ZGF0YSgpLCBk
ZWNvZGVkRGF0YS0+c2l6ZSgpKSwgb3JpZ2luYWxTaXplKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyhjaGFyc2V0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFu
ZGxlTWFjLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjcsOSAr
NjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBzdGF0aWMgdm9pZCBhcHBseUJhc2lj
QXV0aG9yaXphdGlvbkhlYWRlcihSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENyZWRl
bnRpYWwmIGNyZWRlbnRpYWwpCiB7Ci0gICAgU3RyaW5nIGF1dGhlbnRpY2F0aW9uSGVhZGVyID0g
IkJhc2ljICIgKyBiYXNlNjRFbmNvZGUoU3RyaW5nKGNyZWRlbnRpYWwudXNlcigpICsgIjoiICsg
Y3JlZGVudGlhbC5wYXNzd29yZCgpKS51dGY4KCkpOwotCi0gICAgcmVxdWVzdC5zZXRIVFRQSGVh
ZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGF1dGhlbnRpY2F0aW9uSGVh
ZGVyKTsKKyAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QXV0
aG9yaXphdGlvbiwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9u
SGVhZGVyKCkpOwogfQogCiBzdGF0aWMgTlNPcGVyYXRpb25RdWV1ZSAqb3BlcmF0aW9uUXVldWVG
b3JBc3luY0NsaWVudHMoKQpAQCAtMzUyLDcgKzM1MCw3IEBAIENGU3RyaW5nUmVmIFJlc291cmNl
SGFuZGxlOjpzeW5jaHJvbm91c0wKICAgICByZXR1cm4gQ0ZTVFIoIldlYkNvcmVTeW5jaHJvbm91
c0xvYWRlclJ1bkxvb3BNb2RlIik7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3Jt
TG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291cmNlSGFuZGxlOjpw
bGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIExPRyhO
ZXR3b3JrLCAiUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNs
eTolQCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeToldSIsIHJlcXVlc3QubnNVUkxSZXF1ZXN0KEhU
VFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNv
dXAuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcg
KzEyNyw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG8KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1M
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNv
dXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JikKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRm
b3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwg
UmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYpCiB7CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
U291cE5ldHdvcmtTZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAkocmV2aXNpb24gMjc3NTY5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vz
c2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgZGlnZXN0LT5hZGRCeXRlcyhjZXJ0aWZpY2F0ZURhdGEtPmRhdGEsIGNlcnRpZmljYXRlRGF0
YS0+bGVuKTsKIAogICAgICAgICBhdXRvIGhhc2ggPSBkaWdlc3QtPmNvbXB1dGVIYXNoKCk7Ci0g
ICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
aGFzaC5kYXRhKCkpLCBoYXNoLnNpemUoKSk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGJh
c2U2NEVuY29kZWQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaGFzaC5kYXRhKCkpLCBo
YXNoLnNpemUoKSkpOwogICAgIH0KIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2NlcnRpZmljYXRl
czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVu
Y2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVF
c2NhcGVTZXF1ZW5jZXMuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0
LDExICsxNTQsMTEgQEAgU3RyaW5nIGRlY29kZUVzY2FwZVNlcXVlbmNlcyhTdHJpbmdWaWV3IAog
ICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotaW5saW5lIFZlY3RvcjxjaGFyPiBk
ZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcpCitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGRlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dEVuY29kaW5n
JiBlbmNvZGluZykKIHsKICAgICBBU1NFUlQoZW5jb2RpbmcuaXNWYWxpZCgpKTsKIAotICAgIFZl
Y3RvcjxjaGFyPiByZXN1bHQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKICAgICBzaXpl
X3QgZGVjb2RlZFBvc2l0aW9uID0gMDsKICAgICBzaXplX3Qgc2VhcmNoUG9zaXRpb24gPSAwOwog
ICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1
b3RlZFByaW50YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9RdW90ZWRQcmludGFibGUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDcgKzQwLDcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhpbXVtTGluZUxlbmd0aCA9IAog
CiBzdGF0aWMgY29uc3QgY2hhciBjcmxmTGluZUVuZGluZ1tdID0gIlxyXG4iOwogCi1zdGF0aWMg
c2l6ZV90IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoY29uc3QgY2hhciogaW5wdXQsIHNpemVf
dCBpbnB1dExlbmd0aCwgc2l6ZV90IGluZGV4KQorc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVF
bmRpbmdBdEluZGV4KGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgsIHNp
emVfdCBpbmRleCkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRl
eCA8IGlucHV0TGVuZ3RoKTsKICAgICBpZiAoaW5wdXRbaW5kZXhdID09ICdcbicpCkBAIC01NSwx
OSArNTUsMTkgQEAgc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4KAogICAg
IHJldHVybiAwOwogfQogCi12b2lkIHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8
Y2hhcj4mIGluLCBWZWN0b3I8Y2hhcj4mIG91dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmlu
dGFibGVFbmNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKIHsKLSAgICBxdW90ZWRQ
cmludGFibGVFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIG91dCk7CisgICAgcmV0dXJuIHF1
b3RlZFByaW50YWJsZUVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7CiB9CiAKLXZv
aWQgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IGNoYXIqIGlucHV0LCBzaXplX3QgaW5wdXRM
ZW5ndGgsIFZlY3RvcjxjaGFyPiYgb3V0KQorVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJs
ZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQogewotICAg
IG91dC5jbGVhcigpOwotICAgIG91dC5yZXNlcnZlQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOworICAg
IFZlY3Rvcjx1aW50OF90PiBvdXQ7CisgICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5w
dXRMZW5ndGgpOwogICAgIHNpemVfdCBjdXJyZW50TGluZUxlbmd0aCA9IDA7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgKytpKSB7CiAgICAgICAgIGJvb2wgaXNMYXN0
Q2hhcmFjdGVyID0gKGkgPT0gaW5wdXRMZW5ndGggLSAxKTsKLSAgICAgICAgY2hhciBjdXJyZW50
Q2hhcmFjdGVyID0gaW5wdXRbaV07CisgICAgICAgIHVpbnQ4X3QgY3VycmVudENoYXJhY3RlciA9
IGlucHV0W2ldOwogICAgICAgICBib29sIHJlcXVpcmVzRW5jb2RpbmcgPSBmYWxzZTsKICAgICAg
ICAgLy8gQWxsIG5vbi1wcmludGFibGUgQVNDSUkgY2hhcmFjdGVycyBhbmQgPSByZXF1aXJlIGVu
Y29kaW5nLgogICAgICAgICBpZiAoKGN1cnJlbnRDaGFyYWN0ZXIgPCAnICcgfHwgY3VycmVudENo
YXJhY3RlciA+ICd+JyB8fCBjdXJyZW50Q2hhcmFjdGVyID09ICc9JykgJiYgY3VycmVudENoYXJh
Y3RlciAhPSAnXHQnKQpAQCAtMTEyLDE4ICsxMTIsMjAgQEAgdm9pZCBxdW90ZWRQcmludGFibGVF
bmNvZGUoY29uc3QgY2hhciogaQogICAgICAgICAgICAgY3VycmVudExpbmVMZW5ndGgrKzsKICAg
ICAgICAgfQogICAgIH0KKworICAgIHJldHVybiBvdXQ7CiB9CiAKLXZvaWQgcXVvdGVkUHJpbnRh
YmxlRGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0KQorVmVj
dG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4m
IGlucHV0KQogewotICAgIHF1b3RlZFByaW50YWJsZURlY29kZShpbi5kYXRhKCksIGluLnNpemUo
KSwgb3V0KTsKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGlucHV0LmRhdGEoKSwg
aW5wdXQuc2l6ZSgpKTsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgY2hh
ciogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgsIFZlY3RvcjxjaGFyPiYgb3V0KQorVmVjdG9yPHVp
bnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qg
ZGF0YUxlbmd0aCkKIHsKLSAgICBvdXQuY2xlYXIoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0
OwogICAgIGlmICghZGF0YUxlbmd0aCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
b3V0OwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgY2hhciBjdXJyZW50Q2hhcmFjdGVyID0gZGF0YVtpXTsKQEAgLTE0OSw4ICsxNTEsOSBA
QCB2b2lkIHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBjaGFyKiBkCiAgICAgICAgICAgICBv
dXQuYXBwZW5kKGxvd2VyQ2hhcmFjdGVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9Ci0gICAgICAgIG91dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4odG9BU0NJSUhleFZhbHVl
KHVwcGVyQ2hhcmFjdGVyLCBsb3dlckNoYXJhY3RlcikpKTsKKyAgICAgICAgb3V0LmFwcGVuZCh0
b0FTQ0lJSGV4VmFsdWUodXBwZXJDaGFyYWN0ZXIsIGxvd2VyQ2hhcmFjdGVyKSk7CiAgICAgfQor
ICAgIHJldHVybiBvdXQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvUXVvdGVkUHJpbnRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsMTkgKzI4LDE2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgUXVvdGVkUHJp
bnRhYmxlX2gKLSNkZWZpbmUgUXVvdGVkUHJpbnRhYmxlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHF1b3Rl
ZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBWZWN0b3I8Y2hhcj4mKTsKLXZv
aWQgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QsIFZlY3RvcjxjaGFy
PiYpOworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8
dWludDhfdD4mKTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3Qg
dWludDhfdCosIHNpemVfdCk7CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZl
Y3RvcjxjaGFyPiYsIFZlY3RvcjxjaGFyPiYpOwotdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUo
Y29uc3QgY2hhciosIHNpemVfdCwgVmVjdG9yPGNoYXI+Jik7CitWZWN0b3I8dWludDhfdD4gcXVv
dGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworVmVjdG9yPHVpbnQ4
X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUXVvdGVkUHJpbnRhYmxlX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4u
Y3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU1NM
S2V5R2VuZXJhdG9yV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBTdHJp
bmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nCiAgICAgICAgIGlmICghQ3J5cHRT
aWduQW5kRW5jb2RlQ2VydGlmaWNhdGUoaENvbnRleHQsIEFUX0tFWUVYQ0hBTkdFLCBYNTA5X0FT
Tl9FTkNPRElORywgWDUwOV9LRVlHRU5fUkVRVUVTVF9UT19CRV9TSUdORUQsICZyZXF1ZXN0SW5m
bywgJnNpZ25BbGdvLCAwLCByZWludGVycHJldF9jYXN0PExQQllURT4oYmluYXJ5LmRhdGEoKSks
ICZkd0VuY29kZWRMZW5ndGgpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAga2V5U3Ry
aW5nID0gYmFzZTY0RW5jb2RlKGJpbmFyeSk7CisgICAgICAgIGtleVN0cmluZyA9IG1ha2VTdHJp
bmcoYmFzZTY0RW5jb2RlZChiaW5hcnkpKTsKICAgICB9IHdoaWxlKDApOwogCiAgICAgaWYgKHBQ
dWJJbmZvKQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1Nj
cmlwdFN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vy
dmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNo
YTJIYXNoKGNvbnN0IFMKICAgICBhdXRvIGlucHV0VXRmOCA9IGlucHV0LnV0ZjgoKTsKICAgICBj
cnlwdG8tPmFkZEJ5dGVzKGlucHV0VXRmOC5kYXRhKCksIGlucHV0VXRmOC5sZW5ndGgoKSk7CiAg
ICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBXVEY6OmJh
c2U2NFVSTEVuY29kZShoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIHJldHVybiBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKSk7CiB9CiAK
IFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNvbnN0IFVSTCYgaW5wdXQpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NjU0KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NCBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9k
ZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpzZW5kUmVwbHlUb1N5bmNocm9ub3VzUmVxdWVzdCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpmaXJlQ29udmVy
c2lvblJlcXVlc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRh
VGFza0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjphcHBseUJhc2ljQXV0aG9yaXphdGlvbkhl
YWRlcik6CisgICAgICAgICogU2hhcmVkL0FQSS9BUElEYXRhLmg6CisgICAgICAgIChBUEk6OkRh
dGE6OmNyZWF0ZSk6CisgICAgICAgIChBUEk6OkRhdGE6OmZyZWVWZWN0b3JCeXRlcyk6CisgICAg
ICAgICogU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tOgorICAgICAgICAoV2ViS2l0
OjpzYW5kYm94RmlsZVBhdGgpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3Bw
OgorICAgICAgICAoV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbToKKyAgICAgICAg
KHByb2R1Y2VDbGllbnREYXRhSnNvbik6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24v
Y2Fpcm8vV2ViQXV0b21hdGlvblNlc3Npb25DYWlyby5jcHA6CisgICAgICAgIChXZWJLaXQ6OmJh
c2U2NEVuY29kZWRQTkdEYXRhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlv
blN0YXRlLm1tOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25D
bGllbnQ6OndlYkNyeXB0b01hc3RlcktleSk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rv
ci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JVSVBy
b3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojpw
bGF0Zm9ybVNhdmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3Bl
Y3RvclVJUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtU2F2ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW06CisgICAgICAgIChXZWJLaXQ6
OkxvY2FsQXV0aGVudGljYXRvckludGVybmFsOjpwcm9kdWNlSGFzaFNldCk6CisgICAgICAgIChX
ZWJLaXQ6OkxvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwpOgorICAgICAgICAoV2Vi
S2l0OjpMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbik6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpNb2NrSGlkQ29ubmVjdGlvbjo6ZmVlZFJlcG9ydHMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW06Cisg
ICAgICAgIChXZWJLaXQ6Ok1vY2tMb2NhbENvbm5lY3Rpb246OmZpbHRlclJlc3BvbnNlcyBjb25z
dCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJVUkxTY2hlbWVUYXNrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMU2NoZW1lVGFz
azo6ZGlkQ29tcGxldGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViTG9hZGVyU3RyYXRlZ3k6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OmxvYWRTeW5jaHJv
bm91c2x5KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxl
clByb3h5Lmg6CisKIDIwMjEtMDUtMTggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJlc3VycmVjdCBXS1dlYlZpZXcgbWVkaWEgY29udHJvbHMgQVBJIHJlbW92
ZWQgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTkyOQpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBA
CiBtZXNzYWdlcyAtPiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZl
ciB7CiAKICAgICBTY2hlZHVsZVJlc291cmNlTG9hZChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzIHJlc291cmNlTG9hZFBhcmFtZXRlcnMpCi0gICAgUGVyZm9ybVN5bmNocm9u
b3VzTG9hZChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIHJlc291cmNlTG9h
ZFBhcmFtZXRlcnMpIC0+IChXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4gZGF0YSkgU3luY2hyb25vdXMK
KyAgICBQZXJmb3JtU3luY2hyb25vdXNMb2FkKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJlc291cmNlRXJy
b3IgZXJyb3IsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFZlY3Rvcjx1aW50
OF90PiBkYXRhKSBTeW5jaHJvbm91cwogICAgIFRlc3RQcm9jZXNzSW5jb21pbmdTeW5jTWVzc2Fn
ZXNXaGVuV2FpdGluZ0ZvclN5bmNSZXBseShXZWJLaXQ6OldlYlBhZ2VQcm94eUlkZW50aWZpZXIg
cGFnZUlEKSAtPiAoYm9vbCBoYW5kbGVkKSBTeW5jaHJvbm91cwogICAgIExvYWRQaW5nKFdlYktp
dDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykK
ICAgICBSZW1vdmVMb2FkSWRlbnRpZmllcih1aW50NjRfdCByZXNvdXJjZUxvYWRJZGVudGlmaWVy
KQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MSw3ICs5MSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRSZXBseVRvU3luY2hyb25vdXNSZXF1ZXMK
ICAgICBBU1NFUlQoZGF0YS5kZWxheWVkUmVwbHkpOwogICAgIEFTU0VSVCghZGF0YS5yZXNwb25z
ZS5pc051bGwoKSB8fCAhZGF0YS5lcnJvci5pc051bGwoKSk7CiAKLSAgICBWZWN0b3I8Y2hhcj4g
cmVzcG9uc2VCdWZmZXI7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3BvbnNlQnVmZmVyOwogICAg
IGlmIChidWZmZXIgJiYgYnVmZmVyLT5zaXplKCkpCiAgICAgICAgIHJlc3BvbnNlQnVmZmVyLmFw
cGVuZChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFz
dXJlbWVudE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxNSwxNCArMzE1LDE1IEBAIHZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRN
YW5hZ2VyOjpmaXIKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBWZWN0b3I8dWludDhfdD4gcHVibGljS2V5RGF0YTsKLSAgICAgICAgV1RGOjpi
YXNlNjRVUkxEZWNvZGUocHVibGljS2V5QmFzZTY0VVJMLCBwdWJsaWNLZXlEYXRhKTsKKyAgICAg
ICAgYXV0byBwdWJsaWNLZXlEYXRhID0gYmFzZTY0VVJMRGVjb2RlKHB1YmxpY0tleUJhc2U2NFVS
TCk7CisgICAgICAgIGlmICghcHVibGljS2V5RGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBhdXRvIGNyeXB0byA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoUEFMOjpDcnlw
dG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7Ci0gICAgICAgIGNyeXB0by0+YWRkQnl0ZXMo
cHVibGljS2V5RGF0YS5kYXRhKCksIHB1YmxpY0tleURhdGEuc2l6ZSgpKTsKKyAgICAgICAgY3J5
cHRvLT5hZGRCeXRlcyhwdWJsaWNLZXlEYXRhLT5kYXRhKCksIHB1YmxpY0tleURhdGEtPnNpemUo
KSk7CiAgICAgICAgIGF1dG8gcHVibGljS2V5RGF0YUhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNo
KCk7CiAKLSAgICAgICAgYXV0byBrZXlJRCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHB1YmxpY0tl
eURhdGFIYXNoLmRhdGEoKSwgcHVibGljS2V5RGF0YUhhc2guc2l6ZSgpKTsKKyAgICAgICAgYXV0
byBrZXlJRCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChwdWJsaWNLZXlEYXRhSGFzaC5k
YXRhKCksIHB1YmxpY0tleURhdGFIYXNoLnNpemUoKSkpOwogICAgICAgICBpZiAoa2V5SUQgIT0g
YXR0cmlidXRpb24uc291cmNlVW5saW5rYWJsZVRva2VuKCktPmtleUlEQmFzZTY0VVJMKQogICAg
ICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFU
YXNrQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1LDcgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAjaWYgVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05FVFdPUktfU0VTU0lPTikK
IHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlh
bCkKIHsKLSAgICBTdHJpbmcgYXV0aGVudGljYXRpb25IZWFkZXIgPSAiQmFzaWMgIiArIGJhc2U2
NEVuY29kZShTdHJpbmcoY3JlZGVudGlhbC51c2VyKCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3
b3JkKCkpLnV0ZjgoKSk7Ci0gICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoV2ViQ29yZTo6
SFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGF1dGhlbnRpY2F0aW9uSGVhZGVyKTsKKyAg
ICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6QXV0
aG9yaXphdGlvbiwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9u
SGVhZGVyKCkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9B
UElEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURhdGEu
aAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAg
bWVtY3B5KGNvcGllZEJ5dGVzLCBieXRlcywgc2l6ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBy
ZXR1cm4gY3JlYXRlV2l0aG91dENvcHlpbmcoY29waWVkQnl0ZXMsIHNpemUsIGZhc3RGcmVlQnl0
ZXMsIG51bGxwdHIpOworICAgICAgICByZXR1cm4gY3JlYXRlV2l0aG91dENvcHlpbmcoY29waWVk
Qnl0ZXMsIHNpemUsIFtdICh1bnNpZ25lZCBjaGFyKiBieXRlcywgY29uc3Qgdm9pZCopIHsKKyAg
ICAgICAgICAgIGlmIChieXRlcykKKyAgICAgICAgICAgICAgICBmYXN0RnJlZShzdGF0aWNfY2Fz
dDx2b2lkKj4oYnl0ZXMpKTsKKyAgICAgICAgfSwgbnVsbHB0cik7CiAgICAgfQogICAgIAogICAg
IHN0YXRpYyBSZWY8RGF0YT4gY3JlYXRlKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYgYnVm
ZmVyKQpAQCAtNjgsNiArNzEsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY3JlYXRlKGJ1
ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBSZWY8RGF0
YT4gY3JlYXRlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmIGJ1ZmZlcikKKyAgICB7CisgICAgICAg
IGF1dG8gYnVmZmVyU2l6ZSA9IGJ1ZmZlci5zaXplKCk7CisgICAgICAgIGF1dG8gYnVmZmVyUG9p
bnRlciA9IGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCkubGVha1B0cigpOworICAgICAgICByZXR1cm4g
Y3JlYXRlV2l0aG91dENvcHlpbmcoYnVmZmVyUG9pbnRlciwgYnVmZmVyU2l6ZSwgW10gKHVuc2ln
bmVkIGNoYXIqIGJ5dGVzLCBjb25zdCB2b2lkKikgeworICAgICAgICAgICAgaWYgKGJ5dGVzKQor
ICAgICAgICAgICAgICAgIFdURjo6VmVjdG9yTWFsbG9jOjpmcmVlKGJ5dGVzKTsKKyAgICAgICAg
fSwgbnVsbHB0cik7CisgICAgfQorCiAgICAgc3RhdGljIFJlZlB0cjxEYXRhPiBjcmVhdGUoY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7CiAgICAgCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC05
NiwxMiArMTA5LDYgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
ZmFzdEZyZWVCeXRlcyh1bnNpZ25lZCBjaGFyKiBieXRlcywgY29uc3Qgdm9pZCopCi0gICAgewot
ICAgICAgICBpZiAoYnl0ZXMpCi0gICAgICAgICAgICBmYXN0RnJlZShzdGF0aWNfY2FzdDx2b2lk
Kj4oYnl0ZXMpKTsKLSAgICB9Ci0KICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBtX2J5dGVzIHsg
bnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzE1LDE4ICszMTUsMTMgQEAgc3RhdGljIFN0cmluZyBzYW5kYm94
RGlyZWN0b3J5KFdlYkNvcmU6OgogCiBzdGF0aWMgU3RyaW5nIHNhbmRib3hGaWxlUGF0aChjb25z
dCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgsIGNvbnN0IENTdHJpbmcmIGhlYWRlcikKIHsKLSAgICBT
dHJpbmdCdWlsZGVyIHNhbmRib3hGaWxlOwotICAgIHNhbmRib3hGaWxlLmFwcGVuZChkaXJlY3Rv
cnlQYXRoKTsKLSAgICBzYW5kYm94RmlsZS5hcHBlbmQoIi9Db21waWxlZFNhbmRib3grIik7Ci0K
ICAgICAvLyBNYWtlIHRoZSBmaWxlbmFtZSBzZW1pLXVuaXF1ZSBiYXNlZCBvbiB0aGUgY29udGVu
dHMgb2YgdGhlIGhlYWRlci4KKwogICAgIGF1dG8gY3J5cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6
OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBjcnlw
dG8tPmFkZEJ5dGVzKGhlYWRlci5kYXRhKCksIGhlYWRlci5sZW5ndGgoKSk7Ci0gICAgVmVjdG9y
PHVpbnQ4X3Q+IGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7Ci0gICAgU3RyaW5nIHJlYWRh
YmxlSGFzaCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSk7
CisgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgc2FuZGJveEZp
bGUuYXBwZW5kKHJlYWRhYmxlSGFzaCk7Ci0gICAgcmV0dXJuIHNhbmRib3hGaWxlLnRvU3RyaW5n
KCk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0aCwgIi9Db21waWxlZFNhbmRi
b3grIiwgYmFzZTY0VVJMRW5jb2RlZChoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpKTsKIH0KIAog
c3RhdGljIGJvb2wgZW5zdXJlU2FuZGJveENhY2hlRGlyZWN0b3J5KGNvbnN0IFNhbmRib3hJbmZv
JiBpbmZvKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsNyArNTIw
LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAogICAgIFN0YXJ0VVJMU2NoZW1lVGFz
ayhzdHJ1Y3QgV2ViS2l0OjpVUkxTY2hlbWVUYXNrUGFyYW1ldGVycyBwYXJhbWV0ZXJzKQogICAg
IFN0b3BVUkxTY2hlbWVUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCB0
YXNrSWRlbnRpZmllcikKLSAgICBMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrKHN0cnVjdCBX
ZWJLaXQ6OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpIC0+IChXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBW
ZWN0b3I8Y2hhcj4gZGF0YSkgU3luY2hyb25vdXMKKyAgICBMb2FkU3luY2hyb25vdXNVUkxTY2hl
bWVUYXNrKHN0cnVjdCBXZWJLaXQ6OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMp
IC0+IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yIGVycm9yLCBWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKIAogI2lmIEVO
QUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgU2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlv
bkFuZE1vdGlvbkFjY2VzcyhXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgc3RydWN0
IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFtZUluZm8sIGJvb2wgbWF5UHJvbXB0KSAtPiAoZW51
bTp1aW50OF90IFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9uU3Rh
dGUgcGVybWlzc2lvblN0YXRlKSBBc3luYwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViVVJMU2NoZW1lSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBAIHN0cnVjdCBVUkxTY2hlbWVUYXNrUGFyYW1ldGVyczsKIGNsYXNzIFdlYlBh
Z2VQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKIAotdXNpbmcgU3luY0xvYWRDb21wbGV0
aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBWZWN0b3I8
Y2hhcj4mKT47Cit1c2luZyBTeW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0gQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpPjsKIAogY2xhc3MgV2Vi
VVJMU2NoZW1lSGFuZGxlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlVSTFNjaGVtZUhhbmRsZXI+
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxTY2hlbWVIYW5kbGVyKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDEwICsyMTIsMTAgQEAgYXV0byBXZWJVUkxTY2hlbWVU
YXNrOjpkaWRDb21wbGV0ZShjb25zdAogICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKICAgICAKICAg
ICBpZiAoaXNTeW5jKCkpIHsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBkYXRhOwogICAgICAgICBpZiAobV9zeW5jRGF0YSkgewogICAgICAgICAg
ICAgZGF0YS5yZXNpemUobV9zeW5jRGF0YS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIG1lbWNweShk
YXRhLmRhdGEoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obV9zeW5jRGF0YS0+ZGF0
YSgpKSwgbV9zeW5jRGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG1lbWNweShkYXRhLmRhdGEo
KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9zeW5jRGF0YS0+ZGF0YSgpKSwg
bV9zeW5jRGF0YS0+c2l6ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fc3luY0NvbXBsZXRp
b25IYW5kbGVyKG1fc3luY1Jlc3BvbnNlLCBlcnJvciwgV1RGTW92ZShkYXRhKSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgc3RydWN0IFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJz
OwogY2xhc3MgV2ViVVJMU2NoZW1lSGFuZGxlcjsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIAotdXNp
bmcgU3luY0xvYWRDb21wbGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJy
b3ImLCBjb25zdCBWZWN0b3I8Y2hhcj4mKT47Cit1c2luZyBTeW5jTG9hZENvbXBsZXRpb25IYW5k
bGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYpPjsKIAogY2xhc3MgV2ViVVJMU2NoZW1lVGFzayA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8
QVBJOjpPYmplY3Q6OlR5cGU6OlVSTFNjaGVtZVRhc2s+LCBwdWJsaWMgSW5zdGFuY2VDb3VudGVk
PFdlYlVSTFNjaGVtZVRhc2s+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxTY2hl
bWVUYXNrKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAko
cmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzOCwxMyArMjMzOCwxNCBAQCB2b2lkIFdLUGFnZVNl
dFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KFdLUGFnCiAgICAgICAgICAgICBpZiAobV9jbGllbnQuY29w
eVdlYkNyeXB0b01hc3RlcktleSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYodG9J
bXBsKG1fY2xpZW50LmNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkodG9BUEkoJnBhZ2UpLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pKSk7CiAKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0
ZXJLZXk7CiAjaWYgRU5BQkxFKFdFQl9DUllQVE8pCi0gICAgICAgICAgICBpZiAoIWdldERlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKKyAgICAgICAgICAgIGF1dG8gbWFzdGVy
S2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgICAgICAgICAgaWYgKCFtYXN0
ZXJLZXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1
cm4gQVBJOjpEYXRhOjpjcmVhdGUoV1RGTW92ZSgqbWFzdGVyS2V5KSk7CisjZWxzZQorICAgICAg
ICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKG51bGxwdHIsIDApOwogI2VuZGlmCi0KLSAg
ICAgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0YSgpLCBtYXN0
ZXJLZXkuc2l6ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIFJlZlB0cjxBUEk6OlN0cmluZz4g
c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKFdlYlBhZ2VQcm94eSYgcGFnZSwgdW5z
aWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBSZWZQdHI8QVBJOjpTdHJpbmc+JiBjaGFsbGVuZ2VT
dHJpbmcsIGNvbnN0IFVSTCYgdXJsKSBvdmVycmlkZQpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9u
UGFuZWwubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02
OCw3ICs2OCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNEYXRhPiBwcm9kdWNlQ2xpZW50RGEKICAg
ICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAid2ViYXV0aG4uZ2V0IiBmb3JLZXk6QCJ0eXBl
Il07CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6V1RG
OjpiYXNlNjRVUkxFbmNvZGUoY2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2UubGVuZ3RoKSBmb3JL
ZXk6QCJjaGFsbGVuZ2UiXTsKKyAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bWFrZVN0cmluZyhi
YXNlNjRVUkxFbmNvZGVkKGNoYWxsZW5nZS5ieXRlcywgY2hhbGxlbmdlLmxlbmd0aCkpIGZvcktl
eTpAImNoYWxsZW5nZSJdOwogICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpvcmlnaW4gZm9yS2V5
OkAib3JpZ2luIl07CiAKICAgICByZXR1cm4gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhK
U09OT2JqZWN0OmRpY3Rpb25hcnkuZ2V0KCkgb3B0aW9uczpOU0pTT05Xcml0aW5nU29ydGVkS2V5
cyBlcnJvcjpuaWxdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9j
YWlyby9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fp
cm8uY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBPcHRpb25hbDxTdHJpbmc+IGJhc2U2NEVuY29kZWRQ
TkcKICAgICBpZiAocG5nRGF0YS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKHBuZ0RhdGEpOworICAgIHJldHVybiBtYWtl
U3RyaW5nKGJhc2U2NEVuY29kZWQocG5nRGF0YSkpOwogfQogCiBPcHRpb25hbDxTdHJpbmc+IFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpwbGF0Zm9ybUdldEJhc2U2NEVuY29kZWRQTkdEYXRhKGNvbnN0
IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTExMzUsMTEgKzExMzUsMTEgQEAgUmVmUHRyPEFQSTo6RGF0YT4gTmF2
aWdhdGlvblN0YXRlOjpOYXZpZwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICgh
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJDcnlwdG9N
YXN0ZXJLZXlGb3JXZWJWaWV3KSB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7
Ci0gICAgICAgIGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQor
ICAgICAgICBhdXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAg
ICAgICAgaWYgKCFtYXN0ZXJLZXkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
ICAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUobWFzdGVyS2V5LmRhdGEoKSwgbWFzdGVyS2V5
LnNpemUoKSk7CisgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShXVEZNb3ZlKCptYXN0
ZXJLZXkpKTsKICAgICB9CiAKICAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk0LDEzICsxOTQsMTEgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6
OnNldHVwQ29ubmVjdAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21t
YW5kcyhjb25zdCBjaGFyKiBiYWNrZW5kQ29tbWFuZHMpCiB7CiAgICAgaWYgKCFiYWNrZW5kQ29t
bWFuZHMgfHwgIWJhY2tlbmRDb21tYW5kc1swXSkgewotICAgICAgICBtX2JhY2tlbmRDb21tYW5k
c1VSTCA9IFN0cmluZygpOworICAgICAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IHsgfTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAg
IGJhc2U2NEVuY29kZShiYWNrZW5kQ29tbWFuZHMsIHN0cmxlbihiYWNrZW5kQ29tbWFuZHMpLCBi
YXNlNjREYXRhKTsKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9ICJkYXRhOnRleHQvamF2YXNj
cmlwdDtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBt
YWtlU3RyaW5nKCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChi
YWNrZW5kQ29tbWFuZHMsIHN0cmxlbihiYWNrZW5kQ29tbWFuZHMpKSk7CiB9CiAKIHZvaWQgUmVt
b3RlSW5zcGVjdG9yQ2xpZW50Ojpjb25uZWN0aW9uRGlkQ2xvc2UoKQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3Rr
L1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHlHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsOSArMTQyLDExIEBAIHZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm0KICAgICBWZWN0b3I8Y2hhcj4gZGF0YVZl
Y3RvcjsKICAgICBDU3RyaW5nIGRhdGFTdHJpbmc7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsK
LSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0VmFs
aWRhdGVQYWRkaW5nKSkKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShj
b250ZW50LCBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICBp
ZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkYXRhVmVjdG9y
LnNocmlua1RvRml0KCk7CisgICAgICAgIGRlY29kZWREYXRhLT5zaHJpbmtUb0ZpdCgpOworICAg
ICAgICBkYXRhVmVjdG9yID0gV1RGTW92ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxzZQogICAg
ICAgICBkYXRhU3RyaW5nID0gY29udGVudC51dGY4KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0
b3JVSVByb3h5R3RrLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQxLDkgKzU0MSwxMSBAQCB2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtU2F2ZShjCiAgICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7CiAgICAgQ1N0cmluZyBkYXRh
U3RyaW5nOwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIGlmICghYmFzZTY0RGVj
b2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAg
IGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudCwgQmFzZTY0RGVjb2RlT3B0
aW9uczo6VmFsaWRhdGVQYWRkaW5nKTsKKyAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgpOworICAgICAg
ICBkZWNvZGVkRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgZGF0YVZlY3RvciA9IFdURk1v
dmUoKmRlY29kZWREYXRhKTsKICAgICB9IGVsc2UKICAgICAgICAgZGF0YVN0cmluZyA9IGNvbnRl
bnQudXRmOCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFj
L1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWFj
Lm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTE3NCwxMCArMTc0LDEwIEBAIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm0KICAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29w
eSwgYWN0dWFsVVJMKTsKIAogICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRl
bnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICBhdXRvIGRl
Y29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBCYXNlNjREZWNvZGVPcHRpb25z
OjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29u
dGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBs
ZW5ndGg6b3V0LnNpemUoKV0pOworICAgICAgICAgICAgYXV0byBkYXRhQ29udGVudCA9IGFkb3B0
TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGVjb2RlZERhdGEtPmRhdGEoKSBsZW5n
dGg6ZGVjb2RlZERhdGEtPnNpemUoKV0pOwogICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRl
VG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5j
b2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNw
ZWN0b3JVSVByb3h5TWFjLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTUwOSwxMCArNTA5LDEwIEBAIHZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1TYXZlKGMKICAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2Vz
dGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKIAogICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewot
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVj
b2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAg
ICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBCYXNlNjREZWNv
ZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICAgICAgaWYgKCFkZWNvZGVkRGF0
YSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRh
PiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0
LmRhdGEoKSBsZW5ndGg6b3V0LnNpemUoKV0pOworICAgICAgICAgICAgYXV0byBkYXRhQ29udGVu
dCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGVjb2RlZERhdGEtPmRh
dGEoKSBsZW5ndGg6ZGVjb2RlZERhdGEtPnNpemUoKV0pOwogICAgICAgICAgICAgW2RhdGFDb250
ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxs
eTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNs
aWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIFJlbW90ZUlu
c3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvCiAgICAgaWYgKCFldmVudC5tZXNzYWdlIHx8IGV2
ZW50Lm1lc3NhZ2UtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9iYWNrZW5k
Q29tbWFuZHNVUkwgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiwg
YmFzZTY0RW5jb2RlKGV2ZW50Lm1lc3NhZ2UtPnV0ZjgoKSkpOworICAgIG1fYmFja2VuZENvbW1h
bmRzVVJMID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2
NEVuY29kZWQoZXZlbnQubWVzc2FnZS0+dXRmOCgpKSk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50JiBldmVudCkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGlj
YXRvci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50
aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0JKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0
aGVudGljYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAtODIsMTAgKzgyLDggQEAgc3RhdGljIGlu
bGluZSBIYXNoU2V0PFN0cmluZz4gcHJvZHVjZUhhcwogewogICAgIEhhc2hTZXQ8U3RyaW5nPiBy
ZXN1bHQ7CiAgICAgZm9yIChhdXRvJiBjcmVkZW50aWFsRGVzY3JpcHRvciA6IGNyZWRlbnRpYWxE
ZXNjcmlwdG9ycykgewotICAgICAgICBpZiAoZW1wdHlUcmFuc3BvcnRzT3JDb250YWluKGNyZWRl
bnRpYWxEZXNjcmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVy
bmFsKQotICAgICAgICAgICAgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IudHlwZSA9PSBQdWJsaWNL
ZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5Ci0gICAgICAgICAgICAmJiBjcmVkZW50aWFsRGVz
Y3JpcHRvci5pZFZlY3Rvci5zaXplKCkgPT0gY3JlZGVudGlhbElkTGVuZ3RoKQotICAgICAgICAg
ICAgcmVzdWx0LmFkZChiYXNlNjRFbmNvZGUoY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iu
ZGF0YSgpLCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkpKTsKKyAgICAgICAg
aWYgKGVtcHR5VHJhbnNwb3J0c09yQ29udGFpbihjcmVkZW50aWFsRGVzY3JpcHRvci50cmFuc3Bv
cnRzLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCkgJiYgY3JlZGVudGlhbERlc2Ny
aXB0b3IudHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5ICYmIGNyZWRl
bnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCisg
ICAgICAgICAgICByZXN1bHQuYWRkKG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChjcmVkZW50aWFs
RGVzY3JpcHRvci5pZFZlY3Rvci5kYXRhKCksIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9y
LnNpemUoKSkpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI0MSw3ICsyMzks
NyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoCiAgICAgICAgIGlm
IChub3RGb3VuZCAhPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZE1hdGNoaW5nKFsmZXhjbHVk
ZUNyZWRlbnRpYWxJZHNdIChhdXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgICAgICBhdXRvKiBy
YXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7CiAgICAgICAgICAgICBBU1NFUlQocmF3SWQpOwot
ICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVu
Y29kZShyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgICAgICBy
ZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFpbnMobWFrZVN0cmluZyhiYXNlNjRFbmNv
ZGVkKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKSk7CiAgICAgICAgIH0pKSB7
CiAgICAgICAgICAgICByZWNlaXZlRXhjZXB0aW9uKHsgTm90QWxsb3dlZEVycm9yLCAiQXQgbGVh
c3Qgb25lIGNyZWRlbnRpYWwgbWF0Y2hlcyBhbiBlbnRyeSBvZiB0aGUgZXhjbHVkZUNyZWRlbnRp
YWxzIGxpc3QgaW4gdGhlIHBsYXRmb3JtIGF0dGFjaGVkIGF1dGhlbnRpY2F0b3IuIl9zIH0sIFdl
YkF1dGhlbnRpY2F0aW9uU3RhdHVzOjpMQUV4Y2x1ZGVDcmVkZW50aWFsc01hdGNoZWQpOwogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtNTE4LDcgKzUxNiw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNh
dG9yOjpnZXRBc3NlcnRpb24oKQogICAgICAgICB9CiAKICAgICAgICAgYXV0byogcmF3SWQgPSBj
cmVkZW50aWFsLT5yYXdJZCgpOwotICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRh
aW5zKGJhc2U2NEVuY29kZShyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSkpCisg
ICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMobWFrZVN0cmluZyhiYXNlNjRF
bmNvZGVkKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKSkpCiAgICAgICAgICAg
ICBhc3NlcnRpb25SZXNwb25zZXMudW5jaGVja2VkQXBwZW5kKGNyZWRlbnRpYWwuY29weVJlZigp
KTsKICAgICB9CiAgICAgaWYgKGFzc2VydGlvblJlc3BvbnNlcy5pc0VtcHR5KCkpIHsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0hpZENv
bm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tI
aWRDb25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDE1ICsyNjEsMTMgQEAgdm9p
ZCBNb2NrSGlkQ29ubmVjdGlvbjo6ZmVlZFJlcG9ydHMoKQogICAgICAgICBpZiAoc3RhZ2VzTWF0
Y2goKSAmJiBtX2NvbmZpZ3VyYXRpb24uaGlkLT5lcnJvciA9PSBNb2NrOjpIaWRFcnJvcjo6VW5z
dXBwb3J0ZWRPcHRpb25zICYmIChtX3JlcXVpcmVSZXNpZGVudEtleSB8fCBtX3JlcXVpcmVVc2Vy
VmVyaWZpY2F0aW9uKSkKICAgICAgICAgICAgIG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3Jl
YXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21tYW5kOjprQ2JvciwgeyBzdGF0
aWNfY2FzdDx1aW50OF90PihDdGFwRGV2aWNlUmVzcG9uc2VDb2RlOjprQ3RhcDJFcnJVbnN1cHBv
cnRlZE9wdGlvbikgfSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHBheWxvYWQ7CiAgICAgICAgICAgICBBU1NFUlQoIW1fY29uZmlndXJhdGlvbi5oaWQtPnBh
eWxvYWRCYXNlNjQuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIGF1dG8gc3RhdHVzID0gYmFzZTY0
RGVjb2RlKG1fY29uZmlndXJhdGlvbi5oaWQtPnBheWxvYWRCYXNlNjRbMF0sIHBheWxvYWQpOwor
ICAgICAgICAgICAgYXV0byBwYXlsb2FkID0gYmFzZTY0RGVjb2RlKG1fY29uZmlndXJhdGlvbi5o
aWQtPnBheWxvYWRCYXNlNjRbMF0pOwogICAgICAgICAgICAgbV9jb25maWd1cmF0aW9uLmhpZC0+
cGF5bG9hZEJhc2U2NC5yZW1vdmUoMCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN0YXR1
cywgc3RhdHVzKTsKICAgICAgICAgICAgIGlmICghbV9jb25maWd1cmF0aW9uLmhpZC0+aXNVMmYp
Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJy
ZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNvbW1hbmQ6OmtDYm9yLCBwYXlsb2FkKTsKKyAgICAg
ICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFu
bmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a0Nib3IsIFdURk1vdmUoKnBheWxvYWQpKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3NhZ2U6
OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a01zZywgcGF5
bG9hZCk7CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUo
bV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNvbW1hbmQ6OmtNc2csIFdURk1vdmUoKnBh
eWxvYWQpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9j
a0xvY2FsQ29ubmVjdGlvbi5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBNb2NrTG9jYWxDb25uZWN0aW9u
OjpmaWx0ZXJSZXNwb25zZQogICAgIGZvciAoOyBpdHIgIT0gcmVzcG9uc2VzLmVuZCgpOyArK2l0
cikgewogICAgICAgICBhdXRvKiByYXdJZCA9IGl0ci0+Z2V0KCkucmF3SWQoKTsKICAgICAgICAg
QVNTRVJUKHJhd0lkKTsKLSAgICAgICAgYXV0byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZShy
YXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYXV0byByYXdJZEJh
c2U2NCA9IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0
ZUxlbmd0aCgpKSk7CiAgICAgICAgIGlmIChyYXdJZEJhc2U2NCA9PSBwcmVmZXJyZWRDcmVkZW50
aWFsSWRCYXNlNjQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9X
ZWJMb2FkZXJTdHJhdGVneS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3OCw3ICs1NzgsNyBAQCBP
cHRpb25hbDxXZWJMb2FkZXJTdHJhdGVneTo6U3luY0xvYWRSZXN1CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRl
bnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGllbnRDcmVkZW50aWFs
UG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksICBjb25zdCBGZXRjaE9wdGlvbnMmIG9wdGlv
bnMsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIFJlc291cmNl
RXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBk
YXRhKQordm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShG
cmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGllbnRDcmVkZW50aWFsUG9s
aWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksICBjb25zdCBGZXRjaE9wdGlvbnMmIG9wdGlvbnMs
IGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIFJlc291cmNlRXJy
b3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBk
YXRhKQogewogICAgIGF1dG8qIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0gdG9XZWJGcmFtZUxvYWRl
ckNsaWVudChmcmFtZUxvYWRlci5jbGllbnQoKSk7CiAgICAgYXV0byogd2ViRnJhbWUgPSB3ZWJG
cmFtZUxvYWRlckNsaWVudCA/ICZ3ZWJGcmFtZUxvYWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IG51
bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJT
dHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3Jr
L1dlYkxvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH5XZWJMb2FkZXJTdHJhdGVneSgpIGZpbmFsOwog
ICAgIAogICAgIHZvaWQgbG9hZFJlc291cmNlKFdlYkNvcmU6OkZyYW1lJiwgV2ViQ29yZTo6Q2Fj
aGVkUmVzb3VyY2UmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VMb2FkZXJPcHRpb25zJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8V2Vi
Q29yZTo6U3VicmVzb3VyY2VMb2FkZXI+JiYpPiYmKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25nIHJl
c291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdl
YkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0aW9u
cyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkgZmluYWw7
CisgICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6OkZyYW1lTG9hZGVy
JiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBX
ZWJDb3JlOjpGZXRjaE9wdGlvbnMmLCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiwgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8
dWludDhfdD4mIGRhdGEpIGZpbmFsOwogICAgIHZvaWQgcGFnZUxvYWRDb21wbGV0ZWQoV2ViQ29y
ZTo6UGFnZSYpIGZpbmFsOwogICAgIHZvaWQgYnJvd3NpbmdDb250ZXh0UmVtb3ZlZChXZWJDb3Jl
OjpGcmFtZSYpIGZpbmFsOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICBzdHJ1
Y3QgU3luY0xvYWRSZXN1bHQgewogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJl
c3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yOwotICAgICAgICBW
ZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgfTsK
ICAgICBPcHRpb25hbDxTeW5jTG9hZFJlc3VsdD4gdHJ5TG9hZGluZ1N5bmNocm9ub3VzbHlVc2lu
Z1VSTFNjaGVtZUhhbmRsZXIoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCBSZXNvdXJjZUxvYWRJZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICAgICBTeW5jTG9hZFJl
c3VsdCBsb2FkRGF0YVVSTFN5bmNocm9ub3VzbHkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hl
bWVIYW5kbGVyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQ
cm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBXZWJVUkxTY2hl
bWVIYW5kbGVyUHJveHk6OnN0YXJ0TmV3VAogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnN0
YXJ0TG9hZGluZygpOwogfQogCi12b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6bG9hZFN5
bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBsb2FkSWRlbnRpZmllciwgV2ViRnJh
bWUmIHdlYkZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgVmVjdG9yPGNoYXI+JiBkYXRh
KQordm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OmxvYWRTeW5jaHJvbm91c2x5KFJlc291
cmNlTG9hZElkZW50aWZpZXIgbG9hZElkZW50aWZpZXIsIFdlYkZyYW1lJiB3ZWJGcmFtZSwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwg
UmVzb3VyY2VFcnJvciYgZXJyb3IsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBkYXRh
LnNocmluaygwKTsKICAgICBpZiAoIW1fd2ViUGFnZS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrKFVSTFNjaGVtZVRhc2tQYXJhbWV0
ZXJzIHsgbV9pZGVudGlmaWVyLCBsb2FkSWRlbnRpZmllciwgcmVxdWVzdCwgd2ViRnJhbWUuaW5m
bygpIH0pLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVU
YXNrOjpSZXBseShyZXNwb25zZSwgZXJyb3IsIGRhdGEpKSkgewpJbmRleDogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxl
clByb3h5LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3
ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0TmV3VGFzayhXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRlciYsIFdlYkZyYW1lJik7CiAgICAgdm9pZCBzdG9wQWxsVGFza3MoKTsKIAotICAgIHZv
aWQgbG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgV2ViRnJhbWUmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFZlY3RvcjxjaGFyPiYpOworICAgIHZvaWQgbG9h
ZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgV2ViRnJhbWUmLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYsIFZlY3Rvcjx1aW50OF90PiYpOwogCiAgICAgdWludDY0X3Qg
aWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogICAgIFdlYlBhZ2Um
IHBhZ2UoKSB7IHJldHVybiBtX3dlYlBhZ2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjps
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAgICAgVXBkYXRlIHRvIG1hdGNoIG5ldyBzaWdu
YXR1cmUuIGNoYXIgLT4gdWludDhfdC4KKwogMjAyMS0wNS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSgp
IHRvIEZpbGVTeXN0ZW06OmZpbGVTaXplKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvV2Vi
Q29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxl
ci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1
cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3
LDcgKzEwNyw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3UKICAg
ICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyLCB1bnNpZ25lZCBsb25nLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0
IEZldGNoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJy
b3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRh
KQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0
aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3ImIGVycm9y
LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewog
ICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGZyYW1lTG9hZGVy
Lm5ldHdvcmtpbmdDb250ZXh0KCksIHJlcXVlc3QsIG9wdGlvbnMuY3JlZGVudGlhbHMgPT0gRmV0
Y2hPcHRpb25zOjpDcmVkZW50aWFsczo6T21pdCA/IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpE
b05vdFVzZSA6IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UsIGVycm9yLCByZXNwb25zZSwg
ZGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJl
c291cmNlTG9hZFNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kv
V2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAg
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCiAgICAgdm9pZCBsb2FkUmVzb3VyY2UoV2Vi
Q29yZTo6RnJhbWUmLCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSYsIFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcj4mJik+JiYp
IGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpGcmFt
ZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0
aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpIGZpbmFsOwor
ICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpGcmFtZUxvYWRlciYs
IHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6
OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0aW9ucyYsIGNv
bnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYpIGZpbmFsOwogICAgIHZv
aWQgcGFnZUxvYWRDb21wbGV0ZWQoV2ViQ29yZTo6UGFnZSYpIGZpbmFsOwogICAgIHZvaWQgYnJv
d3NpbmdDb250ZXh0UmVtb3ZlZChXZWJDb3JlOjpGcmFtZSYpIGZpbmFsOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAy
MS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRl
IEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQgY29u
dmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21l
Q2xpZW50Ojp3cmFwQ3J5cHRvS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6
dW53cmFwQ3J5cHRvS2V5IGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgT3B0aW9u
YWwgcmV0dXJuaW5nIGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKS4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpzYXZlKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgT3B0aW9u
YWwgcmV0dXJuaW5nIGJhc2U2NERlY29kZSgpLgorCiAyMDIxLTA1LTE1ICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIERlbGV0ZSBXZWJTUUwgY29kZSBmcm9tIFdl
YktpdDIKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTA2NiwyOCArMTA2NiwzNCBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6
ZXhpdEZ1bGxTY3JlZW5Gb3JFCiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojp3cmFwQ3J5cHRvS2V5
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXkp
IGNvbnN0CiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICAgICBTRUwgc2VsZWN0
b3IgPSBAc2VsZWN0b3Iod2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmlldzopOwogICAgIGlmIChb
W21fd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKSB7CiAg
ICAgICAgIE5TRGF0YSAqa2V5RGF0YSA9IENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgc2VsZWN0
b3IpOworICAgICAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogICAgICAgICBtYXN0ZXJL
ZXkuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihjb25zdF9jYXN0PHZvaWQqPihba2V5RGF0
YSBieXRlc10pKSwgW2tleURhdGEgbGVuZ3RoXSk7Ci0gICAgfSBlbHNlIGlmICghZ2V0RGVmYXVs
dFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQorICAgICAgICByZXR1cm4gd3JhcFNlcmlh
bGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCBrZXksIHdyYXBwZWRLZXkpOworICAgIH0KKyAgICAK
KyAgICBhdXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBp
ZiAoIW1hc3RlcktleSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHdyYXBT
ZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwga2V5LCB3cmFwcGVkS2V5KTsKKyAgICByZXR1
cm4gd3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoV1RGTW92ZSgqbWFzdGVyS2V5KSwga2V5LCB3cmFw
cGVkS2V5KTsKIH0KIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnVud3JhcENyeXB0b0tleShjb25z
dCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXksIFZlY3Rvcjx1aW50OF90PiYga2V5KSBjb25z
dAogewotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAgICAgU0VMIHNlbGVjdG9yID0g
QHNlbGVjdG9yKHdlYkNyeXB0b01hc3RlcktleUZvcldlYlZpZXc6KTsKICAgICBpZiAoW1ttX3dl
YlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkgeworICAgICAg
ICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogICAgICAgICBOU0RhdGEgKmtleURhdGEgPSBD
YWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIHNlbGVjdG9yKTsKICAgICAgICAgbWFzdGVyS2V5LmFw
cGVuZChzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDx2b2lkKj4oW2tleURhdGEgYnl0
ZXNdKSksIFtrZXlEYXRhIGxlbmd0aF0pOwotICAgIH0gZWxzZSBpZiAoIWdldERlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gdW53cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIHdyYXBwZWRLZXks
IGtleSk7CisgICAgfQogCi0gICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFz
dGVyS2V5LCB3cmFwcGVkS2V5LCBrZXkpOworICAgIGF1dG8gbWFzdGVyS2V5ID0gZGVmYXVsdFdl
YkNyeXB0b01hc3RlcktleSgpOworICAgIGlmICghbWFzdGVyS2V5KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoV1RGTW92ZSgqbWFz
dGVyS2V5KSwgd3JhcHBlZEtleSwga2V5KTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAg
LTQwOCwxMCArNDA4LDEwIEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNhdmUo
Y28KICAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29w
eSwgYWN0dWFsVVJMKTsKIAogICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRl
bnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICBhdXRvIGRl
Y29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQsIEJhc2U2NERlY29kZU9wdGlvbnM6OlZh
bGlkYXRlUGFkZGluZyk7CisgICAgICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50
ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0
aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVu
dCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGVjb2RlZERhdGEtPmRh
dGEoKSBsZW5ndGg6ZGVjb2RlZERhdGEtPnNpemUoKV0pOwogICAgICAgICAgICAgW2RhdGFDb250
ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxs
eTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CkluZGV4OiBU
b29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
Nzc2OTcpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBA
QAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
VXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVybiBXZWJL
aXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VENQU2VydmVyOjpzdGFydFNlY3VyZUNvbm5lY3Rpb24pOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VENQU2VydmVyOjp0ZXN0Q2VydGlmaWNhdGUpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VENQU2VydmVyOjp0ZXN0UHJpdmF0ZUtleSk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRDb2NvYS5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tOgor
ICAgICAgICAodGVzdElkZW50aXR5Mik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9FdmVudEF0dHJpYnV0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9y
Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25u
ZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hha2UpOgorCiAyMDIxLTA1LTE4ICBBZGl0eWEgS2VlcnRo
aSAgPGFrZWVydGhpQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1NdIFRpdGxlYmFyIHNlcGFy
YXRvciBkb2Vzbid0IHNob3cgd2hlbiBXS1dlYlZpZXcgaXMgc2Nyb2xsZWQKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1RDUFNlcnZlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVENQU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDkgKzE1NSw4IEBAIHZv
aWQgVENQU2VydmVyOjpzdGFydFNlY3VyZUNvbm5lY3Rpb24oU28KICAgICAibGRZOWF2Y1RHU3di
d29pdUlxdjBqVEwxZkhGbnp5M1JITUxEaCtMcHZvbGM1RFNyU0pIQ1A1V3VLMGVlSlhociIKICAg
ICAiVDVvUXBITDl6L2NDRExBS0NLUmE0dVYwZmhFZE9XQnF5UjlwOHk1akp0eWU3MnQ2Q3VGVVY1
aXFjcEY0Qkg0ZiIKICAgICAiajJWTkh3c1NySndrRDRRVUdsVXRIN3Z3blFteUNGeFpNbVdBSmc9
PSIpOwotICAgIFZlY3Rvcjx1aW50OF90PiBjZXJ0REVSOwotICAgIGJhc2U2NERlY29kZShjZXJ0
UEVNLCBjZXJ0REVSLCBXVEY6OkJhc2U2NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwot
ICAgIHNzbDo6dW5pcXVlX3B0cjxDUllQVE9fQlVGRkVSPiBjZXJ0KENSWVBUT19CVUZGRVJfbmV3
KGNlcnRERVIuZGF0YSgpLCBjZXJ0REVSLnNpemUoKSwgbnVsbHB0cikpOworICAgIGF1dG8gY2Vy
dERFUiA9IGJhc2U2NERlY29kZShjZXJ0UEVNKTsKKyAgICBzc2w6OnVuaXF1ZV9wdHI8Q1JZUFRP
X0JVRkZFUj4gY2VydChDUllQVE9fQlVGRkVSX25ldyhjZXJ0REVSLT5kYXRhKCksIGNlcnRERVIt
PnNpemUoKSwgbnVsbHB0cikpOwogICAgIEFTU0VSVChjZXJ0KTsKIAogICAgIC8vIFRoaXMgaXMg
YSB0ZXN0IGtleSBmcm9tIEJvcmluZ1NTTC4KQEAgLTQxMiw5ICs0MTEsOCBAQCBWZWN0b3I8dWlu
dDhfdD4gVENQU2VydmVyOjp0ZXN0Q2VydGlmaWNhCiAgICAgIkczUEZuWWJXOHVySDBOU0pHL1cr
LzlEQStZN0FhMGNzNFRQcHVCR1owTlUxVzk0T29DTW80bGtPNkgveTZMZXUiCiAgICAgIjN2alpE
M3k5a1prN21yZTlYSHdrSThNZEs1cz0iKTsKICAgICAKLSAgICBWZWN0b3I8dWludDhfdD4gdmVj
dG9yOwotICAgIGJhc2U2NERlY29kZShwZW1FbmNvZGVkQ2VydGlmaWNhdGUsIHZlY3RvciwgV1RG
OjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsKLSAgICByZXR1cm4gdmVjdG9y
OworICAgIGF1dG8gZGVjb2RlZENlcnRpZmljYXRlID0gYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRD
ZXJ0aWZpY2F0ZSk7CisgICAgcmV0dXJuIFdURk1vdmUoKmRlY29kZWRDZXJ0aWZpY2F0ZSk7CiB9
CiAKIFZlY3Rvcjx1aW50OF90PiBUQ1BTZXJ2ZXI6OnRlc3RQcml2YXRlS2V5KCkKQEAgLTQ3MSw5
ICs0NjksOCBAQCBWZWN0b3I8dWludDhfdD4gVENQU2VydmVyOjp0ZXN0UHJpdmF0ZUtlCiAgICAg
ImRFT2J2Y3BTaFAyMkl0T1ZqU2FtcFJ1QXVSRzI2WmVtRWJHQ0kzSjZNcXgzeTZtKzZId3VsdHNn
dGR6RGdyRmUiCiAgICAgInFKZlU4YmJkYnUycGk0N1k0RmRKSzBITGZmbDVSdz09Iik7CiAKLSAg
ICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIGJhc2U2NERlY29kZShwZW1FbmNvZGVkUHJp
dmF0ZUtleSwgdmVjdG9yLCBXVEY6OkJhc2U2NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQp
OwotICAgIHJldHVybiB2ZWN0b3I7CisgICAgYXV0byBkZWNvZGVkUHJpdmF0ZUtleSA9IGJhc2U2
NERlY29kZShwZW1FbmNvZGVkUHJpdmF0ZUtleSk7CisgICAgcmV0dXJuIFdURk1vdmUoKmRlY29k
ZWRQcml2YXRlS2V5KTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDExIEBAIHN0YXRpYyBjb25zdCBjaGFy
KiBiYXNlNjRFbmNvZGVkU2luZldpdGgKIAogVEVTVChJU09Cb3gsIElTT1Byb3RlY3Rpb25TY2hl
bWVJbmZvQm94KQogewotICAgIFZlY3Rvcjx1aW50OF90PiBzaW5mQXJyYXk7Ci0gICAgQVNTRVJU
X1RSVUUoYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2RlZFNpbmZXaXRoS2V5SUQz
KSwgc2luZkFycmF5KSk7Ci0gICAgQVNTRVJUX0VRKDk3VUwsIHNpbmZBcnJheS5zaXplKCkpOwor
ICAgIGF1dG8gc2luZkFycmF5ID0gYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2Rl
ZFNpbmZXaXRoS2V5SUQzKSk7CisgICAgQVNTRVJUX1RSVUUoc2luZkFycmF5KTsKKyAgICBBU1NF
UlRfRVEoOTdVTCwgc2luZkFycmF5LT5zaXplKCkpOwogCi0gICAgYXV0byB2aWV3ID0gSlNDOjpE
YXRhVmlldzo6Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUoc2luZkFycmF5LmRhdGEoKSwgc2lu
ZkFycmF5LnNpemUoKSksIDAsIHNpbmZBcnJheS5zaXplKCkpOworICAgIGF1dG8gdmlldyA9IEpT
Qzo6RGF0YVZpZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKHNpbmZBcnJheS0+ZGF0YSgp
LCBzaW5mQXJyYXktPnNpemUoKSksIDAsIHNpbmZBcnJheS0+c2l6ZSgpKTsKIAogICAgIElTT1By
b3RlY3Rpb25TY2hlbWVJbmZvQm94IHNpbmZCb3g7CiAgICAgQVNTRVJUX1RSVUUoc2luZkJveC5y
ZWFkKHZpZXcpKTsKQEAgLTc4LDExICs3OCwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciogYmFzZTY0
RW5jb2RlZFBzc2hXaXRoCiAKIFRFU1QoSVNPQm94LCBJU09GYWlyUGxheVN0cmVhbWluZ1Bzc2hC
b3gpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHBzc2hBcnJheTsKLSAgICBBU1NFUlRfVFJVRShi
YXNlNjREZWNvZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNvZGVkUHNzaFdpdGhBc3NldElkKSwgcHNz
aEFycmF5KSk7Ci0gICAgQVNTRVJUX0VRKDE3NlVMLCBwc3NoQXJyYXkuc2l6ZSgpKTsKKyAgICBh
dXRvIHBzc2hBcnJheSA9IGJhc2U2NERlY29kZShTdHJpbmdWaWV3KGJhc2U2NEVuY29kZWRQc3No
V2l0aEFzc2V0SWQpKTsKKyAgICBBU1NFUlRfVFJVRShwc3NoQXJyYXkpOworICAgIEFTU0VSVF9F
USgxNzZVTCwgcHNzaEFycmF5LT5zaXplKCkpOwogCi0gICAgYXV0byB2aWV3ID0gSlNDOjpEYXRh
Vmlldzo6Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUocHNzaEFycmF5LmRhdGEoKSwgcHNzaEFy
cmF5LnNpemUoKSksIDAsIHBzc2hBcnJheS5zaXplKCkpOworICAgIGF1dG8gdmlldyA9IEpTQzo6
RGF0YVZpZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKHBzc2hBcnJheS0+ZGF0YSgpLCBw
c3NoQXJyYXktPnNpemUoKSksIDAsIHBzc2hBcnJheS0+c2l6ZSgpKTsKIAogICAgIElTT0ZhaXJQ
bGF5U3RyZWFtaW5nUHNzaEJveCBwc3NoQm94OwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29j
b2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgVEVTVChQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudCwgVmFsaWRCbGluZAogICAgIGF1dG8gKm5zU3BraURhdGEgPSAoX19icmlkZ2Ug
TlNEYXRhICopc3BraURhdGEuZ2V0KCk7CiAKICAgICAvLyBDb250aW51ZSB0aGUgdGVzdC4KLSAg
ICBFWFBFQ1RfVFJVRShwY20uY2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJsZVRva2Vu
KFdURjo6YmFzZTY0VVJMRW5jb2RlKG5zU3BraURhdGEuYnl0ZXMsIG5zU3BraURhdGEubGVuZ3Ro
KSkpOworICAgIEVYUEVDVF9UUlVFKHBjbS5jYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VVbmxpbmth
YmxlVG9rZW4obWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKG5zU3BraURhdGEuYnl0ZXMsIG5z
U3BraURhdGEubGVuZ3RoKSkpKTsKICAgICBhdXRvIHNvdXJjZVNlY3JldFRva2VuID0gcGNtLnRv
a2VuU2lnbmF0dXJlSlNPTigpOwogICAgIEVYUEVDVF9FUShzb3VyY2VTZWNyZXRUb2tlbi0+YXNP
YmplY3QoKS0+c2l6ZSgpLCA0dWwpOwogICAgIEVYUEVDVF9TVFJFUShzb3VyY2VTZWNyZXRUb2tl
bi0+Z2V0U3RyaW5nKCJzb3VyY2VfZW5nYWdlbWVudF90eXBlIl9zKS51dGY4KCkuZGF0YSgpLCAi
Y2xpY2siKTsKQEAgLTkwLDE0ICs5MCwxMyBAQCBURVNUKFByaXZhdGVDbGlja01lYXN1cmVtZW50
LCBWYWxpZEJsaW5kCiAgICAgRVhQRUNUX0VRKHNvdXJjZVNlY3JldFRva2VuLT5nZXRJbnRlZ2Vy
KCJ2ZXJzaW9uIl9zKSwgMik7CiAKICAgICAvLyBHZW5lcmF0ZSB0aGUgc2lnbmF0dXJlLgotICAg
IFZlY3Rvcjx1aW50OF90PiBibGluZGVkTWVzc2FnZTsKLSAgICBiYXNlNjRVUkxEZWNvZGUoc291
cmNlU2VjcmV0VG9rZW4tPmdldFN0cmluZygic291cmNlX3NlY3JldF90b2tlbiJfcyksIGJsaW5k
ZWRNZXNzYWdlKTsKKyAgICBhdXRvIGJsaW5kZWRNZXNzYWdlID0gYmFzZTY0VVJMRGVjb2RlKHNv
dXJjZVNlY3JldFRva2VuLT5nZXRTdHJpbmcoInNvdXJjZV9zZWNyZXRfdG9rZW4iX3MpKTsKIAot
ICAgIGF1dG8gYmxpbmRlZFNpZ25hdHVyZSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9j
XSBpbml0V2l0aExlbmd0aDogbW9kdWx1c05CeXRlc10pOwotICAgIGNjcnNhYnNzYV9zaWduX2Js
aW5kZWRfbWVzc2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJpdmF0ZUtleSwgYmxpbmRlZE1lc3NhZ2Uu
ZGF0YSgpLCBibGluZGVkTWVzc2FnZS5zaXplKCksIHN0YXRpY19jYXN0PHVpbnQ4X3QgKj4oW2Js
aW5kZWRTaWduYXR1cmUgbXV0YWJsZUJ5dGVzXSksIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0s
IHJuZyk7CisgICAgYXV0byBibGluZGVkU2lnbmF0dXJlID0gYWRvcHROUyhbW05TTXV0YWJsZURh
dGEgYWxsb2NdIGluaXRXaXRoTGVuZ3RoOm1vZHVsdXNOQnl0ZXNdKTsKKyAgICBjY3JzYWJzc2Ff
c2lnbl9ibGluZGVkX21lc3NhZ2UoY2lwaGVyc3VpdGUsIHJzYVByaXZhdGVLZXksIGJsaW5kZWRN
ZXNzYWdlLT5kYXRhKCksIGJsaW5kZWRNZXNzYWdlLT5zaXplKCksIHN0YXRpY19jYXN0PHVpbnQ4
X3QgKj4oW2JsaW5kZWRTaWduYXR1cmUgbXV0YWJsZUJ5dGVzXSksIFtibGluZGVkU2lnbmF0dXJl
IGxlbmd0aF0sIHJuZyk7CiAKICAgICAvLyBDb250aW51ZSB0aGUgdGVzdC4KLSAgICBFWFBFQ1Rf
VFJVRShwY20uY2FsY3VsYXRlQW5kVXBkYXRlU291cmNlU2VjcmV0VG9rZW4oV1RGOjpiYXNlNjRV
UkxFbmNvZGUoW2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5n
dGhdKSkpOworICAgIEVYUEVDVF9UUlVFKHBjbS5jYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VTZWNy
ZXRUb2tlbihtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW2JsaW5kZWRTaWduYXR1cmUgYnl0
ZXNdLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdKSkpKTsKICAgICBhdXRvJiBwZXJzaXN0ZW50
VG9rZW4gPSBwY20uc291cmNlVW5saW5rYWJsZVRva2VuKCk7CiAgICAgRVhQRUNUX1RSVUUocGVy
c2lzdGVudFRva2VuKTsKICAgICBFWFBFQ1RfRkFMU0UocGVyc2lzdGVudFRva2VuLT50b2tlbkJh
c2U2NFVSTC5pc0VtcHR5KCkpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL2NvY29hL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9TZXJpYWxpemVkQ3J5cHRvS2V5V3Jh
cC5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL2NvY29hL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
NCwzNyArNDQsMzcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLVRFU1RfRihTZXJpYWxpemVkQ3J5
cHRvS2V5V3JhcFRlc3QsIEdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpCitURVNUX0YoU2Vy
aWFsaXplZENyeXB0b0tleVdyYXBUZXN0LCBEZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KQogewot
ICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXkxOwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6
OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5MSkpOworICAgIGF1dG8gbWFz
dGVyS2V5MSA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBF
Q1RfVFJVRShtYXN0ZXJLZXkxKTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXkyOwot
ICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFz
dGVyS2V5MikpOworICAgIGF1dG8gbWFzdGVyS2V5MiA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkyKTsKIAogICAgIEVYUEVD
VF9UUlVFKG1hc3RlcktleTEgPT0gbWFzdGVyS2V5Mik7CiB9CiAKIFRFU1RfRihTZXJpYWxpemVk
Q3J5cHRvS2V5V3JhcFRlc3QsIERlbGV0ZURlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpCiB7Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTE7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6
Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkxKSk7CisgICAgYXV0byBtYXN0
ZXJLZXkxID0gV2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIEVYUEVD
VF9UUlVFKG1hc3RlcktleTEpOwogICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmRlbGV0ZURlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5
MjsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5
KG1hc3RlcktleTIpKTsKKyAgICBhdXRvIG1hc3RlcktleTIgPSBXZWJDb3JlOjpkZWZhdWx0V2Vi
Q3J5cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5Mik7CiAKICAgICBF
WFBFQ1RfVFJVRShtYXN0ZXJLZXkxICE9IG1hc3RlcktleTIpOwogfQogCiBURVNUX0YoU2VyaWFs
aXplZENyeXB0b0tleVdyYXBUZXN0LCBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFVud3JhcCkKIHsK
LSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6
OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSk7CisgICAgYXV0byBtYXN0
ZXJLZXkgPSBXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQRUNU
X1RSVUUobWFzdGVyS2V5KTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBjcnlwdG9LZXkoMTYsIDEp
OwogICAgIFZlY3Rvcjx1aW50OF90PiB3cmFwcGVkS2V5OwotICAgIEVYUEVDVF9UUlVFKFdlYkNv
cmU6OndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwgY3J5cHRvS2V5LCB3cmFwcGVk
S2V5KSk7CisgICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6d3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXko
Km1hc3RlcktleSwgY3J5cHRvS2V5LCB3cmFwcGVkS2V5KSk7CiAgICAgRVhQRUNUX1RSVUUoY3J5
cHRvS2V5ICE9IHdyYXBwZWRLZXkpOwogICAgIC8vIGVuc3VyZSB3cmFwcGVkS2V5IGRvZXNuJ3Qg
Y29udGFpbiBjcnlwdG9LZXkKICAgICBib29sIG5vdENvbnRhaW5lZCA9IHRydWU7CkBAIC05MCw3
ICs5MCw3IEBAIFRFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFRlc3QsIFNlcmkKICAgICBF
WFBFQ1RfVFJVRShub3RDb250YWluZWQpOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVud3JhcHBl
ZEtleTsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjp1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5
KG1hc3RlcktleSwgd3JhcHBlZEtleSwgdW53cmFwcGVkS2V5KSk7CisgICAgRVhQRUNUX1RSVUUo
V2ViQ29yZTo6dW53cmFwU2VyaWFsaXplZENyeXB0b0tleSgqbWFzdGVyS2V5LCB3cmFwcGVkS2V5
LCB1bndyYXBwZWRLZXkpKTsKICAgICBFWFBFQ1RfVFJVRSh1bndyYXBwZWRLZXkgPT0gY3J5cHRv
S2V5KTsKIH0KIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9D
aGFsbGVuZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9DaGFsbGVuZ2UubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzYsMTMgKzE3NiwxMCBAQCBSZXRhaW5QdHI8U2VjSWRlbnRpdHlSZWY+IHRlc3RJZGVudGl0eTIo
CiAgICAgIkpBSDJueEtHdXF0QUsyaFdiQUN1NjFSVDVnQXFBdi9oQjlKWW5jMk9pUTJWbWpZa09r
MkdFZElqbjB4U2dYN1ciCiAgICAgIm1JL2hIYnhLTUczUmt2OXExQ3grV0IvdjF0OD0iKTsKIAot
ICAgIFZlY3Rvcjx1aW50OF90PiBwcml2YXRlS2V5Qnl0ZXM7Ci0gICAgYmFzZTY0RGVjb2RlKHBl
bUVuY29kZWRQcml2YXRlS2V5LCBwcml2YXRlS2V5Qnl0ZXMsIFdURjo6QmFzZTY0RGVjb2RlT3B0
aW9uczo6QmFzZTY0RGVmYXVsdCk7CisgICAgYXV0byBwcml2YXRlS2V5Qnl0ZXMgPSBiYXNlNjRE
ZWNvZGUocGVtRW5jb2RlZFByaXZhdGVLZXkpOworICAgIGF1dG8gY2VydGlmaWNhdGVCeXRlcyA9
IGJhc2U2NERlY29kZShwZW1FbmNvZGVkQ2VydGlmaWNhdGUpOwogCi0gICAgVmVjdG9yPHVpbnQ4
X3Q+IGNlcnRpZmljYXRlQnl0ZXM7Ci0gICAgYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZp
Y2F0ZSwgY2VydGlmaWNhdGVCeXRlcywgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjRE
ZWZhdWx0KTsKLQotICAgIHJldHVybiBjcmVhdGVUZXN0SWRlbnRpdHkocHJpdmF0ZUtleUJ5dGVz
LCBjZXJ0aWZpY2F0ZUJ5dGVzKTsKKyAgICByZXR1cm4gY3JlYXRlVGVzdElkZW50aXR5KFdURk1v
dmUoKnByaXZhdGVLZXlCeXRlcyksIFdURk1vdmUoKmNlcnRpZmljYXRlQnl0ZXMpKTsKIH0KIAog
c3RhdGljIFJldGFpblB0cjxOU1VSTENyZWRlbnRpYWw+IGNyZWRlbnRpYWxXaXRoSWRlbnRpdHko
KQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJp
YnV0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvRXZlbnRBdHRyaWJ1dGlvbi5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJpYnV0aW9uLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xODQsMTMgKzE4NCwxMiBAQCBURVNUKEV2ZW50QXR0cmlidXRpb24sIEZyYXVk
UHJldmVudGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZW5kID0gcmVxdWVzdDJT
dHJpbmcuZmluZCgnIicsIHN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdG9r
ZW4gPSByZXF1ZXN0MlN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsaW5kZWRNZXNzYWdlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYmFzZTY0VVJMRGVjb2RlKHRva2VuLCBibGluZGVkTWVzc2Fn
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGJsaW5kZWRNZXNzYWdlID0gYmFzZTY0
VVJMRGVjb2RlKHRva2VuKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0
IGNjcnNhYnNzYV9jaXBoZXJzdWl0ZSAqY2lwaGVyc3VpdGUgPSAmY2Nyc2Fic3NhX2NpcGhlcnN1
aXRlX3JzYTQwOTZfc2hhMzg0OwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBibGluZGVk
U2lnbmF0dXJlID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRXaXRoTGVuZ3Ro
OiBtb2R1bHVzTkJ5dGVzXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjY3JzYWJzc2Ffc2ln
bl9ibGluZGVkX21lc3NhZ2UoY2lwaGVyc3VpdGUsIHJzYVByaXZhdGVLZXksIGJsaW5kZWRNZXNz
YWdlLmRhdGEoKSwgYmxpbmRlZE1lc3NhZ2Uuc2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50OF90ICo+
KFtibGluZGVkU2lnbmF0dXJlIG11dGFibGVCeXRlc10pLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5n
dGhdLCBybmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmxpbmthYmxlVG9rZW4g
PSBXVEY6OmJhc2U2NFVSTEVuY29kZShbYmxpbmRlZFNpZ25hdHVyZSBieXRlc10sIFtibGluZGVk
U2lnbmF0dXJlIGxlbmd0aF0pOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBibGluZGVk
U2lnbmF0dXJlID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRXaXRoTGVuZ3Ro
Om1vZHVsdXNOQnl0ZXNdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNjcnNhYnNzYV9zaWdu
X2JsaW5kZWRfbWVzc2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJpdmF0ZUtleSwgYmxpbmRlZE1lc3Nh
Z2UtPmRhdGEoKSwgYmxpbmRlZE1lc3NhZ2UtPnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAq
PihbYmxpbmRlZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVu
Z3RoXSwgcm5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5saW5rYWJsZVRva2Vu
ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKFtibGluZGVkU2lnbmF0dXJlIGJ5dGVzXSwg
W2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBFeGFtcGxlIHJlc3BvbnNlOiB7ICJ1bmxpbmthYmxlX3Rva2VuIjogIkFCQ0QiIH0uICJBQkNE
IiBzaG91bGQgYmUgQmFzZTY0VVJMIGVuY29kZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIHJlc3BvbnNlID0gbWFrZVN0cmluZygiSFRUUC8xLjEgMjAwIE9LXHJcbiIKQEAgLTIyMiwx
OCArMjIxLDE2IEBAIFRFU1QoRXZlbnRBdHRyaWJ1dGlvbiwgRnJhdWRQcmV2ZW50aW9uKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICs9IGtleS5sZW5ndGgo
KSArIDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBlbmQg
PSByZXF1ZXN0NFN0cmluZy5maW5kKCciJywgc3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gdG9rZW4gPSByZXF1ZXN0NFN0cmluZy5zdWJzdHJpbmco
c3RhcnQsIGVuZCAtIHN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8dWludDhfdD4gdG9rZW5WZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmFzZTY0VVJMRGVjb2RlKHRva2VuLCB0b2tlblZlY3Rvcik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0b2tlbkRhdGEgPSBh
ZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnRva2VuVmVjdG9yLmRhdGEoKSBs
ZW5ndGg6dG9rZW5WZWN0b3Iuc2l6ZSgpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byB0b2tlblZlY3RvciA9IGJhc2U2NFVSTERlY29kZSh0b2tlbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0b2tlbkRhdGEgPSBh
ZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnRva2VuVmVjdG9yLT5kYXRhKCkg
bGVuZ3RoOnRva2VuVmVjdG9yLT5zaXplKCldKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtleSA9IFN0cmluZygic291cmNlX3NlY3JldF90b2tlbl9zaWduYXR1
cmUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHJl
cXVlc3Q0U3RyaW5nLmZpbmQoa2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFydCArPSBrZXkubGVuZ3RoKCkgKyAzOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZCA9IHJlcXVlc3Q0U3RyaW5nLmZpbmQoJyInLCBzdGFydCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzaWduYXR1cmUg
PSByZXF1ZXN0NFN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gc2lnbmF0dXJl
VmVjdG9yOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NFVS
TERlY29kZShzaWduYXR1cmUsIHNpZ25hdHVyZVZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBzaWduYXR1cmVEYXRhID0gYWRvcHROUyhbW05TRGF0
YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzaWduYXR1cmVWZWN0b3IuZGF0YSgpIGxlbmd0aDpzaWdu
YXR1cmVWZWN0b3Iuc2l6ZSgpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byBzaWduYXR1cmVWZWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUoc2lnbmF0dXJlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHNpZ25hdHVyZURh
dGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNpZ25hdHVyZVZlY3Rv
ci0+ZGF0YSgpIGxlbmd0aDpzaWduYXR1cmVWZWN0b3ItPnNpemUoKV0pOwogCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoU2VjS2V5VmVyaWZ5U2ln
bmF0dXJlKHNlY0tleS5nZXQoKSwga1NlY0tleUFsZ29yaXRobVJTQVNpZ25hdHVyZU1lc3NhZ2VQ
U1NTSEEzODQsIChfX2JyaWRnZSBDRkRhdGFSZWYpdG9rZW5EYXRhLmdldCgpLCAoX19icmlkZ2Ug
Q0ZEYXRhUmVmKXNpZ25hdHVyZURhdGEuZ2V0KCksIE5VTEwpKTsKIApJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdlbmVyYXRvci5tbQkocmV2aXNpb24g
Mjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9y
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OCw4ICs5OCw4IEBAIFRFU1RfRihTU0xLZXlHZW5lcmF0
b3JUZXN0LCBEZWZhdWx0VGVzdCkKICAgICBjaGFyIGNoYWxsZW5nZVtdID0gIjAxMjM0NTY3ODki
OwogICAgIGF1dG8gcmF3UmVzdWx0ID0gV2ViQ29yZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlU3RyaW5nKDAsIGNoYWxsZW5nZSwgdXJsKTsKICAgICBBU1NFUlRfRkFMU0UocmF3UmVzdWx0
LmlzRW1wdHkoKSk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRlclJlc3VsdDsKLSAgICBBU1NFUlRf
VFJVRShiYXNlNjREZWNvZGUocmF3UmVzdWx0LCBkZXJSZXN1bHQpKTsKKyAgICBhdXRvIGRlclJl
c3VsdCA9IGJhc2U2NERlY29kZShyYXdSZXN1bHQpOworICAgIEFTU0VSVF9UUlVFKGRlclJlc3Vs
dCk7CiAKICAgICBTZWNBc24xQ29kZXJSZWYgY29kZXIgPSBudWxscHRyOwogICAgIEFTU0VSVF9F
UShlcnJTZWNTdWNjZXNzLCBTZWNBc24xQ29kZXJDcmVhdGUoJmNvZGVyKSk7CkBAIC0xMDgsNyAr
MTA4LDcgQEAgVEVTVF9GKFNTTEtleUdlbmVyYXRvclRlc3QsIERlZmF1bHRUZXN0KQogICAgIH0p
OwogCiAgICAgU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlIGRlY29kZWRSZXN1bHQgeyB9Owot
ICAgIFNlY0FzbjFJdGVtIGRlclJlc3VsdEl0ZW0geyBkZXJSZXN1bHQuc2l6ZSgpLCBkZXJSZXN1
bHQuZGF0YSgpIH07CisgICAgU2VjQXNuMUl0ZW0gZGVyUmVzdWx0SXRlbSB7IGRlclJlc3VsdC0+
c2l6ZSgpLCBkZXJSZXN1bHQtPmRhdGEoKSB9OwogICAgIEFTU0VSVF9FUShlcnJTZWNTdWNjZXNz
LCBTZWNBc24xRGVjb2RlRGF0YShjb2RlciwgJmRlclJlc3VsdEl0ZW0sIHNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZVRlbXBsYXRlLCAmZGVjb2RlZFJlc3VsdCkpOwogCiAgICAgLy8gQ2hlY2sg
Y2hhbGxlbmdlCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTM0NCw3ICszNDQsNyBAQCB2b2lkIENvbm5lY3Rpb246Ondl
YlNvY2tldEhhbmRzaGFrZShDb21wCiAgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHdlYlNvY2tldEtleUdVSUQpLCBzdHJsZW4od2ViU29j
a2V0S2V5R1VJRCkpOwogICAgICAgICAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgICAgICAg
ICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgICAgICAgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZShoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoYmFzZTY0RW5jb2RlZChoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpKTsKICAgICAg
ICAgfTsKIAogICAgICAgICBjb25uZWN0aW9uLnNlbmQoSFRUUFJlc3BvbnNlKDEwMSwgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429008</attachid>
            <date>2021-05-18 17:42:43 -0700</date>
            <delta_ts>2021-05-18 18:33:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210518174242.patch</filename>
            <type>text/plain</type>
            <size>190353</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIHd0Zi90ZXh0
L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVybmFsKToKKyAgICAg
ICAgKFdURjo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRV
UkxEZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5oOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgor
ICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNv
ZGUpOgorICAgICAgICAoV1RGOjppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdURjo6Y2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNl
NjRFbmNvZGVkKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlZCk6CisgICAgICAgIChX
VEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpTdHJpbmdUeXBlQWRh
cHRlcik6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRp
b24+OjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNl
NjRTcGVjaWZpY2F0aW9uPjo6aXM4Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlw
ZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46OndyaXRlVG8gY29uc3QpOgorCiAyMDIxLTA1
LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXpl
IC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dURi93
dGYvdGV4dC9CYXNlNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAg
IENvcHlyaWdodCAoQykgMjAwMC0yMDAxIERhd2l0IEFsZW1heWVodSA8YWRhd2l0QGtkZS5vcmc+
CiAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9y
Zz4KLSAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5z
dGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMTMgKzI1
LDE2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbmNsdWRlIDxsaW1pdHMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNvbnN0IGNoYXIgbm9uQWxwaGFiZXQgPSAtMTsK
IAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RW5jTWFwWzY0XSA9IHsKK3N0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgZW5jb2RlTWFwU2l6ZSA9IDY0Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBkZWNvZGVNYXBTaXplID0gMTI4OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRFbmNNYXBb
ZW5jb2RlTWFwU2l6ZV0gPSB7CiAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0
NiwgMHg0NywgMHg0OCwKICAgICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAw
eDRGLCAweDUwLAogICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcs
IDB4NTgsCkBAIC00Miw3ICs0NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVuY01hcFs2
NF0gPSB7CiAgICAgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHgy
RgogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RGVjTWFwWzEyOF0gPSB7CitzdGF0aWMg
Y29uc3QgY2hhciBiYXNlNjREZWNNYXBbZGVjb2RlTWFwU2l6ZV0gPSB7CiAgICAgbm9uQWxwaGFi
ZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCkBAIC02MSw3ICs2NCw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyIGJhc2U2NERlY01hcFsxMjhdID0gewogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJl
dAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IHsKK3N0YXRp
YyBjb25zdCBjaGFyIGJhc2U2NFVSTEVuY01hcFtlbmNvZGVNYXBTaXplXSA9IHsKICAgICAweDQx
LCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAogICAgIDB4NDksIDB4
NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCiAgICAgMHg1MSwgMHg1Miwg
MHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKQEAgLTcyLDcgKzc1LDcgQEAgc3Rh
dGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IAogICAgIDB4MzQsIDB4MzUsIDB4
MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4MkQsIDB4NUYKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFy
IGJhc2U2NFVSTERlY01hcFsxMjhdID0geworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRGVj
TWFwW2RlY29kZU1hcFNpemVdID0gewogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9u
QWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsCiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LApAQCAtOTEsMjQzICs5NCwyMTggQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJM
RGVjTWFwWzEyOF0gPQogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0LCBub25BbHBo
YWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsKIAotc3RhdGlj
IGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3ksIGNvbnN0IGNoYXIgKCZlbmNvZGVNYXApWzY0XSkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVpbnQ4
X3QqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUq
IGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNs
ZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVzdGlu
YXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUo
aW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5ndGgpOwogCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSAib3V0TGVuZ3Ro
IiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkg
cHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0gICAgY29uc3QgdW5zaWduZWQg
bWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwotICAg
IGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRv
IGVuY29kZU1hcCA9IChtYXAgPT0gQmFzZTY0RW5jb2RlTWFwOjpVUkwpID8gYmFzZTY0VVJMRW5j
TWFwIDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9IDA7CiAgICAgdW5zaWdu
ZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0gICAgdW5zaWduZWQgb3V0
TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGluc2VydExGcyA9IChwb2xp
Y3kgPT0gQmFzZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnMgJiYgZGVzdGluYXRpb25MZW5ndGgg
PiBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOwogCi0gICAgLy8gRGVh
bCB3aXRoIHRoZSA3NiBjaGFyYWN0ZXIgcGVyIGxpbmUgbGltaXQgc3BlY2lmaWVkIGluIFJGQyAy
MDQ1LgotICAgIGJvb2wgaW5zZXJ0TEZzID0gKHBvbGljeSA9PSBCYXNlNjRJbnNlcnRMRnMgJiYg
b3V0TGVuZ3RoID4gNzYpOwotICAgIGlmIChpbnNlcnRMRnMpCi0gICAgICAgIG91dExlbmd0aCAr
PSAoKG91dExlbmd0aCAtIDEpIC8gNzYpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBvdXQu
Z3JvdyhvdXRMZW5ndGgpOwotCi0gICAgLy8gMy1ieXRlIHRvIDQtYnl0ZSBjb252ZXJzaW9uICsg
MC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgotICAgIGlmIChsZW4gPiAxKSB7Ci0g
ICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAgIGlmIChpbnB1dExlbmd0aCA+IDEp
IHsKKyAgICAgICAgd2hpbGUgKHNpZHggPCBpbnB1dExlbmd0aCAtIDIpIHsKICAgICAgICAgICAg
IGlmIChpbnNlcnRMRnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoY291bnQgJiYgIShjb3VudCAl
IDc2KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOworICAgICAgICAg
ICAgICAgIGlmIChjb3VudCAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVu
SW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHgrK10gPSAnXG4nOwogICAgICAgICAgICAgICAgIGNvdW50ICs9IDQ7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA+PiAy
KSAmIDA3N107Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lk
eCArIDFdID4+IDQpICYgMDE3KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3NyldOwotICAgICAg
ICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAyXSA+PiA2KSAmIDAw
MykgfCAoKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlk
eCsrXSA9IGVuY29kZU1hcFtkYXRhW3NpZHggKyAyXSAmIDA3N107CisKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXREYXRhQnVmZmVy
W3NpZHggICAgXSA+PiAyKSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZm
ZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPj4gNCkg
JiAwMTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3KV07CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0
RGF0YUJ1ZmZlcltzaWR4ICsgMl0gPj4gNikgJiAwMDMpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lk
eCArIDFdIDw8IDIpICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJb
ZGlkeCsrXSA9IGVuY29kZU1hcFsgIGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0gICAgICAgJiAw
NzddOwogICAgICAgICAgICAgc2lkeCArPSAzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KHNpZHggPCBsZW4pIHsKLSAgICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAh
KGNvdW50ICUgNzYpKQotICAgICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7Ci0KLSAgICAgICAg
b3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzddOwotICAgICAg
ICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2Rl
TWFwWygoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYg
MDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4ICsg
MV0gPDwgMikgJiAwNzddOworICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsKKyAgICAgICAg
aWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExp
bmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlcltkaWR4KytdID0gJ1xuJzsKKworICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlk
eCsrXSA9IGVuY29kZU1hcFsoaW5wdXREYXRhQnVmZmVyW3NpZHhdID4+IDIpICYgMDc3XTsKKyAg
ICAgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHgg
KyAxXSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA8PCA0KSAmIDA3Nyld
OworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBb
IChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA8PCA0KSAm
IDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29k
ZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzddOwogICAgIH0KIAot
ICAgIC8vIEFkZCBwYWRkaW5nCi0gICAgaWYgKHBvbGljeSA9PSBCYXNlNjRVUkxQb2xpY3kpCi0g
ICAgICAgIG91dC5yZXNpemUoZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdoaWxlIChkaWR4
IDwgb3V0LnNpemUoKSkgewotICAgICAgICAgICAgb3V0W2RpZHhdID0gJz0nOwotICAgICAgICAg
ICAgKytkaWR4OwotICAgICAgICB9CisgICAgQVNTRVJUKHBvbGljeSAhPSBCYXNlNjRFbmNvZGVQ
b2xpY3k6OlVSTCB8fCBkaWR4ID09IGRlc3RpbmF0aW9uTGVuZ3RoKTsKKworICAgIHdoaWxlIChk
aWR4IDwgZGVzdGluYXRpb25MZW5ndGgpIHsKKyAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHhdID0gJz0nOworICAgICAgICArK2RpZHg7CiAgICAgfQogfQogCi1TdHJpbmcgYmFzZTY0
RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSkKK3N0YXRpYyBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBWZWN0b3I8
Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5j
TWFwKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwor
ICAgIGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShp
bnB1dExlbmd0aCwgcG9saWN5KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGRlc3RpbmF0aW9uVmVjdG9yKGRlc3Rp
bmF0aW9uTGVuZ3RoKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChpbnB1dERhdGFCdWZmZXIs
IGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvblZlY3Rvci5kYXRhKCksIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uVmVjdG9yOwogfQogCi12b2lk
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFy
PiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQorVmVjdG9yPGNoYXI+IGJhc2U2NEVu
Y29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJh
c2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRh
KSwgbGVuLCBvdXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5j
b2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciks
IGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUo
Y29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBiYXNlNjRFbmNvZGUoY29u
c3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBCYXNlNjRVUkxQb2xpY3ksIGJh
c2U2NFVSTEVuY01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQu
c2l6ZSgpKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm47Cisg
ICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0
aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0
IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQpCit2b2lkIGJhc2U2
NEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3Ro
LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0
aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
ZGF0YSksIGxlbiwgb3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7CisgICAg
aWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGJhc2U2NEVuY29k
ZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZmZXIpLCBp
bnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9s
aWN5LCBtYXApOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBib29s
IGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyJiBvdXQsIHVuc2lnbmVkIG9wdGlvbnMsIGNv
bnN0IGNoYXIgKCZkZWNvZGVNYXApWzEyOF0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBp
bnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICBvdXQuY2xl
YXIoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFp
bnB1dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIFZlY3Rvcjx1aW50OF90PiB7IH07CiAKLSAgICBv
dXQuZ3JvdyhsZW5ndGgpOworICAgIGF1dG8gZGVjb2RlTWFwID0gKG1hcCA9PSBCYXNlNjREZWNv
ZGVNYXA6OlVSTCkgPyBiYXNlNjRVUkxEZWNNYXAgOiBiYXNlNjREZWNNYXA7CisKKyAgICBWZWN0
b3I8dWludDhfdD4gZGVzdGluYXRpb24oaW5wdXRMZW5ndGgpOwogCiAgICAgdW5zaWduZWQgZXF1
YWxzU2lnbkNvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBvdXRMZW5ndGggPSAwOwotICAgIGJvb2wg
aGFkRXJyb3IgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbmd0
aDsgKytpZHgpIHsKLSAgICAgICAgdW5zaWduZWQgY2ggPSBkYXRhW2lkeF07CisgICAgdW5zaWdu
ZWQgZGVzdGluYXRpb25MZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4
IDwgaW5wdXRMZW5ndGg7ICsraWR4KSB7CisgICAgICAgIHVuc2lnbmVkIGNoID0gaW5wdXREYXRh
QnVmZmVyW2lkeF07CiAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKICAgICAgICAgICAgICsrZXF1
YWxzU2lnbkNvdW50OwogICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIG5ldmVyIGJlIG1vcmUg
dGhhbiAyIHBhZGRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChvcHRpb25zICYgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKLSAgICAgICAgICAg
ICAgICBoYWRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAob3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRp
bmcpICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y2hhciBkZWNvZGVkQ2hhcmFjdGVyID0gY2ggPCBXVEZfQVJSQVlfTEVOR1RIKGRlY29kZU1hcCkg
PyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFiZXQ7CisgICAgICAgICAgICBjaGFyIGRlY29kZWRD
aGFyYWN0ZXIgPSBjaCA8IGRlY29kZU1hcFNpemUgPyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFi
ZXQ7CiAgICAgICAgICAgICBpZiAoZGVjb2RlZENoYXJhY3RlciAhPSBub25BbHBoYWJldCkgewot
ICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaGFkRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3V0W291dExlbmd0aCsrXSA9IGRlY29kZWRDaGFy
YWN0ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucyAmIEJhc2U2NElnbm9yZVNw
YWNlc0FuZE5ld0xpbmVzKQotICAgICAgICAgICAgICAgIHx8ICghaXNMYXRpbjEoY2gpIHx8ICFp
c0FTQ0lJU3BhY2UoY2gpIHx8ICgob3B0aW9ucyAmIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikg
JiYgY2ggPT0gJ1x2JykpKSB7Ci0gICAgICAgICAgICAgICAgaGFkRXJyb3IgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAg
ICAgZGVzdGluYXRpb25bZGVzdGluYXRpb25MZW5ndGgrK10gPSBkZWNvZGVkQ2hhcmFjdGVyOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRp
b25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykgfHwgKCFpc0xhdGluMShjaCkgfHwgIWlzQVND
SUlTcGFjZShjaCkgfHwgKG9wdGlvbnMuY29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlz
Y2FyZFZlcnRpY2FsVGFiKSAmJiBjaCA9PSAnXHYnKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Ly8gTWFrZSBzdXJlIHdlIHNocmluayBiYWNrIHRoZSBWZWN0b3IgYmVmb3JlIHJldHVybmluZy4g
b3V0TGVuZ3RoIG1heSBiZSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQKKyAgICAvLyBNYWtlIHN1cmUg
d2Ugc2hyaW5rIGJhY2sgdGhlIFZlY3RvciBiZWZvcmUgcmV0dXJuaW5nLiBkZXN0aW5hdGlvbkxl
bmd0aCBtYXkgYmUgc2hvcnRlciB0aGFuIGV4cGVjdGVkCiAgICAgLy8gaW4gY2FzZSBvZiBlcnJv
ciBvciBpbiBjYXNlIG9mIGlnbm9yZWQgc3BhY2VzLgotICAgIGlmIChvdXRMZW5ndGggPCBvdXQu
c2l6ZSgpKQotICAgICAgICBvdXQuc2hyaW5rKG91dExlbmd0aCk7Ci0KLSAgICBpZiAoaGFkRXJy
b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGggPCBk
ZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNocmluayhkZXN0aW5hdGlv
bkxlbmd0aCk7CiAKLSAgICBpZiAoIW91dExlbmd0aCkKLSAgICAgICAgcmV0dXJuICFlcXVhbHNT
aWduQ291bnQ7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkgeworICAgICAgICBpZiAoIWVx
dWFsc1NpZ25Db3VudCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IHJldHVybiBWZWN0b3I8dWludDhfdD4geyB9OworICAgIH0KIAogICAgIC8vIFRoZSBzaG91bGQg
YmUgbm8gcGFkZGluZyBpZiBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiA0LgotICAgIC8vIFdlIHVz
ZSAob3V0TGVuZ3RoICsgZXF1YWxzU2lnbkNvdW50KSBpbnN0ZWFkIG9mIGxlbmd0aCBiZWNhdXNl
IHdlIGRvbid0IHdhbnQgdG8gYWNjb3VudCBmb3IgaWdub3JlZCBjaGFyYWN0ZXJzIChpLmUuIHNw
YWNlcykuCi0gICAgaWYgKG9wdGlvbnMgJiBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgJiYgZXF1YWxz
U2lnbkNvdW50ICYmIChvdXRMZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIC8vIFdlIHVzZSAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNT
aWduQ291bnQpIGluc3RlYWQgb2YgbGVuZ3RoIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhY2Nv
dW50IGZvciBpZ25vcmVkIGNoYXJhY3RlcnMgKGkuZS4gc3BhY2VzKS4KKyAgICBpZiAob3B0aW9u
cy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpICYmIGVxdWFs
c1NpZ25Db3VudCAmJiAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFZhbGlkIGRhdGEgaXMgKG4g
KiA0ICsgWzAsMiwzXSkgY2hhcmFjdGVycyBsb25nLgotICAgIGlmICgob3V0TGVuZ3RoICUgNCkg
PT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoZGVzdGluYXRpb25MZW5ndGgg
JSA0KSA9PSAxKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIC8vIDQt
Ynl0ZSB0byAzLWJ5dGUgY29udmVyc2lvbgotICAgIG91dExlbmd0aCAtPSAob3V0TGVuZ3RoICsg
MykgLyA0OwotICAgIGlmICghb3V0TGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVzdGluYXRpb25MZW5ndGggLT0gKGRlc3RpbmF0aW9uTGVuZ3RoICsgMykgLyA0OworICAgIGlm
ICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICB1bnNpZ25lZCBzaWR4ID0gMDsKICAgICB1bnNpZ25lZCBkaWR4ID0gMDsKLSAgICBpZiAob3V0
TGVuZ3RoID4gMSkgewotICAgICAgICB3aGlsZSAoZGlkeCA8IG91dExlbmd0aCAtIDIpIHsKLSAg
ICAgICAgICAgIG91dFtkaWR4XSA9ICgoKG91dFtzaWR4XSA8PCAyKSAmIDI1NSkgfCAoKG91dFtz
aWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsKLSAgICAgICAgICAgIG91dFtkaWR4ICsgMV0gPSAoKChv
dXRbc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgob3V0W3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OwotICAgICAgICAgICAgb3V0W2RpZHggKyAyXSA9ICgoKG91dFtzaWR4ICsgMl0gPDwgNikgJiAy
NTUpIHwgKG91dFtzaWR4ICsgM10gJiAwNzcpKTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGgg
PiAxKSB7CisgICAgICAgIHdoaWxlIChkaWR4IDwgZGVzdGluYXRpb25MZW5ndGggLSAyKSB7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbltkaWR4ICAgIF0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICAg
IF0gPDwgMikgJiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2RpZHggKyAxXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHgg
KyAxXSA8PCA0KSAmIDI1NSkgfCAoKGRlc3RpbmF0aW9uW3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OworICAgICAgICAgICAgZGVzdGluYXRpb25bZGlkeCArIDJdID0gKCgoZGVzdGluYXRpb25bc2lk
eCArIDJdIDw8IDYpICYgMjU1KSB8ICAoZGVzdGluYXRpb25bc2lkeCArIDNdICAgICAgICYgMDc3
KSk7CiAgICAgICAgICAgICBzaWR4ICs9IDQ7CiAgICAgICAgICAgICBkaWR4ICs9IDM7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2Rp
ZHhdID0gKCgob3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHggKyAxXSA+PiA0KSAm
IDAwMykpOwotCi0gICAgaWYgKCsrZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2RpZHhd
ID0gKCgob3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikg
JiAwMTcpKTsKKyAgICBpZiAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0
aW5hdGlvbltkaWR4XSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggICAgXSA8PCAyKSAmIDI1NSkgfCAo
KGRlc3RpbmF0aW9uW3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOwogCi0gICAgaWYgKG91dExlbmd0
aCA8IG91dC5zaXplKCkpCi0gICAgICAgIG91dC5zaHJpbmsob3V0TGVuZ3RoKTsKKyAgICBpZiAo
KytkaWR4IDwgZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0aW9uW2RpZHhdID0g
KCgoZGVzdGluYXRpb25bc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lk
eCArIDJdID4+IDIpICYgMDE3KSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGVzdGlu
YXRpb25MZW5ndGggPCBkZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNo
cmluayhkZXN0aW5hdGlvbkxlbmd0aCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwogfQogCi1i
b29sIGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZl
Y3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBs
ZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBvcHRpb25zLCBiYXNl
NjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlm
ICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2Rl
SW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3Ro
LCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29kZShTdHJpbmdWaWV3IGluLCBT
aWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQor
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5n
dGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChp
bi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwg
b3V0LCBvcHRpb25zLCBiYXNlNjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNl
NjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNsZWFy
KCk7Ci0KLSAgICAvLyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdl
LCBqdXN0IHJldHVybiBub3RoaW5nLgotICAgIGlmIChpbi5zaXplKCkgPiBVSU5UX01BWCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihpbi5kYXRhKCkpLCBpbi5zaXplKCksIG91dCwg
b3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKKyAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7CiB9
CiAKLWJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJh
c2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuLCBvdXQsIG9wdGlvbnMsIGJh
c2U2NERlY01hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1i
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbi5s
ZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0LCBCYXNl
NjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2
NFVSTERlY01hcCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAg
aWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0g
ICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwg
YmFzZTY0VVJMRGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hh
cmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXAp
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
KyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxl
bmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0KQogewotICAgIG91dC5jbGVhcigpOwotCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICBpZiAoaW4uc2l6ZSgpID4gVUlOVF9NQVgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oaW4uZGF0YSgpKSwgaW4uc2l6ZSgpLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJh
c2U2NFVSTERlY01hcCk7CisgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJM
KTsKIH0KIAotYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQogewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRV
UkxEZWNNYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDI1ICsyNywzNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdURiB7CiAKLWVudW0gQmFzZTY0RW5jb2RlUG9saWN5IHsKLSAgICBCYXNl
NjREb05vdEluc2VydExGcywKLSAgICBCYXNlNjRJbnNlcnRMRnMsCi0gICAgQmFzZTY0VVJMUG9s
aWN5IC8vIE5vIHBhZGRpbmcsIG5vIExGcy4KK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlUG9saWN5
IHsKKyAgICBEb05vdEluc2VydExGcywKKyAgICBJbnNlcnRMRnMsCisgICAgVVJMIC8vIE5vIHBh
ZGRpbmcsIG5vIExGcy4KIH07CiAKLWVudW0gQmFzZTY0RGVjb2RlT3B0aW9ucyB7Ci0gICAgQmFz
ZTY0RGVmYXVsdCA9IDAsCi0gICAgQmFzZTY0VmFsaWRhdGVQYWRkaW5nID0gMSA8PCAwLAotICAg
IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzID0gMSA8PCAxLAotICAgIEJhc2U2NERpc2Nh
cmRWZXJ0aWNhbFRhYiA9IDEgPDwgMiwKK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlTWFwIHsgRGVm
YXVsdCwgVVJMIH07CisKK2VudW0gY2xhc3MgQmFzZTY0RGVjb2RlT3B0aW9ucyA6IHVpbnQ4X3Qg
eworICAgIFZhbGlkYXRlUGFkZGluZyAgICAgICAgID0gMSA8PCAwLAorICAgIElnbm9yZVNwYWNl
c0FuZE5ld0xpbmVzID0gMSA8PCAxLAorICAgIERpc2NhcmRWZXJ0aWNhbFRhYiAgICAgID0gMSA8
PCAyLAogfTsKIAorZW51bSBjbGFzcyBCYXNlNjREZWNvZGVNYXAgeyBEZWZhdWx0LCBVUkwgfTsK
Kworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5J
bnNlcnRpbmdMRnMgPSA3NjsKKworLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2lj
YWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90aGluZy4KKy8vIFJhdGhlciB0aGFuIGJlaW5nIHBl
cmZlY3RseSBwcmVjaXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZhdGl2ZS4KK3N0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwor
CiBjbGFzcyBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgewogcHVibGljOgogICAg
IFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8Y2hhcj4mIHZlY3RvcikK
QEAgLTE0NCw5MCArMTU0LDE2MyBAQCBwcml2YXRlOgogICAgIH0gbV92ZWN0b3I7CiB9OwogCi1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExG
cyk7Ci12b2lkIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNl
cnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLVdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29k
ZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBD
U3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOworV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVu
c2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwg
VUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5
OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwg
dW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29k
ZU1hcDo6RGVmYXVsdCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JV
bnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOworVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9S
VF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0
cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2Rl
TWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8
QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29k
ZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQp
OworCitpbmxpbmUgVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlciBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFz
ZTY0RW5jb2RlTWFwIG1hcCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Cit9CisKK2lubGluZSBWZWN0b3I8Y2hhcj4g
YmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9s
aWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW5w
dXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOworfQorCisKKy8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBBbGwgdGhlIHNhbWUgZnVuY3Rpb25zIG1vZGlm
aWVkIGZvciBiYXNlNjR1cmwsIGFzIGRlZmluZWQgaW4gUkZDIDQ2NDguCisvLyBUaGlzIGZvcm1h
dCB1c2VzICctJyBhbmQgJ18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5Lgor
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9y
QWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOwotV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcsIFNpZ25lZE9yVW5zaWduZWRDaGFy
VmVjdG9yQWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOwotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYsIFNpZ25l
ZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERl
ZmF1bHQpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIq
LCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBv
cHRpb25zID0gQmFzZTY0RGVmYXVsdCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNv
bnN0IHZvaWQqLCB1bnNpZ25lZCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKENvbnN0
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKK1ZlY3RvcjxjaGFyPiBiYXNlNjRV
UkxFbmNvZGUoY29uc3QgQ1N0cmluZyYpOworCitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7CitXVEZfRVhQ
T1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoU3Ry
aW5nVmlldyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7CitXVEZfRVhQT1JUX1BSSVZBVEUg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciosIHVu
c2lnbmVkKTsKIAotaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25l
ZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91dCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZv
aWQqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRhdGEo
KSwgaW4uc2l6ZSgpLCBvdXQsIHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbnB1
dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwp
OwogfQogCi1pbmxpbmUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3Rv
cjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoraW5saW5lIFZlY3Rvcjxj
aGFyPiBiYXNlNjRVUkxFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgaW5wdXQpCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIG91
dCwgcG9saWN5KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQu
c2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFy
VmVjdG9yQWRhcHRlciBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0
b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGlucHV0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIHBvbGljeSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNv
ZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5n
IGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBp
c0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIHBvbGljeSk7CisgICAgcmV0
dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLycgfHwgYyA9
PSAnLScgfHwgYyA9PSAnXyc7CiB9CiAKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0vLyBBbGwgdGhlIHNhbWUgZnVuY3Rpb25zIG1vZGlmaWVkIGZvciBiYXNlNjR1cmwsIGFzIGRl
ZmluZWQgaW4gUkZDIDQ2NDguCi0vLyBUaGlzIGZvcm1hdCB1c2VzICctJyBhbmQgJ18nIGluc3Rl
YWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5LgotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KK2lubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZSh1bnNp
Z25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3sKKyAgICBpZiAo
IWlucHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgVmVjdG9yPGNoYXI+Jik7
Ci12b2lkIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgVmVjdG9yPGNoYXI+Jik7Ci12b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5n
JiwgVmVjdG9yPGNoYXI+Jik7CisgICAgaWYgKGlucHV0TGVuZ3RoID4gbWF4aW11bUJhc2U2NEVu
Y29kZXJJbnB1dEJ1ZmZlclNpemUpCisgICAgICAgIHJldHVybiAwOwogCi1XVEZfRVhQT1JUX1BS
SVZBVEUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
cik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmKTsKKyAgICBhdXRvIGJh
c2VQYWRkZWRFbmNvZGVkU2l6ZSA9IFsmXSB7CisgICAgICAgIHJldHVybiAoKGlucHV0TGVuZ3Ro
ICsgMikgLyAzKSAqIDQ7CisgICAgfTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0
VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
cik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldywg
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVdURl9FWFBPUlRfUFJJVkFURSBi
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBTaWduZWRPclVuc2lnbmVk
Q2hhclZlY3RvckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyKTsKKyAgICBhdXRvIGJhc2VVbnBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAgICAg
cmV0dXJuICgoaW5wdXRMZW5ndGggKiA0KSArIDIpIC8gMzsKKyAgICB9OworCisgICAgc3dpdGNo
IChwb2xpY3kpIHsKKyAgICBjYXNlIEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnM6
CisgICAgICAgIHJldHVybiBiYXNlUGFkZGVkRW5jb2RlZFNpemUoKTsKKworICAgIGNhc2UgQmFz
ZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnM6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBiYXNl
UGFkZGVkRW5jb2RlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0g
MSkgLyBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOworICAgIH0KIAot
aW5saW5lIHZvaWQgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91dCkKKyAgICBjYXNlIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMOgorICAgICAgICByZXR1cm4gYmFzZVVucGFkZGVkRW5jb2RlZFNpemUoKTsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3Ry
dWN0IEJhc2U2NFNwZWNpZmljYXRpb24geworICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKKyAg
ICB1bnNpZ25lZCBpbnB1dExlbmd0aDsKKyAgICBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5Owor
ICAgIEJhc2U2NEVuY29kZU1hcCBtYXA7Cit9OworCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KQogewotICAgIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLnNpemUoKSwgb3V0KTsKKyAg
ICByZXR1cm4geyBpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCB9OwogfQogCi1p
bmxpbmUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3RvcjxjaGFy
PiYgb3V0KQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChDb25zdFNp
Z25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCiB7Ci0gICAgYmFz
ZTY0VVJMRW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIG91dCk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSk7CiB9CiAKLWlu
bGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGluKQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChj
b25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NFVSTEVuY29k
ZShpbi5kYXRhKCksIGluLnNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQu
ZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5KTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNl
NjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4pCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0
aCgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNCYXNlNjRP
ckJhc2U2NFVSTENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCitpbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIGlucHV0KQogewotICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMg
PT0gJysnIHx8IGMgPT0gJy8nIHx8IGMgPT0gJy0nIHx8IGMgPT0gJ18nOworICAgIHJldHVybiBi
YXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xp
Y3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworfQorCitpbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IENTdHJpbmcmIGlucHV0KQoreworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKK3RlbXBsYXRlPD4g
Y2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj4geworcHVibGljOgor
ICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IEJhc2U2NFNwZWNpZmljYXRpb24mIGJhc2U2NCkK
KyAgICAgICAgOiBtX2Jhc2U2NCB7IGJhc2U2NCB9CisgICAgICAgICwgbV9lbmNvZGVkTGVuZ3Ro
IHsgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoYmFzZTY0LmlucHV0TGVuZ3RoLCBiYXNlNjQu
cG9saWN5KSB9CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5jb2RlZExlbmd0aDsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3
cml0ZVRvKENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAg
YmFzZTY0RW5jb2RlKG1fYmFzZTY0LmlucHV0RGF0YSwgbV9iYXNlNjQuaW5wdXRMZW5ndGgsIGRl
c3RpbmF0aW9uLCBtX2VuY29kZWRMZW5ndGgsIG1fYmFzZTY0LnBvbGljeSwgbV9iYXNlNjQubWFw
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzZTY0U3BlY2lmaWNhdGlvbiBtX2Jhc2U2NDsK
KyAgICB1bnNpZ25lZCBtX2VuY29kZWRMZW5ndGg7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAordXNpbmcgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOwogdXNpbmcgV1RGOjpCYXNlNjRFbmNv
ZGVQb2xpY3k7Ci11c2luZyBXVEY6OkJhc2U2NERvTm90SW5zZXJ0TEZzOwotdXNpbmcgV1RGOjpC
YXNlNjRJbnNlcnRMRnM7Ci11c2luZyBXVEY6OkJhc2U2NFZhbGlkYXRlUGFkZGluZzsKLXVzaW5n
IFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXM7Ci11c2luZyBXVEY6OkJhc2U2NERp
c2NhcmRWZXJ0aWNhbFRhYjsKLXVzaW5nIFdURjo6YmFzZTY0RW5jb2RlOwordXNpbmcgV1RGOjpC
YXNlNjRTcGVjaWZpY2F0aW9uOwogdXNpbmcgV1RGOjpiYXNlNjREZWNvZGU7Cit1c2luZyBXVEY6
OmJhc2U2NEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0RW5jb2RlZDsKK3VzaW5nIFdURjo6YmFz
ZTY0VVJMRGVjb2RlOwogdXNpbmcgV1RGOjpiYXNlNjRVUkxEZWNvZGU7Cit1c2luZyBXVEY6OmJh
c2U2NFVSTEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0VVJMRW5jb2RlZDsKIHVzaW5nIFdURjo6
aXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3RlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3
NzY4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1NSBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1v
ZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L0luaXREYXRhUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleUlEc0tl
eWlkcyk6CisgICAgICAgIChXZWJDb3JlOjpzYW5pdGl6ZUtleWlkcyk6CisgICAgICAgICogTW9k
dWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKToKKyAgICAgICAg
KiBNb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW06CisgICAgICAg
IChXZWJDb3JlOjpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
anNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlbUluQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXV0aGVudGljYXRvckNvb3JkaW5hdG9ySW50ZXJuYWw6OnByb2R1Y2VDbGllbnREYXRhSnNvbik6
CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwp
OgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVTZWNXZWJTb2NrZXRLZXkpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNvY2tldEFjY2VwdCk6Cisg
ICAgICAgICogY3J5cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmg6CisgICAgICAgICogY3J5
cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKiBjcnlw
dG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5QUVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6aW1w
b3J0SndrKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6ZXhwb3J0SndrIGNvbnN0
KToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9LZXlFQzo6aW1wb3J0SndrKToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9Dcnlw
dG9LZXlITUFDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmltcG9ydEp3
ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjpleHBvcnRKd2sgY29uc3QpOgor
ICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXlSU0E6OmltcG9ydEp3ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlS
U0E6OmV4cG9ydEp3ayBjb25zdCk6CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01h
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVs
ZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmluZE1hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpkZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICAqIGNyeXB0by9vcGVuc3NsL1Nlcmlh
bGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRh
VVJMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
TmV0d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291
cmNlc0RhdGE6OlJlc291cmNlRGF0YTo6ZGVjb2RlRGF0YVRvQ29udGVudCk6CisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaCk6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yOjpidWlsZFdlYlNvY2tldE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0
aFJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50
ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCk6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUGFnZUFnZW50OjpkYXRhQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmFyY2hpdmUpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6
CisgICAgICAgICogbG9hZGVyL0xvYWRlclN0cmF0ZWd5Lmg6CisgICAgICAgICogbG9hZGVyL1By
aXZhdGVDbGlja01lYXN1cmVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50OjpFcGhlbWVyYWxTb3VyY2VOb25jZTo6aXNWYWxpZCBjb25zdCk6CisgICAg
ICAgICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OmRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAgICAqIGxv
YWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
SFRNTEFyY2hpdmU6OmdlbmVyYXRlTUhUTUxEYXRhKToKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSFRNTFBhcnNlcjo6
cGFyc2VOZXh0UGFydCk6CisgICAgICAgICogbG9hZGVyL2NvY29hL1ByaXZhdGVDbGlja01lYXN1
cmVtZW50Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dDo6Y2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJsZVRva2VuKToKKyAgICAgICAgKFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VT
ZWNyZXRUb2tlbik6CisgICAgICAgICogcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmFzZTY0VXRpbGl0aWVzOjpidG9hKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2U2NFV0aWxpdGllczo6YXRvYik6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vuc2VGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0
cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtl
eUlkRnJvbVdlYk1Jbml0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
OjpyZXF1ZXN0TGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25G
YWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUxpY2Vuc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjpkaWRQcm92aWRl
UmVxdWVzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVW5pcXVlRm9udE5hbWUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlVW5pcXVlRm9udE5hbWUpOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsb2FkQmxvYlJlc291cmNlU3lu
Y2hyb25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5k
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJj
ZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q3JlZGVudGlhbEJhc2U6OnNlcmlhbGl6YXRpb25Gb3JCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbEJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNv
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVCYXNlNjQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRlY29kZUVzY2FwZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRlY29kZVN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9T
eW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91
c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25v
dXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIb3N0VExTQ2VydGlmaWNhdGVTZXQ6OmNvbXB1dGVD
ZXJ0aWZpY2F0ZUhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2Vx
dWVuY2VzLmg6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoIGNvbnN0KToKKwogMjAyMS0wNS0x
OCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVUF0gUmVt
b3RlQXVkaW9TZXNzaW9uIGNhbGxzIGludG8gQVZBdWRpb1Nlc3Npb24gd2hlbiBHUFVQIGlzIGVu
YWJsZWQsIGNhdXNpbmcgaGFuZ3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlw
dGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0
YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTUgKzgwLDE0IEBAIHN0YXRpYyBP
cHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4KICAgICAgICAgaWYgKCFrZXlJRCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFZlY3RvcjxjaGFyPiBrZXlJRERhdGE7Ci0g
ICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pKQor
ICAgICAgICBhdXRvIGtleUlERGF0YSA9IGJhc2U2NFVSTERlY29kZShrZXlJRCk7CisgICAgICAg
IGlmICgha2V5SUREYXRhKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGtl
eUlERGF0YS5zaXplKCkgPCBrS2V5SWRzTWluS2V5SWRTaXplSW5CeXRlcyB8fCBrZXlJRERhdGEu
c2l6ZSgpID4ga0tleUlkc01heEtleUlkU2l6ZUluQnl0ZXMpCisgICAgICAgIGlmIChrZXlJRERh
dGEtPnNpemUoKSA8IGtLZXlJZHNNaW5LZXlJZFNpemVJbkJ5dGVzIHx8IGtleUlERGF0YS0+c2l6
ZSgpID4ga0tleUlkc01heEtleUlkU2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgICAgIFJlZjxTaGFyZWRCdWZmZXI+IGtleUlEQnVmZmVyID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlJRERhdGEpKTsKLSAgICAgICAga2V5SURzLmFw
cGVuZChXVEZNb3ZlKGtleUlEQnVmZmVyKSk7CisgICAgICAgIGtleUlEcy5hcHBlbmQoU2hhcmVk
QnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqa2V5SUREYXRhKSkpOwogICAgIH0KIAogICAgIHJldHVy
biBrZXlJRHM7CkBAIC0xMDUsNyArMTA0LDcgQEAgc3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IHNhbml0aXplS2V5aQogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBhdXRvIGtpZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1
dG8mIGJ1ZmZlciA6IGtleUlEQnVmZmVyLnZhbHVlKCkpCi0gICAgICAgIGtpZHNBcnJheS0+cHVz
aFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXpl
KCkpKTsKKyAgICAgICAga2lkc0FycmF5LT5wdXNoU3RyaW5nKG1ha2VTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlZChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpKSk7CiAgICAgb2JqZWN0LT5z
ZXRBcnJheSgia2lkcyIsIFdURk1vdmUoa2lkc0FycmF5KSk7CiAKICAgICBDU3RyaW5nIGpzb25E
YXRhID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
bGVnYWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNl
c3Npb25DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwxMyArMTY5LDEzIEBAIGJv
b2wgQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoVWludDhBcnIKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtl
eURhdGE7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShyYXdLZXlEYXRhLCBrZXlEYXRh
KSB8fCBrZXlEYXRhLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBrZXlEYXRhID0gYmFz
ZTY0RGVjb2RlKHJhd0tleURhdGEpOworICAgICAgICAgICAgaWYgKCFrZXlEYXRhIHx8IGtleURh
dGEtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25D
bGVhcktleTo6dXBkYXRlKCVwKSAtIGZhaWxlZDogdW5hYmxlIHRvIGJhc2U2NCBkZWNvZGUga2V5
IiwgdGhpcyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIG1fY2FjaGVkS2V5cy5zZXQoa2V5SWQsIFdURk1vdmUoa2V5RGF0YSkpOworICAg
ICAgICAgICAgbV9jYWNoZWRLZXlzLnNldChrZXlJZCwgV1RGTW92ZSgqa2V5RGF0YSkpOwogICAg
ICAgICAgICAgZm91bmRWYWxpZEtleSA9IHRydWU7CiAgICAgICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudC5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDMsMTQgKzI0MywxMiBAQCB2b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojpw
b3N0RXZlCiAKIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQoTlNEYXRh
ICpkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBKU0NvbnRleHQgKmNvbnRleHQpCiB7Ci0g
ICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKFtkYXRhIGJ5dGVz
XSwgW2RhdGEgbGVuZ3RoXSwgYmFzZTY0RGF0YSk7Ci0KKyAgICAvLyBGSVhNRTogQWRkIG1ha2VD
RlN0cmluZy9tYWtlTlNTdHJpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkgU3RyaW5nIGFsbG9jYXRp
b24uCiAgICAgU3RyaW5nIGRhdGE2NDsKICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAg
ICAgICAgZGF0YTY0ID0gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERh
dGE7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFz
ZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKSk7CiAgICAg
ZWxzZQotICAgICAgICBkYXRhNjQgPSAiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKKyAgICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2
NCwiLCBiYXNlNjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOwogCiAgICAg
cmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDooaWQpZGF0YTY0LmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQpAQCAtMzQyLDkgKzM0MCw3IEBAIHN0YXRp
YyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGUKICAgICAgICAgaWQgdmFsdWUgPSBp
dGVtLnZhbHVlOwogICAgICAgICBOU1N0cmluZyAqbWltZVR5cGUgPSBbW2l0ZW0gZXh0cmFBdHRy
aWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJNSU1FdHlwZSJdOwogICAgICAgICBpZiAoW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dICYmIG1pbWVUeXBlKSB7Ci0gICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICAgICAgICAgIGJhc2U2NEVuY29kZShbdmFsdWUg
Ynl0ZXNdLCBbdmFsdWUgbGVuZ3RoXSwgYmFzZTY0RGF0YSk7Ci0gICAgICAgICAgICBTdHJpbmcg
ZGF0YTY0ID0gImRhdGE6IiArIFN0cmluZyhtaW1lVHlwZSkgKyAiO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKKyAgICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToiLCBTdHJp
bmcobWltZVR5cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFt2YWx1ZSBieXRlc10sIFt2
YWx1ZSBsZW5ndGhdKSk7CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6KF9fYnJp
ZGdlIE5TU3RyaW5nICopZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5OkAidmFs
dWUiXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBz
dGF0aWMgUmVmPEFycmF5QnVmZmVyPiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9iamVjdC0+
c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIFdURjo6YmFzZTY0VVJM
RW5jb2RlKGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOworICAgIG9iamVj
dC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChj
aGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVuZ2UubGVuZ3RoKCkpKSk7CiAgICAgb2JqZWN0LT5zZXRT
dHJpbmcoIm9yaWdpbiJfcywgb3JpZ2luLnRvUmF3U3RyaW5nKCkpOwogCiAgICAgYXV0byB1dGY4
SlNPTlN0cmluZyA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRp
YWwuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3
IEBAIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgUHUKIH0KIAogUHVibGlj
S2V5Q3JlZGVudGlhbDo6UHVibGljS2V5Q3JlZGVudGlhbChSZWY8QXV0aGVudGljYXRvclJlc3Bv
bnNlPiYmIHJlc3BvbnNlKQotICAgIDogQmFzaWNDcmVkZW50aWFsKFdURjo6YmFzZTY0VVJMRW5j
b2RlKHJlc3BvbnNlLT5yYXdJZCgpLT5kYXRhKCksIHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlTGVu
Z3RoKCkpLCBUeXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQorICAgIDogQmFzaWND
cmVkZW50aWFsKG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyZXNwb25zZS0+cmF3SWQoKS0+
ZGF0YSgpLCByZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSksIFR5cGU6OlB1YmxpY0tl
eSwgRGlzY292ZXJ5OjpSZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2Up
KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dEhhbmRzaGFrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZWNXZWJT
b2NrZXRLZXkoKQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uY2VTaXplID0gMTY7CiAgICAg
dW5zaWduZWQgY2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRv
bVZhbHVlcyhrZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShrZXksIG5v
bmNlU2l6ZSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChrZXksIG5vbmNl
U2l6ZSkpOwogfQogCiBTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNv
Y2tldEFjY2VwdChjb25zdCBTdHJpbmcmIHNlY1dlYlNvY2tldEtleSkKQEAgLTExMCw3ICsxMTAs
NyBAQCBTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlCiAgICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlE
KSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAg
ICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaGFzaC5k
YXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNv
ZGVkKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSkpOwogfQogCiBXZWJTb2NrZXRIYW5kc2hh
a2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90
b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgY2xpZW50T3JpZ2lu
LCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TZXJpYWxp
emVkQ3J5cHRvS2V5V3JhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9T
ZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBvZiBwcm90ZWN0aW9uIGlzIG5v
dCByZXF1aXJlZCBieSB0aGUgc3BlYyBhcyBvZiAxMSBEZWNlbWJlciAyMDE0OgogLy8gaHR0cHM6
Ly93d3cudzMub3JnL1RSL1dlYkNyeXB0b0FQSS8jc2VjdXJpdHktZGV2ZWxvcGVycwogCi1XRUJD
T1JFX0VYUE9SVCBib29sIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4
X3Q+Jik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkoKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZGVsZXRlRGVmYXVsdFdl
YkNyeXB0b01hc3RlcktleSgpOwogCiBXRUJDT1JFX0VYUE9SVCBib29sIHdyYXBTZXJpYWxpemVk
Q3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5LCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNH
Q3J5cHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjMsMTEgKzUyMywxMSBAQCBib29sIENyeXB0
b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVuCiAgICAgICAgIGlmIChxICYmIHEtPnNpemUo
KSA9PSBjdXJ2ZVVuY29tcHJlc3NlZFBvaW50U2l6ZShtX2N1cnZlKSkgewogICAgICAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGE7CiAgICAgICAgICAgICBhLmFwcGVuZChxLT5kYXRhKCkgKyAxLCB1
bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplKTsKLSAgICAgICAgICAgIGp3ay54ID0gYmFzZTY0
VVJMRW5jb2RlKGEpOworICAgICAgICAgICAgandrLnggPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoYSkpOwogCiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYjsKICAgICAgICAgICAg
IGIuYXBwZW5kKHEtPmRhdGEoKSArIDEgKyB1bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplLCB1
bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplKTsKLSAgICAgICAgICAgIGp3ay55ID0gYmFzZTY0
VVJMRW5jb2RlKGIpOworICAgICAgICAgICAgandrLnkgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoYikpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NDMsNyArNTQzLDcgQEAgYm9vbCBD
cnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogICAgICAgICAgICAgICAgICAgICAq
ZCA9IFdURk1vdmUocGFkZGVkRGF0YSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGUoKmQpOworICAgICAgICAgICAgICAgIGp3ay5k
ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCpkKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1NlcmlhbGl6
ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcEdDcnlwdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE1ICsyOSwxNCBAQAogI2lm
IEVOQUJMRShXRUJfQ1JZUFRPKQogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGdldERl
ZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCitPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogLy8gSW5pdGlhbGx5
IHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgd2VyZSBpbnRlbmRlZCB0byBwZXJmb3JtIEtFSyB3cmFw
cGluZyBhbmQgdW53cmFwcGluZywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUFFUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5QUVTLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTAgKzg4LDEw
IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEuay5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG9jdGV0U2VxdWVuY2U7Ci0gICAgaWYgKCFi
YXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rLCBvY3RldFNlcXVlbmNlKSkKKyAgICBhdXRvIG9jdGV0
U2VxdWVuY2UgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rKTsKKyAgICBpZiAoIW9jdGV0U2Vx
dWVuY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghY2FsbGJhY2sob2N0ZXRT
ZXF1ZW5jZS5zaXplKCkgKiA4LCBrZXlEYXRhLmFsZykpCisgICAgaWYgKCFjYWxsYmFjayhvY3Rl
dFNlcXVlbmNlLT5zaXplKCkgKiA4LCBrZXlEYXRhLmFsZykpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGlmICh1c2FnZXMgJiYgIWtleURhdGEudXNlLmlzTnVsbCgpICYmIGtleURhdGEu
dXNlICE9ICJlbmMiKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMCwxNCArMTAwLDE0
IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICBpZiAoa2V5
RGF0YS5leHQgJiYgIWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFjdGFibGUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMo
YWxnb3JpdGhtLCBXVEZNb3ZlKG9jdGV0U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCBXVEZNb3Zl
KCpvY3RldFNlcXVlbmNlKSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwogfQogCiBKc29uV2ViS2V5
IENyeXB0b0tleUFFUzo6ZXhwb3J0SndrKCkgY29uc3QKIHsKICAgICBKc29uV2ViS2V5IHJlc3Vs
dDsKICAgICByZXN1bHQua3R5ID0gIm9jdCI7Ci0gICAgcmVzdWx0LmsgPSBiYXNlNjRVUkxFbmNv
ZGUobV9rZXkpOworICAgIHJlc3VsdC5rID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKG1f
a2V5KSk7CiAgICAgcmVzdWx0LmtleV9vcHMgPSB1c2FnZXMoKTsKICAgICByZXN1bHQuZXh0ID0g
ZXh0cmFjdGFibGUoKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OCwyMiArOTgsMjIgQEAgUmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6aW1wb3J0Sgog
CiAgICAgaWYgKGtleURhdGEueC5pc051bGwoKSB8fCBrZXlEYXRhLnkuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90PiB4OwotICAgIGlmICghV1RG
OjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS54LCB4KSkKKyAgICBhdXRvIHggPSBiYXNlNjRVUkxE
ZWNvZGUoa2V5RGF0YS54KTsKKyAgICBpZiAoIXgpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIFZlY3Rvcjx1aW50OF90PiB5OwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5
RGF0YS55LCB5KSkKKyAgICBhdXRvIHkgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS55KTsKKyAg
ICBpZiAoIXkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmQuaXNO
dWxsKCkpIHsKICAgICAgICAgLy8gaW1wb3J0IHB1YmxpYyBrZXkKLSAgICAgICAgcmV0dXJuIHBs
YXRmb3JtSW1wb3J0SldLUHVibGljKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKHgp
LCBXVEZNb3ZlKHkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmV0dXJuIHBsYXRm
b3JtSW1wb3J0SldLUHVibGljKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKCp4KSwg
V1RGTW92ZSgqeSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgIH0KIAotICAgIFZlY3Rvcjx1
aW50OF90PiBkOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kLCBkKSkK
KyAgICBhdXRvIGQgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBpZiAoIWQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIGltcG9ydCBwcml2YXRlIGtleQotICAgIHJl
dHVybiBwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3VydmUsIFdU
Rk1vdmUoeCksIFdURk1vdmUoeSksIFdURk1vdmUoZCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwor
ICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3Vy
dmUsIFdURk1vdmUoKngpLCBXVEZNb3ZlKCp5KSwgV1RGTW92ZSgqZCksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogfQogCiBSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjppbXBvcnRTcGtp
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBjdXJ2
ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5
VXNhZ2VCaXRtYXAgdXNhZ2VzKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5SE1BQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5SE1BQy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOCArMTAz
LDggQEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5rLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4gb2N0ZXRTZXF1ZW5jZTsKLSAgICBpZiAo
IWJhc2U2NFVSTERlY29kZShrZXlEYXRhLmssIG9jdGV0U2VxdWVuY2UpKQorICAgIGF1dG8gb2N0
ZXRTZXF1ZW5jZSA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmspOworICAgIGlmICghb2N0ZXRT
ZXF1ZW5jZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFjYWxsYmFjayhoYXNo
LCBrZXlEYXRhLmFsZykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTE1LDE0ICsxMTUs
MTQgQEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgIGlmIChr
ZXlEYXRhLmV4dCAmJiAha2V5RGF0YS5leHQudmFsdWUoKSAmJiBleHRyYWN0YWJsZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3
KGxlbmd0aEJpdHMsIGhhc2gsIFdURk1vdmUob2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOworICAgIHJldHVybiBDcnlwdG9LZXlITUFDOjppbXBvcnRSYXcobGVuZ3RoQml0cywg
aGFzaCwgV1RGTW92ZSgqb2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQog
CiBKc29uV2ViS2V5IENyeXB0b0tleUhNQUM6OmV4cG9ydEp3aygpIGNvbnN0CiB7CiAgICAgSnNv
bldlYktleSByZXN1bHQ7CiAgICAgcmVzdWx0Lmt0eSA9ICJvY3QiOwotICAgIHJlc3VsdC5rID0g
YmFzZTY0VVJMRW5jb2RlKG1fa2V5KTsKKyAgICByZXN1bHQuayA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChtX2tleSkpOwogICAgIHJlc3VsdC5rZXlfb3BzID0gdXNhZ2VzKCk7CiAgICAg
cmVzdWx0LmV4dCA9IGV4dHJhY3RhYmxlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNjUgKzQ1LDg3IEBAIFJlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0
b0tleVJTQTo6aW1wb3IKIAogICAgIGlmIChrZXlEYXRhLm4uaXNOdWxsKCkgfHwga2V5RGF0YS5l
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4g
bW9kdWx1czsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEubiwgbW9kdWx1
cykpCisgICAgYXV0byBtb2R1bHVzID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEubik7CisgICAg
aWYgKCFtb2R1bHVzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBQZXIgUkZDIDc1
MTggU2VjdGlvbiA2LjMuMS4xOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUxOCNz
ZWN0aW9uLTYuMy4xLjEKLSAgICBpZiAoIW1vZHVsdXMuaXNFbXB0eSgpICYmICFtb2R1bHVzWzBd
KQotICAgICAgICBtb2R1bHVzLnJlbW92ZSgwKTsKLSAgICBWZWN0b3I8dWludDhfdD4gZXhwb25l
bnQ7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLmUsIGV4cG9uZW50KSkK
KyAgICBpZiAoIW1vZHVsdXMtPmlzRW1wdHkoKSAmJiAhbW9kdWx1cy0+YXQoMCkpCisgICAgICAg
IG1vZHVsdXMtPnJlbW92ZSgwKTsKKyAgICBhdXRvIGV4cG9uZW50ID0gYmFzZTY0VVJMRGVjb2Rl
KGtleURhdGEuZSk7CisgICAgaWYgKCFleHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgaWYgKGtleURhdGEuZC5pc051bGwoKSkgewogICAgICAgICAvLyBpbXBvcnQgcHVibGlj
IGtleQotICAgICAgICBhdXRvIHB1YmxpY0tleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21w
b25lbnRzOjpjcmVhdGVQdWJsaWMoV1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCkp
OworICAgICAgICBhdXRvIHB1YmxpY0tleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25l
bnRzOjpjcmVhdGVQdWJsaWMoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50KSk7
CiAgICAgICAgIC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEgaXMg
anVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBpZiBoYXNo
IGlzIFdURjo6bnVsbG9wdC4KICAgICAgICAgcmV0dXJuIENyeXB0b0tleVJTQTo6Y3JlYXRlKGFs
Z29yaXRobSwgaGFzaC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xKSwg
ISFoYXNoLCAqcHVibGljS2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAg
fQogCiAgICAgLy8gaW1wb3J0IHByaXZhdGUga2V5Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZh
dGVFeHBvbmVudDsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZCwgcHJp
dmF0ZUV4cG9uZW50KSkKKyAgICBhdXRvIHByaXZhdGVFeHBvbmVudCA9IGJhc2U2NFVSTERlY29k
ZShrZXlEYXRhLmQpOworICAgIGlmICghcHJpdmF0ZUV4cG9uZW50KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5wLmlzTnVsbCgpICYmIGtleURhdGEucS5pc051bGwo
KSAmJiBrZXlEYXRhLmRwLmlzTnVsbCgpICYmIGtleURhdGEuZHAuaXNOdWxsKCkgJiYga2V5RGF0
YS5xaS5pc051bGwoKSkgewotICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5
cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZN
b3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpKTsKKyAgICAgICAgYXV0byBw
cml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZh
dGUoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50KSwgV1RGTW92ZSgqcHJpdmF0
ZUV4cG9uZW50KSk7CiAgICAgICAgIC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cjo6U0hBXzEgaXMganVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVm
ZmVjdCBpZiBoYXNoIGlzIFdURjo6bnVsbG9wdC4KICAgICAgICAgcmV0dXJuIENyeXB0b0tleVJT
QTo6Y3JlYXRlKGFsZ29yaXRobSwgaGFzaC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OlNIQV8xKSwgISFoYXNoLCAqcHJpdmF0ZUtleUNvbXBvbmVudHMsIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogICAgIH0KIAogICAgIGlmIChrZXlEYXRhLnAuaXNOdWxsKCkgfHwga2V5RGF0YS5x
LmlzTnVsbCgpIHx8IGtleURhdGEuZHAuaXNOdWxsKCkgfHwga2V5RGF0YS5kcS5pc051bGwoKSB8
fCBrZXlEYXRhLnFpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBDcnlw
dG9LZXlSU0FDb21wb25lbnRzOjpQcmltZUluZm8gZmlyc3RQcmltZUluZm87Ci0gICAgQ3J5cHRv
S2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mbzsKLSAgICBpZiAoIVdU
Rjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEucCwgZmlyc3RQcmltZUluZm8ucHJpbWVGYWN0b3Ip
KQorICAgIAorICAgIGF1dG8gZmlyc3RQcmltZUZhY3RvciA9IGJhc2U2NFVSTERlY29kZShrZXlE
YXRhLnApOworICAgIGlmICghZmlyc3RQcmltZUZhY3RvcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRwLCBmaXJzdFByaW1l
SW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisgICAgYXV0byBmaXJzdEZhY3RvckNSVEV4cG9uZW50
ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZHApOworICAgIGlmICghZmlyc3RGYWN0b3JDUlRF
eHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVS
TERlY29kZShrZXlEYXRhLnEsIHNlY29uZFByaW1lSW5mby5wcmltZUZhY3RvcikpCisgICAgYXV0
byBzZWNvbmRQcmltZUZhY3RvciA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLnEpOworICAgIGlm
ICghc2Vjb25kUHJpbWVGYWN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICgh
V1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kcSwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNS
VEV4cG9uZW50KSkKKyAgICBhdXRvIHNlY29uZEZhY3RvckNSVEV4cG9uZW50ID0gYmFzZTY0VVJM
RGVjb2RlKGtleURhdGEuZHEpOworICAgIGlmICghc2Vjb25kRmFjdG9yQ1JURXhwb25lbnQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5
RGF0YS5xaSwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KSkKKyAgICBhdXRv
IHNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEucWkp
OworICAgIGlmICghc2Vjb25kRmFjdG9yQ1JUQ29lZmZpY2llbnQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGZpcnN0UHJp
bWVJbmZvOworICAgIGZpcnN0UHJpbWVJbmZvLnByaW1lRmFjdG9yID0gV1RGTW92ZSgqZmlyc3RQ
cmltZUZhY3Rvcik7CisgICAgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZN
b3ZlKCpmaXJzdEZhY3RvckNSVEV4cG9uZW50KTsKKyAgICAKKyAgICBDcnlwdG9LZXlSU0FDb21w
b25lbnRzOjpQcmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOworICAgIHNlY29uZFByaW1lSW5mby5w
cmltZUZhY3RvciA9IFdURk1vdmUoKnNlY29uZFByaW1lRmFjdG9yKTsKKyAgICBzZWNvbmRQcmlt
ZUluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZNb3ZlKCpzZWNvbmRGYWN0b3JDUlRFeHBvbmVu
dCk7CisgICAgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50ID0gV1RGTW92ZSgq
c2Vjb25kRmFjdG9yQ1JUQ29lZmZpY2llbnQpOworCiAgICAgaWYgKCFrZXlEYXRhLm90aCkgewot
ICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50
czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZN
b3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJp
bWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCB7IH0pOworICAgICAgICBhdXRvIHBy
aXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0
ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKCptb2R1bHVzKSwgV1RGTW92ZSgqZXhwb25lbnQp
LCBXVEZNb3ZlKCpwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RG
TW92ZShzZWNvbmRQcmltZUluZm8pLCB7IH0pOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxk
IG5vdCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJl
dHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRz
LCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAKICAgICBWZWN0b3I8Q3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclByaW1lSW5mb3M7CiAgICAgZm9yIChjb25zdCBh
dXRvJiB2YWx1ZSA6IGtleURhdGEub3RoLnZhbHVlKCkpIHsKLSAgICAgICAgQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87Ci0gICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxE
ZWNvZGUodmFsdWUuciwgaW5mby5wcmltZUZhY3RvcikpCisgICAgICAgIGF1dG8gcHJpbWVGYWN0
b3IgPSBiYXNlNjRVUkxEZWNvZGUodmFsdWUucik7CisgICAgICAgIGlmICghcHJpbWVGYWN0b3Ip
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVS
TERlY29kZSh2YWx1ZS5kLCBpbmZvLmZhY3RvckNSVEV4cG9uZW50KSkKKyAgICAgICAgYXV0byBm
YWN0b3JDUlRFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZSh2YWx1ZS5kKTsKKyAgICAgICAgaWYg
KCFmYWN0b3JDUlRFeHBvbmVudCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKHZhbHVlLnQsIGluZm8uZmFjdG9yQ1JUQ29lZmZp
Y2llbnQpKQorICAgICAgICBhdXRvIGZhY3RvckNSVENvZWZmaWNpZW50ID0gYmFzZTY0VVJMRGVj
b2RlKHZhbHVlLnQpOworICAgICAgICBpZiAoIWZhY3RvckNSVENvZWZmaWNpZW50KQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG90aGVyUHJpbWVJbmZvcy5hcHBlbmQoaW5m
byk7CisKKyAgICAgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87Cisg
ICAgICAgIGluZm8ucHJpbWVGYWN0b3IgPSBXVEZNb3ZlKCpwcmltZUZhY3Rvcik7CisgICAgICAg
IGluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZNb3ZlKCpmYWN0b3JDUlRFeHBvbmVudCk7Cisg
ICAgICAgIGluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQgPSBXVEZNb3ZlKCpmYWN0b3JDUlRDb2Vm
ZmljaWVudCk7CisKKyAgICAgICAgb3RoZXJQcmltZUluZm9zLmFwcGVuZChXVEZNb3ZlKGluZm8p
KTsKICAgICB9CiAKLSAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKG1vZHVs
dXMpLCBXVEZNb3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpLCBXVEZNb3Zl
KGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCBXVEZNb3ZlKG90aGVy
UHJpbWVJbmZvcykpOworICAgIGF1dG8gcHJpdmF0ZUtleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlS
U0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKFdURk1vdmUoKm1v
ZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVudCksIFdURk1vdmUoKnByaXZhdGVFeHBvbmVudCksIFdU
Rk1vdmUoZmlyc3RQcmltZUluZm8pLCBXVEZNb3ZlKHNlY29uZFByaW1lSW5mbyksIFdURk1vdmUo
b3RoZXJQcmltZUluZm9zKSk7CiAgICAgLy8gTm90aWNlOiBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpTSEFfMSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkg
ZWZmZWN0IGlmIGhhc2ggaXMgV1RGOjpudWxsb3B0LgogICAgIHJldHVybiBDcnlwdG9LZXlSU0E6
OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRzLCBleHRyYWN0YWJsZSwgdXNh
Z2VzKTsKIH0KQEAgLTExOCwzMCArMTQwLDMwIEBAIEpzb25XZWJLZXkgQ3J5cHRvS2V5UlNBOjpl
eHBvcnRKd2soKSBjb24KICAgICBhdXRvIHJzYUNvbXBvbmVudHMgPSBleHBvcnREYXRhKCk7CiAK
ICAgICAvLyBwdWJsaWMga2V5Ci0gICAgcmVzdWx0Lm4gPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29t
cG9uZW50cy0+bW9kdWx1cygpKTsKLSAgICByZXN1bHQuZSA9IGJhc2U2NFVSTEVuY29kZShyc2FD
b21wb25lbnRzLT5leHBvbmVudCgpKTsKKyAgICByZXN1bHQubiA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5tb2R1bHVzKCkpKTsKKyAgICByZXN1bHQuZSA9IG1h
a2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5leHBvbmVudCgpKSk7CiAg
ICAgaWYgKHJzYUNvbXBvbmVudHMtPnR5cGUoKSA9PSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpU
eXBlOjpQdWJsaWMpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvLyBwcml2YXRlIGtl
eQotICAgIHJlc3VsdC5kID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnByaXZhdGVF
eHBvbmVudCgpKTsKKyAgICByZXN1bHQuZCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChy
c2FDb21wb25lbnRzLT5wcml2YXRlRXhwb25lbnQoKSkpOwogICAgIGlmICghcnNhQ29tcG9uZW50
cy0+aGFzQWRkaXRpb25hbFByaXZhdGVLZXlQYXJhbWV0ZXJzKCkpCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAKLSAgICByZXN1bHQucCA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5m
aXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9yKTsKLSAgICByZXN1bHQucSA9IGJhc2U2NFVSTEVu
Y29kZShyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5wcmltZUZhY3Rvcik7Ci0gICAg
cmVzdWx0LmRwID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPmZpcnN0UHJpbWVJbmZv
KCkuZmFjdG9yQ1JURXhwb25lbnQpOwotICAgIHJlc3VsdC5kcSA9IGJhc2U2NFVSTEVuY29kZShy
c2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBvbmVudCk7Ci0gICAg
cmVzdWx0LnFpID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5m
bygpLmZhY3RvckNSVENvZWZmaWNpZW50KTsKKyAgICByZXN1bHQucCA9IG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5maXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9y
KSk7CisgICAgcmVzdWx0LnEgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9u
ZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkucHJpbWVGYWN0b3IpKTsKKyAgICByZXN1bHQuZHAgPSBt
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8o
KS5mYWN0b3JDUlRFeHBvbmVudCkpOworICAgIHJlc3VsdC5kcSA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBv
bmVudCkpOworICAgIHJlc3VsdC5xaSA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FD
b21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRDb2VmZmljaWVudCkpOwogICAg
IGlmIChyc2FDb21wb25lbnRzLT5vdGhlclByaW1lSW5mb3MoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAKICAgICBWZWN0b3I8UnNhT3RoZXJQcmltZXNJbmZvPiBvdGg7CiAg
ICAgZm9yIChjb25zdCBhdXRvJiBpbmZvIDogcnNhQ29tcG9uZW50cy0+b3RoZXJQcmltZUluZm9z
KCkpIHsKICAgICAgICAgUnNhT3RoZXJQcmltZXNJbmZvIG90aGVySW5mbzsKLSAgICAgICAgb3Ro
ZXJJbmZvLnIgPSBiYXNlNjRVUkxFbmNvZGUoaW5mby5wcmltZUZhY3Rvcik7Ci0gICAgICAgIG90
aGVySW5mby5kID0gYmFzZTY0VVJMRW5jb2RlKGluZm8uZmFjdG9yQ1JURXhwb25lbnQpOwotICAg
ICAgICBvdGhlckluZm8udCA9IGJhc2U2NFVSTEVuY29kZShpbmZvLmZhY3RvckNSVENvZWZmaWNp
ZW50KTsKKyAgICAgICAgb3RoZXJJbmZvLnIgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQo
aW5mby5wcmltZUZhY3RvcikpOworICAgICAgICBvdGhlckluZm8uZCA9IG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChpbmZvLmZhY3RvckNSVEV4cG9uZW50KSk7CisgICAgICAgIG90aGVySW5m
by50ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKGluZm8uZmFjdG9yQ1JUQ29lZmZpY2ll
bnQpKTsKICAgICAgICAgb3RoLmFwcGVuZChXVEZNb3ZlKG90aGVySW5mbykpOwogICAgIH0KICAg
ICByZXN1bHQub3RoID0gV1RGTW92ZShvdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRv
L21hYy9DcnlwdG9LZXlFQ01hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcsMTAgKzE5NywxMCBAQCBib29sIENyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVu
CiAKICAgICBpZiAoVU5MSUtFTFkoKHNpemUgIT0gcHVibGljS2V5U2l6ZSkgJiYgKHNpemUgIT0g
cHJpdmF0ZUtleVNpemUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGp3ay54ID0gV1RG
OjpiYXNlNjRVUkxFbmNvZGUocmVzdWx0LmRhdGEoKSArIDEsIGtleVNpemVJbkJ5dGVzKTsKLSAg
ICBqd2sueSA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHJlc3VsdC5kYXRhKCkgKyBrZXlTaXplSW5C
eXRlcyArIDEsIGtleVNpemVJbkJ5dGVzKTsKKyAgICBqd2sueCA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsgMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2su
eSA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUlu
Qnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRlcykpOwogICAgIGlmIChzaXplID4gcHVibGljS2V5U2l6
ZSkKLSAgICAgICAgandrLmQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShyZXN1bHQuZGF0YSgpICsg
cHVibGljS2V5U2l6ZSwga2V5U2l6ZUluQnl0ZXMpOworICAgICAgICBqd2suZCA9IG1ha2VTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6
ZUluQnl0ZXMpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1w
b3J0IDxDb21tb25DcnlwdG8vQ29tbW9uU3ltbWV0cmljS2V5d3JhcC5oPgogI2ltcG9ydCA8Y3J0
X2V4dGVybnMuaD4KICNpbXBvcnQgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CisjaW1w
b3J0IDx3dGYvT3B0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5
U1BJLmg+CkBAIC04MCwxMSArODEsMTEgQEAgc3RhdGljIE5TU3RyaW5nKiBtYXN0ZXJLZXlBY2Nv
dW50TmFtZUZvcgogICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImNvbS5h
cHBsZS5XZWJLaXQuV2ViQ3J5cHRvLm1hc3RlcislQCIsIGJ1bmRsZUlkZW50aWZpZXJdOwogfQog
Ci1zdGF0aWMgYm9vbCBjcmVhdGVBbmRTdG9yZU1hc3RlcktleShWZWN0b3I8dWludDhfdD4mIG1h
c3RlcktleURhdGEpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBjcmVhdGVBbmRT
dG9yZU1hc3RlcktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVn
ZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFscykpOwogCi0gICAgbWFzdGVy
S2V5RGF0YS5yZXNpemUobWFzdGVyS2V5U2l6ZUluQnl0ZXMpOworICAgIFZlY3Rvcjx1aW50OF90
PiBtYXN0ZXJLZXlEYXRhKG1hc3RlcktleVNpemVJbkJ5dGVzKTsKICAgICBhdXRvIHJjID0gQ0NS
YW5kb21HZW5lcmF0ZUJ5dGVzKG1hc3RlcktleURhdGEuZGF0YSgpLCBtYXN0ZXJLZXlEYXRhLnNp
emUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmMgPT0ga0NDU3VjY2Vzcyk7CiAKQEAgLTEwNyw3
ICsxMDgsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVBbmRTdG9yZU1hc3RlcktleShWZWN0CiAgICAg
c3RhdHVzID0gU2VjQWNjZXNzQ3JlYXRlKChfX2JyaWRnZSBDRlN0cmluZ1JlZilsb2NhbGl6ZWRJ
dGVtTmFtZSwgbnVsbHB0ciwgJmFjY2Vzc1JlZik7CiAgICAgaWYgKHN0YXR1cykgewogICAgICAg
ICBXVEZMb2dBbHdheXMoIkNhbm5vdCBjcmVhdGUgYSBzZWN1cml0eSBhY2Nlc3Mgb2JqZWN0IGZv
ciBzdG9yaW5nIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IH0KICAgICBSZXRhaW5QdHI8U2VjQWNjZXNzUmVmPiBhY2Nlc3MgPSBhZG9wdENGKGFjY2Vzc1Jl
Zik7CiAKQEAgLTEyMCwxOSArMTIxLDE4IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICBpZiAoc3RhdHVz
KSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IGNyZWF0ZSBhIHRydXN0ZWQgYXBwbGlj
YXRpb24gb2JqZWN0IGZvciBzdG9yaW5nIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIs
IChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIH0KICAgICBSZXRhaW5QdHI8U2VjVHJ1c3RlZEFwcGxpY2F0aW9uUmVm
PiB0cnVzdGVkQXBwID0gYWRvcHRDRih0cnVzdGVkQXBwUmVmKTsKIAogICAgIHN0YXR1cyA9IFNl
Y0FDTFNldENvbnRlbnRzKGFjbCwgKF9fYnJpZGdlIENGQXJyYXlSZWYpQFsgKF9fYnJpZGdlIGlk
KXRydXN0ZWRBcHAuZ2V0KCkgXSwgKF9fYnJpZGdlIENGU3RyaW5nUmVmKWxvY2FsaXplZEl0ZW1O
YW1lLCBrU2VjS2V5Y2hhaW5Qcm9tcHRSZXF1aXJlUGFzc3BoYXNlKTsKICAgICBpZiAoc3RhdHVz
KSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IHNldCBBQ0wgZm9yIFdlYkNyeXB0byBt
YXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KICNlbmRpZgogCi0gICAgVmVj
dG9yPGNoYXI+IGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhOwotICAgIGJhc2U2NEVuY29kZSht
YXN0ZXJLZXlEYXRhLCBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YSk7CisgICAgYXV0byBiYXNl
NjRFbmNvZGVkTWFzdGVyS2V5RGF0YSA9IGJhc2U2NEVuY29kZShtYXN0ZXJLZXlEYXRhKTsKIAog
ICAgIC8vIENhbm5vdCB1c2Uga1NlY0NsYXNzS2V5IGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVt
LzE2MDY4MjA3Pi4KICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBAewpAQCAtMTUwLDEy
ICsxNTAsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgc3RhdHVz
ID0gU2VjSXRlbUFkZCgoQ0ZEaWN0aW9uYXJ5UmVmKWF0dHJpYnV0ZXMsIG51bGxwdHIpOwogICAg
IGlmIChzdGF0dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3Qgc3RvcmUgV2ViQ3J5
cHRvIG1hc3RlciBrZXksIGVycm9yICVkIiwgKGludClzdGF0dXMpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiB0
cnVlOworCisgICAgcmV0dXJuIG1hc3RlcktleURhdGE7CiB9CiAKLXN0YXRpYyBib29sIGZpbmRN
YXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXlEYXRhKQorc3RhdGljIE9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gZmluZE1hc3RlcktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
aGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFs
cykpOwogCkBAIC0xNzAsMjAgKzE3MSwyNSBAQCBzdGF0aWMgYm9vbCBmaW5kTWFzdGVyS2V5KFZl
Y3Rvcjx1aW50OF90CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBpZiAoc3RhdHVzICE9IGVy
clNlY0l0ZW1Ob3RGb3VuZCAmJiBzdGF0dXMgIT0gZXJyU2VjVXNlckNhbmNlbGVkKQogICAgICAg
ICAgICAgV1RGTG9nQWx3YXlzKCJDb3VsZCBub3QgZmluZCBXZWJDcnlwdG8gbWFzdGVyIGtleSBp
biBLZXljaGFpbiwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPENG
RGF0YVJlZj4ga2V5RGF0YSA9IGFkb3B0Q0Yoa2V5RGF0YVJlZik7Ci0KLSAgICBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEgPSB2ZWN0b3JGcm9tTlNEYXRhKChfX2Jy
aWRnZSBOU0RhdGEgKilrZXlEYXRhLmdldCgpKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlKChj
b25zdCBjaGFyKiliYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YS5kYXRhKCksIGJhc2U2NEVuY29k
ZWRNYXN0ZXJLZXlEYXRhLnNpemUoKSwgbWFzdGVyS2V5RGF0YSk7CisgICAgcmV0dXJuIGJhc2U2
NERlY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKGtl
eURhdGEuZ2V0KCkpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGtleURhdGEuZ2V0KCkpKTsKIH0KIAotYm9v
bCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5
KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkK
IHsKLSAgICBpZiAoIWZpbmRNYXN0ZXJLZXkobWFzdGVyS2V5KSAmJiAhY3JlYXRlQW5kU3RvcmVN
YXN0ZXJLZXkobWFzdGVyS2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJFTEVBU0Vf
QVNTRVJUKG1hc3RlcktleS5zaXplKCkgPT0gbWFzdGVyS2V5U2l6ZUluQnl0ZXMpOwotICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChhdXRvIG1hc3RlcktleSA9IGZpbmRNYXN0ZXJLZXkoKSkgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtYXN0ZXJLZXktPnNpemUoKSA9PSBtYXN0ZXJLZXlTaXpl
SW5CeXRlcyk7CisgICAgICAgIHJldHVybiBtYXN0ZXJLZXk7CisgICAgfQorCisgICAgaWYgKGF1
dG8gbWFzdGVyS2V5ID0gY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoKSkgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtYXN0ZXJLZXktPnNpemUoKSA9PSBtYXN0ZXJLZXlTaXplSW5CeXRlcyk7Cisg
ICAgICAgIHJldHVybiBtYXN0ZXJLZXk7CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIH0KIAogYm9vbCBkZWxldGVEZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNT
TC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2VyaWFs
aXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2VyaWFsaXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDE0IEBACiAjaWYgRU5BQkxFKFdFQl9DUllQ
VE8pCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleShWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICBVTlVTRURfUEFSQU0obWFzdGVyS2V5KTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiAvLyBJbml0aWFsbHkgdGhlc2UgaGVscGVyIGZ1
bmN0aW9ucyB3ZXJlIGludGVuZGVkIHRvIHBlcmZvcm0gS0VLIHdyYXBwaW5nIGFuZCB1bndyYXBw
aW5nLApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsMjYgKzMzMywxMiBAQCB2b2lkIEZpbGVS
ZWFkZXJMb2FkZXI6OmNvbnZlcnRUb1RleHQoKQogCiB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNv
bnZlcnRUb0RhdGFVUkwoKQogewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoImRhdGE6Iik7Ci0KICAgICBpZiAoIW1fYnl0ZXNMb2FkZWQpIHsK
LSAgICAgICAgbV9zdHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIG1f
c3RyaW5nUmVzdWx0ID0gImRhdGE6Il9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKG1fZGF0YVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtIik7Ci0gICAgZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVuZCht
X2RhdGFUeXBlKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjtiYXNlNjQsIik7Ci0KLSAg
ICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgIGJhc2U2NEVuY29kZShtX3Jhd0RhdGEtPmRhdGEoKSwg
bV9ieXRlc0xvYWRlZCwgb3V0KTsKLSAgICBvdXQuYXBwZW5kKCdcMCcpOwotICAgIGJ1aWxkZXIu
YXBwZW5kKG91dC5kYXRhKCkpOwotCi0gICAgbV9zdHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3Ry
aW5nKCk7CisgICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3RyaW5nKCJkYXRhOjtiYXNlNjQsIiwg
bV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0
YVR5cGUsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQpLCAn
XDAnKTsKIH0KIAogYm9vbCBGaWxlUmVhZGVyTG9hZGVyOjppc0NvbXBsZXRlZCgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOSwxNCArNDI5LDE0IEBAIHN0ZDo6dW5pcXVlX3B0
cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNI
QTE6OkRpZ2VzdCBhdHRyc0hhc2g7CiAgICAgICAgICAgICBhdHRyc1NIQTEuY29tcHV0ZUhhc2go
YXR0cnNIYXNoKTsKLSAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0gYmFzZTY0RW5jb2Rl
KGF0dHJzSGFzaC5kYXRhKCksIDEwKTsKKyAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0g
bWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGF0dHJzSGFzaC5kYXRhKCksIDEwKSk7CiAgICAgICAg
ICAgICBhZGRTdHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaCho
YXNoKTsKLSAgICBkaWdlc3QtPnNoYTEgPSBiYXNlNjRFbmNvZGUoaGFzaC5kYXRhKCksIDEwKTsK
KyAgICBkaWdlc3QtPnNoYTEgPSBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoaGFzaC5kYXRhKCks
IDEwKSk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+
YWRkKGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsMTEgKzU5OCwxMSBAQCBib29sIEluc3BlY3RvckZy
b250ZW5kSG9zdDo6c2hvd0NlcnRpZmljCiAgICAgaWYgKCFtX2NsaWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYgKCFiYXNlNjRE
ZWNvZGUoc2VyaWFsaXplZENlcnRpZmljYXRlLCBkYXRhKSkKKyAgICBhdXRvIGRhdGEgPSBiYXNl
NjREZWNvZGUoc2VyaWFsaXplZENlcnRpZmljYXRlKTsKKyAgICBpZiAoIWRhdGEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2Rlcihk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CiAgICAgT3B0aW9uYWw8Q2VydGlm
aWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUlu
Zm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB1bnNpZ25lZCBOZXR3b3JrUmVzb3VyY2Vz
RGF0YTo6UmVzb3VyY2VECiAgICAgICAgIG1fY29udGVudCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5k
Rmx1c2gobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIG1fYmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0gICAgICAgIG1fY29udGVudCA9IGJhc2U2
NEVuY29kZShtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCk7CisgICAgICAgIG1fY29u
dGVudCA9IG1ha2VTdHJpbmcoV1RGOjpiYXNlNjRFbmNvZGVkKG1fZGF0YUJ1ZmZlci0+ZGF0YSgp
LCBkYXRhTGVuZ3RoKSk7CiAgICAgfQogCiAgICAgbV9kYXRhQnVmZmVyID0gbnVsbHB0cjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwOSw3
ICsxNzA5LDcgQEAgc3RhdGljIFN0cmluZyBjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saQogICAg
IGF1dG8gY3J5cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0
b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVz
KGNvbnRlbnQuZGF0YSgpLCBjb250ZW50LnNpemUoKSk7CiAgICAgYXV0byBkaWdlc3QgPSBjcnlw
dG9EaWdlc3QtPmNvbXB1dGVIYXNoKCk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1Ni0i
LCBiYXNlNjRFbmNvZGUoZGlnZXN0LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOworICAgIHJldHVy
biBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChkaWdlc3QuZGF0YSgpLCBkaWdl
c3Quc2l6ZSgpKSk7CiB9CiAKIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01B
Z2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwgTm9kZVRvSWRN
YXAqIG5vZGVzTWFwKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAgUmVmPFByb3RvY29sOjpOZXR3
b3JrOjpXZWJTb2NrZXRGcmFtZT4gYgogICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6V2Vi
U29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQog
ICAgICAgICAuc2V0TWFzayhmcmFtZS5tYXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShm
cmFtZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJh
bWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNlNjRFbmNvZGUoZnJhbWUucGF5
bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpCisgICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFt
ZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUu
cGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQo
ZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpKQogICAgICAgICAuc2V0UGF5bG9h
ZExlbmd0aChmcmFtZS5wYXlsb2FkTGVuZ3RoKQogICAgICAgICAucmVsZWFzZSgpOwogfQpAQCAt
NTg2LDcgKzU4Niw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGEK
ICAgICAgICAgLy8gT2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBhIGRl
Y29kZXIsIGJ1dCBmb3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAgICAg
IC8vIFN5bmMgWEhScyBtYXkgbm90IGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5vbi1z
eW5jIFhIUnMgdXN1YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAgICAg
ICAgaWYgKG1fbG9hZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFyZXNv
dXJjZURhdGEtPmhhc0J1ZmZlcmVkRGF0YSgpICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291
cmNlKCkpCi0gICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChy
ZXF1ZXN0SWQsIGJhc2U2NEVuY29kZShkYXRhLCBkYXRhTGVuZ3RoKSwgdHJ1ZSk7CisgICAgICAg
ICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIG1ha2VT
dHJpbmcoYmFzZTY0RW5jb2RlZChkYXRhLCBkYXRhTGVuZ3RoKSksIHRydWUpOwogICAgIH0KIAog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kYXRhUmVjZWl2ZWQocmVxdWVzdElkLCB0aW1lc3Rh
bXAoKSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGFMZW5ndGgpOwpAQCAtMTAwNCw3ICsxMDA0LDcg
QEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0bwogCiAgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIFdURjo6UGVyc2lzdGVuY2U6OkNvZGVy
PFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZShlbmNvZGVyLCBjZXJ0aWZpY2F0ZS52
YWx1ZSgpKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGVu
Y29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKSk7CiB9CiAKIFdlYlNvY2tldCog
SW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9j
b2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQpAQCAtMTIwMiwxMSArMTIwMiwxMSBA
QCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOCiAgICAgICAgIHJlcXVl
c3Quc2V0SFRUUEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0SGVhZGVycykpOwogICAgIH0K
ICAgICBpZiAoISFwb3N0RGF0YSkgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwot
ICAgICAgICBpZiAoIWJhc2U2NERlY29kZShwb3N0RGF0YSwgYnVmZmVyKSkKKyAgICAgICAgYXV0
byBidWZmZXIgPSBiYXNlNjREZWNvZGUocG9zdERhdGEpOworICAgICAgICBpZiAoIWJ1ZmZlcikK
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZl
biBwb3N0RGF0YSJfcyk7CiAKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShGb3JtRGF0YTo6
Y3JlYXRlKGJ1ZmZlcikpOworICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KEZvcm1EYXRhOjpj
cmVhdGUoV1RGTW92ZSgqYnVmZmVyKSkpOwogICAgIH0KICAgICAvLyBGSVhNRTogZmlndXJlIG91
dCBob3cgdG8gaWRlbnRpZnkgd2hlbiBhIHJlcXVlc3QgaGFzIGJlZW4gb3ZlcnJpZGRlbiB3aGVu
IHdlIGFkZCB0aGlzIHRvIHRoZSBmcm9udGVuZC4KICAgICBwZW5kaW5nUmVxdWVzdC0+Y29udGlu
dWVXaXRoUmVxdWVzdChyZXF1ZXN0KTsKQEAgLTEyNDIsMTEgKzEyNDIsMTEgQEAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gb3ZlcnJpZGVEYXRhOwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1
ZmZlcikpCisgICAgICAgIGF1dG8gYnVmZmVyID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQpOworICAg
ICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5h
YmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zKTsKIAotICAgICAgICBvdmVycmlkZURhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICBvdmVycmlk
ZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVs
c2UKICAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC51
dGY4KCkuZGF0YSgpLCBjb250ZW50LnV0ZjgoKS5sZW5ndGgoKSk7CiAKQEAgLTEyNjgsMTEgKzEy
NjgsMTEgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgogCiAgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAg
ICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShj
b250ZW50LCBidWZmZXIpKQorICAgICAgICBhdXRvIGJ1ZmZlciA9IGJhc2U2NERlY29kZShjb250
ZW50KTsKKyAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfcyk7CiAKLSAgICAgICAgZGF0
YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIGRhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVsc2UKICAg
ICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwg
Y29udGVudC51dGY4KCkubGVuZ3RoKCkpOwogCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCBib29sIElu
c3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3VyCiAgICAgICAgIH0KIAogICAgICAgICAq
YmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGUoYnVm
ZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgKnJlc3VsdCA9IG1ha2VTdHJp
bmcoV1RGOjpiYXNlNjRFbmNvZGVkKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBib29sIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29uCiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZGF0YUNvbnRlbnQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaW5n
JiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0
KQogewogICAgIGlmICh3aXRoQmFzZTY0RW5jb2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNl
NjRFbmNvZGUoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1bHQgPSBtYWtlU3RyaW5nKGJhc2U2
NEVuY29kZWQoZGF0YSwgc2l6ZSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTExMDIsNyArMTEwMiw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG8KICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBh
cmNoaXZlIGZvciBtYWluIGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1
ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgIHJldHVybiBiYXNl
NjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgo
YnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChDRkRh
dGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkp
KSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTE4LDcgKzMxMTgsNyBAQCB1bnNpZ25lZCBsb25nIEZy
YW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTCiAgICAgICAgIEFTU0VSVCghbmV3UmVxdWVzdC5pc051
bGwoKSk7CiAKICAgICAgICAgaWYgKCFkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLm1heWJlTG9hZFN5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNl
LCBkYXRhKSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAgICAgICAg
IFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CiAgICAgICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSgqdGhpcywgaWRl
bnRpZmllciwgbmV3UmVxdWVzdCwgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgb3B0aW9ucywgb3Jp
Z2luYWxSZXF1ZXN0SGVhZGVycywgZXJyb3IsIHJlc3BvbnNlLCBidWZmZXIpOwogICAgICAgICAg
ICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CiAgICAgICAg
ICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLm1heWJlTG9hZEZh
bGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBGZXRjaE9wdGlvbnM7CiBjbGFzcyBXRUJDT1JF
X0VYUE9SVCBMb2FkZXJTdHJhdGVneSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZShGcmFtZSYsIENhY2hlZFJlc291cmNlJiwgUmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0
IFJlc291cmNlTG9hZGVyT3B0aW9ucyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiYmKT4mJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBGZXRj
aE9wdGlvbnMmLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29u
c3QgRmV0Y2hPcHRpb25zJiwgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHBhZ2VMb2FkQ29tcGxldGVkKFBhZ2UmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGJy
b3dzaW5nQ29udGV4dFJlbW92ZWQoRnJhbWUmKSA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL1ByaXZhdGVDbGlja01lYXN1cmVtZW50LmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1ByaXZhdGVDbGlja01lYXN1cmVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDEwICsxODksMTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudDo6RXBoZW1lcmFsUwogewogICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBpZiB3
ZSBjYW4gZG8gd2l0aCBhIHNpbXBsZSBsZW5ndGggY2hlY2sgaW5zdGVhZCBvZiBkZWNvZGluZy4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxOTQ1Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKLSAgICBpZiAoIWJhc2U2NFVSTERlY29kZShub25j
ZSwgZGlnZXN0KSkKKyAgICBhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShub25jZSk7Cisg
ICAgaWYgKCFkaWdlc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZGlnZXN0
LnNpemUoKSA9PSBFcGhlbWVyYWxTb3VyY2VOb25jZVJlcXVpcmVkTnVtYmVyT2ZCeXRlczsKKyAg
ICByZXR1cm4gZGlnZXN0LT5zaXplKCkgPT0gRXBoZW1lcmFsU291cmNlTm9uY2VSZXF1aXJlZE51
bWJlck9mQnl0ZXM7CiB9CiAKIHZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OnNldEVwaGVt
ZXJhbFNvdXJjZU5vbmNlKEVwaGVtZXJhbFNvdXJjZU5vbmNlJiYgbm9uY2UpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDE0ICs2OSwxNSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgCiAgICAgaWYgKGJ1ZmZl
ci5wb3NpdGlvbigpID09IGJlZ2luSGFzaFZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKICAgICBTdHJpbmdWaWV3IGhhc2hW
YWx1ZShiZWdpbkhhc2hWYWx1ZSwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbkhhc2hWYWx1ZSk7
Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoaGFzaFZhbHVlLCBkaWdlc3QsIEJhc2U2NFZhbGlkYXRl
UGFkZGluZykpIHsKLSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoaGFzaFZhbHVlLCBkaWdl
c3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CiAKLSAgICByZXR1
cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgV1RGTW92ZShkaWdl
c3QpIH07CisgICAgaWYgKGF1dG8gZGlnZXN0ID0gYmFzZTY0RGVjb2RlKGhhc2hWYWx1ZSwgQmFz
ZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsK
KworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShoYXNoVmFsdWUpKQorICAg
ICAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgV1RG
TW92ZSgqZGlnZXN0KSB9OworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogT3B0aW9u
YWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3Qo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIGJ1ZmZlcikKQEAgLTEyNCwxMyArMTI1LDEzIEBA
IE9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWcKIAogT3B0aW9uYWw8UmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0KGNvbnN0IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QmIGVuY29k
ZWREaWdlc3QpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKLSAgICBpZiAoIWJhc2U2
NERlY29kZShlbmNvZGVkRGlnZXN0LmRpZ2VzdCwgZGlnZXN0LCBCYXNlNjRWYWxpZGF0ZVBhZGRp
bmcpKSB7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGVuY29kZWREaWdlc3QuZGlnZXN0
LCBkaWdlc3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CisgICAg
aWYgKGF1dG8gZGlnZXN0ID0gYmFzZTY0RGVjb2RlKGVuY29kZWREaWdlc3QuZGlnZXN0LCBCYXNl
NjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICByZXR1cm4gUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERpZ2VzdC5hbGdvcml0aG0sIFdURk1vdmUo
KmRpZ2VzdCkgfTsKKworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShlbmNv
ZGVkRGlnZXN0LmRpZ2VzdCkpCisgICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QgeyBlbmNvZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZSgqZGlnZXN0KSB9OwogCi0g
ICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGVuY29kZWREaWdlc3QuYWxn
b3JpdGhtLCBXVEZNb3ZlKGRpZ2VzdCkgfTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
CiBzdGF0aWMgUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobSB0b0NyeXB0b0RpZ2VzdEFsZ29y
aXRobShSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG0pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1M
QXJjaGl2ZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw5ICsx
NjcsNyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlCiAKICAgICBm
b3IgKGF1dG8mIHJlc291cmNlIDogcmVzb3VyY2VzKSB7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
Y2xlYXIoKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNvdXJjZUJvdW5k
YXJ5KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQtVHlwZTogIik7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291cmNlLm1pbWVUeXBlKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNvdXJjZUJvdW5kYXJ5LCAiQ29udGVudC1UeXBl
OiAiLCByZXNvdXJjZS5taW1lVHlwZSk7CiAKICAgICAgICAgY29uc3QgY2hhciogY29udGVudEVu
Y29kaW5nID0gbnVsbHB0cjsKICAgICAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSmF2YVNjcmlwdE1JTUVUeXBlKHJlc291cmNlLm1pbWVUeXBlKSB8fCBNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUocmVzb3VyY2UubWltZVR5cGUpKQpAQCAt
MTc3LDExICsxNzUsNyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRl
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZyA9IGJhc2U2NDsKIAot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rp
bmc6ICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjb250ZW50RW5jb2RpbmcpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtTG9jYXRpb246ICIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyZXNvdXJjZS51cmwuc3RyaW5nKCkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcblxyXG4iKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIlxyXG5Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAiLCBjb250ZW50RW5j
b2RpbmcsICJcclxuQ29udGVudC1Mb2NhdGlvbjogIiwgcmVzb3VyY2UudXJsLnN0cmluZygpLCAi
XHJcblxyXG4iKTsKIAogICAgICAgICBhc2NpaVN0cmluZyA9IHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKS51dGY4KCk7CiAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEo
KSwgYXNjaWlTdHJpbmcubGVuZ3RoKCkpOwpAQCAtMTg5LDE1ICsxODMsMTYgQEAgUmVmPFNoYXJl
ZEJ1ZmZlcj4gTUhUTUxBcmNoaXZlOjpnZW5lcmF0ZQogICAgICAgICAvLyBGSVhNRTogaWRlYWxs
eSB3ZSB3b3VsZCBlbmNvZGUgdGhlIGNvbnRlbnQgYXMgYSBzdHJlYW0gd2l0aG91dCBoYXZpbmcg
dG8gZmV0Y2ggaXQgYWxsLgogICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gcmVzb3VyY2UuZGF0
YS0+ZGF0YSgpOwogICAgICAgICBzaXplX3QgZGF0YUxlbmd0aCA9IHJlc291cmNlLmRhdGEtPnNp
emUoKTsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOworICAgICAgICBWZWN0b3I8
dWludDhfdD4gZW5jb2RlZERhdGE7CiAgICAgICAgIGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGlu
ZywgcXVvdGVkUHJpbnRhYmxlKSkgewotICAgICAgICAgICAgcXVvdGVkUHJpbnRhYmxlRW5jb2Rl
KGRhdGEsIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhKTsKKyAgICAgICAgICAgIGVuY29kZWREYXRh
ID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRh
dGEpLCBkYXRhTGVuZ3RoKTsKICAgICAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGVuY29kZWRE
YXRhLmRhdGEoKSwgZW5jb2RlZERhdGEuc2l6ZSgpKTsKICAgICAgICAgICAgIG1odG1sRGF0YS0+
YXBwZW5kKCJcclxuIiwgMik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQo
IXN0cmNtcChjb250ZW50RW5jb2RpbmcsIGJhc2U2NCkpOwogICAgICAgICAgICAgLy8gV2UgYXJl
IG5vdCBzcGVjaWZ5aW5nIGluc2VydExGcyA9IHRydWUgYmVsb3cgYXMgaXQgd291bGQgY3V0IHRo
ZSBsaW5lcyB3aXRoIExGcyBhbmQgTUhUTUwgcmVxdWlyZXMgQ1JMRnMuCi0gICAgICAgICAgICBi
YXNlNjRFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGEpOworICAgICAgICAgICAg
aWYgKGF1dG8gYmFzZTY0RW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGUoZGF0YSwgZGF0YUxlbmd0
aCkpCisgICAgICAgICAgICAgICAgZW5jb2RlZERhdGEgPSBXVEZNb3ZlKCpiYXNlNjRFbmNvZGVk
RGF0YSk7CiAgICAgICAgICAgICBjb25zdCBzaXplX3QgbWF4aW11bUxpbmVMZW5ndGggPSA3NjsK
ICAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IDA7CiAgICAgICAgICAgICBzaXplX3QgZW5jb2Rl
ZERhdGFMZW5ndGggPSBlbmNvZGVkRGF0YS5zaXplKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MiwxNiArMTkyLDE5IEBAIFJlZlB0cjxBcmNoaXZl
UmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCi0gICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAg
ICAgc3dpdGNoIChtaW1lSGVhZGVyLmNvbnRlbnRUcmFuc2ZlckVuY29kaW5nKCkpIHsKLSAgICBj
YXNlIE1JTUVIZWFkZXI6OkJhc2U2NDoKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVu
dC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCksIGRhdGEpKSB7CisgICAgY2FzZSBNSU1FSGVhZGVy
OjpCYXNlNjQ6IHsKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250
ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGlmICghZGVjb2RlZERhdGEp
IHsKICAgICAgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBiYXNlNjQgY29udGVudCBmb3IgTUhU
TUwgcGFydC4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CisgICAg
ICAgIGRhdGEgPSBXVEZNb3ZlKCpkZWNvZGVkRGF0YSk7CiAgICAgICAgIGJyZWFrOworICAgIH0K
ICAgICBjYXNlIE1JTUVIZWFkZXI6OlF1b3RlZFByaW50YWJsZToKLSAgICAgICAgcXVvdGVkUHJp
bnRhYmxlRGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+c2l6ZSgpLCBkYXRhKTsKKyAg
ICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURlY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihjb250ZW50LT5kYXRhKCkpLCBjb250ZW50LT5zaXplKCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIE1JTUVIZWFkZXI6OlNldmVuQml0OgogICAgIGNhc2UgTUlNRUhlYWRl
cjo6QmluYXJ5OgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NvY29hL1ByaXZhdGVDbGlj
a01lYXN1cmVtZW50Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0JKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENv
Y29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAgYm9vbCBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogewogI2lmIEhBVkUoUlNBX0JTU0EpCiAgICAgewot
ICAgICAgICBWZWN0b3I8dWludDhfdD4gc2VydmVyUHVibGljS2V5RGF0YTsKLSAgICAgICAgaWYg
KCFiYXNlNjRVUkxEZWNvZGUoc2VydmVyUHVibGljS2V5QmFzZTY0VVJMLCBzZXJ2ZXJQdWJsaWNL
ZXlEYXRhKSkKKyAgICAgICAgYXV0byBzZXJ2ZXJQdWJsaWNLZXlEYXRhID0gYmFzZTY0VVJMRGVj
b2RlKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCk7CisgICAgICAgIGlmICghc2VydmVyUHVibGlj
S2V5RGF0YSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byBzZXJ2ZXJQ
dWJsaWNLZXkgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZlclB1
YmxpY0tleURhdGEuZGF0YSgpIGxlbmd0aDpzZXJ2ZXJQdWJsaWNLZXlEYXRhLnNpemUoKV0pOwor
ICAgICAgICBhdXRvIHNlcnZlclB1YmxpY0tleSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGlu
aXRXaXRoQnl0ZXM6c2VydmVyUHVibGljS2V5RGF0YS0+ZGF0YSgpIGxlbmd0aDpzZXJ2ZXJQdWJs
aWNLZXlEYXRhLT5zaXplKCldKTsKIAogICAgICAgICAvLyBGSVhNRSgyMjIwMTgpOiBDaGVjayBl
cnJvci4KICAgICAgICAgbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4uYmxpbmRlciA9IGFkb3B0TlMo
W1BBTDo6YWxsb2NSU0FCU1NBVG9rZW5CbGluZGVySW5zdGFuY2UoKSBpbml0V2l0aFB1YmxpY0tl
eTpzZXJ2ZXJQdWJsaWNLZXkuZ2V0KCkgZXJyb3I6bnVsbHB0cl0pOwpAQCAtNTAsNyArNTAsNyBA
QCBib29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBCiAgICAgaWYgKCFtX3Nv
dXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIG1fc291cmNlVW5saW5rYWJsZVRva2VuLnZhbHVlQmFzZTY0VVJMID0gV1RGOjpiYXNl
NjRVUkxFbmNvZGUoW21fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBibGluZGVk
TWVzc2FnZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4gYmxp
bmRlZE1lc3NhZ2VdLmxlbmd0aCk7CisgICAgbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4udmFsdWVC
YXNlNjRVUkwgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW21fc291cmNlVW5saW5rYWJs
ZVRva2VuLndhaXRpbmdUb2tlbiBibGluZGVkTWVzc2FnZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlu
a2FibGVUb2tlbi53YWl0aW5nVG9rZW4gYmxpbmRlZE1lc3NhZ2VdLmxlbmd0aCkpOwogICAgIHJl
dHVybiB0cnVlOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2VydmVyUHVibGljS2V5QmFzZTY0
VVJMKTsKQEAgLTY1LDEwICs2NSwxMCBAQCBib29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50Ojpj
YWxjdWxhdGVBCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHsKLSAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHNlcnZlclJlc3BvbnNlRGF0YTsKLSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNv
ZGUoc2VydmVyUmVzcG9uc2VCYXNlNjRVUkwsIHNlcnZlclJlc3BvbnNlRGF0YSkpCisgICAgICAg
IGF1dG8gc2VydmVyUmVzcG9uc2VEYXRhID0gYmFzZTY0VVJMRGVjb2RlKHNlcnZlclJlc3BvbnNl
QmFzZTY0VVJMKTsKKyAgICAgICAgaWYgKCFzZXJ2ZXJSZXNwb25zZURhdGEpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gc2VydmVyUmVzcG9uc2UgPSBhZG9wdE5TKFtb
TlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZlclJlc3BvbnNlRGF0YS5kYXRhKCkgbGVu
Z3RoOnNlcnZlclJlc3BvbnNlRGF0YS5zaXplKCldKTsKKyAgICAgICAgYXV0byBzZXJ2ZXJSZXNw
b25zZSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2VydmVyUmVzcG9u
c2VEYXRhLT5kYXRhKCkgbGVuZ3RoOnNlcnZlclJlc3BvbnNlRGF0YS0+c2l6ZSgpXSk7CiAKICAg
ICAgICAgLy8gRklYTUUoMjIyMDE4KTogQ2hlY2sgZXJyb3IuCiAgICAgICAgIG1fc291cmNlVW5s
aW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gPSBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGlu
Z1Rva2VuIGFjdGl2YXRlVG9rZW5XaXRoU2VydmVyUmVzcG9uc2U6c2VydmVyUmVzcG9uc2UuZ2V0
KCkgZXJyb3I6bnVsbHB0cl07CkBAIC03Nyw5ICs3Nyw5IEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ6OmNhbGN1bGF0ZUEKICAgICB9CiAKICAgICBTb3VyY2VTZWNyZXRUb2tlbiB0b2tl
bjsKLSAgICB0b2tlbi50b2tlbkJhc2U2NFVSTCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKFttX3Nv
dXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHRva2VuQ29udGVudF0uYnl0ZXMsIFttX3Nv
dXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHRva2VuQ29udGVudF0ubGVuZ3RoKTsKLSAg
ICB0b2tlbi5rZXlJREJhc2U2NFVSTCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKFttX3NvdXJjZVVu
bGlua2FibGVUb2tlbi5yZWFkeVRva2VuIGtleUlkXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJs
ZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRdLmxlbmd0aCk7Ci0gICAgdG9rZW4uc2lnbmF0dXJlQmFz
ZTY0VVJMID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJl
YWR5VG9rZW4gc2lnbmF0dXJlXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5
VG9rZW4gc2lnbmF0dXJlXS5sZW5ndGgpOworICAgIHRva2VuLnRva2VuQmFzZTY0VVJMID0gbWFr
ZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRv
a2VuIHRva2VuQ29udGVudF0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRv
a2VuIHRva2VuQ29udGVudF0ubGVuZ3RoKSk7CisgICAgdG9rZW4ua2V5SURCYXNlNjRVUkwgPSBt
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5
VG9rZW4ga2V5SWRdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBr
ZXlJZF0ubGVuZ3RoKSk7CisgICAgdG9rZW4uc2lnbmF0dXJlQmFzZTY0VVJMID0gbWFrZVN0cmlu
ZyhiYXNlNjRVUkxFbmNvZGVkKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHNp
Z25hdHVyZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHNpZ25h
dHVyZV0ubGVuZ3RoKSk7CiAKICAgICBtX3NvdXJjZVNlY3JldFRva2VuID0gV1RGTW92ZSh0b2tl
bik7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Jhc2U2NFV0
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGls
aXRpZXMuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Jhc2U2
NFV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgRXhjZXB0aW9u
T3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmJ0bwogICAgIGlmICghc3RyaW5nVG9FbmNvZGUu
aXNBbGxMYXRpbjEoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRDaGFyYWN0
ZXJFcnJvciB9OwogCi0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShzdHJpbmdUb0VuY29kZS5sYXRp
bjEoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChzdHJpbmdUb0VuY29k
ZS5sYXRpbjEoKSkpOwogfQogCiBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6
YXRvYihjb25zdCBTdHJpbmcmIGVuY29kZWRTdHJpbmcpCkBAIC00NiwxMSArNDYsMTEgQEAgRXhj
ZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0bwogICAgIGlmIChlbmNvZGVkU3Ry
aW5nLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBWZWN0b3I8Y2hh
cj4gb3V0OwotICAgIGlmICghYmFzZTY0RGVjb2RlKGVuY29kZWRTdHJpbmcsIG91dCwgQmFzZTY0
VmFsaWRhdGVQYWRkaW5nIHwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgfCBCYXNlNjRE
aXNjYXJkVmVydGljYWxUYWIpKQorICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUo
ZW5jb2RlZFN0cmluZywgeyBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcsIEJh
c2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzLCBCYXNlNjREZWNvZGVP
cHRpb25zOjpEaXNjYXJkVmVydGljYWxUYWIgfSk7CisgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRDaGFyYWN0ZXJFcnJvciB9OwogCi0gICAg
cmV0dXJuIFN0cmluZyhvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpKTsKKyAgICByZXR1cm4gU3RyaW5n
KGRlY29kZWREYXRhLT5kYXRhKCksIGRlY29kZWREYXRhLT5zaXplKCkpOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NDgsOSArMTg0OCw4IEBAIHZvaWQgUGFn
ZTo6dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQKICAgICBpZiAodXJsLnByb3RvY29sSXNE
YXRhKCkgJiYgdXJsLnN0cmluZygpLnN0YXJ0c1dpdGgoImRhdGE6dGV4dC9jc3M7Y2hhcnNldD11
dGYtODtiYXNlNjQsIikpIHsKICAgICAgICAgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQgPSB0cnVl
OwogCi0gICAgICAgIFZlY3RvcjxjaGFyPiBzdHlsZVNoZWV0QXNVVEY4OwotICAgICAgICBpZiAo
YmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vic3Ry
aW5nKDM1KSksIHN0eWxlU2hlZXRBc1VURjgsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVz
KSkKLSAgICAgICAgICAgIG1fdXNlclN0eWxlU2hlZXQgPSBTdHJpbmc6OmZyb21VVEY4KHN0eWxl
U2hlZXRBc1VURjguZGF0YSgpLCBzdHlsZVNoZWV0QXNVVEY4LnNpemUoKSk7CisgICAgICAgIGlm
IChhdXRvIHN0eWxlU2hlZXRBc1VURjggPSBiYXNlNjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2Vx
dWVuY2VzKHVybC5zdHJpbmcoKS5zdWJzdHJpbmcoMzUpKSwgQmFzZTY0RGVjb2RlT3B0aW9uczo6
SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpKQorICAgICAgICAgICAgbV91c2VyU3R5bGVTaGVldCA9
IFN0cmluZzo6ZnJvbVVURjgoc3R5bGVTaGVldEFzVVRGOC0+ZGF0YSgpLCBzdHlsZVNoZWV0QXNV
VEY4LT5zaXplKCkpOwogICAgIH0KIAogICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQm
IGRvY3VtZW50KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsMTEgQEAgdm9pZCBTaGFyZWRC
dWZmZXI6OmFwcGVuZChjb25zdCBjaGFyKiBkYQogICAgIEFTU0VSVChpbnRlcm5hbGx5Q29uc2lz
dGVudCgpKTsKIH0KIAordm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIGFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihkYXRhKSwgbGVuZ3RoKTsKK30KKwogdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChW
ZWN0b3I8Y2hhcj4mJiBkYXRhKQogewogICAgIEFTU0VSVCghbV9oYXNCZWVuQ29tYmluZWRJbnRv
T25lU2VnbWVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAko
cmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGFwcGVuZChjb25zdCBTaGFyZWRCdWZmZXImKTsKICAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFy
Kiwgc2l6ZV90KTsKKyAgICB2b2lkIGFwcGVuZChjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKICAg
ICB2b2lkIGFwcGVuZChWZWN0b3I8Y2hhcj4mJik7CiAKICAgICB2b2lkIGNsZWFyKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVh
cktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEyICs3OSwxNSBAQCBzdGF0aWMgT3B0aW9uYWw8VmVj
dG9yPFJlZlB0cjxLZXlIYW5kbGU+CiAgICAgICAgICAgICBpZiAoIWtleVZhbHVlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgS2V5SURUeXBlIGtleUlERGF0
YTsKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlIYW5kbGVWYWx1ZURhdGE7Ci0gICAg
ICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7IGtleUlERGF0YSB9KSB8
fCAhV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5SGFuZGxlVmFsdWVEYXRhIH0p
KQorICAgICAgICAgICAgYXV0byBrZXlJRERhdGEgPSBiYXNlNjRVUkxEZWNvZGUoa2V5SUQpOwor
ICAgICAgICAgICAgaWYgKCFrZXlJRERhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgICAgIGF1dG8ga2V5SGFuZGxlVmFsdWVEYXRhID0gYmFzZTY0
VVJMRGVjb2RlKGtleVZhbHVlKTsKKyAgICAgICAgICAgIGlmICgha2V5SGFuZGxlVmFsdWVEYXRh
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgZGVjb2RlZEtl
eXMuYXBwZW5kKEtleUhhbmRsZTo6Y3JlYXRlKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVz
OjpVc2FibGUsIFdURk1vdmUoa2V5SUREYXRhKSwgV1RGTW92ZShrZXlIYW5kbGVWYWx1ZURhdGEp
KSk7CisgICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5SGFuZGxlOjpjcmVhdGUoQ0RN
SW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZSgqa2V5SUREYXRhKSwg
V1RGTW92ZSgqa2V5SGFuZGxlVmFsdWVEYXRhKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0pOwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC0yMTUsOCArMjE4LDcgQEAg
c3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGV4dHJhY3RLZXlpZHNGcgogICAgIC8vICJraWRzIgog
ICAgIC8vIEFuIGFycmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMg
dGhlIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0
aGUga2V5IElEIHZhbHVlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlJZENvdW50
OyBpKyspIHsKLSAgICAgICAgU3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRh
dGFbaW5kZXhdLCBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlcyk7Ci0gICAgICAgIGtleUlkc0Fy
cmF5LT5wdXNoU3RyaW5nKGtleUlkKTsKKyAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmco
bWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCZkYXRhW2luZGV4XSwgQ2xlYXJLZXk6OktleUlE
U2l6ZUluQnl0ZXMpKSk7CiAgICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5
dGVzOwogICAgIH0KIApAQCAtMjQzLDggKzI0NSw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBleHRyYWN0S2V5SWRGcm8KICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgSlNPTiBvYmplY3QgY29u
dGFpbmluZyB0aGUgZm9sbG93aW5nIG1lbWJlcnM6CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4g
YXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0
dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQg
dmFsdWUuCi0gICAgU3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoaW5pdERhdGEu
ZGF0YSgpLCBpbml0RGF0YS5zaXplKCkpOwotICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGtl
eUlkKTsKKyAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoaW5pdERhdGEuZGF0YSgpLCBpbml0RGF0YS5zaXplKCkpKSk7CiAKICAgICBvYmplY3Qt
PnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNBcnJheSkpOwogICAgIENTdHJpbmcganNv
bkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKQEAgLTU4Nyw3ICs1ODgsNyBA
QCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAgICAgICAgICAgICBh
dXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBrZXkgOiBtX2tleVN0b3JlKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGtleS0+
aWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAg
ICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShrZXkt
PmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgYXJyYXkt
PnB1c2hTdHJpbmcobWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKGtleS0+aWQoKS5kYXRhKCks
IGtleS0+aWQoKS5zaXplKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2Jq
ZWN0LT5zZXRBcnJheSgia2lkcyIsIFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5
U3RyZWFtaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RN
RmFpclBsYXlTdHJlYW1pbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTEgKzExMywxMSBA
QCBzdGF0aWMgVmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+PiBleHRyYWN0CiAgICAgICAgIGlmICgh
a2V5SUQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBWZWN0b3I8Y2hhcj4gc2lu
ZkRhdGE7Ci0gICAgICAgIGlmICghV1RGOjpiYXNlNjREZWNvZGUoa2V5SUQsIHsgc2luZkRhdGEg
fSwgV1RGOjpCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykpCisgICAgICAgIGF1dG8gc2lu
ZkRhdGEgPSBiYXNlNjREZWNvZGUoa2V5SUQsIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNw
YWNlc0FuZE5ld0xpbmVzKTsKKyAgICAgICAgaWYgKCFzaW5mRGF0YSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIHNpbmZzLnVuY2hlY2tlZEFwcGVuZChTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShXVEZNb3ZlKHNpbmZEYXRhKSkpOworICAgICAgICBzaW5mcy51bmNoZWNrZWRBcHBlbmQo
U2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqc2luZkRhdGEpKSk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHNpbmZzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0JKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC03MTUsNyArNzE1LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVh
bWluZwogICAgICAgICBpZGVudGlmaWVyID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0
V2l0aERhdGE6aW5pdERhdGEtPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGVuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nXSk7CiAjaWYgSEFWRShGQUlSUExBWVNUUkVBTUlOR19DRU5DX0lOSVREQVRB
KQogICAgIGVsc2UgaWYgKGluaXREYXRhVHlwZSA9PSBJbml0RGF0YVJlZ2lzdHJ5OjpjZW5jTmFt
ZSgpKSB7Ci0gICAgICAgIFN0cmluZyBwc3NoU3RyaW5nID0gYmFzZTY0RW5jb2RlKGluaXREYXRh
LT5kYXRhKCksIGluaXREYXRhLT5zaXplKCkpOworICAgICAgICBhdXRvIHBzc2hTdHJpbmcgPSBt
YWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoaW5pdERhdGEtPmRhdGEoKSwgaW5pdERhdGEtPnNpemUo
KSkpOwogICAgICAgICBpbml0aWFsaXphdGlvbkRhdGEgPSBbTlNKU09OU2VyaWFsaXphdGlvbiBk
YXRhV2l0aEpTT05PYmplY3Q6QHsgQCJwc3NoIjogKE5TU3RyaW5nKilwc3NoU3RyaW5nIH0gb3B0
aW9uczpOU0pTT05Xcml0aW5nUHJldHR5UHJpbnRlZCBlcnJvcjpuaWxdOwogICAgIH0KICNlbmRp
ZgpAQCAtODUwLDExICs4NTAsMTEgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0
cmVhbWluZwogICAgICAgICAgICAgaWYgKCFrZXlJRFN0cmluZykKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlJRFZlY3RvcjsK
LSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGtleUlEU3RyaW5nLCBrZXlJRFZlY3Rvcikp
CisgICAgICAgICAgICBhdXRvIGtleUlEVmVjdG9yID0gYmFzZTY0RGVjb2RlKGtleUlEU3RyaW5n
KTsKKyAgICAgICAgICAgIGlmIChrZXlJRFZlY3RvcikKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgICAgIGF1dG8ga2V5SUQgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShX
VEZNb3ZlKGtleUlEVmVjdG9yKSk7CisgICAgICAgICAgICBhdXRvIGtleUlEID0gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoV1RGTW92ZSgqa2V5SURWZWN0b3IpKTsKICAgICAgICAgICAgIGF1dG8gZm91
bmRJbmRleCA9IG1fY3VycmVudFJlcXVlc3QudmFsdWUoKS5yZXF1ZXN0cy5maW5kTWF0Y2hpbmco
WyZdIChhdXRvJiByZXF1ZXN0KSB7CiAgICAgICAgICAgICAgICAgYXV0byBrZXlJRHMgPSBrZXlJ
RHNGb3JSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBrZXlJ
RHMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBSZWY8U2hhcmVkQnVmZmVyPiYgaWQpIHsKQEAgLTg4
NSwxMCArODg1LDEwIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcK
ICAgICAgICAgICAgICAgICBhdXRvIHBheWxvYWRTdHJpbmcgPSBwYXlsb2FkRmluZFJlc3VsdHMt
PnZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZFN0cmluZykK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBwYXlsb2FkVmVjdG9yOwotICAgICAgICAgICAgICAgIGlmICghYmFzZTY0RGVj
b2RlKHBheWxvYWRTdHJpbmcsIHBheWxvYWRWZWN0b3IpKQorICAgICAgICAgICAgICAgIGF1dG8g
cGF5bG9hZFZlY3RvciA9IGJhc2U2NERlY29kZShwYXlsb2FkU3RyaW5nKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXBheWxvYWRWZWN0b3IpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBhdXRvIHBheWxvYWREYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVh
dGUoV1RGTW92ZShwYXlsb2FkVmVjdG9yKSk7CisgICAgICAgICAgICAgICAgYXV0byBwYXlsb2Fk
RGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKnBheWxvYWRWZWN0b3IpKTsKICAg
ICAgICAgICAgICAgICBbcmVxdWVzdCBwcm9jZXNzQ29udGVudEtleVJlc3BvbnNlOltQQUw6Omdl
dEFWQ29udGVudEtleVJlc3BvbnNlQ2xhc3MoKSBjb250ZW50S2V5UmVzcG9uc2VXaXRoRmFpclBs
YXlTdHJlYW1pbmdLZXlSZXNwb25zZURhdGE6cGF5bG9hZERhdGEtPmNyZWF0ZU5TRGF0YSgpLmdl
dCgpXV07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExOTUs
OCArMTE5NSw4IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAg
ICAgICAgICAgIGF1dG8gZW50cnkgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAg
ICAgYXV0byYga2V5SUQgPSByZXF1ZXN0RGF0YS5maXJzdDsKICAgICAgICAgICAgIGF1dG8mIHBh
eWxvYWQgPSByZXF1ZXN0RGF0YS5zZWNvbmQ7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5n
KCJrZXlJRCIsIGJhc2U2NEVuY29kZShrZXlJRC0+ZGF0YSgpLCBrZXlJRC0+c2l6ZSgpKSk7Ci0g
ICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJwYXlsb2FkIiwgYmFzZTY0RW5jb2RlKHBheWxv
YWQuZ2V0KCkuYnl0ZXMsIHBheWxvYWQuZ2V0KCkubGVuZ3RoKSk7CisgICAgICAgICAgICBlbnRy
eS0+c2V0U3RyaW5nKCJrZXlJRCIsIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChrZXlJRC0+ZGF0
YSgpLCBrZXlJRC0+c2l6ZSgpKSkpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygicGF5
bG9hZCIsIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChwYXlsb2FkLmdldCgpLmJ5dGVzLCBwYXls
b2FkLmdldCgpLmxlbmd0aCkpKTsKICAgICAgICAgICAgIHJlcXVlc3RKU09OLT5wdXNoT2JqZWN0
KFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgfQogICAgICAgICBhdXRvIHJlcXVlc3RCdWZmZXIg
PSB1dGY4QnVmZmVyKHJlcXVlc3RKU09OLT50b0pTT05TdHJpbmcoKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMCArMTMwLDcgQEAgU3RyaW5nIEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjp0b0RhdGFVUgogICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gImRhdGE6LCI7CiAKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsK
LSAgICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUo
KSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5
cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2Rl
ZEltYWdlLnNpemUoKSkpOwogfQogCiBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMCArMTc0LDcgQEAgc3Rh
dGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogCiBTdHJpbmcgZGF0YVVSTChD
RkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICBWZWN0b3I8Y2hh
cj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwg
Q0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToi
ICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICByZXR1cm4gbWFrZVN0
cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChDRkRhdGFH
ZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSkpKTsKIH0KIAogU3RyaW5nIGRh
dGFVUkwoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAs
NyArMTAwLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCiAgICAgR1VJ
RCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsKIAotICAgIFN0cmluZyBm
b250TmFtZSA9IGJhc2U2NEVuY29kZShyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQp
LCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZvbnROYW1lID0gbWFrZVN0cmluZyhiYXNl
NjRFbmNvZGVkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250
VXVpZCkpKTsKICAgICBBU1NFUlQoZm9udE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7CiAg
ICAgcmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGFDYWlyby5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVlRm9udE5hbWUo
KQogICAgIEdVSUQgZm9udFV1aWQ7CiAgICAgQ29DcmVhdGVHdWlkKCZmb250VXVpZCk7CiAKLSAg
ICBTdHJpbmcgZm9udE5hbWUgPSBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
JmZvbnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSk7CisgICAgYXV0byBmb250TmFtZSA9IG1ha2VT
dHJpbmcoYmFzZTY0RW5jb2RlZChyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBz
aXplb2YoZm9udFV1aWQpKSk7CiAgICAgQVNTRVJUKGZvbnROYW1lLmxlbmd0aCgpIDwgTEZfRkFD
RVNJWkUpOwogICAgIHJldHVybiBmb250TmFtZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQkocmV2aXNpb24gMjc3NTY5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw3IEBAIHN0YXRpYyBTdHJpbmcgc2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmcKICAgICBpZiAoU2VjQXNuMUVuY29kZUl0ZW0oY29kZXIsICZzaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UsIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVRlbXBs
YXRlLCAmZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSkgIT0gbm9FcnIpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoZW5jb2RlZFNp
Z25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5k
Q2hhbGxlbmdlLkxlbmd0aCk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChl
bmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkRhdGEsIGVuY29kZWRTaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2UuTGVuZ3RoKSk7CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnlJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyBSZWY8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZUJsb2JS
ZXMKICAgICByZXR1cm4gYmxvYlJlZ2lzdHJ5KCkuYmxvYlJlZ2lzdHJ5SW1wbCgpLT5jcmVhdGVS
ZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQpOwogfQogCi1zdGF0aWMgdm9pZCBsb2FkQmxv
YlJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3Im
IGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQor
c3RhdGljIHZvaWQgbG9hZEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRl
eHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBhdXRvKiBibG9iRGF0YSA9IGJsb2JSZWdpc3Ry
eSgpLmJsb2JSZWdpc3RyeUltcGwoKS0+Z2V0QmxvYkRhdGFGcm9tVVJMKHJlcXVlc3QudXJsKCkp
OwogICAgIEJsb2JSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShibG9i
RGF0YSwgcmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxv
YlJlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBuYW1l
c3BhY2UgewogCiBjbGFzcyBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlciA6IHB1YmxpYyBS
ZXNvdXJjZUhhbmRsZUNsaWVudCB7CiBwdWJsaWM6Ci0gICAgQmxvYlJlc291cmNlU3luY2hyb25v
dXNMb2FkZXIoUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4m
KTsKKyAgICBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiwgUmVz
b3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYpOwogCiAgICAgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVzcG9uc2UmJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKICAgICB2b2lkIGRpZEZhaWwoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgZmluYWw7CkBAIC04NSwxMCArODUsMTAgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBSZXNvdXJjZUVycm9yJiBtX2Vycm9yOwogICAgIFJlc291
cmNlUmVzcG9uc2UmIG1fcmVzcG9uc2U7Ci0gICAgVmVjdG9yPGNoYXI+JiBtX2RhdGE7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+JiBtX2RhdGE7CiB9OwogCi1CbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xv
YWRlcjo6QmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYgZXJyb3Is
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCitCbG9iUmVz
b3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6QmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIoUmVz
b3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWlu
dDhfdD4mIGRhdGEpCiAgICAgOiBtX2Vycm9yKGVycm9yKQogICAgICwgbV9yZXNwb25zZShyZXNw
b25zZSkKICAgICAsIG1fZGF0YShkYXRhKQpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgQmxvYlJl
c291cmNlU3luY2hyb25vdXNMb2FkZXI6OmRpZFIKIAogICAgIC8vIFJlYWQgYWxsIHRoZSBkYXRh
LgogICAgIG1fZGF0YS5yZXNpemUoc3RhdGljX2Nhc3Q8c2l6ZV90PihyZXNwb25zZS5leHBlY3Rl
ZENvbnRlbnRMZW5ndGgoKSkpOwotICAgIHN0YXRpY19jYXN0PEJsb2JSZXNvdXJjZUhhbmRsZSo+
KGhhbmRsZSktPnJlYWRTeW5jKG1fZGF0YS5kYXRhKCksIHN0YXRpY19jYXN0PGludD4obV9kYXRh
LnNpemUoKSkpOworICAgIHN0YXRpY19jYXN0PEJsb2JSZXNvdXJjZUhhbmRsZSo+KGhhbmRsZSkt
PnJlYWRTeW5jKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fZGF0YS5kYXRhKCkpLCBzdGF0aWNf
Y2FzdDxpbnQ+KG1fZGF0YS5zaXplKCkpKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQog
CkBAIC0xNDEsNyArMTQxLDcgQEAgUmVmPEJsb2JSZXNvdXJjZUhhbmRsZT4gQmxvYlJlc291cmNl
SGFuZAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJsb2JSZXNvdXJjZUhhbmRsZShibG9iRGF0
YSwgcmVxdWVzdCwgY2xpZW50LCB0cnVlKSk7CiB9CiAKLXZvaWQgQmxvYlJlc291cmNlSGFuZGxl
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEJsb2JEYXRhKiBibG9iRGF0YSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgQmxvYlJlc291cmNlSGFu
ZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEJsb2JEYXRhKiBibG9iRGF0YSwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBpZiAoIWVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHJlcXVlc3QuaHR0cE1ldGhvZCgpLCAiZ2V0Iikp
IHsKICAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKHdlYktpdEJsb2JSZXNvdXJjZURvbWFp
biwgc3RhdGljX2Nhc3Q8aW50PihFcnJvcjo6TWV0aG9kTm90QWxsb3dlZCksIHJlc3BvbnNlLnVy
bCgpLCAiUmVxdWVzdCBtZXRob2QgbXVzdCBiZSBHRVQiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3Vy
Y2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBCbG9iUmVz
b3VyY2VIYW5kbGUgZmluYWwgOiBwdWJsaWMgCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxCbG9i
UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZUFzeW5jKEJsb2JEYXRhKiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKTsKIAotICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoQmxvYkRhdGEqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNv
dXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisgICAg
c3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PHVpbnQ4X3Q+JiBkYXRhKTsKIAogICAgIHZvaWQgc3RhcnQoKTsKICAgICBpbnQgcmVhZFN5bmMo
Y2hhciosIGludCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRl
bnRpYWxCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDcmVkZW50aWFsQmFzZS5oIgogCiAjaW5jbHVkZSAi
Q3JlZGVudGlhbC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTk0LDQgKzk1LDEwIEBAIGJvb2wgQ3JlZGVudGlhbEJhc2U6OmNvbXBh
cmUoY29uc3QgQ3JlZGUKICAgICByZXR1cm4gQ3JlZGVudGlhbDo6cGxhdGZvcm1Db21wYXJlKGEs
IGIpOwogfQogCitTdHJpbmcgQ3JlZGVudGlhbEJhc2U6OnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1
dGhvcml6YXRpb25IZWFkZXIoKSBjb25zdAoreworICAgIGF1dG8gY3JlZGVudGlhbFN0cmluZ0Rh
dGEgPSBtYWtlU3RyaW5nKG1fdXNlciwgJzonLCBtX3Bhc3N3b3JkKS51dGY4KCk7CisgICAgcmV0
dXJuIG1ha2VTdHJpbmcoIkJhc2ljICIsIGJhc2U2NEVuY29kZWQoY3JlZGVudGlhbFN0cmluZ0Rh
dGEpKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVk
ZW50aWFsQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQ3JlZGVudGlhbEJhc2UuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3
ICszOSw2IEBAIGVudW0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlIHsKIH07CiAKIGNsYXNzIENyZWRl
bnRpYWxCYXNlIHsKLQogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbXB0eSgp
IGNvbnN0OwogICAgIApAQCAtNTIsNiArNTEsOCBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgYm9vbCBjb21wYXJlKGNvbnN0IENyZWRlbnRpYWwmLCBjb25zdCBDcmVkZW50
aWFsJik7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckJhc2lj
QXV0aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgV0VCQ09SRV9F
WFBPUlQgQ3JlZGVudGlhbEJhc2UoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDcmVkZW50aWFsQmFz
ZShjb25zdCBTdHJpbmcmIHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQsIENyZWRlbnRpYWxQ
ZXJzaXN0ZW5jZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFV
UkxEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0RhdGFVUkxEZWNvZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0OCwzNiArMTQ4LDI2IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2RlVGFzaz4gY3Jl
YXQKICAgICApOwogfQogCi1zdGF0aWMgYm9vbCBkZWNvZGVCYXNlNjQoRGVjb2RlVGFzayYgdGFz
aywgTW9kZSBtb2RlKQorc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVjb2RlQmFz
ZTY0KGNvbnN0IERlY29kZVRhc2smIHRhc2ssIE1vZGUgbW9kZSkKIHsKLSAgICBWZWN0b3I8Y2hh
cj4gYnVmZmVyOwotICAgIGlmIChtb2RlID09IE1vZGU6OkZvcmdpdmluZ0Jhc2U2NCkgewotICAg
ICAgICBhdXRvIHVuZXNjYXBlZFN0cmluZyA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0YXNr
LmVuY29kZWREYXRhLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7Ci0gICAgICAgIGlmICghYmFz
ZTY0RGVjb2RlKHVuZXNjYXBlZFN0cmluZywgYnVmZmVyLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcg
fCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyB8IEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRh
YikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKKyAgICBzd2l0Y2gg
KG1vZGUpIHsKKyAgICBjYXNlIE1vZGU6OkZvcmdpdmluZ0Jhc2U2NDoKKyAgICAgICAgcmV0dXJu
IGJhc2U2NERlY29kZShkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModGFzay5lbmNvZGVkRGF0YSks
IHsgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nLCBCYXNlNjREZWNvZGVPcHRp
b25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcywgQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlzY2Fy
ZFZlcnRpY2FsVGFifSk7CisKKyAgICBjYXNlIE1vZGU6OkxlZ2FjeToKICAgICAgICAgLy8gRmly
c3QgdHJ5IGJhc2U2NHVybC4KLSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUodGFzay5lbmNv
ZGVkRGF0YS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIGJ1ZmZlcikpIHsKLSAgICAgICAgICAg
IC8vIERpZG4ndCB3b3JrLCB0cnkgdW5lc2NhcGluZyBhbmQgZGVjb2RpbmcgYXMgYmFzZTY0Lgot
ICAgICAgICAgICAgYXV0byB1bmVzY2FwZWRTdHJpbmcgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5j
ZXModGFzay5lbmNvZGVkRGF0YS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpOwotICAgICAgICAg
ICAgaWYgKCFiYXNlNjREZWNvZGUodW5lc2NhcGVkU3RyaW5nLCBidWZmZXIsIEJhc2U2NElnbm9y
ZVNwYWNlc0FuZE5ld0xpbmVzIHwgQmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gZGVjb2Rl
ZERhdGEgPSBiYXNlNjRVUkxEZWNvZGUodGFzay5lbmNvZGVkRGF0YSkpCisgICAgICAgICAgICBy
ZXR1cm4gZGVjb2RlZERhdGE7CisgICAgICAgIC8vIERpZG4ndCB3b3JrLCB0cnkgdW5lc2NhcGlu
ZyBhbmQgZGVjb2RpbmcgYXMgYmFzZTY0LgorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0YXNrLmVuY29kZWREYXRhKSwgeyBCYXNlNjREZWNvZGVP
cHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcywgQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlz
Y2FyZFZlcnRpY2FsVGFiIH0pOwogICAgIH0KLSAgICBidWZmZXIuc2hyaW5rVG9GaXQoKTsKLSAg
ICB0YXNrLnJlc3VsdC5kYXRhID0gV1RGTW92ZShidWZmZXIpOwotCi0gICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyB2b2lkIGRlY29kZUVzY2FwZWQoRGVjb2RlVGFzayYgdGFzaykKK3N0YXRp
YyBWZWN0b3I8dWludDhfdD4gZGVjb2RlRXNjYXBlZChjb25zdCBEZWNvZGVUYXNrJiB0YXNrKQog
ewogICAgIFRleHRFbmNvZGluZyBlbmNvZGluZ0Zyb21DaGFyc2V0KHRhc2sucmVzdWx0LmNoYXJz
ZXQpOwogICAgIGF1dG8mIGVuY29kaW5nID0gZW5jb2RpbmdGcm9tQ2hhcnNldC5pc1ZhbGlkKCkg
PyBlbmNvZGluZ0Zyb21DaGFyc2V0IDogVVRGOEVuY29kaW5nKCk7Ci0gICAgYXV0byBidWZmZXIg
PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEodGFzay5lbmNvZGVkRGF0YSwgZW5jb2Rp
bmcpOwotCi0gICAgYnVmZmVyLnNocmlua1RvRml0KCk7Ci0gICAgdGFzay5yZXN1bHQuZGF0YSA9
IFdURk1vdmUoYnVmZmVyKTsKKyAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNE
YXRhKHRhc2suZW5jb2RlZERhdGEsIGVuY29kaW5nKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPFJl
c3VsdD4gZGVjb2RlU3luY2hyb25vdXNseShEZWNvZGVUYXNrJiB0YXNrLCBNb2RlIG1vZGUpCkBA
IC0xODYsMTEgKzE3NiwxNCBAQCBzdGF0aWMgT3B0aW9uYWw8UmVzdWx0PiBkZWNvZGVTeW5jaHJv
bm91CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAodGFzay5pc0Jhc2U2
NCkgewotICAgICAgICBpZiAoIWRlY29kZUJhc2U2NCh0YXNrLCBtb2RlKSkKKyAgICAgICAgYXV0
byBkZWNvZGVkRGF0YSA9IGRlY29kZUJhc2U2NCh0YXNrLCBtb2RlKTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVkRGF0YSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHRh
c2sucmVzdWx0LmRhdGEgPSBXVEZNb3ZlKCpkZWNvZGVkRGF0YSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIGRlY29kZUVzY2FwZWQodGFzayk7CisgICAgICAgIHRhc2sucmVzdWx0LmRhdGEgPSBkZWNv
ZGVFc2NhcGVkKHRhc2spOwogCisgICAgdGFzay5yZXN1bHQuZGF0YS5zaHJpbmtUb0ZpdCgpOwog
ICAgIHJldHVybiBXVEZNb3ZlKHRhc2sucmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHN0cnVjdCBSZXN1bHQgewogICAgIFN0
cmluZyBtaW1lVHlwZTsKICAgICBTdHJpbmcgY2hhcnNldDsKICAgICBTdHJpbmcgY29udGVudFR5
cGU7Ci0gICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiB9
OwogCiB1c2luZyBEZWNvZGVDb21wbGV0aW9uSGFuZGxlciA9IFdURjo6RnVuY3Rpb248dm9pZCAo
T3B0aW9uYWw8UmVzdWx0Pik+OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZmFpbHVyZVRpbWVy
RmlyZWQoKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFJlc291cmNlSGFu
ZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5
IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgUmVzb3VyY2VIYW5k
bGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIGlmIChhdXRv
IGNvbnN0cnVjdG9yID0gYnVpbHRpblJlc291cmNlSGFuZGxlU3luY2hyb25vdXNMb2FkZXJNYXAo
KS5nZXQocmVxdWVzdC51cmwoKS5wcm90b2NvbCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSkp
IHsKICAgICAgICAgY29uc3RydWN0b3IoY29udGV4dCwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgY2xhc3MgQ3VybFJlc291cmNlSGFuZGxlRGVs
ZWdhdGU7CiBjbGFzcyBSZXNvdXJjZUhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc291cmNl
SGFuZGxlPiwgcHVibGljIEF1dGhlbnRpY2F0aW9uQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGUoTmV0d29ya2lu
Z0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCos
IGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxk
Q29udGVudEVuY29kaW5nU25pZmYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291
cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VF
cnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlc291cmNlSGFuZGxlKCk7CiAKICNpZiBQTEFURk9STShD
T0NPQSkgfHwgVVNFKENGVVJMQ09OTkVDVElPTikKQEAgLTE5Myw3ICsxOTMsNyBAQCBwdWJsaWM6
CiAgICAgdHlwZWRlZiBSZWY8UmVzb3VyY2VIYW5kbGU+ICgqQnVpbHRpbkNvbnN0cnVjdG9yKShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGll
bnQpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQnVpbHRpbkNvbnN0cnVjdG9yKGNvbnN0IEF0
b21TdHJpbmcmIHByb3RvY29sLCBCdWlsdGluQ29uc3RydWN0b3IpOwogCi0gICAgdHlwZWRlZiB2
b2lkICgqQnVpbHRpblN5bmNocm9ub3VzTG9hZGVyKShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9y
JiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisgICAgdHlwZWRlZiB2
b2lkICgqQnVpbHRpblN5bmNocm9ub3VzTG9hZGVyKShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9y
JiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJCdWlsdGluU3luY2hyb25vdXNMb2FkZXIoY29uc3QgQXRvbVN0cmluZyYg
cHJvdG9jb2wsIEJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlcik7CiAKIHByb3RlY3RlZDoKQEAgLTIx
Myw3ICsyMTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVU
eXBlKTsKIAogICAgIGJvb2wgc3RhcnQoKTsKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIHN0YXRpYyB2b2lkIHBsYXRmb3Jt
TG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVz
b3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAKICAgICB2b2lkIHJlZkF1
dGhlbnRpY2F0aW9uQ2xpZW50KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQogICAgIHZvaWQgZGVyZWZB
dXRoZW50aWNhdGlvbkNsaWVudCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xv
YWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw3ICs3Myw3IEBAIHZvaWQgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmUK
IAogdm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIGludCAvKmVuY29kZWRE
YXRhTGVuZ3RoKi8pCiB7Ci0gICAgbV9kYXRhLmFwcGVuZChkYXRhLCBsZW5ndGgpOworICAgIG1f
ZGF0YS5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0
aCk7CiB9CiAKIHZvaWQgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmco
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNM
b2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldEFsbG93U3RvcmVkQ3JlZGVudGlhbHMoYm9vbCBhbGxvdykgeyBtX2FsbG93
U3RvcmVkQ3JlZGVudGlhbHMgPSBhbGxvdzsgfQogICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQotICAgIFZlY3RvcjxjaGFy
PiYgbXV0YWJsZURhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBWZWN0b3I8dWludDhfdD4m
IG11dGFibGVEYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAgY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9CiAgICAgU3luY2hyb25vdXNMb2Fk
ZXJNZXNzYWdlUXVldWUmIG1lc3NhZ2VRdWV1ZSgpIHsgcmV0dXJuIG1fbWVzc2FnZVF1ZXVlLmdl
dCgpOyB9CiAKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9hbGxvd1N0
b3JlZENyZWRlbnRpYWxzIHsgZmFsc2UgfTsKICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9u
c2U7Ci0gICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9kYXRh
OwogICAgIFJlc291cmNlRXJyb3IgbV9lcnJvcjsKICAgICBSZWY8U3luY2hyb25vdXNMb2FkZXJN
ZXNzYWdlUXVldWU+IG1fbWVzc2FnZVF1ZXVlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsOSArODUsNyBA
QCBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxDRkRhdGFSCiAKIHN0YXRpYyB2b2lk
IGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKLSAgICBTdHJpbmcgYXV0aGVudGljYXRp
b25IZWFkZXIgPSAiQmFzaWMgIiArIGJhc2U2NEVuY29kZShTdHJpbmcoY3JlZGVudGlhbC51c2Vy
KCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3b3JkKCkpLnV0ZjgoKSk7Ci0KLSAgICByZXF1ZXN0
LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlvbiwgYXV0aGVu
dGljYXRpb25IZWFkZXIpOworICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFk
ZXJOYW1lOjpBdXRob3JpemF0aW9uLCBjcmVkZW50aWFsLnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1
dGhvcml6YXRpb25IZWFkZXIoKSk7CiB9CiAKIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNv
dXJjZUhhbmRsZUludGVybmFsKCkKQEAgLTUyNCw3ICs1MjIsNyBAQCBzdGF0aWMgdm9pZCBlbXB0
eVBlcmZvcm0odm9pZCopCiB7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0
Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIExPRyhOZXR3
b3JrLCAiUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseTol
cyBzc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6JXUiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3Vy
Y2VIYW5kbGVDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw3ICszNjgsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxl
OjpyZXN0YXJ0UmVxdWVzdFdpdGhDCiAgICAgZC0+bV9jdXJsUmVxdWVzdC0+c3RhcnQoKTsKIH0K
IAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNv
dXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFy
PiYgZGF0YSkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hy
b25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0
b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBB
U1NFUlQoIXJlcXVlc3QuaXNFbXB0eSgpKTsKQEAgLTU2Miw5ICs1NjIsOSBAQCB2b2lkIFJlc291
cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKCkKIAogICAgICAgICAvLyBkaWRSZWNlaXZlUmVzcG9u
c2UgbWlnaHQgY2F1c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVkLgogICAgICAgICBpZiAoY2xp
ZW50KCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAgICBpZiAo
YmFzZTY0RGVjb2RlKGRhdGEsIG91dCwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpICYm
IG91dC5zaXplKCkgPiAwKQotICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQnVm
ZmVyKHRoaXMsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG91dC5kYXRhKCksIG91dC5zaXplKCkpLCBv
cmlnaW5hbFNpemUpOworICAgICAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29k
ZShkYXRhLCBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyk7Cisg
ICAgICAgICAgICBpZiAoZGVjb2RlZERhdGEgJiYgZGVjb2RlZERhdGEtPnNpemUoKSA+IDApCisg
ICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIodGhpcywgU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoZGVjb2RlZERhdGEtPmRhdGEoKSwgZGVjb2RlZERhdGEtPnNpemUoKSksIG9y
aWdpbmFsU2l6ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBUZXh0RW5jb2Rp
bmcgZW5jb2RpbmcoY2hhcnNldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5k
bGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTY3LDkgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIAogc3RhdGljIHZvaWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogewot
ICAgIFN0cmluZyBhdXRoZW50aWNhdGlvbkhlYWRlciA9ICJCYXNpYyAiICsgYmFzZTY0RW5jb2Rl
KFN0cmluZyhjcmVkZW50aWFsLnVzZXIoKSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKSku
dXRmOCgpKTsKLQotICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1l
OjpBdXRob3JpemF0aW9uLCBhdXRoZW50aWNhdGlvbkhlYWRlcik7CisgICAgcmVxdWVzdC5zZXRI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGNyZWRlbnRpYWwu
c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpKTsKIH0KIAogc3RhdGlj
IE5TT3BlcmF0aW9uUXVldWUgKm9wZXJhdGlvblF1ZXVlRm9yQXN5bmNDbGllbnRzKCkKQEAgLTM1
Miw3ICszNTAsNyBAQCBDRlN0cmluZ1JlZiBSZXNvdXJjZUhhbmRsZTo6c3luY2hyb25vdXNMCiAg
ICAgcmV0dXJuIENGU1RSKCJXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJSdW5Mb29wTW9kZSIpOwog
fQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJl
c291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNo
YXI+JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBMT0coTmV0d29yaywgIlJlc291cmNlSGFuZGxl
OjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHk6JUAgc3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3k6JXUiLCByZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9O
b3RVcGRhdGVIVFRQQm9keSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdG9yZWRDcmVkZW50aWFs
c1BvbGljeSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VIYW5kbGVTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAkocmV2aXNpb24gMjc3NTY5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFJlc291cmNl
SGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRl
bnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjxj
aGFyPiYpCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0
b3I8dWludDhfdD4mKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBO
ZXR3b3JrU2Vzc2lvbi5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw3ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGRpZ2VzdC0+YWRkQnl0ZXMoY2Vy
dGlmaWNhdGVEYXRhLT5kYXRhLCBjZXJ0aWZpY2F0ZURhdGEtPmxlbik7CiAKICAgICAgICAgYXV0
byBoYXNoID0gZGlnZXN0LT5jb21wdXRlSGFzaCgpOwotICAgICAgICByZXR1cm4gYmFzZTY0RW5j
b2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGhhc2guZGF0YSgpKSwgaGFzaC5zaXpl
KCkpOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KGhhc2guZGF0YSgpKSwgaGFzaC5zaXplKCkpKTsKICAgICB9CiAK
ICAgICBIYXNoU2V0PFN0cmluZz4gbV9jZXJ0aWZpY2F0ZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBl
U2VxdWVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMSArMTU0LDExIEBAIFN0cmluZyBk
ZWNvZGVFc2NhcGVTZXF1ZW5jZXMoU3RyaW5nVmlldyAKICAgICByZXR1cm4gcmVzdWx0LnRvU3Ry
aW5nKCk7CiB9CiAKLWlubGluZSBWZWN0b3I8Y2hhcj4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2Vz
QXNEYXRhKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQor
aW5saW5lIFZlY3Rvcjx1aW50OF90PiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3Ry
aW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgQVNT
RVJUKGVuY29kaW5nLmlzVmFsaWQoKSk7CiAKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OworICAg
IFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAgICAgc2l6ZV90IGRlY29kZWRQb3NpdGlvbiA9IDA7
CiAgICAgc2l6ZV90IHNlYXJjaFBvc2l0aW9uID0gMDsKICAgICB3aGlsZSAodHJ1ZSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90
ZWRQcmludGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyBj
b25zdCBzaXplX3QgbWF4aW11bUxpbmVMZW5ndGggPSAKIAogc3RhdGljIGNvbnN0IGNoYXIgY3Js
ZkxpbmVFbmRpbmdbXSA9ICJcclxuIjsKIAotc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRp
bmdBdEluZGV4KGNvbnN0IGNoYXIqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgsIHNpemVfdCBp
bmRleCkKK3N0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRleChjb25zdCB1aW50
OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoLCBzaXplX3QgaW5kZXgpCiB7CiAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBpbnB1dExlbmd0aCk7CiAgICAg
aWYgKGlucHV0W2luZGV4XSA9PSAnXG4nKQpAQCAtNTUsMTkgKzU1LDE5IEBAIHN0YXRpYyBzaXpl
X3QgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRleCgKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBx
dW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbiwgVmVjdG9yPGNoYXI+
JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgaW5wdXQpCiB7Ci0gICAgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGluLmRhdGEo
KSwgaW4uc2l6ZSgpLCBvdXQpOworICAgIHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwogfQogCi12b2lkIHF1b3RlZFByaW50YWJsZUVuY29k
ZShjb25zdCBjaGFyKiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoLCBWZWN0b3I8Y2hhcj4mIG91
dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgdWludDhfdCog
aW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCkKIHsKLSAgICBvdXQuY2xlYXIoKTsKLSAgICBvdXQu
cmVzZXJ2ZUNhcGFjaXR5KGlucHV0TGVuZ3RoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0Owor
ICAgIG91dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGlucHV0TGVuZ3RoKTsKICAgICBzaXplX3Qg
Y3VycmVudExpbmVMZW5ndGggPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5wdXRM
ZW5ndGg7ICsraSkgewogICAgICAgICBib29sIGlzTGFzdENoYXJhY3RlciA9IChpID09IGlucHV0
TGVuZ3RoIC0gMSk7Ci0gICAgICAgIGNoYXIgY3VycmVudENoYXJhY3RlciA9IGlucHV0W2ldOwor
ICAgICAgICB1aW50OF90IGN1cnJlbnRDaGFyYWN0ZXIgPSBpbnB1dFtpXTsKICAgICAgICAgYm9v
bCByZXF1aXJlc0VuY29kaW5nID0gZmFsc2U7CiAgICAgICAgIC8vIEFsbCBub24tcHJpbnRhYmxl
IEFTQ0lJIGNoYXJhY3RlcnMgYW5kID0gcmVxdWlyZSBlbmNvZGluZy4KICAgICAgICAgaWYgKChj
dXJyZW50Q2hhcmFjdGVyIDwgJyAnIHx8IGN1cnJlbnRDaGFyYWN0ZXIgPiAnficgfHwgY3VycmVu
dENoYXJhY3RlciA9PSAnPScpICYmIGN1cnJlbnRDaGFyYWN0ZXIgIT0gJ1x0JykKQEAgLTExMiwx
OCArMTEyLDIwIEBAIHZvaWQgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IGNoYXIqIGkKICAg
ICAgICAgICAgIGN1cnJlbnRMaW5lTGVuZ3RoKys7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBy
ZXR1cm4gb3V0OwogfQogCi12b2lkIHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8
Y2hhcj4mIGluLCBWZWN0b3I8Y2hhcj4mIG91dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmlu
dGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKIHsKLSAgICBxdW90ZWRQ
cmludGFibGVEZWNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIG91dCk7CisgICAgcmV0dXJuIHF1
b3RlZFByaW50YWJsZURlY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7CiB9CiAKLXZv
aWQgcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVu
Z3RoLCBWZWN0b3I8Y2hhcj4mIG91dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVE
ZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgpCiB7Ci0gICAgb3V0
LmNsZWFyKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dDsKICAgICBpZiAoIWRhdGFMZW5ndGgp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG91dDsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7CiAgICAgICAgIGNoYXIgY3VycmVudENoYXJh
Y3RlciA9IGRhdGFbaV07CkBAIC0xNDksOCArMTUxLDkgQEAgdm9pZCBxdW90ZWRQcmludGFibGVE
ZWNvZGUoY29uc3QgY2hhciogZAogICAgICAgICAgICAgb3V0LmFwcGVuZChsb3dlckNoYXJhY3Rl
cik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBvdXQuYXBwZW5k
KHN0YXRpY19jYXN0PGNoYXI+KHRvQVNDSUlIZXhWYWx1ZSh1cHBlckNoYXJhY3RlciwgbG93ZXJD
aGFyYWN0ZXIpKSk7CisgICAgICAgIG91dC5hcHBlbmQodG9BU0NJSUhleFZhbHVlKHVwcGVyQ2hh
cmFjdGVyLCBsb3dlckNoYXJhY3RlcikpOwogICAgIH0KKyAgICByZXR1cm4gb3V0OwogfQogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxl
LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVv
dGVkUHJpbnRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE5ICsyOCwxNiBAQAogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFF1b3RlZFByaW50YWJsZV9oCi0jZGVmaW5lIFF1b3Rl
ZFByaW50YWJsZV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3Qg
VmVjdG9yPGNoYXI+JiwgVmVjdG9yPGNoYXI+Jik7Ci12b2lkIHF1b3RlZFByaW50YWJsZUVuY29k
ZShjb25zdCBjaGFyKiwgc2l6ZV90LCBWZWN0b3I8Y2hhcj4mKTsKK1ZlY3Rvcjx1aW50OF90PiBx
dW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CitWZWN0b3I8dWlu
dDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogCi12
b2lkIHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBWZWN0b3I8Y2hh
cj4mKTsKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QsIFZl
Y3RvcjxjaGFyPiYpOworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25z
dCBWZWN0b3I8dWludDhfdD4mKTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNv
ZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFF1b3RlZFByaW50YWJsZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vU1NMS2V5R2VuZXJhdG9yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9yV2luLmNwcAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZVN0cmluZwogICAgICAgICBpZiAoIUNyeXB0U2lnbkFuZEVuY29kZUNlcnRpZmljYXRl
KGhDb250ZXh0LCBBVF9LRVlFWENIQU5HRSwgWDUwOV9BU05fRU5DT0RJTkcsIFg1MDlfS0VZR0VO
X1JFUVVFU1RfVE9fQkVfU0lHTkVELCAmcmVxdWVzdEluZm8sICZzaWduQWxnbywgMCwgcmVpbnRl
cnByZXRfY2FzdDxMUEJZVEU+KGJpbmFyeS5kYXRhKCkpLCAmZHdFbmNvZGVkTGVuZ3RoKSkKICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGtleVN0cmluZyA9IGJhc2U2NEVuY29kZShiaW5h
cnkpOworICAgICAgICBrZXlTdHJpbmcgPSBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoYmluYXJ5
KSk7CiAgICAgfSB3aGlsZSgwKTsKIAogICAgIGlmIChwUHViSW5mbykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3Rv
cmFnZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vy
dmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyAr
NTYsNyBAQCBTdHJpbmcgU1dTY3JpcHRTdG9yYWdlOjpzaGEySGFzaChjb25zdCBTCiAgICAgYXV0
byBpbnB1dFV0ZjggPSBpbnB1dC51dGY4KCk7CiAgICAgY3J5cHRvLT5hZGRCeXRlcyhpbnB1dFV0
ZjguZGF0YSgpLCBpbnB1dFV0ZjgubGVuZ3RoKCkpOwogICAgIGF1dG8gaGFzaCA9IGNyeXB0by0+
Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1cm4gV1RGOjpiYXNlNjRVUkxFbmNvZGUoaGFzaC5kYXRh
KCksIGhhc2guc2l6ZSgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVk
KGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSkpOwogfQogCiBTdHJpbmcgU1dTY3JpcHRTdG9yYWdl
OjpzaGEySGFzaChjb25zdCBVUkwmIGlucHV0KSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI3NzY1NCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNjQgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgor
CisgICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdG8gbWF0Y2ggbW9yZSBt
b2Rlcm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6c2VuZFJl
cGx5VG9TeW5jaHJvbm91c1JlcXVlc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1ByaXZh
dGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlByaXZhdGVD
bGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmlyZUNvbnZlcnNpb25SZXF1ZXN0KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6YXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIpOgorICAgICAgICAqIFNoYXJl
ZC9BUEkvQVBJRGF0YS5oOgorICAgICAgICAoQVBJOjpEYXRhOjpjcmVhdGUpOgorICAgICAgICAo
QVBJOjpEYXRhOjpmcmVlVmVjdG9yQnl0ZXMpOgorICAgICAgICAqIFNoYXJlZC9tYWMvQXV4aWxp
YXJ5UHJvY2Vzc01hYy5tbToKKyAgICAgICAgKFdlYktpdDo6c2FuZGJveEZpbGVQYXRoKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVNldFBh
Z2VOYXZpZ2F0aW9uQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWwubW06CisgICAgICAgIChwcm9kdWNlQ2xpZW50RGF0YUpzb24p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNz
aW9uQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpiYXNlNjRFbmNvZGVkUE5HRGF0YSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojp3ZWJDcnlwdG9NYXN0ZXJL
ZXkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJh
Y2tlbmRDb21tYW5kcyk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYklu
c3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3Bl
Y3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvbW1h
bmRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxB
dXRoZW50aWNhdG9yLm1tOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhlbnRpY2F0b3JJbnRl
cm5hbDo6cHJvZHVjZUhhc2hTZXQpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhlbnRpY2F0
b3I6Om1ha2VDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxBdXRoZW50aWNhdG9y
OjpnZXRBc3NlcnRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9N
b2NrL01vY2tIaWRDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TW9ja0hpZENvbm5l
Y3Rpb246OmZlZWRSZXBvcnRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpNb2NrTG9j
YWxDb25uZWN0aW9uOjpmaWx0ZXJSZXNwb25zZXMgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL1dlYlVSTFNj
aGVtZUhhbmRsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFNjaGVtZVRhc2s6OmRpZENvbXBsZXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
TmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxvYWRl
clN0cmF0ZWd5Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
VVJMU2NoZW1lSGFuZGxlclByb3h5Ojpsb2FkU3luY2hyb25vdXNseSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oOgorCiAyMDIxLTA1LTE4
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXN1cnJlY3Qg
V0tXZWJWaWV3IG1lZGlhIGNvbnRyb2xzIEFQSSByZW1vdmVkIGluIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE5MjkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
bgkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogbWVzc2FnZXMgLT4gTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogCiAgICAgU2NoZWR1bGVSZXNv
dXJjZUxvYWQoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzKQotICAgIFBlcmZvcm1TeW5jaHJvbm91c0xvYWQoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKSAtPiAoV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZSwgVmVjdG9yPGNoYXI+IGRhdGEpIFN5bmNocm9ub3VzCisgICAgUGVyZm9ybVN5bmNocm9ub3Vz
TG9hZChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIHJlc291cmNlTG9hZFBh
cmFtZXRlcnMpIC0+IChXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMK
ICAgICBUZXN0UHJvY2Vzc0luY29taW5nU3luY01lc3NhZ2VzV2hlbldhaXRpbmdGb3JTeW5jUmVw
bHkoV2ViS2l0OjpXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCkgLT4gKGJvb2wgaGFuZGxl
ZCkgU3luY2hyb25vdXMKICAgICBMb2FkUGluZyhXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzIHJlc291cmNlTG9hZFBhcmFtZXRlcnMpCiAgICAgUmVtb3ZlTG9hZElkZW50aWZp
ZXIodWludDY0X3QgcmVzb3VyY2VMb2FkSWRlbnRpZmllcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jl
c291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMg
dm9pZCBzZW5kUmVwbHlUb1N5bmNocm9ub3VzUmVxdWVzCiAgICAgQVNTRVJUKGRhdGEuZGVsYXll
ZFJlcGx5KTsKICAgICBBU1NFUlQoIWRhdGEucmVzcG9uc2UuaXNOdWxsKCkgfHwgIWRhdGEuZXJy
b3IuaXNOdWxsKCkpOwogCi0gICAgVmVjdG9yPGNoYXI+IHJlc3BvbnNlQnVmZmVyOworICAgIFZl
Y3Rvcjx1aW50OF90PiByZXNwb25zZUJ1ZmZlcjsKICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+
c2l6ZSgpKQogICAgICAgICByZXNwb25zZUJ1ZmZlci5hcHBlbmQoYnVmZmVyLT5kYXRhKCksIGJ1
ZmZlci0+c2l6ZSgpKTsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2
YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsMTQgKzMxNSwx
NSBAQCB2b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmlyCiAgICAgICAgIGlm
ICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHB1YmxpY0tleURhdGE7Ci0gICAgICAgIFdURjo6YmFzZTY0VVJMRGVjb2RlKHB1YmxpY0tl
eUJhc2U2NFVSTCwgcHVibGljS2V5RGF0YSk7CisgICAgICAgIGF1dG8gcHVibGljS2V5RGF0YSA9
IGJhc2U2NFVSTERlY29kZShwdWJsaWNLZXlCYXNlNjRVUkwpOworICAgICAgICBpZiAoIXB1Ymxp
Y0tleURhdGEpCisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0byBjcnlwdG8gPSBQ
QUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNI
QV8yNTYpOwotICAgICAgICBjcnlwdG8tPmFkZEJ5dGVzKHB1YmxpY0tleURhdGEuZGF0YSgpLCBw
dWJsaWNLZXlEYXRhLnNpemUoKSk7CisgICAgICAgIGNyeXB0by0+YWRkQnl0ZXMocHVibGljS2V5
RGF0YS0+ZGF0YSgpLCBwdWJsaWNLZXlEYXRhLT5zaXplKCkpOwogICAgICAgICBhdXRvIHB1Ymxp
Y0tleURhdGFIYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgICAgIGF1dG8ga2V5
SUQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShwdWJsaWNLZXlEYXRhSGFzaC5kYXRhKCksIHB1Ymxp
Y0tleURhdGFIYXNoLnNpemUoKSk7CisgICAgICAgIGF1dG8ga2V5SUQgPSBtYWtlU3RyaW5nKGJh
c2U2NFVSTEVuY29kZWQocHVibGljS2V5RGF0YUhhc2guZGF0YSgpLCBwdWJsaWNLZXlEYXRhSGFz
aC5zaXplKCkpKTsKICAgICAgICAgaWYgKGtleUlEICE9IGF0dHJpYnV0aW9uLnNvdXJjZVVubGlu
a2FibGVUb2tlbigpLT5rZXlJREJhc2U2NFVSTCkKICAgICAgICAgICAgIHJldHVybjsKIApJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2Nv
YS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtEYXRhVGFza0NvY29hLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw4ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogI2lmIFVTRShDUkVERU5U
SUFMX1NUT1JBR0VfV0lUSF9ORVRXT1JLX1NFU1NJT04pCiBzdGF0aWMgdm9pZCBhcHBseUJhc2lj
QXV0aG9yaXphdGlvbkhlYWRlcihXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7Ci0gICAgU3RyaW5nIGF1dGhl
bnRpY2F0aW9uSGVhZGVyID0gIkJhc2ljICIgKyBiYXNlNjRFbmNvZGUoU3RyaW5nKGNyZWRlbnRp
YWwudXNlcigpICsgIjoiICsgY3JlZGVudGlhbC5wYXNzd29yZCgpKS51dGY4KCkpOwotICAgIHJl
cXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpBdXRob3Jp
emF0aW9uLCBhdXRoZW50aWNhdGlvbkhlYWRlcik7CisgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVy
RmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGNyZWRlbnRpYWwu
c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpKTsKIH0KICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElEYXRhLmgJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDcgKzYwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1lbWNweShjb3BpZWRCeXRlcywgYnl0
ZXMsIHNpemUpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVdpdGhvdXRDb3B5
aW5nKGNvcGllZEJ5dGVzLCBzaXplLCBmYXN0RnJlZUJ5dGVzLCBudWxscHRyKTsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZVdpdGhvdXRDb3B5aW5nKGNvcGllZEJ5dGVzLCBzaXplLCBbXSAodW5zaWdu
ZWQgY2hhciogYnl0ZXMsIGNvbnN0IHZvaWQqKSB7CisgICAgICAgICAgICBpZiAoYnl0ZXMpCisg
ICAgICAgICAgICAgICAgZmFzdEZyZWUoc3RhdGljX2Nhc3Q8dm9pZCo+KGJ5dGVzKSk7CisgICAg
ICAgIH0sIG51bGxwdHIpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgUmVmPERhdGE+IGNyZWF0
ZShjb25zdCBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIGJ1ZmZlcikKQEAgLTY4LDYgKzcxLDE2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6
ZSgpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUmVmPERhdGE+IGNyZWF0ZShWZWN0b3I8dW5zaWdu
ZWQgY2hhcj4mJiBidWZmZXIpCisgICAgeworICAgICAgICBhdXRvIGJ1ZmZlclNpemUgPSBidWZm
ZXIuc2l6ZSgpOworICAgICAgICBhdXRvIGJ1ZmZlclBvaW50ZXIgPSBidWZmZXIucmVsZWFzZUJ1
ZmZlcigpLmxlYWtQdHIoKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVdpdGhvdXRDb3B5aW5nKGJ1
ZmZlclBvaW50ZXIsIGJ1ZmZlclNpemUsIFtdICh1bnNpZ25lZCBjaGFyKiBieXRlcywgY29uc3Qg
dm9pZCopIHsKKyAgICAgICAgICAgIGlmIChieXRlcykKKyAgICAgICAgICAgICAgICBXVEY6OlZl
Y3Rvck1hbGxvYzo6ZnJlZShieXRlcyk7CisgICAgICAgIH0sIG51bGxwdHIpOworICAgIH0KKwog
ICAgIHN0YXRpYyBSZWZQdHI8RGF0YT4gY3JlYXRlKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYp
OwogICAgIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtOTYsMTIgKzEwOSw2IEBAIHByaXZhdGU6
CiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGZhc3RGcmVlQnl0ZXModW5zaWduZWQg
Y2hhciogYnl0ZXMsIGNvbnN0IHZvaWQqKQotICAgIHsKLSAgICAgICAgaWYgKGJ5dGVzKQotICAg
ICAgICAgICAgZmFzdEZyZWUoc3RhdGljX2Nhc3Q8dm9pZCo+KGJ5dGVzKSk7Ci0gICAgfQotCiAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciogbV9ieXRlcyB7IG51bGxwdHIgfTsKICAgICBzaXplX3Qg
bV9zaXplIHsgMCB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5
UHJvY2Vzc01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4
aWxpYXJ5UHJvY2Vzc01hYy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxNSwx
OCArMzE1LDEzIEBAIHN0YXRpYyBTdHJpbmcgc2FuZGJveERpcmVjdG9yeShXZWJDb3JlOjoKIAog
c3RhdGljIFN0cmluZyBzYW5kYm94RmlsZVBhdGgoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRo
LCBjb25zdCBDU3RyaW5nJiBoZWFkZXIpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBzYW5kYm94Rmls
ZTsKLSAgICBzYW5kYm94RmlsZS5hcHBlbmQoZGlyZWN0b3J5UGF0aCk7Ci0gICAgc2FuZGJveEZp
bGUuYXBwZW5kKCIvQ29tcGlsZWRTYW5kYm94KyIpOwotCiAgICAgLy8gTWFrZSB0aGUgZmlsZW5h
bWUgc2VtaS11bmlxdWUgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mIHRoZSBoZWFkZXIuCisKICAg
ICBhdXRvIGNyeXB0byA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdl
c3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7CiAgICAgY3J5cHRvLT5hZGRCeXRlcyhoZWFkZXIuZGF0
YSgpLCBoZWFkZXIubGVuZ3RoKCkpOwotICAgIFZlY3Rvcjx1aW50OF90PiBoYXNoID0gY3J5cHRv
LT5jb21wdXRlSGFzaCgpOwotICAgIFN0cmluZyByZWFkYWJsZUhhc2ggPSBXVEY6OmJhc2U2NFVS
TEVuY29kZShoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIGF1dG8gaGFzaCA9IGNyeXB0
by0+Y29tcHV0ZUhhc2goKTsKIAotICAgIHNhbmRib3hGaWxlLmFwcGVuZChyZWFkYWJsZUhhc2gp
OwotICAgIHJldHVybiBzYW5kYm94RmlsZS50b1N0cmluZygpOworICAgIHJldHVybiBtYWtlU3Ry
aW5nKGRpcmVjdG9yeVBhdGgsICIvQ29tcGlsZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVuY29kZWQo
aGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKSk7CiB9CiAKIHN0YXRpYyBib29sIGVuc3VyZVNhbmRi
b3hDYWNoZURpcmVjdG9yeShjb25zdCBTYW5kYm94SW5mbyYgaW5mbykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTIwLDcgKzUyMCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBh
Z2VQcm94eSB7CiAKICAgICBTdGFydFVSTFNjaGVtZVRhc2soc3RydWN0IFdlYktpdDo6VVJMU2No
ZW1lVGFza1BhcmFtZXRlcnMgcGFyYW1ldGVycykKICAgICBTdG9wVVJMU2NoZW1lVGFzayh1aW50
NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpCi0gICAgTG9h
ZFN5bmNocm9ub3VzVVJMU2NoZW1lVGFzayhzdHJ1Y3QgV2ViS2l0OjpVUkxTY2hlbWVUYXNrUGFy
YW1ldGVycyBwYXJhbWV0ZXJzKSAtPiAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgVmVjdG9yPGNoYXI+IGRhdGEpIFN5bmNo
cm9ub3VzCisgICAgTG9hZFN5bmNocm9ub3VzVVJMU2NoZW1lVGFzayhzdHJ1Y3QgV2ViS2l0OjpV
UkxTY2hlbWVUYXNrUGFyYW1ldGVycyBwYXJhbWV0ZXJzKSAtPiAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSByZXNwb25zZSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9O
KQogICAgIFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoV2ViQ29y
ZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIHN0cnVjdCBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEg
ZnJhbWVJbmZvLCBib29sIG1heVByb21wdCkgLT4gKGVudW06dWludDhfdCBXZWJDb3JlOjpEZXZp
Y2VPcmllbnRhdGlvbk9yTW90aW9uUGVybWlzc2lvblN0YXRlIHBlcm1pc3Npb25TdGF0ZSkgQXN5
bmMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVy
LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNj
aGVtZUhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBzdHJ1Y3QgVVJM
U2NoZW1lVGFza1BhcmFtZXRlcnM7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiBjbGFzcyBXZWJQcm9j
ZXNzUHJveHk7CiAKLXVzaW5nIFN5bmNMb2FkQ29tcGxldGlvbkhhbmRsZXIgPSBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgVmVjdG9yPGNoYXI+Jik+OwordXNpbmcgU3luY0xv
YWRDb21wbGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25z
dCBWZWN0b3I8dWludDhfdD4mKT47CiAKIGNsYXNzIFdlYlVSTFNjaGVtZUhhbmRsZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxXZWJVUkxTY2hlbWVIYW5kbGVyPiB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoV2ViVVJMU2NoZW1lSGFuZGxlcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJVUkxTY2hlbWVUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
MiwxMCArMjEyLDEwIEBAIGF1dG8gV2ViVVJMU2NoZW1lVGFzazo6ZGlkQ29tcGxldGUoY29uc3QK
ICAgICBtX2NvbXBsZXRlZCA9IHRydWU7CiAgICAgCiAgICAgaWYgKGlzU3luYygpKSB7Ci0gICAg
ICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAg
ICAgICAgaWYgKG1fc3luY0RhdGEpIHsKICAgICAgICAgICAgIGRhdGEucmVzaXplKG1fc3luY0Rh
dGEtPnNpemUoKSk7Ci0gICAgICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KG1fc3luY0RhdGEtPmRhdGEoKSksIG1fc3luY0RhdGEtPnNpemUo
KSk7CisgICAgICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KG1fc3luY0RhdGEtPmRhdGEoKSksIG1fc3luY0RhdGEtPnNpemUoKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBtX3N5bmNDb21wbGV0aW9uSGFuZGxlcihtX3N5bmNSZXNwb25z
ZSwgZXJyb3IsIFdURk1vdmUoZGF0YSkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViVVJMU2NoZW1lVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlVSTFNjaGVtZVRhc2suaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3
IEBAIHN0cnVjdCBVUkxTY2hlbWVUYXNrUGFyYW1ldGVyczsKIGNsYXNzIFdlYlVSTFNjaGVtZUhh
bmRsZXI7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiAKLXVzaW5nIFN5bmNMb2FkQ29tcGxldGlvbkhh
bmRsZXIgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgVmVjdG9yPGNoYXI+
Jik+OwordXNpbmcgU3luY0xvYWRDb21wbGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlRXJyb3ImLCBjb25zdCBWZWN0b3I8dWludDhfdD4mKT47CiAKIGNsYXNzIFdlYlVSTFNj
aGVtZVRhc2sgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpVUkxT
Y2hlbWVUYXNrPiwgcHVibGljIEluc3RhbmNlQ291bnRlZDxXZWJVUkxTY2hlbWVUYXNrPiB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVVJMU2NoZW1lVGFzayk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzMzgsMTMgKzIzMzgsMTQgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudChX
S1BhZwogICAgICAgICAgICAgaWYgKG1fY2xpZW50LmNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKHRvSW1wbChtX2NsaWVudC5jb3B5V2ViQ3J5
cHRvTWFzdGVyS2V5KHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSkpOwog
Ci0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogI2lmIEVOQUJMRShXRUJf
Q1JZUFRPKQotICAgICAgICAgICAgaWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1h
c3RlcktleSkpCisgICAgICAgICAgICBhdXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJDcnlwdG9N
YXN0ZXJLZXkoKTsKKyAgICAgICAgICAgIGlmICghbWFzdGVyS2V5KQogICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKFdU
Rk1vdmUoKm1hc3RlcktleSkpOworI2Vsc2UKKyAgICAgICAgICAgIHJldHVybiBBUEk6OkRhdGE6
OmNyZWF0ZShudWxscHRyLCAwKTsKICNlbmRpZgotCi0gICAgICAgICAgICByZXR1cm4gQVBJOjpE
YXRhOjpjcmVhdGUobWFzdGVyS2V5LmRhdGEoKSwgbWFzdGVyS2V5LnNpemUoKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBSZWZQdHI8QVBJOjpTdHJpbmc+IHNpZ25lZFB1YmxpY0tleUFuZENoYWxs
ZW5nZVN0cmluZyhXZWJQYWdlUHJveHkmIHBhZ2UsIHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29u
c3QgUmVmUHRyPEFQSTo6U3RyaW5nPiYgY2hhbGxlbmdlU3RyaW5nLCBjb25zdCBVUkwmIHVybCkg
b3ZlcnJpZGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgUmV0
YWluUHRyPE5TRGF0YT4gcHJvZHVjZUNsaWVudERhCiAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9i
amVjdDpAIndlYmF1dGhuLmdldCIgZm9yS2V5OkAidHlwZSJdOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OldURjo6YmFzZTY0VVJMRW5jb2RlKGNoYWxs
ZW5nZS5ieXRlcywgY2hhbGxlbmdlLmxlbmd0aCkgZm9yS2V5OkAiY2hhbGxlbmdlIl07CisgICAg
W2RpY3Rpb25hcnkgc2V0T2JqZWN0Om1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChjaGFsbGVu
Z2UuYnl0ZXMsIGNoYWxsZW5nZS5sZW5ndGgpKSBmb3JLZXk6QCJjaGFsbGVuZ2UiXTsKICAgICBb
ZGljdGlvbmFyeSBzZXRPYmplY3Q6b3JpZ2luIGZvcktleTpAIm9yaWdpbiJdOwogCiAgICAgcmV0
dXJuIFtOU0pTT05TZXJpYWxpemF0aW9uIGRhdGFXaXRoSlNPTk9iamVjdDpkaWN0aW9uYXJ5Lmdl
dCgpIG9wdGlvbnM6TlNKU09OV3JpdGluZ1NvcnRlZEtleXMgZXJyb3I6bmlsXTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2ViQXV0b21hdGlvblNlc3Np
b25DYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9jYWlyby9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNwcAkocmV2aXNpb24gMjc3NTY5
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9jYWlyby9XZWJBdXRvbWF0
aW9uU2Vzc2lvbkNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBzdGF0
aWMgT3B0aW9uYWw8U3RyaW5nPiBiYXNlNjRFbmNvZGVkUE5HCiAgICAgaWYgKHBuZ0RhdGEuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIGJhc2U2
NEVuY29kZShwbmdEYXRhKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHBu
Z0RhdGEpKTsKIH0KIAogT3B0aW9uYWw8U3RyaW5nPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGxh
dGZvcm1HZXRCYXNlNjRFbmNvZGVkUE5HRGF0YShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSYgaGFuZGxlKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlv
blN0YXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05h
dmlnYXRpb25TdGF0ZS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTM1LDEx
ICsxMTM1LDExIEBAIFJlZlB0cjxBUEk6OkRhdGE+IE5hdmlnYXRpb25TdGF0ZTo6TmF2aWcKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmlldykgewot
ICAgICAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwotICAgICAgICBpZiAoIWdldERlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKKyAgICAgICAgYXV0byBtYXN0ZXJLZXkg
PSBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgICAgIGlmICghbWFzdGVyS2V5KQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6
Y3JlYXRlKG1hc3RlcktleS5kYXRhKCksIG1hc3RlcktleS5zaXplKCkpOworICAgICAgICByZXR1
cm4gQVBJOjpEYXRhOjpjcmVhdGUoV1RGTW92ZSgqbWFzdGVyS2V5KSk7CiAgICAgfQogCiAgICAg
YXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9u
RGVsZWdhdGUuZ2V0KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
Z2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGli
L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwxMyArMTk0
LDExIEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXR1cENvbm5lY3QKIHZvaWQgUmVt
b3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgY2hhciogYmFja2Vu
ZENvbW1hbmRzKQogewogICAgIGlmICghYmFja2VuZENvbW1hbmRzIHx8ICFiYWNrZW5kQ29tbWFu
ZHNbMF0pIHsKLSAgICAgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBTdHJpbmcoKTsKKyAgICAg
ICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSB7IH07CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoYmFja2VuZENv
bW1hbmRzLCBzdHJsZW4oYmFja2VuZENvbW1hbmRzKSwgYmFzZTY0RGF0YSk7Ci0gICAgbV9iYWNr
ZW5kQ29tbWFuZHNVUkwgPSAiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIgKyBiYXNlNjRE
YXRhOworICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L2ph
dmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoYmFja2VuZENvbW1hbmRzLCBzdHJsZW4o
YmFja2VuZENvbW1hbmRzKSkpOwogfQogCiB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y29u
bmVjdGlvbkRpZENsb3NlKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVBy
b3h5R3RrLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQyLDkgKzE0MiwxMSBAQCB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtCiAgICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7CiAgICAgQ1N0cmluZyBkYXRh
U3RyaW5nOwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIGlmICghYmFzZTY0RGVj
b2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAg
IGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudCwgQmFzZTY0RGVjb2RlT3B0
aW9uczo6VmFsaWRhdGVQYWRkaW5nKTsKKyAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgpOworICAgICAg
ICBkZWNvZGVkRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgZGF0YVZlY3RvciA9IFdURk1v
dmUoKmRlY29kZWREYXRhKTsKICAgICB9IGVsc2UKICAgICAgICAgZGF0YVN0cmluZyA9IGNvbnRl
bnQudXRmOCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3Rr
L1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2Vi
SW5zcGVjdG9yVUlQcm94eUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0MSw5ICs1NDEsMTEg
QEAgdm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUoYwogICAgIFZlY3Rvcjxj
aGFyPiBkYXRhVmVjdG9yOwogICAgIENTdHJpbmcgZGF0YVN0cmluZzsKICAgICBpZiAoYmFzZTY0
RW5jb2RlZCkgewotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBkYXRhVmVjdG9y
LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFz
ZTY0RGVjb2RlKGNvbnRlbnQsIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7
CisgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgZGVjb2RlZERhdGEtPnNocmlua1Rv
Rml0KCk7CisgICAgICAgIGRhdGFWZWN0b3IgPSBXVEZNb3ZlKCpkZWNvZGVkRGF0YSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGRhdGFTdHJpbmcgPSBjb250ZW50LnV0ZjgoKTsKIApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JVSVBy
b3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTAgKzE3NCwxMCBAQCB2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtCiAgICAgICAgIG1fc3VnZ2VzdGVk
VG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVSTCk7CiAKICAgICAg
ICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0g
ICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxp
ZGF0ZVBhZGRpbmcpKQorICAgICAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29k
ZShjb250ZW50Q29weSwgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKTsKKyAg
ICAgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRh
IGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKKyAg
ICAgICAgICAgIGF1dG8gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0
V2l0aEJ5dGVzOmRlY29kZWREYXRhLT5kYXRhKCkgbGVuZ3RoOmRlY29kZWREYXRhLT5zaXplKCld
KTsKICAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNh
bGx5OllFU107CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRl
VG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nIGVycm9yOk5VTExdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L21hYy9XZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9X
ZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MDksMTAgKzUwOSwx
MCBAQCB2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZShjCiAgICAgICAgIG1f
c3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVSTCk7
CiAKICAgICAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFy
PiBvdXQ7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50Q29weSwgb3V0LCBC
YXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJh
c2U2NERlY29kZShjb250ZW50Q29weSwgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRk
aW5nKTsKKyAgICAgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5T
KFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXpl
KCldKTsKKyAgICAgICAgICAgIGF1dG8gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFs
bG9jXSBpbml0V2l0aEJ5dGVzOmRlY29kZWREYXRhLT5kYXRhKCkgbGVuZ3RoOmRlY29kZWREYXRh
LT5zaXplKCldKTsKICAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVS
TCBhdG9taWNhbGx5OllFU107CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgW2NvbnRlbnRD
b3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9y
Q2xpZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tl
bmRDbwogICAgIGlmICghZXZlbnQubWVzc2FnZSB8fCBldmVudC5tZXNzYWdlLT5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gbWFrZVN0cmlu
ZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVuY29kZShldmVudC5tZXNz
YWdlLT51dGY4KCkpKTsKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1ha2VTdHJpbmcoImRh
dGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKGV2ZW50Lm1lc3NhZ2Ut
PnV0ZjgoKSkpOwogfQogCiB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0VGFyZ2V0TGlz
dChjb25zdCBFdmVudCYgZXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRo
ZW50aWNhdG9yLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDEwICs4Miw4IEBAIHN0YXRpYyBpbmxpbmUgSGFzaFNldDxTdHJpbmc+IHBy
b2R1Y2VIYXMKIHsKICAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwogICAgIGZvciAoYXV0byYg
Y3JlZGVudGlhbERlc2NyaXB0b3IgOiBjcmVkZW50aWFsRGVzY3JpcHRvcnMpIHsKLSAgICAgICAg
aWYgKGVtcHR5VHJhbnNwb3J0c09yQ29udGFpbihjcmVkZW50aWFsRGVzY3JpcHRvci50cmFuc3Bv
cnRzLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCkKLSAgICAgICAgICAgICYmIGNy
ZWRlbnRpYWxEZXNjcmlwdG9yLnR5cGUgPT0gUHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1Ymxp
Y0tleQotICAgICAgICAgICAgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgp
ID09IGNyZWRlbnRpYWxJZExlbmd0aCkKLSAgICAgICAgICAgIHJlc3VsdC5hZGQoYmFzZTY0RW5j
b2RlKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLmRhdGEoKSwgY3JlZGVudGlhbERlc2Ny
aXB0b3IuaWRWZWN0b3Iuc2l6ZSgpKSk7CisgICAgICAgIGlmIChlbXB0eVRyYW5zcG9ydHNPckNv
bnRhaW4oY3JlZGVudGlhbERlc2NyaXB0b3IudHJhbnNwb3J0cywgQXV0aGVudGljYXRvclRyYW5z
cG9ydDo6SW50ZXJuYWwpICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLnR5cGUgPT0gUHVibGljS2V5
Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rv
ci5zaXplKCkgPT0gY3JlZGVudGlhbElkTGVuZ3RoKQorICAgICAgICAgICAgcmVzdWx0LmFkZCht
YWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3IuZGF0
YSgpLCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkpKSk7CiAgICAgfQogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC0yNDEsNyArMjM5LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRp
Y2F0b3I6Om1ha2VDcmVkZW50aWFsKAogICAgICAgICBpZiAobm90Rm91bmQgIT0gbV9leGlzdGlu
Z0NyZWRlbnRpYWxzLmZpbmRNYXRjaGluZyhbJmV4Y2x1ZGVDcmVkZW50aWFsSWRzXSAoYXV0byYg
Y3JlZGVudGlhbCkgewogICAgICAgICAgICAgYXV0byogcmF3SWQgPSBjcmVkZW50aWFsLT5yYXdJ
ZCgpOwogICAgICAgICAgICAgQVNTRVJUKHJhd0lkKTsKLSAgICAgICAgICAgIHJldHVybiBleGNs
dWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGUocmF3SWQtPmRhdGEoKSwgcmF3
SWQtPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFs
SWRzLmNvbnRhaW5zKG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChyYXdJZC0+ZGF0YSgpLCByYXdJ
ZC0+Ynl0ZUxlbmd0aCgpKSkpOwogICAgICAgICB9KSkgewogICAgICAgICAgICAgcmVjZWl2ZUV4
Y2VwdGlvbih7IE5vdEFsbG93ZWRFcnJvciwgIkF0IGxlYXN0IG9uZSBjcmVkZW50aWFsIG1hdGNo
ZXMgYW4gZW50cnkgb2YgdGhlIGV4Y2x1ZGVDcmVkZW50aWFscyBsaXN0IGluIHRoZSBwbGF0Zm9y
bSBhdHRhY2hlZCBhdXRoZW50aWNhdG9yLiJfcyB9LCBXZWJBdXRoZW50aWNhdGlvblN0YXR1czo6
TEFFeGNsdWRlQ3JlZGVudGlhbHNNYXRjaGVkKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTUx
OCw3ICs1MTYsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKCkKICAg
ICAgICAgfQogCiAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+cmF3SWQoKTsKLSAg
ICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGUocmF3SWQt
PmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpKQorICAgICAgICBpZiAoYWxsb3dDcmVkZW50
aWFsSWRzLmNvbnRhaW5zKG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChyYXdJZC0+ZGF0YSgpLCBy
YXdJZC0+Ynl0ZUxlbmd0aCgpKSkpKQogICAgICAgICAgICAgYXNzZXJ0aW9uUmVzcG9uc2VzLnVu
Y2hlY2tlZEFwcGVuZChjcmVkZW50aWFsLmNvcHlSZWYoKSk7CiAgICAgfQogICAgIGlmIChhc3Nl
cnRpb25SZXNwb25zZXMuaXNFbXB0eSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tIaWRDb25uZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tI
aWRDb25uZWN0aW9uLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2MSwxNSArMjYxLDEzIEBAIHZvaWQgTW9ja0hpZENvbm5lY3Rpb246OmZl
ZWRSZXBvcnRzKCkKICAgICAgICAgaWYgKHN0YWdlc01hdGNoKCkgJiYgbV9jb25maWd1cmF0aW9u
LmhpZC0+ZXJyb3IgPT0gTW9jazo6SGlkRXJyb3I6OlVuc3VwcG9ydGVkT3B0aW9ucyAmJiAobV9y
ZXF1aXJlUmVzaWRlbnRLZXkgfHwgbV9yZXF1aXJlVXNlclZlcmlmaWNhdGlvbikpCiAgICAgICAg
ICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBG
aWRvSGlkRGV2aWNlQ29tbWFuZDo6a0Nib3IsIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oQ3RhcERl
dmljZVJlc3BvbnNlQ29kZTo6a0N0YXAyRXJyVW5zdXBwb3J0ZWRPcHRpb24pIH0pOwogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBwYXlsb2FkOwogICAgICAgICAg
ICAgQVNTRVJUKCFtX2NvbmZpZ3VyYXRpb24uaGlkLT5wYXlsb2FkQmFzZTY0LmlzRW1wdHkoKSk7
Ci0gICAgICAgICAgICBhdXRvIHN0YXR1cyA9IGJhc2U2NERlY29kZShtX2NvbmZpZ3VyYXRpb24u
aGlkLT5wYXlsb2FkQmFzZTY0WzBdLCBwYXlsb2FkKTsKKyAgICAgICAgICAgIGF1dG8gcGF5bG9h
ZCA9IGJhc2U2NERlY29kZShtX2NvbmZpZ3VyYXRpb24uaGlkLT5wYXlsb2FkQmFzZTY0WzBdKTsK
ICAgICAgICAgICAgIG1fY29uZmlndXJhdGlvbi5oaWQtPnBheWxvYWRCYXNlNjQucmVtb3ZlKDAp
OwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdGF0dXMsIHN0YXR1cyk7CiAgICAgICAgICAg
ICBpZiAoIW1fY29uZmlndXJhdGlvbi5oaWQtPmlzVTJmKQotICAgICAgICAgICAgICAgIG1lc3Nh
Z2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZp
Y2VDb21tYW5kOjprQ2JvciwgcGF5bG9hZCk7CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZp
ZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNvbW1h
bmQ6OmtDYm9yLCBXVEZNb3ZlKCpwYXlsb2FkKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbWVzc2FnZSA9IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hhbm5l
bCwgRmlkb0hpZERldmljZUNvbW1hbmQ6OmtNc2csIHBheWxvYWQpOworICAgICAgICAgICAgICAg
IG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9I
aWREZXZpY2VDb21tYW5kOjprTXNnLCBXVEZNb3ZlKCpwYXlsb2FkKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01v
Y2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW0JKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcg
KzE2Miw3IEBAIHZvaWQgTW9ja0xvY2FsQ29ubmVjdGlvbjo6ZmlsdGVyUmVzcG9uc2UKICAgICBm
b3IgKDsgaXRyICE9IHJlc3BvbnNlcy5lbmQoKTsgKytpdHIpIHsKICAgICAgICAgYXV0byogcmF3
SWQgPSBpdHItPmdldCgpLnJhd0lkKCk7CiAgICAgICAgIEFTU0VSVChyYXdJZCk7Ci0gICAgICAg
IGF1dG8gcmF3SWRCYXNlNjQgPSBiYXNlNjRFbmNvZGUocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5
dGVMZW5ndGgoKSk7CisgICAgICAgIGF1dG8gcmF3SWRCYXNlNjQgPSBtYWtlU3RyaW5nKGJhc2U2
NEVuY29kZWQocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpOwogICAgICAgICBp
ZiAocmF3SWRCYXNlNjQgPT0gcHJlZmVycmVkQ3JlZGVudGlhbElkQmFzZTY0KQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsv
V2ViTG9hZGVyU3RyYXRlZ3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NzgsNyArNTc4LDcgQEAgT3B0aW9uYWw8V2ViTG9hZGVyU3RyYXRl
Z3k6OlN5bmNMb2FkUmVzdQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgV2ViTG9hZGVy
U3RyYXRlZ3k6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImIGZyYW1lTG9h
ZGVyLCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFs
UG9saWN5LCAgY29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zLCBjb25zdCBIVFRQSGVhZGVyTWFw
JiBvcmlnaW5hbFJlcXVlc3RIZWFkZXJzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgV2ViTG9hZGVyU3Ry
YXRlZ3k6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVy
LCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9s
aWN5LCAgY29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBv
cmlnaW5hbFJlcXVlc3RIZWFkZXJzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBhdXRvKiB3ZWJG
cmFtZUxvYWRlckNsaWVudCA9IHRvV2ViRnJhbWVMb2FkZXJDbGllbnQoZnJhbWVMb2FkZXIuY2xp
ZW50KCkpOwogICAgIGF1dG8qIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyAmd2Vi
RnJhbWVMb2FkZXJDbGllbnQtPndlYkZyYW1lKCkgOiBudWxscHRyOwpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5oCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJM
b2FkZXJTdHJhdGVneS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoK
ICAgICB+V2ViTG9hZGVyU3RyYXRlZ3koKSBmaW5hbDsKICAgICAKICAgICB2b2lkIGxvYWRSZXNv
dXJjZShXZWJDb3JlOjpGcmFtZSYsIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlJiwgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZGVyT3B0aW9ucyYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVy
PiYmKT4mJikgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNv
cmU6OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFs
UG9saWN5LCBjb25zdCBXZWJDb3JlOjpGZXRjaE9wdGlvbnMmLCBjb25zdCBXZWJDb3JlOjpIVFRQ
SGVhZGVyTWFwJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNl
U3luY2hyb25vdXNseShXZWJDb3JlOjpGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcgcmVzb3Vy
Y2VMb2FkSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29y
ZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgV2ViQ29yZTo6RmV0Y2hPcHRpb25zJiwg
Y29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYsIFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSBmaW5hbDsK
ICAgICB2b2lkIHBhZ2VMb2FkQ29tcGxldGVkKFdlYkNvcmU6OlBhZ2UmKSBmaW5hbDsKICAgICB2
b2lkIGJyb3dzaW5nQ29udGV4dFJlbW92ZWQoV2ViQ29yZTo6RnJhbWUmKSBmaW5hbDsKIApAQCAt
MTAxLDcgKzEwMSw3IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IFN5bmNMb2FkUmVzdWx0IHsKICAg
ICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKICAgICAgICAgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciBlcnJvcjsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIH07CiAgICAgT3B0aW9uYWw8U3luY0xvYWRS
ZXN1bHQ+IHRyeUxvYWRpbmdTeW5jaHJvbm91c2x5VXNpbmdVUkxTY2hlbWVIYW5kbGVyKFdlYkNv
cmU6OkZyYW1lTG9hZGVyJiwgUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgU3luY0xvYWRSZXN1bHQgbG9hZERhdGFVUkxTeW5jaHJv
bm91c2x5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVI
YW5kbGVyUHJveHkuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5OjpzdGFydE5l
d1QKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zdGFydExvYWRpbmcoKTsKIH0KIAotdm9p
ZCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OmxvYWRTeW5jaHJvbm91c2x5KFJlc291cmNlTG9h
ZElkZW50aWZpZXIgbG9hZElkZW50aWZpZXIsIFdlYkZyYW1lJiB3ZWJGcmFtZSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgV2ViVVJMU2NoZW1lSGFu
ZGxlclByb3h5Ojpsb2FkU3luY2hyb25vdXNseShSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGxvYWRJ
ZGVudGlmaWVyLCBXZWJGcmFtZSYgd2ViRnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291cmNlRXJyb3ImIGVycm9yLCBW
ZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgZGF0YS5zaHJpbmsoMCk7CiAgICAgaWYgKCFt
X3dlYlBhZ2Uuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TG9hZFN5bmNocm9ub3Vz
VVJMU2NoZW1lVGFzayhVUkxTY2hlbWVUYXNrUGFyYW1ldGVycyB7IG1faWRlbnRpZmllciwgbG9h
ZElkZW50aWZpZXIsIHJlcXVlc3QsIHdlYkZyYW1lLmluZm8oKSB9KSwgTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6TG9hZFN5bmNocm9ub3VzVVJMU2NoZW1lVGFzazo6UmVwbHkocmVzcG9uc2UsIGVy
cm9yLCBkYXRhKSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5k
bGVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzdGFydE5ld1Rhc2soV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXImLCBXZWJGcmFtZSYpOwog
ICAgIHZvaWQgc3RvcEFsbFRhc2tzKCk7CiAKLSAgICB2b2lkIGxvYWRTeW5jaHJvbm91c2x5KFJl
c291cmNlTG9hZElkZW50aWZpZXIsIFdlYkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFdlYkNvcmU6OlJlc291cmNlRXJy
b3ImLCBWZWN0b3I8Y2hhcj4mKTsKKyAgICB2b2lkIGxvYWRTeW5jaHJvbm91c2x5KFJlc291cmNl
TG9hZElkZW50aWZpZXIsIFdlYkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBW
ZWN0b3I8dWludDhfdD4mKTsKIAogICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXI7IH0KICAgICBXZWJQYWdlJiBwYWdlKCkgeyByZXR1cm4gbV93ZWJQ
YWdlOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBA
QAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
VXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVybiBXZWJL
aXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAg
ICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNs
eSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6
CisgICAgICAgIFVwZGF0ZSB0byBtYXRjaCBuZXcgc2lnbmF0dXJlLiBjaGFyIC0+IHVpbnQ4X3Qu
CisKIDIwMjEtMDUtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW5hbWUgRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoKSB0byBGaWxlU3lzdGVtOjpmaWxlU2l6
ZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNl
TG9hZFNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9XZWJD
b3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNj
aGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6bG9hZFJlc291CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVy
JiBmcmFtZUxvYWRlciwgdW5zaWduZWQgbG9uZywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBGZXRjaE9wdGlvbnMmIG9wdGlvbnMs
IGNvbnN0IEhUVFBIZWFkZXJNYXAmLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiBmcmFtZUxv
YWRlciwgdW5zaWduZWQgbG9uZywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGll
bnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBGZXRjaE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IEhU
VFBIZWFkZXJNYXAmLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBSZXNvdXJjZUhhbmRsZTo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShmcmFtZUxvYWRlci5uZXR3b3JraW5nQ29udGV4dCgpLCBy
ZXF1ZXN0LCBvcHRpb25zLmNyZWRlbnRpYWxzID09IEZldGNoT3B0aW9uczo6Q3JlZGVudGlhbHM6
Ok9taXQgPyBTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2UgOiBTdG9yZWRDcmVkZW50
aWFsc1BvbGljeTo6VXNlLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwogfQpJbmRleDogU291cmNl
L1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291
cmNlTG9hZFNjaGVkdWxlci5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVn
YWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICBXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKTsKIAogICAgIHZvaWQgbG9hZFJlc291cmNlKFdlYkNvcmU6OkZyYW1lJiwgV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2UmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8
V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI+JiYpPiYmKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25n
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50
aWFsUG9saWN5LCBjb25zdCBXZWJDb3JlOjpGZXRjaE9wdGlvbnMmLCBjb25zdCBXZWJDb3JlOjpI
VFRQSGVhZGVyTWFwJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25nLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5
LCBjb25zdCBXZWJDb3JlOjpGZXRjaE9wdGlvbnMmLCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVy
TWFwJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
LCBWZWN0b3I8dWludDhfdD4mKSBmaW5hbDsKICAgICB2b2lkIHBhZ2VMb2FkQ29tcGxldGVkKFdl
YkNvcmU6OlBhZ2UmKSBmaW5hbDsKICAgICB2b2lkIGJyb3dzaW5nQ29udGV4dFJlbW92ZWQoV2Vi
Q29yZTo6RnJhbWUmKSBmaW5hbDsKIApJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwko
cmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2Rp
bmcgdG8gbWF0Y2ggbW9yZSBtb2Rlcm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6d3JhcENyeXB0b0tleSBj
b25zdCk6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnVud3JhcENyeXB0b0tleSBjb25zdCk6
CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IE9wdGlvbmFsIHJldHVybmluZyBkZWZhdWx0V2Vi
Q3J5cHRvTWFzdGVyS2V5KCkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnQubW06CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2F2ZSk6
CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IE9wdGlvbmFsIHJldHVybmluZyBiYXNlNjREZWNv
ZGUoKS4KKwogMjAyMS0wNS0xNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBEZWxldGUgV2ViU1FMIGNvZGUgZnJvbSBXZWJLaXQyCkluZGV4OiBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNjYsMjgg
KzEwNjYsMzQgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsU2NyZWVuRm9yRQogCiBi
b29sIFdlYkNocm9tZUNsaWVudDo6d3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiB3cmFwcGVkS2V5KSBjb25zdAogewotICAgIFZlY3Rvcjx1
aW50OF90PiBtYXN0ZXJLZXk7CiAgICAgU0VMIHNlbGVjdG9yID0gQHNlbGVjdG9yKHdlYkNyeXB0
b01hc3RlcktleUZvcldlYlZpZXc6KTsKICAgICBpZiAoW1ttX3dlYlZpZXcgVUlEZWxlZ2F0ZV0g
cmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkgewogICAgICAgICBOU0RhdGEgKmtleURhdGEg
PSBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIHNlbGVjdG9yKTsKKyAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IG1hc3RlcktleTsKICAgICAgICAgbWFzdGVyS2V5LmFwcGVuZChzdGF0aWNfY2FzdDx1
aW50OF90Kj4oY29uc3RfY2FzdDx2b2lkKj4oW2tleURhdGEgYnl0ZXNdKSksIFtrZXlEYXRhIGxl
bmd0aF0pOwotICAgIH0gZWxzZSBpZiAoIWdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFz
dGVyS2V5KSkKKyAgICAgICAgcmV0dXJuIHdyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3Rlcktl
eSwga2V5LCB3cmFwcGVkS2V5KTsKKyAgICB9CisgICAgCisgICAgYXV0byBtYXN0ZXJLZXkgPSBk
ZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgaWYgKCFtYXN0ZXJLZXkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB3cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0
ZXJLZXksIGtleSwgd3JhcHBlZEtleSk7CisgICAgcmV0dXJuIHdyYXBTZXJpYWxpemVkQ3J5cHRv
S2V5KFdURk1vdmUoKm1hc3RlcktleSksIGtleSwgd3JhcHBlZEtleSk7CiB9CiAKIGJvb2wgV2Vi
Q2hyb21lQ2xpZW50Ojp1bndyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB3cmFw
cGVkS2V5LCBWZWN0b3I8dWludDhfdD4mIGtleSkgY29uc3QKIHsKLSAgICBWZWN0b3I8dWludDhf
dD4gbWFzdGVyS2V5OwogICAgIFNFTCBzZWxlY3RvciA9IEBzZWxlY3Rvcih3ZWJDcnlwdG9NYXN0
ZXJLZXlGb3JXZWJWaWV3Oik7CiAgICAgaWYgKFtbbV93ZWJWaWV3IFVJRGVsZWdhdGVdIHJlc3Bv
bmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3Rl
cktleTsKICAgICAgICAgTlNEYXRhICprZXlEYXRhID0gQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3
LCBzZWxlY3Rvcik7CiAgICAgICAgIG1hc3RlcktleS5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhf
dCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KFtrZXlEYXRhIGJ5dGVzXSkpLCBba2V5RGF0YSBsZW5ndGhd
KTsKLSAgICB9IGVsc2UgaWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3Rlcktl
eSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6
ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCB3cmFwcGVkS2V5LCBrZXkpOworICAgIH0KIAotICAgIHJl
dHVybiB1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwgd3JhcHBlZEtleSwga2V5
KTsKKyAgICBhdXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAg
ICBpZiAoIW1hc3RlcktleSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB1bndy
YXBTZXJpYWxpemVkQ3J5cHRvS2V5KFdURk1vdmUoKm1hc3RlcktleSksIHdyYXBwZWRLZXksIGtl
eSk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MDgsMTAgKzQwOCwxMCBAQCB2b2lk
IFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzYXZlKGNvCiAgICAgICAgIG1fc3VnZ2VzdGVk
VG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVSTCk7CiAKICAgICAg
ICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0g
ICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxp
ZGF0ZVBhZGRpbmcpKQorICAgICAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29k
ZShjb250ZW50LCBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAg
ICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxs
b2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0LnNpemUoKV0pOworICAgICAg
ICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFs
bG9jXSBpbml0V2l0aEJ5dGVzOmRlY29kZWREYXRhLT5kYXRhKCkgbGVuZ3RoOmRlY29kZWREYXRh
LT5zaXplKCldKTsKICAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVS
TCBhdG9taWNhbGx5OllFU107CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgW2NvbnRlbnRD
b3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3Njk3KQorKysgVG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWlu
aWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2Rpbmcv
ZGVjb2RpbmcgdG8gbWF0Y2ggbW9yZSBtb2Rlcm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VENQU2VydmVyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6c3RhcnRT
ZWN1cmVDb25uZWN0aW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6dGVz
dENlcnRpZmljYXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6dGVzdFBy
aXZhdGVLZXkpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3gu
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW06
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbToKKyAgICAgICAgKHRlc3RJZGVudGl0eTIp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRXZlbnRBdHRyaWJ1
dGlvbi5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdlbmVyYXRvci5tbToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1RfRik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVy
Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6d2ViU29ja2V0SGFuZHNo
YWtlKToKKwogMjAyMS0wNS0xOCAgQWRpdHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+
CiAKICAgICAgICAgW21hY09TXSBUaXRsZWJhciBzZXBhcmF0b3IgZG9lc24ndCBzaG93IHdoZW4g
V0tXZWJWaWV3IGlzIHNjcm9sbGVkCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3BwCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1NSw5ICsxNTUsOCBAQCB2b2lkIFRDUFNlcnZlcjo6c3RhcnRTZWN1
cmVDb25uZWN0aW9uKFNvCiAgICAgImxkWTlhdmNUR1N3YndvaXVJcXYwalRMMWZIRm56eTNSSE1M
RGgrTHB2b2xjNURTclNKSENQNVd1SzBlZUpYaHIiCiAgICAgIlQ1b1FwSEw5ei9jQ0RMQUtDS1Jh
NHVWMGZoRWRPV0JxeVI5cDh5NWpKdHllNzJ0NkN1RlVWNWlxY3BGNEJINGYiCiAgICAgImoyVk5I
d3NTckp3a0Q0UVVHbFV0SDd2d25RbXlDRnhaTW1XQUpnPT0iKTsKLSAgICBWZWN0b3I8dWludDhf
dD4gY2VydERFUjsKLSAgICBiYXNlNjREZWNvZGUoY2VydFBFTSwgY2VydERFUiwgV1RGOjpCYXNl
NjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsKLSAgICBzc2w6OnVuaXF1ZV9wdHI8Q1JZ
UFRPX0JVRkZFUj4gY2VydChDUllQVE9fQlVGRkVSX25ldyhjZXJ0REVSLmRhdGEoKSwgY2VydERF
Ui5zaXplKCksIG51bGxwdHIpKTsKKyAgICBhdXRvIGNlcnRERVIgPSBiYXNlNjREZWNvZGUoY2Vy
dFBFTSk7CisgICAgc3NsOjp1bmlxdWVfcHRyPENSWVBUT19CVUZGRVI+IGNlcnQoQ1JZUFRPX0JV
RkZFUl9uZXcoY2VydERFUi0+ZGF0YSgpLCBjZXJ0REVSLT5zaXplKCksIG51bGxwdHIpKTsKICAg
ICBBU1NFUlQoY2VydCk7CiAKICAgICAvLyBUaGlzIGlzIGEgdGVzdCBrZXkgZnJvbSBCb3JpbmdT
U0wuCkBAIC00MTIsOSArNDExLDggQEAgVmVjdG9yPHVpbnQ4X3Q+IFRDUFNlcnZlcjo6dGVzdENl
cnRpZmljYQogICAgICJHM1BGblliVzh1ckgwTlNKRy9XKy85REErWTdBYTBjczRUUHB1QkdaME5V
MVc5NE9vQ01vNGxrTzZIL3k2TGV1IgogICAgICIzdmpaRDN5OWtaazdtcmU5WEh3a0k4TWRLNXM9
Iik7CiAgICAgCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsKLSAgICBiYXNlNjREZWNvZGUo
cGVtRW5jb2RlZENlcnRpZmljYXRlLCB2ZWN0b3IsIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6
QmFzZTY0RGVmYXVsdCk7Ci0gICAgcmV0dXJuIHZlY3RvcjsKKyAgICBhdXRvIGRlY29kZWRDZXJ0
aWZpY2F0ZSA9IGJhc2U2NERlY29kZShwZW1FbmNvZGVkQ2VydGlmaWNhdGUpOworICAgIHJldHVy
biBXVEZNb3ZlKCpkZWNvZGVkQ2VydGlmaWNhdGUpOwogfQogCiBWZWN0b3I8dWludDhfdD4gVENQ
U2VydmVyOjp0ZXN0UHJpdmF0ZUtleSgpCkBAIC00NzEsOSArNDY5LDggQEAgVmVjdG9yPHVpbnQ4
X3Q+IFRDUFNlcnZlcjo6dGVzdFByaXZhdGVLZQogICAgICJkRU9idmNwU2hQMjJJdE9WalNhbXBS
dUF1UkcyNlplbUViR0NJM0o2TXF4M3k2bSs2SHd1bHRzZ3RkekRnckZlIgogICAgICJxSmZVOGJi
ZGJ1MnBpNDdZNEZkSkswSExmZmw1Unc9PSIpOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rv
cjsKLSAgICBiYXNlNjREZWNvZGUocGVtRW5jb2RlZFByaXZhdGVLZXksIHZlY3RvciwgV1RGOjpC
YXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsKLSAgICByZXR1cm4gdmVjdG9yOwor
ICAgIGF1dG8gZGVjb2RlZFByaXZhdGVLZXkgPSBiYXNlNjREZWNvZGUocGVtRW5jb2RlZFByaXZh
dGVLZXkpOworICAgIHJldHVybiBXVEZNb3ZlKCpkZWNvZGVkUHJpdmF0ZUtleSk7CiB9CiAgICAg
CiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDExICs0MiwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciogYmFzZTY0RW5jb2RlZFNpbmZXaXRo
CiAKIFRFU1QoSVNPQm94LCBJU09Qcm90ZWN0aW9uU2NoZW1lSW5mb0JveCkKIHsKLSAgICBWZWN0
b3I8dWludDhfdD4gc2luZkFycmF5OwotICAgIEFTU0VSVF9UUlVFKGJhc2U2NERlY29kZShTdHJp
bmdWaWV3KGJhc2U2NEVuY29kZWRTaW5mV2l0aEtleUlEMyksIHNpbmZBcnJheSkpOwotICAgIEFT
U0VSVF9FUSg5N1VMLCBzaW5mQXJyYXkuc2l6ZSgpKTsKKyAgICBhdXRvIHNpbmZBcnJheSA9IGJh
c2U2NERlY29kZShTdHJpbmdWaWV3KGJhc2U2NEVuY29kZWRTaW5mV2l0aEtleUlEMykpOworICAg
IEFTU0VSVF9UUlVFKHNpbmZBcnJheSk7CisgICAgQVNTRVJUX0VRKDk3VUwsIHNpbmZBcnJheS0+
c2l6ZSgpKTsKIAotICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShBcnJheUJ1
ZmZlcjo6Y3JlYXRlKHNpbmZBcnJheS5kYXRhKCksIHNpbmZBcnJheS5zaXplKCkpLCAwLCBzaW5m
QXJyYXkuc2l6ZSgpKTsKKyAgICBhdXRvIHZpZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUoQXJy
YXlCdWZmZXI6OmNyZWF0ZShzaW5mQXJyYXktPmRhdGEoKSwgc2luZkFycmF5LT5zaXplKCkpLCAw
LCBzaW5mQXJyYXktPnNpemUoKSk7CiAKICAgICBJU09Qcm90ZWN0aW9uU2NoZW1lSW5mb0JveCBz
aW5mQm94OwogICAgIEFTU0VSVF9UUlVFKHNpbmZCb3gucmVhZCh2aWV3KSk7CkBAIC03OCwxMSAr
NzgsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGJhc2U2NEVuY29kZWRQc3NoV2l0aAogCiBURVNU
KElTT0JveCwgSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94KQogewotICAgIFZlY3Rvcjx1aW50
OF90PiBwc3NoQXJyYXk7Ci0gICAgQVNTRVJUX1RSVUUoYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXco
YmFzZTY0RW5jb2RlZFBzc2hXaXRoQXNzZXRJZCksIHBzc2hBcnJheSkpOwotICAgIEFTU0VSVF9F
USgxNzZVTCwgcHNzaEFycmF5LnNpemUoKSk7CisgICAgYXV0byBwc3NoQXJyYXkgPSBiYXNlNjRE
ZWNvZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNvZGVkUHNzaFdpdGhBc3NldElkKSk7CisgICAgQVNT
RVJUX1RSVUUocHNzaEFycmF5KTsKKyAgICBBU1NFUlRfRVEoMTc2VUwsIHBzc2hBcnJheS0+c2l6
ZSgpKTsKIAotICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShBcnJheUJ1ZmZl
cjo6Y3JlYXRlKHBzc2hBcnJheS5kYXRhKCksIHBzc2hBcnJheS5zaXplKCkpLCAwLCBwc3NoQXJy
YXkuc2l6ZSgpKTsKKyAgICBhdXRvIHZpZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlC
dWZmZXI6OmNyZWF0ZShwc3NoQXJyYXktPmRhdGEoKSwgcHNzaEFycmF5LT5zaXplKCkpLCAwLCBw
c3NoQXJyYXktPnNpemUoKSk7CiAKICAgICBJU09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3ggcHNz
aEJveDsKIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1By
aXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2Eu
bW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC04MSw3ICs4MSw3IEBAIFRFU1QoUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIFZhbGlkQmxpbmQK
ICAgICBhdXRvICpuc1Nwa2lEYXRhID0gKF9fYnJpZGdlIE5TRGF0YSAqKXNwa2lEYXRhLmdldCgp
OwogCiAgICAgLy8gQ29udGludWUgdGhlIHRlc3QuCi0gICAgRVhQRUNUX1RSVUUocGNtLmNhbGN1
bGF0ZUFuZFVwZGF0ZVNvdXJjZVVubGlua2FibGVUb2tlbihXVEY6OmJhc2U2NFVSTEVuY29kZShu
c1Nwa2lEYXRhLmJ5dGVzLCBuc1Nwa2lEYXRhLmxlbmd0aCkpKTsKKyAgICBFWFBFQ1RfVFJVRShw
Y20uY2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJsZVRva2VuKG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChuc1Nwa2lEYXRhLmJ5dGVzLCBuc1Nwa2lEYXRhLmxlbmd0aCkpKSk7CiAg
ICAgYXV0byBzb3VyY2VTZWNyZXRUb2tlbiA9IHBjbS50b2tlblNpZ25hdHVyZUpTT04oKTsKICAg
ICBFWFBFQ1RfRVEoc291cmNlU2VjcmV0VG9rZW4tPmFzT2JqZWN0KCktPnNpemUoKSwgNHVsKTsK
ICAgICBFWFBFQ1RfU1RSRVEoc291cmNlU2VjcmV0VG9rZW4tPmdldFN0cmluZygic291cmNlX2Vu
Z2FnZW1lbnRfdHlwZSJfcykudXRmOCgpLmRhdGEoKSwgImNsaWNrIik7CkBAIC05MCwxNCArOTAs
MTMgQEAgVEVTVChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgVmFsaWRCbGluZAogICAgIEVYUEVD
VF9FUShzb3VyY2VTZWNyZXRUb2tlbi0+Z2V0SW50ZWdlcigidmVyc2lvbiJfcyksIDIpOwogCiAg
ICAgLy8gR2VuZXJhdGUgdGhlIHNpZ25hdHVyZS4KLSAgICBWZWN0b3I8dWludDhfdD4gYmxpbmRl
ZE1lc3NhZ2U7Ci0gICAgYmFzZTY0VVJMRGVjb2RlKHNvdXJjZVNlY3JldFRva2VuLT5nZXRTdHJp
bmcoInNvdXJjZV9zZWNyZXRfdG9rZW4iX3MpLCBibGluZGVkTWVzc2FnZSk7CisgICAgYXV0byBi
bGluZGVkTWVzc2FnZSA9IGJhc2U2NFVSTERlY29kZShzb3VyY2VTZWNyZXRUb2tlbi0+Z2V0U3Ry
aW5nKCJzb3VyY2Vfc2VjcmV0X3Rva2VuIl9zKSk7CiAKLSAgICBhdXRvIGJsaW5kZWRTaWduYXR1
cmUgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdFdpdGhMZW5ndGg6IG1vZHVs
dXNOQnl0ZXNdKTsKLSAgICBjY3JzYWJzc2Ffc2lnbl9ibGluZGVkX21lc3NhZ2UoY2lwaGVyc3Vp
dGUsIHJzYVByaXZhdGVLZXksIGJsaW5kZWRNZXNzYWdlLmRhdGEoKSwgYmxpbmRlZE1lc3NhZ2Uu
c2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50OF90ICo+KFtibGluZGVkU2lnbmF0dXJlIG11dGFibGVC
eXRlc10pLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdLCBybmcpOworICAgIGF1dG8gYmxpbmRl
ZFNpZ25hdHVyZSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0aExlbmd0
aDptb2R1bHVzTkJ5dGVzXSk7CisgICAgY2Nyc2Fic3NhX3NpZ25fYmxpbmRlZF9tZXNzYWdlKGNp
cGhlcnN1aXRlLCByc2FQcml2YXRlS2V5LCBibGluZGVkTWVzc2FnZS0+ZGF0YSgpLCBibGluZGVk
TWVzc2FnZS0+c2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50OF90ICo+KFtibGluZGVkU2lnbmF0dXJl
IG11dGFibGVCeXRlc10pLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdLCBybmcpOwogCiAgICAg
Ly8gQ29udGludWUgdGhlIHRlc3QuCi0gICAgRVhQRUNUX1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVw
ZGF0ZVNvdXJjZVNlY3JldFRva2VuKFdURjo6YmFzZTY0VVJMRW5jb2RlKFtibGluZGVkU2lnbmF0
dXJlIGJ5dGVzXSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSkpKTsKKyAgICBFWFBFQ1RfVFJV
RShwY20uY2FsY3VsYXRlQW5kVXBkYXRlU291cmNlU2VjcmV0VG9rZW4obWFrZVN0cmluZyhiYXNl
NjRVUkxFbmNvZGVkKFtibGluZGVkU2lnbmF0dXJlIGJ5dGVzXSwgW2JsaW5kZWRTaWduYXR1cmUg
bGVuZ3RoXSkpKSk7CiAgICAgYXV0byYgcGVyc2lzdGVudFRva2VuID0gcGNtLnNvdXJjZVVubGlu
a2FibGVUb2tlbigpOwogICAgIEVYUEVDVF9UUlVFKHBlcnNpc3RlbnRUb2tlbik7CiAgICAgRVhQ
RUNUX0ZBTFNFKHBlcnNpc3RlbnRUb2tlbi0+dG9rZW5CYXNlNjRVUkwuaXNFbXB0eSgpKTsKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9TZXJpYWxpemVkQ3J5
cHRvS2V5V3JhcC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvY29jb2EvU2VyaWFsaXplZENyeXB0b0tleVdyYXAubW0JKHJldmlzaW9uIDI3NzU2OSkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9TZXJpYWxpemVkQ3J5
cHRvS2V5V3JhcC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsMzcgKzQ0LDM3IEBAIHB1YmxpYzoK
ICAgICB9CiB9OwogCi1URVNUX0YoU2VyaWFsaXplZENyeXB0b0tleVdyYXBUZXN0LCBHZXREZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KQorVEVTVF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVz
dCwgRGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSkKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gbWFz
dGVyS2V5MTsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpnZXREZWZhdWx0V2ViQ3J5cHRvTWFz
dGVyS2V5KG1hc3RlcktleTEpKTsKKyAgICBhdXRvIG1hc3RlcktleTEgPSBXZWJDb3JlOjpkZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5MSk7CiAK
LSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5MjsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3Jl
OjpnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleTIpKTsKKyAgICBhdXRvIG1h
c3RlcktleTIgPSBXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQ
RUNUX1RSVUUobWFzdGVyS2V5Mik7CiAKICAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkxID09IG1h
c3RlcktleTIpOwogfQogCiBURVNUX0YoU2VyaWFsaXplZENyeXB0b0tleVdyYXBUZXN0LCBEZWxl
dGVEZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KQogewotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0
ZXJLZXkxOwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0
ZXJLZXkobWFzdGVyS2V5MSkpOworICAgIGF1dG8gbWFzdGVyS2V5MSA9IFdlYkNvcmU6OmRlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkxKTsKICAg
ICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpkZWxldGVEZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkp
OwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTI7Ci0gICAgRVhQRUNUX1RSVUUoV2Vi
Q29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkyKSk7CisgICAgYXV0
byBtYXN0ZXJLZXkyID0gV2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAg
IEVYUEVDVF9UUlVFKG1hc3RlcktleTIpOwogCiAgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5MSAh
PSBtYXN0ZXJLZXkyKTsKIH0KIAogVEVTVF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVzdCwg
U2VyaWFsaXplZENyeXB0b0tleVdyYXBVbndyYXApCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1h
c3RlcktleTsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpnZXREZWZhdWx0V2ViQ3J5cHRvTWFz
dGVyS2V5KG1hc3RlcktleSkpOworICAgIGF1dG8gbWFzdGVyS2V5ID0gV2ViQ29yZTo6ZGVmYXVs
dFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIEVYUEVDVF9UUlVFKG1hc3RlcktleSk7CiAKICAg
ICBWZWN0b3I8dWludDhfdD4gY3J5cHRvS2V5KDE2LCAxKTsKICAgICBWZWN0b3I8dWludDhfdD4g
d3JhcHBlZEtleTsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjp3cmFwU2VyaWFsaXplZENyeXB0
b0tleShtYXN0ZXJLZXksIGNyeXB0b0tleSwgd3JhcHBlZEtleSkpOworICAgIEVYUEVDVF9UUlVF
KFdlYkNvcmU6OndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KCptYXN0ZXJLZXksIGNyeXB0b0tleSwg
d3JhcHBlZEtleSkpOwogICAgIEVYUEVDVF9UUlVFKGNyeXB0b0tleSAhPSB3cmFwcGVkS2V5KTsK
ICAgICAvLyBlbnN1cmUgd3JhcHBlZEtleSBkb2Vzbid0IGNvbnRhaW4gY3J5cHRvS2V5CiAgICAg
Ym9vbCBub3RDb250YWluZWQgPSB0cnVlOwpAQCAtOTAsNyArOTAsNyBAQCBURVNUX0YoU2VyaWFs
aXplZENyeXB0b0tleVdyYXBUZXN0LCBTZXJpCiAgICAgRVhQRUNUX1RSVUUobm90Q29udGFpbmVk
KTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB1bndyYXBwZWRLZXk7Ci0gICAgRVhQRUNUX1RSVUUo
V2ViQ29yZTo6dW53cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIHdyYXBwZWRLZXks
IHVud3JhcHBlZEtleSkpOworICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OnVud3JhcFNlcmlhbGl6
ZWRDcnlwdG9LZXkoKm1hc3RlcktleSwgd3JhcHBlZEtleSwgdW53cmFwcGVkS2V5KSk7CiAgICAg
RVhQRUNUX1RSVUUodW53cmFwcGVkS2V5ID09IGNyeXB0b0tleSk7CiB9CiAKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0NoYWxsZW5nZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc2LDEzICsxNzYsMTAgQEAgUmV0YWlu
UHRyPFNlY0lkZW50aXR5UmVmPiB0ZXN0SWRlbnRpdHkyKAogICAgICJKQUgybnhLR3VxdEFLMmhX
YkFDdTYxUlQ1Z0FxQXYvaEI5SlluYzJPaVEyVm1qWWtPazJHRWRJam4weFNnWDdXIgogICAgICJt
SS9oSGJ4S01HM1JrdjlxMUN4K1dCL3YxdDg9Iik7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gcHJp
dmF0ZUtleUJ5dGVzOwotICAgIGJhc2U2NERlY29kZShwZW1FbmNvZGVkUHJpdmF0ZUtleSwgcHJp
dmF0ZUtleUJ5dGVzLCBXVEY6OkJhc2U2NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwor
ICAgIGF1dG8gcHJpdmF0ZUtleUJ5dGVzID0gYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRQcml2YXRl
S2V5KTsKKyAgICBhdXRvIGNlcnRpZmljYXRlQnl0ZXMgPSBiYXNlNjREZWNvZGUocGVtRW5jb2Rl
ZENlcnRpZmljYXRlKTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBjZXJ0aWZpY2F0ZUJ5dGVzOwot
ICAgIGJhc2U2NERlY29kZShwZW1FbmNvZGVkQ2VydGlmaWNhdGUsIGNlcnRpZmljYXRlQnl0ZXMs
IFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6QmFzZTY0RGVmYXVsdCk7Ci0KLSAgICByZXR1cm4g
Y3JlYXRlVGVzdElkZW50aXR5KHByaXZhdGVLZXlCeXRlcywgY2VydGlmaWNhdGVCeXRlcyk7Cisg
ICAgcmV0dXJuIGNyZWF0ZVRlc3RJZGVudGl0eShXVEZNb3ZlKCpwcml2YXRlS2V5Qnl0ZXMpLCBX
VEZNb3ZlKCpjZXJ0aWZpY2F0ZUJ5dGVzKSk7CiB9CiAKIHN0YXRpYyBSZXRhaW5QdHI8TlNVUkxD
cmVkZW50aWFsPiBjcmVkZW50aWFsV2l0aElkZW50aXR5KCkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRXZlbnRBdHRyaWJ1dGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0V2ZW50QXR0cmlidXRpb24u
bW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvRXZlbnRBdHRyaWJ1dGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMTg0LDEzICsxODQs
MTIgQEAgVEVTVChFdmVudEF0dHJpYnV0aW9uLCBGcmF1ZFByZXZlbnRpb24pCiAgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIGVuZCA9IHJlcXVlc3QyU3RyaW5nLmZpbmQoJyInLCBzdGFydCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRva2VuID0gcmVxdWVzdDJTdHJpbmcuc3Vi
c3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBibGluZGVkTWVzc2FnZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJh
c2U2NFVSTERlY29kZSh0b2tlbiwgYmxpbmRlZE1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byBibGluZGVkTWVzc2FnZSA9IGJhc2U2NFVSTERlY29kZSh0b2tlbik7CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjY3JzYWJzc2FfY2lwaGVyc3VpdGUg
KmNpcGhlcnN1aXRlID0gJmNjcnNhYnNzYV9jaXBoZXJzdWl0ZV9yc2E0MDk2X3NoYTM4NDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gYmxpbmRlZFNpZ25hdHVyZSA9IGFkb3B0TlMoW1tO
U011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0aExlbmd0aDogbW9kdWx1c05CeXRlc10pOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY2Nyc2Fic3NhX3NpZ25fYmxpbmRlZF9tZXNzYWdlKGNpcGhl
cnN1aXRlLCByc2FQcml2YXRlS2V5LCBibGluZGVkTWVzc2FnZS5kYXRhKCksIGJsaW5kZWRNZXNz
YWdlLnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAqPihbYmxpbmRlZFNpZ25hdHVyZSBtdXRh
YmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSwgcm5nKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gdW5saW5rYWJsZVRva2VuID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUo
W2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gYmxpbmRlZFNpZ25hdHVyZSA9IGFkb3B0TlMoW1tO
U011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0aExlbmd0aDptb2R1bHVzTkJ5dGVzXSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjY3JzYWJzc2Ffc2lnbl9ibGluZGVkX21lc3NhZ2UoY2lwaGVy
c3VpdGUsIHJzYVByaXZhdGVLZXksIGJsaW5kZWRNZXNzYWdlLT5kYXRhKCksIGJsaW5kZWRNZXNz
YWdlLT5zaXplKCksIHN0YXRpY19jYXN0PHVpbnQ4X3QgKj4oW2JsaW5kZWRTaWduYXR1cmUgbXV0
YWJsZUJ5dGVzXSksIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0sIHJuZyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIHVubGlua2FibGVUb2tlbiA9IG1ha2VTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlZChbYmxpbmRlZFNpZ25hdHVyZSBieXRlc10sIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0
aF0pKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhhbXBsZSByZXNwb25zZTogeyAi
dW5saW5rYWJsZV90b2tlbiI6ICJBQkNEIiB9LiAiQUJDRCIgc2hvdWxkIGJlIEJhc2U2NFVSTCBl
bmNvZGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byByZXNwb25zZSA9IG1ha2VTdHJp
bmcoIkhUVFAvMS4xIDIwMCBPS1xyXG4iCkBAIC0yMjIsMTggKzIyMSwxNiBAQCBURVNUKEV2ZW50
QXR0cmlidXRpb24sIEZyYXVkUHJldmVudGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGFydCArPSBrZXkubGVuZ3RoKCkgKyAzOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZW5kID0gcmVxdWVzdDRTdHJpbmcuZmluZCgn
IicsIHN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IHRva2VuID0gcmVxdWVzdDRTdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRv
a2VuVmVjdG9yOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2
NFVSTERlY29kZSh0b2tlbiwgdG9rZW5WZWN0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdG9rZW5EYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdFdpdGhCeXRlczp0b2tlblZlY3Rvci5kYXRhKCkgbGVuZ3RoOnRva2VuVmVjdG9yLnNpemUo
KV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdG9rZW5W
ZWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUodG9rZW4pOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdG9rZW5EYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdFdpdGhCeXRlczp0b2tlblZlY3Rvci0+ZGF0YSgpIGxlbmd0aDp0b2tlblZlY3Rvci0+c2l6
ZSgpXSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBT
dHJpbmcoInNvdXJjZV9zZWNyZXRfdG9rZW5fc2lnbmF0dXJlIik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSByZXF1ZXN0NFN0cmluZy5maW5kKGtleSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKz0ga2V5Lmxl
bmd0aCgpICsgMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQg
PSByZXF1ZXN0NFN0cmluZy5maW5kKCciJywgc3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gc2lnbmF0dXJlID0gcmVxdWVzdDRTdHJpbmcuc3Vic3Ry
aW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNpZ25hdHVyZVZlY3RvcjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjRVUkxEZWNvZGUoc2lnbmF0dXJlLCBzaWdu
YXR1cmVWZWN0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gc2lnbmF0dXJlRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6
c2lnbmF0dXJlVmVjdG9yLmRhdGEoKSBsZW5ndGg6c2lnbmF0dXJlVmVjdG9yLnNpemUoKV0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2lnbmF0dXJlVmVj
dG9yID0gYmFzZTY0VVJMRGVjb2RlKHNpZ25hdHVyZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byBzaWduYXR1cmVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBh
bGxvY10gaW5pdFdpdGhCeXRlczpzaWduYXR1cmVWZWN0b3ItPmRhdGEoKSBsZW5ndGg6c2lnbmF0
dXJlVmVjdG9yLT5zaXplKCldKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVYUEVDVF9UUlVFKFNlY0tleVZlcmlmeVNpZ25hdHVyZShzZWNLZXkuZ2V0KCksIGtT
ZWNLZXlBbGdvcml0aG1SU0FTaWduYXR1cmVNZXNzYWdlUFNTU0hBMzg0LCAoX19icmlkZ2UgQ0ZE
YXRhUmVmKXRva2VuRGF0YS5nZXQoKSwgKF9fYnJpZGdlIENGRGF0YVJlZilzaWduYXR1cmVEYXRh
LmdldCgpLCBOVUxMKSk7CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1NT
TEtleUdlbmVyYXRvci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L21hYy9TU0xLZXlHZW5lcmF0b3IubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdlbmVyYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAt
OTgsOCArOTgsOCBAQCBURVNUX0YoU1NMS2V5R2VuZXJhdG9yVGVzdCwgRGVmYXVsdFRlc3QpCiAg
ICAgY2hhciBjaGFsbGVuZ2VbXSA9ICIwMTIzNDU2Nzg5IjsKICAgICBhdXRvIHJhd1Jlc3VsdCA9
IFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZygwLCBjaGFsbGVuZ2Us
IHVybCk7CiAgICAgQVNTRVJUX0ZBTFNFKHJhd1Jlc3VsdC5pc0VtcHR5KCkpOwotICAgIFZlY3Rv
cjx1aW50OF90PiBkZXJSZXN1bHQ7Ci0gICAgQVNTRVJUX1RSVUUoYmFzZTY0RGVjb2RlKHJhd1Jl
c3VsdCwgZGVyUmVzdWx0KSk7CisgICAgYXV0byBkZXJSZXN1bHQgPSBiYXNlNjREZWNvZGUocmF3
UmVzdWx0KTsKKyAgICBBU1NFUlRfVFJVRShkZXJSZXN1bHQpOwogCiAgICAgU2VjQXNuMUNvZGVy
UmVmIGNvZGVyID0gbnVsbHB0cjsKICAgICBBU1NFUlRfRVEoZXJyU2VjU3VjY2VzcywgU2VjQXNu
MUNvZGVyQ3JlYXRlKCZjb2RlcikpOwpAQCAtMTA4LDcgKzEwOCw3IEBAIFRFU1RfRihTU0xLZXlH
ZW5lcmF0b3JUZXN0LCBEZWZhdWx0VGVzdCkKICAgICB9KTsKIAogICAgIFNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZSBkZWNvZGVkUmVzdWx0IHsgfTsKLSAgICBTZWNBc24xSXRlbSBkZXJSZXN1
bHRJdGVtIHsgZGVyUmVzdWx0LnNpemUoKSwgZGVyUmVzdWx0LmRhdGEoKSB9OworICAgIFNlY0Fz
bjFJdGVtIGRlclJlc3VsdEl0ZW0geyBkZXJSZXN1bHQtPnNpemUoKSwgZGVyUmVzdWx0LT5kYXRh
KCkgfTsKICAgICBBU1NFUlRfRVEoZXJyU2VjU3VjY2VzcywgU2VjQXNuMURlY29kZURhdGEoY29k
ZXIsICZkZXJSZXN1bHRJdGVtLCBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VUZW1wbGF0ZSwg
JmRlY29kZWRSZXN1bHQpKTsKIAogICAgIC8vIENoZWNrIGNoYWxsZW5nZQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDQsNyArMzQ0LDcgQEAgdm9pZCBDb25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hha2UoQ29tcAog
ICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
Pih3ZWJTb2NrZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKICAgICAgICAg
ICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgICAgICAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNo
KTsKLSAgICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaGFzaC5kYXRhKCksIFNIQTE6Omhh
c2hTaXplKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoaGFz
aC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKSk7CiAgICAgICAgIH07CiAKICAgICAgICAgY29ubmVj
dGlvbi5zZW5kKEhUVFBSZXNwb25zZSgxMDEsIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429014</attachid>
            <date>2021-05-18 18:33:15 -0700</date>
            <delta_ts>2021-05-18 19:01:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210518183314.patch</filename>
            <type>text/plain</type>
            <size>190219</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIHd0Zi90ZXh0
L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVybmFsKToKKyAgICAg
ICAgKFdURjo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRV
UkxEZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5oOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgor
ICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNv
ZGUpOgorICAgICAgICAoV1RGOjppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdURjo6Y2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNl
NjRFbmNvZGVkKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlZCk6CisgICAgICAgIChX
VEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpTdHJpbmdUeXBlQWRh
cHRlcik6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRp
b24+OjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNl
NjRTcGVjaWZpY2F0aW9uPjo6aXM4Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlw
ZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46OndyaXRlVG8gY29uc3QpOgorCiAyMDIxLTA1
LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXpl
IC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dURi93
dGYvdGV4dC9CYXNlNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAg
IENvcHlyaWdodCAoQykgMjAwMC0yMDAxIERhd2l0IEFsZW1heWVodSA8YWRhd2l0QGtkZS5vcmc+
CiAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9y
Zz4KLSAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5z
dGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMTMgKzI1
LDE2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbmNsdWRlIDxsaW1pdHMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNvbnN0IGNoYXIgbm9uQWxwaGFiZXQgPSAtMTsK
IAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RW5jTWFwWzY0XSA9IHsKK3N0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgZW5jb2RlTWFwU2l6ZSA9IDY0Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBkZWNvZGVNYXBTaXplID0gMTI4OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRFbmNNYXBb
ZW5jb2RlTWFwU2l6ZV0gPSB7CiAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0
NiwgMHg0NywgMHg0OCwKICAgICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAw
eDRGLCAweDUwLAogICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcs
IDB4NTgsCkBAIC00Miw3ICs0NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVuY01hcFs2
NF0gPSB7CiAgICAgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHgy
RgogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RGVjTWFwWzEyOF0gPSB7CitzdGF0aWMg
Y29uc3QgY2hhciBiYXNlNjREZWNNYXBbZGVjb2RlTWFwU2l6ZV0gPSB7CiAgICAgbm9uQWxwaGFi
ZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCkBAIC02MSw3ICs2NCw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyIGJhc2U2NERlY01hcFsxMjhdID0gewogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJl
dAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IHsKK3N0YXRp
YyBjb25zdCBjaGFyIGJhc2U2NFVSTEVuY01hcFtlbmNvZGVNYXBTaXplXSA9IHsKICAgICAweDQx
LCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAogICAgIDB4NDksIDB4
NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCiAgICAgMHg1MSwgMHg1Miwg
MHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKQEAgLTcyLDcgKzc1LDcgQEAgc3Rh
dGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IAogICAgIDB4MzQsIDB4MzUsIDB4
MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4MkQsIDB4NUYKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFy
IGJhc2U2NFVSTERlY01hcFsxMjhdID0geworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRGVj
TWFwW2RlY29kZU1hcFNpemVdID0gewogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9u
QWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsCiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LApAQCAtOTEsMjQzICs5NCwyMTggQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJM
RGVjTWFwWzEyOF0gPQogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0LCBub25BbHBo
YWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsKIAotc3RhdGlj
IGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3ksIGNvbnN0IGNoYXIgKCZlbmNvZGVNYXApWzY0XSkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVpbnQ4
X3QqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUq
IGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNs
ZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVzdGlu
YXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUo
aW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5ndGgpOwogCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSAib3V0TGVuZ3Ro
IiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkg
cHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0gICAgY29uc3QgdW5zaWduZWQg
bWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwotICAg
IGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRv
IGVuY29kZU1hcCA9IChtYXAgPT0gQmFzZTY0RW5jb2RlTWFwOjpVUkwpID8gYmFzZTY0VVJMRW5j
TWFwIDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9IDA7CiAgICAgdW5zaWdu
ZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0gICAgdW5zaWduZWQgb3V0
TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGluc2VydExGcyA9IChwb2xp
Y3kgPT0gQmFzZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnMgJiYgZGVzdGluYXRpb25MZW5ndGgg
PiBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOwogCi0gICAgLy8gRGVh
bCB3aXRoIHRoZSA3NiBjaGFyYWN0ZXIgcGVyIGxpbmUgbGltaXQgc3BlY2lmaWVkIGluIFJGQyAy
MDQ1LgotICAgIGJvb2wgaW5zZXJ0TEZzID0gKHBvbGljeSA9PSBCYXNlNjRJbnNlcnRMRnMgJiYg
b3V0TGVuZ3RoID4gNzYpOwotICAgIGlmIChpbnNlcnRMRnMpCi0gICAgICAgIG91dExlbmd0aCAr
PSAoKG91dExlbmd0aCAtIDEpIC8gNzYpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBvdXQu
Z3JvdyhvdXRMZW5ndGgpOwotCi0gICAgLy8gMy1ieXRlIHRvIDQtYnl0ZSBjb252ZXJzaW9uICsg
MC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgotICAgIGlmIChsZW4gPiAxKSB7Ci0g
ICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAgIGlmIChpbnB1dExlbmd0aCA+IDEp
IHsKKyAgICAgICAgd2hpbGUgKHNpZHggPCBpbnB1dExlbmd0aCAtIDIpIHsKICAgICAgICAgICAg
IGlmIChpbnNlcnRMRnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoY291bnQgJiYgIShjb3VudCAl
IDc2KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOworICAgICAgICAg
ICAgICAgIGlmIChjb3VudCAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVu
SW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHgrK10gPSAnXG4nOwogICAgICAgICAgICAgICAgIGNvdW50ICs9IDQ7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA+PiAy
KSAmIDA3N107Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lk
eCArIDFdID4+IDQpICYgMDE3KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3NyldOwotICAgICAg
ICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAyXSA+PiA2KSAmIDAw
MykgfCAoKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlk
eCsrXSA9IGVuY29kZU1hcFtkYXRhW3NpZHggKyAyXSAmIDA3N107CisKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXREYXRhQnVmZmVy
W3NpZHggICAgXSA+PiAyKSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZm
ZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPj4gNCkg
JiAwMTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3KV07CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0
RGF0YUJ1ZmZlcltzaWR4ICsgMl0gPj4gNikgJiAwMDMpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lk
eCArIDFdIDw8IDIpICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJb
ZGlkeCsrXSA9IGVuY29kZU1hcFsgIGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0gICAgICAgJiAw
NzddOwogICAgICAgICAgICAgc2lkeCArPSAzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KHNpZHggPCBsZW4pIHsKLSAgICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAh
KGNvdW50ICUgNzYpKQotICAgICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7Ci0KLSAgICAgICAg
b3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzddOwotICAgICAg
ICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2Rl
TWFwWygoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYg
MDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4ICsg
MV0gPDwgMikgJiAwNzddOworICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsKKyAgICAgICAg
aWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExp
bmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlcltkaWR4KytdID0gJ1xuJzsKKworICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlk
eCsrXSA9IGVuY29kZU1hcFsoaW5wdXREYXRhQnVmZmVyW3NpZHhdID4+IDIpICYgMDc3XTsKKyAg
ICAgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHgg
KyAxXSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA8PCA0KSAmIDA3Nyld
OworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBb
IChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA8PCA0KSAm
IDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29k
ZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzddOwogICAgIH0KIAot
ICAgIC8vIEFkZCBwYWRkaW5nCi0gICAgaWYgKHBvbGljeSA9PSBCYXNlNjRVUkxQb2xpY3kpCi0g
ICAgICAgIG91dC5yZXNpemUoZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdoaWxlIChkaWR4
IDwgb3V0LnNpemUoKSkgewotICAgICAgICAgICAgb3V0W2RpZHhdID0gJz0nOwotICAgICAgICAg
ICAgKytkaWR4OwotICAgICAgICB9CisgICAgQVNTRVJUKHBvbGljeSAhPSBCYXNlNjRFbmNvZGVQ
b2xpY3k6OlVSTCB8fCBkaWR4ID09IGRlc3RpbmF0aW9uTGVuZ3RoKTsKKworICAgIHdoaWxlIChk
aWR4IDwgZGVzdGluYXRpb25MZW5ndGgpIHsKKyAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHhdID0gJz0nOworICAgICAgICArK2RpZHg7CiAgICAgfQogfQogCi1TdHJpbmcgYmFzZTY0
RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSkKK3N0YXRpYyBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBWZWN0b3I8
Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5j
TWFwKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwor
ICAgIGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShp
bnB1dExlbmd0aCwgcG9saWN5KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGRlc3RpbmF0aW9uVmVjdG9yKGRlc3Rp
bmF0aW9uTGVuZ3RoKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChpbnB1dERhdGFCdWZmZXIs
IGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvblZlY3Rvci5kYXRhKCksIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uVmVjdG9yOwogfQogCi12b2lk
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFy
PiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQorVmVjdG9yPGNoYXI+IGJhc2U2NEVu
Y29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJh
c2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRh
KSwgbGVuLCBvdXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5j
b2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciks
IGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUo
Y29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBiYXNlNjRFbmNvZGUoY29u
c3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBCYXNlNjRVUkxQb2xpY3ksIGJh
c2U2NFVSTEVuY01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQu
c2l6ZSgpKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm47Cisg
ICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0
aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0
IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQpCit2b2lkIGJhc2U2
NEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3Ro
LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0
aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
ZGF0YSksIGxlbiwgb3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7CisgICAg
aWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGJhc2U2NEVuY29k
ZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZmZXIpLCBp
bnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9s
aWN5LCBtYXApOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBib29s
IGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyJiBvdXQsIHVuc2lnbmVkIG9wdGlvbnMsIGNv
bnN0IGNoYXIgKCZkZWNvZGVNYXApWzEyOF0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBp
bnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICBvdXQuY2xl
YXIoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFp
bnB1dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIFZlY3Rvcjx1aW50OF90PiB7IH07CiAKLSAgICBv
dXQuZ3JvdyhsZW5ndGgpOworICAgIGF1dG8gZGVjb2RlTWFwID0gKG1hcCA9PSBCYXNlNjREZWNv
ZGVNYXA6OlVSTCkgPyBiYXNlNjRVUkxEZWNNYXAgOiBiYXNlNjREZWNNYXA7CisKKyAgICBWZWN0
b3I8dWludDhfdD4gZGVzdGluYXRpb24oaW5wdXRMZW5ndGgpOwogCiAgICAgdW5zaWduZWQgZXF1
YWxzU2lnbkNvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBvdXRMZW5ndGggPSAwOwotICAgIGJvb2wg
aGFkRXJyb3IgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbmd0
aDsgKytpZHgpIHsKLSAgICAgICAgdW5zaWduZWQgY2ggPSBkYXRhW2lkeF07CisgICAgdW5zaWdu
ZWQgZGVzdGluYXRpb25MZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4
IDwgaW5wdXRMZW5ndGg7ICsraWR4KSB7CisgICAgICAgIHVuc2lnbmVkIGNoID0gaW5wdXREYXRh
QnVmZmVyW2lkeF07CiAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKICAgICAgICAgICAgICsrZXF1
YWxzU2lnbkNvdW50OwogICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIG5ldmVyIGJlIG1vcmUg
dGhhbiAyIHBhZGRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChvcHRpb25zICYgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKLSAgICAgICAgICAg
ICAgICBoYWRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAob3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRp
bmcpICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y2hhciBkZWNvZGVkQ2hhcmFjdGVyID0gY2ggPCBXVEZfQVJSQVlfTEVOR1RIKGRlY29kZU1hcCkg
PyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFiZXQ7CisgICAgICAgICAgICBjaGFyIGRlY29kZWRD
aGFyYWN0ZXIgPSBjaCA8IGRlY29kZU1hcFNpemUgPyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFi
ZXQ7CiAgICAgICAgICAgICBpZiAoZGVjb2RlZENoYXJhY3RlciAhPSBub25BbHBoYWJldCkgewot
ICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaGFkRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3V0W291dExlbmd0aCsrXSA9IGRlY29kZWRDaGFy
YWN0ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucyAmIEJhc2U2NElnbm9yZVNw
YWNlc0FuZE5ld0xpbmVzKQotICAgICAgICAgICAgICAgIHx8ICghaXNMYXRpbjEoY2gpIHx8ICFp
c0FTQ0lJU3BhY2UoY2gpIHx8ICgob3B0aW9ucyAmIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikg
JiYgY2ggPT0gJ1x2JykpKSB7Ci0gICAgICAgICAgICAgICAgaGFkRXJyb3IgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAg
ICAgZGVzdGluYXRpb25bZGVzdGluYXRpb25MZW5ndGgrK10gPSBkZWNvZGVkQ2hhcmFjdGVyOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRp
b25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykgfHwgKCFpc0xhdGluMShjaCkgfHwgIWlzQVND
SUlTcGFjZShjaCkgfHwgKG9wdGlvbnMuY29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlz
Y2FyZFZlcnRpY2FsVGFiKSAmJiBjaCA9PSAnXHYnKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Ly8gTWFrZSBzdXJlIHdlIHNocmluayBiYWNrIHRoZSBWZWN0b3IgYmVmb3JlIHJldHVybmluZy4g
b3V0TGVuZ3RoIG1heSBiZSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQKKyAgICAvLyBNYWtlIHN1cmUg
d2Ugc2hyaW5rIGJhY2sgdGhlIFZlY3RvciBiZWZvcmUgcmV0dXJuaW5nLiBkZXN0aW5hdGlvbkxl
bmd0aCBtYXkgYmUgc2hvcnRlciB0aGFuIGV4cGVjdGVkCiAgICAgLy8gaW4gY2FzZSBvZiBlcnJv
ciBvciBpbiBjYXNlIG9mIGlnbm9yZWQgc3BhY2VzLgotICAgIGlmIChvdXRMZW5ndGggPCBvdXQu
c2l6ZSgpKQotICAgICAgICBvdXQuc2hyaW5rKG91dExlbmd0aCk7Ci0KLSAgICBpZiAoaGFkRXJy
b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGggPCBk
ZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNocmluayhkZXN0aW5hdGlv
bkxlbmd0aCk7CiAKLSAgICBpZiAoIW91dExlbmd0aCkKLSAgICAgICAgcmV0dXJuICFlcXVhbHNT
aWduQ291bnQ7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkgeworICAgICAgICBpZiAoIWVx
dWFsc1NpZ25Db3VudCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IHJldHVybiBWZWN0b3I8dWludDhfdD4geyB9OworICAgIH0KIAogICAgIC8vIFRoZSBzaG91bGQg
YmUgbm8gcGFkZGluZyBpZiBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiA0LgotICAgIC8vIFdlIHVz
ZSAob3V0TGVuZ3RoICsgZXF1YWxzU2lnbkNvdW50KSBpbnN0ZWFkIG9mIGxlbmd0aCBiZWNhdXNl
IHdlIGRvbid0IHdhbnQgdG8gYWNjb3VudCBmb3IgaWdub3JlZCBjaGFyYWN0ZXJzIChpLmUuIHNw
YWNlcykuCi0gICAgaWYgKG9wdGlvbnMgJiBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgJiYgZXF1YWxz
U2lnbkNvdW50ICYmIChvdXRMZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIC8vIFdlIHVzZSAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNT
aWduQ291bnQpIGluc3RlYWQgb2YgbGVuZ3RoIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhY2Nv
dW50IGZvciBpZ25vcmVkIGNoYXJhY3RlcnMgKGkuZS4gc3BhY2VzKS4KKyAgICBpZiAob3B0aW9u
cy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpICYmIGVxdWFs
c1NpZ25Db3VudCAmJiAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFZhbGlkIGRhdGEgaXMgKG4g
KiA0ICsgWzAsMiwzXSkgY2hhcmFjdGVycyBsb25nLgotICAgIGlmICgob3V0TGVuZ3RoICUgNCkg
PT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoZGVzdGluYXRpb25MZW5ndGgg
JSA0KSA9PSAxKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIC8vIDQt
Ynl0ZSB0byAzLWJ5dGUgY29udmVyc2lvbgotICAgIG91dExlbmd0aCAtPSAob3V0TGVuZ3RoICsg
MykgLyA0OwotICAgIGlmICghb3V0TGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVzdGluYXRpb25MZW5ndGggLT0gKGRlc3RpbmF0aW9uTGVuZ3RoICsgMykgLyA0OworICAgIGlm
ICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICB1bnNpZ25lZCBzaWR4ID0gMDsKICAgICB1bnNpZ25lZCBkaWR4ID0gMDsKLSAgICBpZiAob3V0
TGVuZ3RoID4gMSkgewotICAgICAgICB3aGlsZSAoZGlkeCA8IG91dExlbmd0aCAtIDIpIHsKLSAg
ICAgICAgICAgIG91dFtkaWR4XSA9ICgoKG91dFtzaWR4XSA8PCAyKSAmIDI1NSkgfCAoKG91dFtz
aWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsKLSAgICAgICAgICAgIG91dFtkaWR4ICsgMV0gPSAoKChv
dXRbc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgob3V0W3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OwotICAgICAgICAgICAgb3V0W2RpZHggKyAyXSA9ICgoKG91dFtzaWR4ICsgMl0gPDwgNikgJiAy
NTUpIHwgKG91dFtzaWR4ICsgM10gJiAwNzcpKTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGgg
PiAxKSB7CisgICAgICAgIHdoaWxlIChkaWR4IDwgZGVzdGluYXRpb25MZW5ndGggLSAyKSB7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbltkaWR4ICAgIF0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICAg
IF0gPDwgMikgJiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2RpZHggKyAxXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHgg
KyAxXSA8PCA0KSAmIDI1NSkgfCAoKGRlc3RpbmF0aW9uW3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OworICAgICAgICAgICAgZGVzdGluYXRpb25bZGlkeCArIDJdID0gKCgoZGVzdGluYXRpb25bc2lk
eCArIDJdIDw8IDYpICYgMjU1KSB8ICAoZGVzdGluYXRpb25bc2lkeCArIDNdICAgICAgICYgMDc3
KSk7CiAgICAgICAgICAgICBzaWR4ICs9IDQ7CiAgICAgICAgICAgICBkaWR4ICs9IDM7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2Rp
ZHhdID0gKCgob3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHggKyAxXSA+PiA0KSAm
IDAwMykpOwotCi0gICAgaWYgKCsrZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2RpZHhd
ID0gKCgob3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikg
JiAwMTcpKTsKKyAgICBpZiAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0
aW5hdGlvbltkaWR4XSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggICAgXSA8PCAyKSAmIDI1NSkgfCAo
KGRlc3RpbmF0aW9uW3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOwogCi0gICAgaWYgKG91dExlbmd0
aCA8IG91dC5zaXplKCkpCi0gICAgICAgIG91dC5zaHJpbmsob3V0TGVuZ3RoKTsKKyAgICBpZiAo
KytkaWR4IDwgZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0aW9uW2RpZHhdID0g
KCgoZGVzdGluYXRpb25bc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lk
eCArIDJdID4+IDIpICYgMDE3KSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGVzdGlu
YXRpb25MZW5ndGggPCBkZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNo
cmluayhkZXN0aW5hdGlvbkxlbmd0aCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwogfQogCi1i
b29sIGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZl
Y3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBs
ZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBvcHRpb25zLCBiYXNl
NjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlm
ICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2Rl
SW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3Ro
LCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29kZShTdHJpbmdWaWV3IGluLCBT
aWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQor
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5n
dGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChp
bi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwg
b3V0LCBvcHRpb25zLCBiYXNlNjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNl
NjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNsZWFy
KCk7Ci0KLSAgICAvLyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdl
LCBqdXN0IHJldHVybiBub3RoaW5nLgotICAgIGlmIChpbi5zaXplKCkgPiBVSU5UX01BWCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihpbi5kYXRhKCkpLCBpbi5zaXplKCksIG91dCwg
b3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKKyAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7CiB9
CiAKLWJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJh
c2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuLCBvdXQsIG9wdGlvbnMsIGJh
c2U2NERlY01hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1i
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbi5s
ZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0LCBCYXNl
NjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2
NFVSTERlY01hcCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAg
aWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0g
ICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwg
YmFzZTY0VVJMRGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hh
cmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXAp
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
KyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxl
bmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0KQogewotICAgIG91dC5jbGVhcigpOwotCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICBpZiAoaW4uc2l6ZSgpID4gVUlOVF9NQVgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oaW4uZGF0YSgpKSwgaW4uc2l6ZSgpLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJh
c2U2NFVSTERlY01hcCk7CisgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJM
KTsKIH0KIAotYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQogewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRV
UkxEZWNNYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDI1ICsyNywzNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdURiB7CiAKLWVudW0gQmFzZTY0RW5jb2RlUG9saWN5IHsKLSAgICBCYXNl
NjREb05vdEluc2VydExGcywKLSAgICBCYXNlNjRJbnNlcnRMRnMsCi0gICAgQmFzZTY0VVJMUG9s
aWN5IC8vIE5vIHBhZGRpbmcsIG5vIExGcy4KK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlUG9saWN5
IHsKKyAgICBEb05vdEluc2VydExGcywKKyAgICBJbnNlcnRMRnMsCisgICAgVVJMIC8vIE5vIHBh
ZGRpbmcsIG5vIExGcy4KIH07CiAKLWVudW0gQmFzZTY0RGVjb2RlT3B0aW9ucyB7Ci0gICAgQmFz
ZTY0RGVmYXVsdCA9IDAsCi0gICAgQmFzZTY0VmFsaWRhdGVQYWRkaW5nID0gMSA8PCAwLAotICAg
IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzID0gMSA8PCAxLAotICAgIEJhc2U2NERpc2Nh
cmRWZXJ0aWNhbFRhYiA9IDEgPDwgMiwKK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlTWFwIHsgRGVm
YXVsdCwgVVJMIH07CisKK2VudW0gY2xhc3MgQmFzZTY0RGVjb2RlT3B0aW9ucyA6IHVpbnQ4X3Qg
eworICAgIFZhbGlkYXRlUGFkZGluZyAgICAgICAgID0gMSA8PCAwLAorICAgIElnbm9yZVNwYWNl
c0FuZE5ld0xpbmVzID0gMSA8PCAxLAorICAgIERpc2NhcmRWZXJ0aWNhbFRhYiAgICAgID0gMSA8
PCAyLAogfTsKIAorZW51bSBjbGFzcyBCYXNlNjREZWNvZGVNYXAgeyBEZWZhdWx0LCBVUkwgfTsK
Kworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5J
bnNlcnRpbmdMRnMgPSA3NjsKKworLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2lj
YWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90aGluZy4KKy8vIFJhdGhlciB0aGFuIGJlaW5nIHBl
cmZlY3RseSBwcmVjaXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZhdGl2ZS4KK3N0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwor
CiBjbGFzcyBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgewogcHVibGljOgogICAg
IFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8Y2hhcj4mIHZlY3RvcikK
QEAgLTE0NCw5MCArMTU0LDE2MyBAQCBwcml2YXRlOgogICAgIH0gbV92ZWN0b3I7CiB9OwogCi1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExG
cyk7Ci12b2lkIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNl
cnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLVdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29k
ZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBD
U3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOworV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVu
c2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwg
VUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5
OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwg
dW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29k
ZU1hcDo6RGVmYXVsdCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JV
bnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOworVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9S
VF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0
cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2Rl
TWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8
QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29k
ZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQp
OworCitpbmxpbmUgVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlciBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFz
ZTY0RW5jb2RlTWFwIG1hcCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Cit9CisKK2lubGluZSBWZWN0b3I8Y2hhcj4g
YmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9s
aWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW5w
dXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOworfQorCisKKy8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBBbGwgdGhlIHNhbWUgZnVuY3Rpb25zIG1vZGlm
aWVkIGZvciBiYXNlNjR1cmwsIGFzIGRlZmluZWQgaW4gUkZDIDQ2NDguCisvLyBUaGlzIGZvcm1h
dCB1c2VzICctJyBhbmQgJ18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5Lgor
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9y
QWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOwotV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcsIFNpZ25lZE9yVW5zaWduZWRDaGFy
VmVjdG9yQWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOwotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYsIFNpZ25l
ZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERl
ZmF1bHQpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIq
LCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBv
cHRpb25zID0gQmFzZTY0RGVmYXVsdCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNv
bnN0IHZvaWQqLCB1bnNpZ25lZCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKENvbnN0
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKK1ZlY3RvcjxjaGFyPiBiYXNlNjRV
UkxFbmNvZGUoY29uc3QgQ1N0cmluZyYpOworCitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7CitXVEZfRVhQ
T1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoU3Ry
aW5nVmlldyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7CitXVEZfRVhQT1JUX1BSSVZBVEUg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciosIHVu
c2lnbmVkKTsKIAotaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25l
ZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91dCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZv
aWQqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRhdGEo
KSwgaW4uc2l6ZSgpLCBvdXQsIHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbnB1
dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwp
OwogfQogCi1pbmxpbmUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3Rv
cjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoraW5saW5lIFZlY3Rvcjxj
aGFyPiBiYXNlNjRVUkxFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgaW5wdXQpCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIG91
dCwgcG9saWN5KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQu
c2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFy
VmVjdG9yQWRhcHRlciBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0
b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGlucHV0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIHBvbGljeSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNv
ZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5n
IGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBp
c0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIHBvbGljeSk7CisgICAgcmV0
dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLycgfHwgYyA9
PSAnLScgfHwgYyA9PSAnXyc7CiB9CiAKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0vLyBBbGwgdGhlIHNhbWUgZnVuY3Rpb25zIG1vZGlmaWVkIGZvciBiYXNlNjR1cmwsIGFzIGRl
ZmluZWQgaW4gUkZDIDQ2NDguCi0vLyBUaGlzIGZvcm1hdCB1c2VzICctJyBhbmQgJ18nIGluc3Rl
YWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5LgotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KK2lubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZSh1bnNp
Z25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3sKKyAgICBpZiAo
IWlucHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgVmVjdG9yPGNoYXI+Jik7
Ci12b2lkIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgVmVjdG9yPGNoYXI+Jik7Ci12b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5n
JiwgVmVjdG9yPGNoYXI+Jik7CisgICAgaWYgKGlucHV0TGVuZ3RoID4gbWF4aW11bUJhc2U2NEVu
Y29kZXJJbnB1dEJ1ZmZlclNpemUpCisgICAgICAgIHJldHVybiAwOwogCi1XVEZfRVhQT1JUX1BS
SVZBVEUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
cik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmKTsKKyAgICBhdXRvIGJh
c2VQYWRkZWRFbmNvZGVkU2l6ZSA9IFsmXSB7CisgICAgICAgIHJldHVybiAoKGlucHV0TGVuZ3Ro
ICsgMikgLyAzKSAqIDQ7CisgICAgfTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0
VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
cik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldywg
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVdURl9FWFBPUlRfUFJJVkFURSBi
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBTaWduZWRPclVuc2lnbmVk
Q2hhclZlY3RvckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyKTsKKyAgICBhdXRvIGJhc2VVbnBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAgICAg
cmV0dXJuICgoaW5wdXRMZW5ndGggKiA0KSArIDIpIC8gMzsKKyAgICB9OworCisgICAgc3dpdGNo
IChwb2xpY3kpIHsKKyAgICBjYXNlIEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnM6
CisgICAgICAgIHJldHVybiBiYXNlUGFkZGVkRW5jb2RlZFNpemUoKTsKKworICAgIGNhc2UgQmFz
ZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnM6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBiYXNl
UGFkZGVkRW5jb2RlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0g
MSkgLyBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOworICAgIH0KIAot
aW5saW5lIHZvaWQgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91dCkKKyAgICBjYXNlIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMOgorICAgICAgICByZXR1cm4gYmFzZVVucGFkZGVkRW5jb2RlZFNpemUoKTsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3Ry
dWN0IEJhc2U2NFNwZWNpZmljYXRpb24geworICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKKyAg
ICB1bnNpZ25lZCBpbnB1dExlbmd0aDsKKyAgICBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5Owor
ICAgIEJhc2U2NEVuY29kZU1hcCBtYXA7Cit9OworCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KQogewotICAgIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLnNpemUoKSwgb3V0KTsKKyAg
ICByZXR1cm4geyBpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCB9OwogfQogCi1p
bmxpbmUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3RvcjxjaGFy
PiYgb3V0KQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChDb25zdFNp
Z25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCiB7Ci0gICAgYmFz
ZTY0VVJMRW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIG91dCk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSk7CiB9CiAKLWlu
bGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGluKQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChj
b25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NFVSTEVuY29k
ZShpbi5kYXRhKCksIGluLnNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQu
ZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5KTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNl
NjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4pCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0
aCgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNCYXNlNjRP
ckJhc2U2NFVSTENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCitpbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIGlucHV0KQogewotICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMg
PT0gJysnIHx8IGMgPT0gJy8nIHx8IGMgPT0gJy0nIHx8IGMgPT0gJ18nOworICAgIHJldHVybiBi
YXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xp
Y3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworfQorCitpbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IENTdHJpbmcmIGlucHV0KQoreworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKK3RlbXBsYXRlPD4g
Y2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj4geworcHVibGljOgor
ICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IEJhc2U2NFNwZWNpZmljYXRpb24mIGJhc2U2NCkK
KyAgICAgICAgOiBtX2Jhc2U2NCB7IGJhc2U2NCB9CisgICAgICAgICwgbV9lbmNvZGVkTGVuZ3Ro
IHsgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoYmFzZTY0LmlucHV0TGVuZ3RoLCBiYXNlNjQu
cG9saWN5KSB9CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5jb2RlZExlbmd0aDsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3
cml0ZVRvKENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAg
YmFzZTY0RW5jb2RlKG1fYmFzZTY0LmlucHV0RGF0YSwgbV9iYXNlNjQuaW5wdXRMZW5ndGgsIGRl
c3RpbmF0aW9uLCBtX2VuY29kZWRMZW5ndGgsIG1fYmFzZTY0LnBvbGljeSwgbV9iYXNlNjQubWFw
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzZTY0U3BlY2lmaWNhdGlvbiBtX2Jhc2U2NDsK
KyAgICB1bnNpZ25lZCBtX2VuY29kZWRMZW5ndGg7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAordXNpbmcgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOwogdXNpbmcgV1RGOjpCYXNlNjRFbmNv
ZGVQb2xpY3k7Ci11c2luZyBXVEY6OkJhc2U2NERvTm90SW5zZXJ0TEZzOwotdXNpbmcgV1RGOjpC
YXNlNjRJbnNlcnRMRnM7Ci11c2luZyBXVEY6OkJhc2U2NFZhbGlkYXRlUGFkZGluZzsKLXVzaW5n
IFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXM7Ci11c2luZyBXVEY6OkJhc2U2NERp
c2NhcmRWZXJ0aWNhbFRhYjsKLXVzaW5nIFdURjo6YmFzZTY0RW5jb2RlOwordXNpbmcgV1RGOjpC
YXNlNjRTcGVjaWZpY2F0aW9uOwogdXNpbmcgV1RGOjpiYXNlNjREZWNvZGU7Cit1c2luZyBXVEY6
OmJhc2U2NEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0RW5jb2RlZDsKK3VzaW5nIFdURjo6YmFz
ZTY0VVJMRGVjb2RlOwogdXNpbmcgV1RGOjpiYXNlNjRVUkxEZWNvZGU7Cit1c2luZyBXVEY6OmJh
c2U2NFVSTEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0VVJMRW5jb2RlZDsKIHVzaW5nIFdURjo6
aXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3RlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3
NzY4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1NSBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1v
ZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L0luaXREYXRhUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleUlEc0tl
eWlkcyk6CisgICAgICAgIChXZWJDb3JlOjpzYW5pdGl6ZUtleWlkcyk6CisgICAgICAgICogTW9k
dWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKToKKyAgICAgICAg
KiBNb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW06CisgICAgICAg
IChXZWJDb3JlOjpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
anNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlbUluQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXV0aGVudGljYXRvckNvb3JkaW5hdG9ySW50ZXJuYWw6OnByb2R1Y2VDbGllbnREYXRhSnNvbik6
CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwp
OgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVTZWNXZWJTb2NrZXRLZXkpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNvY2tldEFjY2VwdCk6Cisg
ICAgICAgICogY3J5cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmg6CisgICAgICAgICogY3J5
cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKiBjcnlw
dG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5QUVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6aW1w
b3J0SndrKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6ZXhwb3J0SndrIGNvbnN0
KToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9LZXlFQzo6aW1wb3J0SndrKToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9Dcnlw
dG9LZXlITUFDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmltcG9ydEp3
ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjpleHBvcnRKd2sgY29uc3QpOgor
ICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXlSU0E6OmltcG9ydEp3ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlS
U0E6OmV4cG9ydEp3ayBjb25zdCk6CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01h
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVs
ZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmluZE1hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpkZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICAqIGNyeXB0by9vcGVuc3NsL1Nlcmlh
bGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRh
VVJMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
TmV0d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291
cmNlc0RhdGE6OlJlc291cmNlRGF0YTo6ZGVjb2RlRGF0YVRvQ29udGVudCk6CisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaCk6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yOjpidWlsZFdlYlNvY2tldE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0
aFJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50
ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCk6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUGFnZUFnZW50OjpkYXRhQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmFyY2hpdmUpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6
CisgICAgICAgICogbG9hZGVyL0xvYWRlclN0cmF0ZWd5Lmg6CisgICAgICAgICogbG9hZGVyL1By
aXZhdGVDbGlja01lYXN1cmVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50OjpFcGhlbWVyYWxTb3VyY2VOb25jZTo6aXNWYWxpZCBjb25zdCk6CisgICAg
ICAgICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OmRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAgICAqIGxv
YWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
SFRNTEFyY2hpdmU6OmdlbmVyYXRlTUhUTUxEYXRhKToKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSFRNTFBhcnNlcjo6
cGFyc2VOZXh0UGFydCk6CisgICAgICAgICogbG9hZGVyL2NvY29hL1ByaXZhdGVDbGlja01lYXN1
cmVtZW50Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dDo6Y2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJsZVRva2VuKToKKyAgICAgICAgKFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VT
ZWNyZXRUb2tlbik6CisgICAgICAgICogcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmFzZTY0VXRpbGl0aWVzOjpidG9hKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2U2NFV0aWxpdGllczo6YXRvYik6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vuc2VGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0
cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtl
eUlkRnJvbVdlYk1Jbml0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
OjpyZXF1ZXN0TGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25G
YWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUxpY2Vuc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjpkaWRQcm92aWRl
UmVxdWVzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVW5pcXVlRm9udE5hbWUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlVW5pcXVlRm9udE5hbWUpOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsb2FkQmxvYlJlc291cmNlU3lu
Y2hyb25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5k
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJj
ZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q3JlZGVudGlhbEJhc2U6OnNlcmlhbGl6YXRpb25Gb3JCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbEJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNv
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVCYXNlNjQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRlY29kZUVzY2FwZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRlY29kZVN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9T
eW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91
c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25v
dXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIb3N0VExTQ2VydGlmaWNhdGVTZXQ6OmNvbXB1dGVD
ZXJ0aWZpY2F0ZUhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2Vx
dWVuY2VzLmg6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoIGNvbnN0KToKKwogMjAyMS0wNS0x
OCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVUF0gUmVt
b3RlQXVkaW9TZXNzaW9uIGNhbGxzIGludG8gQVZBdWRpb1Nlc3Npb24gd2hlbiBHUFVQIGlzIGVu
YWJsZWQsIGNhdXNpbmcgaGFuZ3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlw
dGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0
YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTUgKzgwLDE0IEBAIHN0YXRpYyBP
cHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4KICAgICAgICAgaWYgKCFrZXlJRCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFZlY3RvcjxjaGFyPiBrZXlJRERhdGE7Ci0g
ICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pKQor
ICAgICAgICBhdXRvIGtleUlERGF0YSA9IGJhc2U2NFVSTERlY29kZShrZXlJRCk7CisgICAgICAg
IGlmICgha2V5SUREYXRhKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGtl
eUlERGF0YS5zaXplKCkgPCBrS2V5SWRzTWluS2V5SWRTaXplSW5CeXRlcyB8fCBrZXlJRERhdGEu
c2l6ZSgpID4ga0tleUlkc01heEtleUlkU2l6ZUluQnl0ZXMpCisgICAgICAgIGlmIChrZXlJRERh
dGEtPnNpemUoKSA8IGtLZXlJZHNNaW5LZXlJZFNpemVJbkJ5dGVzIHx8IGtleUlERGF0YS0+c2l6
ZSgpID4ga0tleUlkc01heEtleUlkU2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgICAgIFJlZjxTaGFyZWRCdWZmZXI+IGtleUlEQnVmZmVyID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlJRERhdGEpKTsKLSAgICAgICAga2V5SURzLmFw
cGVuZChXVEZNb3ZlKGtleUlEQnVmZmVyKSk7CisgICAgICAgIGtleUlEcy5hcHBlbmQoU2hhcmVk
QnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqa2V5SUREYXRhKSkpOwogICAgIH0KIAogICAgIHJldHVy
biBrZXlJRHM7CkBAIC0xMDUsNyArMTA0LDcgQEAgc3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IHNhbml0aXplS2V5aQogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBhdXRvIGtpZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1
dG8mIGJ1ZmZlciA6IGtleUlEQnVmZmVyLnZhbHVlKCkpCi0gICAgICAgIGtpZHNBcnJheS0+cHVz
aFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXpl
KCkpKTsKKyAgICAgICAga2lkc0FycmF5LT5wdXNoU3RyaW5nKG1ha2VTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlZChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpKSk7CiAgICAgb2JqZWN0LT5z
ZXRBcnJheSgia2lkcyIsIFdURk1vdmUoa2lkc0FycmF5KSk7CiAKICAgICBDU3RyaW5nIGpzb25E
YXRhID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
bGVnYWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNl
c3Npb25DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwxMyArMTY5LDEzIEBAIGJv
b2wgQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoVWludDhBcnIKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtl
eURhdGE7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShyYXdLZXlEYXRhLCBrZXlEYXRh
KSB8fCBrZXlEYXRhLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBrZXlEYXRhID0gYmFz
ZTY0RGVjb2RlKHJhd0tleURhdGEpOworICAgICAgICAgICAgaWYgKCFrZXlEYXRhIHx8IGtleURh
dGEtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25D
bGVhcktleTo6dXBkYXRlKCVwKSAtIGZhaWxlZDogdW5hYmxlIHRvIGJhc2U2NCBkZWNvZGUga2V5
IiwgdGhpcyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIG1fY2FjaGVkS2V5cy5zZXQoa2V5SWQsIFdURk1vdmUoa2V5RGF0YSkpOworICAg
ICAgICAgICAgbV9jYWNoZWRLZXlzLnNldChrZXlJZCwgV1RGTW92ZSgqa2V5RGF0YSkpOwogICAg
ICAgICAgICAgZm91bmRWYWxpZEtleSA9IHRydWU7CiAgICAgICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudC5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDMsMTQgKzI0MywxMiBAQCB2b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojpw
b3N0RXZlCiAKIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQoTlNEYXRh
ICpkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBKU0NvbnRleHQgKmNvbnRleHQpCiB7Ci0g
ICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKFtkYXRhIGJ5dGVz
XSwgW2RhdGEgbGVuZ3RoXSwgYmFzZTY0RGF0YSk7Ci0KKyAgICAvLyBGSVhNRTogQWRkIG1ha2VD
RlN0cmluZy9tYWtlTlNTdHJpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkgU3RyaW5nIGFsbG9jYXRp
b24uCiAgICAgU3RyaW5nIGRhdGE2NDsKICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAg
ICAgICAgZGF0YTY0ID0gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERh
dGE7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFz
ZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKSk7CiAgICAg
ZWxzZQotICAgICAgICBkYXRhNjQgPSAiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKKyAgICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2
NCwiLCBiYXNlNjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOwogCiAgICAg
cmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDooaWQpZGF0YTY0LmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQpAQCAtMzQyLDkgKzM0MCw3IEBAIHN0YXRp
YyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGUKICAgICAgICAgaWQgdmFsdWUgPSBp
dGVtLnZhbHVlOwogICAgICAgICBOU1N0cmluZyAqbWltZVR5cGUgPSBbW2l0ZW0gZXh0cmFBdHRy
aWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJNSU1FdHlwZSJdOwogICAgICAgICBpZiAoW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dICYmIG1pbWVUeXBlKSB7Ci0gICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICAgICAgICAgIGJhc2U2NEVuY29kZShbdmFsdWUg
Ynl0ZXNdLCBbdmFsdWUgbGVuZ3RoXSwgYmFzZTY0RGF0YSk7Ci0gICAgICAgICAgICBTdHJpbmcg
ZGF0YTY0ID0gImRhdGE6IiArIFN0cmluZyhtaW1lVHlwZSkgKyAiO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKKyAgICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToiLCBTdHJp
bmcobWltZVR5cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFt2YWx1ZSBieXRlc10sIFt2
YWx1ZSBsZW5ndGhdKSk7CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6KF9fYnJp
ZGdlIE5TU3RyaW5nICopZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5OkAidmFs
dWUiXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBz
dGF0aWMgUmVmPEFycmF5QnVmZmVyPiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9iamVjdC0+
c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIFdURjo6YmFzZTY0VVJM
RW5jb2RlKGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOworICAgIG9iamVj
dC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChj
aGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVuZ2UubGVuZ3RoKCkpKSk7CiAgICAgb2JqZWN0LT5zZXRT
dHJpbmcoIm9yaWdpbiJfcywgb3JpZ2luLnRvUmF3U3RyaW5nKCkpOwogCiAgICAgYXV0byB1dGY4
SlNPTlN0cmluZyA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRp
YWwuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3
IEBAIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgUHUKIH0KIAogUHVibGlj
S2V5Q3JlZGVudGlhbDo6UHVibGljS2V5Q3JlZGVudGlhbChSZWY8QXV0aGVudGljYXRvclJlc3Bv
bnNlPiYmIHJlc3BvbnNlKQotICAgIDogQmFzaWNDcmVkZW50aWFsKFdURjo6YmFzZTY0VVJMRW5j
b2RlKHJlc3BvbnNlLT5yYXdJZCgpLT5kYXRhKCksIHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlTGVu
Z3RoKCkpLCBUeXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQorICAgIDogQmFzaWND
cmVkZW50aWFsKG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyZXNwb25zZS0+cmF3SWQoKS0+
ZGF0YSgpLCByZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSksIFR5cGU6OlB1YmxpY0tl
eSwgRGlzY292ZXJ5OjpSZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2Up
KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dEhhbmRzaGFrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZWNXZWJT
b2NrZXRLZXkoKQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uY2VTaXplID0gMTY7CiAgICAg
dW5zaWduZWQgY2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRv
bVZhbHVlcyhrZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShrZXksIG5v
bmNlU2l6ZSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChrZXksIG5vbmNl
U2l6ZSkpOwogfQogCiBTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNv
Y2tldEFjY2VwdChjb25zdCBTdHJpbmcmIHNlY1dlYlNvY2tldEtleSkKQEAgLTExMCw3ICsxMTAs
NyBAQCBTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlCiAgICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlE
KSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAg
ICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaGFzaC5k
YXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNv
ZGVkKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSkpOwogfQogCiBXZWJTb2NrZXRIYW5kc2hh
a2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90
b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgY2xpZW50T3JpZ2lu
LCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TZXJpYWxp
emVkQ3J5cHRvS2V5V3JhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9T
ZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBvZiBwcm90ZWN0aW9uIGlzIG5v
dCByZXF1aXJlZCBieSB0aGUgc3BlYyBhcyBvZiAxMSBEZWNlbWJlciAyMDE0OgogLy8gaHR0cHM6
Ly93d3cudzMub3JnL1RSL1dlYkNyeXB0b0FQSS8jc2VjdXJpdHktZGV2ZWxvcGVycwogCi1XRUJD
T1JFX0VYUE9SVCBib29sIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4
X3Q+Jik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkoKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZGVsZXRlRGVmYXVsdFdl
YkNyeXB0b01hc3RlcktleSgpOwogCiBXRUJDT1JFX0VYUE9SVCBib29sIHdyYXBTZXJpYWxpemVk
Q3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5LCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNH
Q3J5cHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjMsMTEgKzUyMywxMSBAQCBib29sIENyeXB0
b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVuCiAgICAgICAgIGlmIChxICYmIHEtPnNpemUo
KSA9PSBjdXJ2ZVVuY29tcHJlc3NlZFBvaW50U2l6ZShtX2N1cnZlKSkgewogICAgICAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGE7CiAgICAgICAgICAgICBhLmFwcGVuZChxLT5kYXRhKCkgKyAxLCB1
bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplKTsKLSAgICAgICAgICAgIGp3ay54ID0gYmFzZTY0
VVJMRW5jb2RlKGEpOworICAgICAgICAgICAgandrLnggPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoYSkpOwogCiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYjsKICAgICAgICAgICAg
IGIuYXBwZW5kKHEtPmRhdGEoKSArIDEgKyB1bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplLCB1
bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplKTsKLSAgICAgICAgICAgIGp3ay55ID0gYmFzZTY0
VVJMRW5jb2RlKGIpOworICAgICAgICAgICAgandrLnkgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoYikpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NDMsNyArNTQzLDcgQEAgYm9vbCBD
cnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogICAgICAgICAgICAgICAgICAgICAq
ZCA9IFdURk1vdmUocGFkZGVkRGF0YSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGUoKmQpOworICAgICAgICAgICAgICAgIGp3ay5k
ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCpkKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1NlcmlhbGl6
ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcEdDcnlwdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE1ICsyOSwxNCBAQAogI2lm
IEVOQUJMRShXRUJfQ1JZUFRPKQogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGdldERl
ZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCitPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogLy8gSW5pdGlhbGx5
IHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgd2VyZSBpbnRlbmRlZCB0byBwZXJmb3JtIEtFSyB3cmFw
cGluZyBhbmQgdW53cmFwcGluZywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUFFUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5QUVTLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTAgKzg4LDEw
IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEuay5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG9jdGV0U2VxdWVuY2U7Ci0gICAgaWYgKCFi
YXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rLCBvY3RldFNlcXVlbmNlKSkKKyAgICBhdXRvIG9jdGV0
U2VxdWVuY2UgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rKTsKKyAgICBpZiAoIW9jdGV0U2Vx
dWVuY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghY2FsbGJhY2sob2N0ZXRT
ZXF1ZW5jZS5zaXplKCkgKiA4LCBrZXlEYXRhLmFsZykpCisgICAgaWYgKCFjYWxsYmFjayhvY3Rl
dFNlcXVlbmNlLT5zaXplKCkgKiA4LCBrZXlEYXRhLmFsZykpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGlmICh1c2FnZXMgJiYgIWtleURhdGEudXNlLmlzTnVsbCgpICYmIGtleURhdGEu
dXNlICE9ICJlbmMiKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMCwxNCArMTAwLDE0
IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICBpZiAoa2V5
RGF0YS5leHQgJiYgIWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFjdGFibGUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMo
YWxnb3JpdGhtLCBXVEZNb3ZlKG9jdGV0U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCBXVEZNb3Zl
KCpvY3RldFNlcXVlbmNlKSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwogfQogCiBKc29uV2ViS2V5
IENyeXB0b0tleUFFUzo6ZXhwb3J0SndrKCkgY29uc3QKIHsKICAgICBKc29uV2ViS2V5IHJlc3Vs
dDsKICAgICByZXN1bHQua3R5ID0gIm9jdCI7Ci0gICAgcmVzdWx0LmsgPSBiYXNlNjRVUkxFbmNv
ZGUobV9rZXkpOworICAgIHJlc3VsdC5rID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKG1f
a2V5KSk7CiAgICAgcmVzdWx0LmtleV9vcHMgPSB1c2FnZXMoKTsKICAgICByZXN1bHQuZXh0ID0g
ZXh0cmFjdGFibGUoKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OCwyMiArOTgsMjIgQEAgUmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6aW1wb3J0Sgog
CiAgICAgaWYgKGtleURhdGEueC5pc051bGwoKSB8fCBrZXlEYXRhLnkuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90PiB4OwotICAgIGlmICghV1RG
OjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS54LCB4KSkKKyAgICBhdXRvIHggPSBiYXNlNjRVUkxE
ZWNvZGUoa2V5RGF0YS54KTsKKyAgICBpZiAoIXgpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIFZlY3Rvcjx1aW50OF90PiB5OwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5
RGF0YS55LCB5KSkKKyAgICBhdXRvIHkgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS55KTsKKyAg
ICBpZiAoIXkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmQuaXNO
dWxsKCkpIHsKICAgICAgICAgLy8gaW1wb3J0IHB1YmxpYyBrZXkKLSAgICAgICAgcmV0dXJuIHBs
YXRmb3JtSW1wb3J0SldLUHVibGljKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKHgp
LCBXVEZNb3ZlKHkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmV0dXJuIHBsYXRm
b3JtSW1wb3J0SldLUHVibGljKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKCp4KSwg
V1RGTW92ZSgqeSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgIH0KIAotICAgIFZlY3Rvcjx1
aW50OF90PiBkOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kLCBkKSkK
KyAgICBhdXRvIGQgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBpZiAoIWQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIGltcG9ydCBwcml2YXRlIGtleQotICAgIHJl
dHVybiBwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3VydmUsIFdU
Rk1vdmUoeCksIFdURk1vdmUoeSksIFdURk1vdmUoZCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwor
ICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3Vy
dmUsIFdURk1vdmUoKngpLCBXVEZNb3ZlKCp5KSwgV1RGTW92ZSgqZCksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogfQogCiBSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjppbXBvcnRTcGtp
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBjdXJ2
ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5
VXNhZ2VCaXRtYXAgdXNhZ2VzKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5SE1BQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5SE1BQy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOCArMTAz
LDggQEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5rLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4gb2N0ZXRTZXF1ZW5jZTsKLSAgICBpZiAo
IWJhc2U2NFVSTERlY29kZShrZXlEYXRhLmssIG9jdGV0U2VxdWVuY2UpKQorICAgIGF1dG8gb2N0
ZXRTZXF1ZW5jZSA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmspOworICAgIGlmICghb2N0ZXRT
ZXF1ZW5jZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFjYWxsYmFjayhoYXNo
LCBrZXlEYXRhLmFsZykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTE1LDE0ICsxMTUs
MTQgQEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgIGlmIChr
ZXlEYXRhLmV4dCAmJiAha2V5RGF0YS5leHQudmFsdWUoKSAmJiBleHRyYWN0YWJsZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3
KGxlbmd0aEJpdHMsIGhhc2gsIFdURk1vdmUob2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOworICAgIHJldHVybiBDcnlwdG9LZXlITUFDOjppbXBvcnRSYXcobGVuZ3RoQml0cywg
aGFzaCwgV1RGTW92ZSgqb2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQog
CiBKc29uV2ViS2V5IENyeXB0b0tleUhNQUM6OmV4cG9ydEp3aygpIGNvbnN0CiB7CiAgICAgSnNv
bldlYktleSByZXN1bHQ7CiAgICAgcmVzdWx0Lmt0eSA9ICJvY3QiOwotICAgIHJlc3VsdC5rID0g
YmFzZTY0VVJMRW5jb2RlKG1fa2V5KTsKKyAgICByZXN1bHQuayA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChtX2tleSkpOwogICAgIHJlc3VsdC5rZXlfb3BzID0gdXNhZ2VzKCk7CiAgICAg
cmVzdWx0LmV4dCA9IGV4dHJhY3RhYmxlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNjUgKzQ1LDg3IEBAIFJlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0
b0tleVJTQTo6aW1wb3IKIAogICAgIGlmIChrZXlEYXRhLm4uaXNOdWxsKCkgfHwga2V5RGF0YS5l
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4g
bW9kdWx1czsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEubiwgbW9kdWx1
cykpCisgICAgYXV0byBtb2R1bHVzID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEubik7CisgICAg
aWYgKCFtb2R1bHVzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBQZXIgUkZDIDc1
MTggU2VjdGlvbiA2LjMuMS4xOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUxOCNz
ZWN0aW9uLTYuMy4xLjEKLSAgICBpZiAoIW1vZHVsdXMuaXNFbXB0eSgpICYmICFtb2R1bHVzWzBd
KQotICAgICAgICBtb2R1bHVzLnJlbW92ZSgwKTsKLSAgICBWZWN0b3I8dWludDhfdD4gZXhwb25l
bnQ7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLmUsIGV4cG9uZW50KSkK
KyAgICBpZiAoIW1vZHVsdXMtPmlzRW1wdHkoKSAmJiAhbW9kdWx1cy0+YXQoMCkpCisgICAgICAg
IG1vZHVsdXMtPnJlbW92ZSgwKTsKKyAgICBhdXRvIGV4cG9uZW50ID0gYmFzZTY0VVJMRGVjb2Rl
KGtleURhdGEuZSk7CisgICAgaWYgKCFleHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgaWYgKGtleURhdGEuZC5pc051bGwoKSkgewogICAgICAgICAvLyBpbXBvcnQgcHVibGlj
IGtleQotICAgICAgICBhdXRvIHB1YmxpY0tleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21w
b25lbnRzOjpjcmVhdGVQdWJsaWMoV1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCkp
OworICAgICAgICBhdXRvIHB1YmxpY0tleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25l
bnRzOjpjcmVhdGVQdWJsaWMoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50KSk7
CiAgICAgICAgIC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEgaXMg
anVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBpZiBoYXNo
IGlzIFdURjo6bnVsbG9wdC4KICAgICAgICAgcmV0dXJuIENyeXB0b0tleVJTQTo6Y3JlYXRlKGFs
Z29yaXRobSwgaGFzaC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xKSwg
ISFoYXNoLCAqcHVibGljS2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAg
fQogCiAgICAgLy8gaW1wb3J0IHByaXZhdGUga2V5Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZh
dGVFeHBvbmVudDsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZCwgcHJp
dmF0ZUV4cG9uZW50KSkKKyAgICBhdXRvIHByaXZhdGVFeHBvbmVudCA9IGJhc2U2NFVSTERlY29k
ZShrZXlEYXRhLmQpOworICAgIGlmICghcHJpdmF0ZUV4cG9uZW50KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5wLmlzTnVsbCgpICYmIGtleURhdGEucS5pc051bGwo
KSAmJiBrZXlEYXRhLmRwLmlzTnVsbCgpICYmIGtleURhdGEuZHAuaXNOdWxsKCkgJiYga2V5RGF0
YS5xaS5pc051bGwoKSkgewotICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5
cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZN
b3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpKTsKKyAgICAgICAgYXV0byBw
cml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZh
dGUoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50KSwgV1RGTW92ZSgqcHJpdmF0
ZUV4cG9uZW50KSk7CiAgICAgICAgIC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cjo6U0hBXzEgaXMganVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVm
ZmVjdCBpZiBoYXNoIGlzIFdURjo6bnVsbG9wdC4KICAgICAgICAgcmV0dXJuIENyeXB0b0tleVJT
QTo6Y3JlYXRlKGFsZ29yaXRobSwgaGFzaC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OlNIQV8xKSwgISFoYXNoLCAqcHJpdmF0ZUtleUNvbXBvbmVudHMsIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogICAgIH0KIAogICAgIGlmIChrZXlEYXRhLnAuaXNOdWxsKCkgfHwga2V5RGF0YS5x
LmlzTnVsbCgpIHx8IGtleURhdGEuZHAuaXNOdWxsKCkgfHwga2V5RGF0YS5kcS5pc051bGwoKSB8
fCBrZXlEYXRhLnFpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBDcnlw
dG9LZXlSU0FDb21wb25lbnRzOjpQcmltZUluZm8gZmlyc3RQcmltZUluZm87Ci0gICAgQ3J5cHRv
S2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mbzsKLSAgICBpZiAoIVdU
Rjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEucCwgZmlyc3RQcmltZUluZm8ucHJpbWVGYWN0b3Ip
KQorICAgIAorICAgIGF1dG8gZmlyc3RQcmltZUZhY3RvciA9IGJhc2U2NFVSTERlY29kZShrZXlE
YXRhLnApOworICAgIGlmICghZmlyc3RQcmltZUZhY3RvcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRwLCBmaXJzdFByaW1l
SW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisgICAgYXV0byBmaXJzdEZhY3RvckNSVEV4cG9uZW50
ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZHApOworICAgIGlmICghZmlyc3RGYWN0b3JDUlRF
eHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVS
TERlY29kZShrZXlEYXRhLnEsIHNlY29uZFByaW1lSW5mby5wcmltZUZhY3RvcikpCisgICAgYXV0
byBzZWNvbmRQcmltZUZhY3RvciA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLnEpOworICAgIGlm
ICghc2Vjb25kUHJpbWVGYWN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICgh
V1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kcSwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNS
VEV4cG9uZW50KSkKKyAgICBhdXRvIHNlY29uZEZhY3RvckNSVEV4cG9uZW50ID0gYmFzZTY0VVJM
RGVjb2RlKGtleURhdGEuZHEpOworICAgIGlmICghc2Vjb25kRmFjdG9yQ1JURXhwb25lbnQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5
RGF0YS5xaSwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KSkKKyAgICBhdXRv
IHNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEucWkp
OworICAgIGlmICghc2Vjb25kRmFjdG9yQ1JUQ29lZmZpY2llbnQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGZpcnN0UHJp
bWVJbmZvOworICAgIGZpcnN0UHJpbWVJbmZvLnByaW1lRmFjdG9yID0gV1RGTW92ZSgqZmlyc3RQ
cmltZUZhY3Rvcik7CisgICAgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZN
b3ZlKCpmaXJzdEZhY3RvckNSVEV4cG9uZW50KTsKKyAgICAKKyAgICBDcnlwdG9LZXlSU0FDb21w
b25lbnRzOjpQcmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOworICAgIHNlY29uZFByaW1lSW5mby5w
cmltZUZhY3RvciA9IFdURk1vdmUoKnNlY29uZFByaW1lRmFjdG9yKTsKKyAgICBzZWNvbmRQcmlt
ZUluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZNb3ZlKCpzZWNvbmRGYWN0b3JDUlRFeHBvbmVu
dCk7CisgICAgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50ID0gV1RGTW92ZSgq
c2Vjb25kRmFjdG9yQ1JUQ29lZmZpY2llbnQpOworCiAgICAgaWYgKCFrZXlEYXRhLm90aCkgewot
ICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50
czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZN
b3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJp
bWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCB7IH0pOworICAgICAgICBhdXRvIHBy
aXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0
ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKCptb2R1bHVzKSwgV1RGTW92ZSgqZXhwb25lbnQp
LCBXVEZNb3ZlKCpwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RG
TW92ZShzZWNvbmRQcmltZUluZm8pLCB7IH0pOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxk
IG5vdCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJl
dHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRz
LCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAKICAgICBWZWN0b3I8Q3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclByaW1lSW5mb3M7CiAgICAgZm9yIChjb25zdCBh
dXRvJiB2YWx1ZSA6IGtleURhdGEub3RoLnZhbHVlKCkpIHsKLSAgICAgICAgQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87Ci0gICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxE
ZWNvZGUodmFsdWUuciwgaW5mby5wcmltZUZhY3RvcikpCisgICAgICAgIGF1dG8gcHJpbWVGYWN0
b3IgPSBiYXNlNjRVUkxEZWNvZGUodmFsdWUucik7CisgICAgICAgIGlmICghcHJpbWVGYWN0b3Ip
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVS
TERlY29kZSh2YWx1ZS5kLCBpbmZvLmZhY3RvckNSVEV4cG9uZW50KSkKKyAgICAgICAgYXV0byBm
YWN0b3JDUlRFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZSh2YWx1ZS5kKTsKKyAgICAgICAgaWYg
KCFmYWN0b3JDUlRFeHBvbmVudCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKHZhbHVlLnQsIGluZm8uZmFjdG9yQ1JUQ29lZmZp
Y2llbnQpKQorICAgICAgICBhdXRvIGZhY3RvckNSVENvZWZmaWNpZW50ID0gYmFzZTY0VVJMRGVj
b2RlKHZhbHVlLnQpOworICAgICAgICBpZiAoIWZhY3RvckNSVENvZWZmaWNpZW50KQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG90aGVyUHJpbWVJbmZvcy5hcHBlbmQoaW5m
byk7CisKKyAgICAgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87Cisg
ICAgICAgIGluZm8ucHJpbWVGYWN0b3IgPSBXVEZNb3ZlKCpwcmltZUZhY3Rvcik7CisgICAgICAg
IGluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZNb3ZlKCpmYWN0b3JDUlRFeHBvbmVudCk7Cisg
ICAgICAgIGluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQgPSBXVEZNb3ZlKCpmYWN0b3JDUlRDb2Vm
ZmljaWVudCk7CisKKyAgICAgICAgb3RoZXJQcmltZUluZm9zLmFwcGVuZChXVEZNb3ZlKGluZm8p
KTsKICAgICB9CiAKLSAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKG1vZHVs
dXMpLCBXVEZNb3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpLCBXVEZNb3Zl
KGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCBXVEZNb3ZlKG90aGVy
UHJpbWVJbmZvcykpOworICAgIGF1dG8gcHJpdmF0ZUtleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlS
U0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKFdURk1vdmUoKm1v
ZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVudCksIFdURk1vdmUoKnByaXZhdGVFeHBvbmVudCksIFdU
Rk1vdmUoZmlyc3RQcmltZUluZm8pLCBXVEZNb3ZlKHNlY29uZFByaW1lSW5mbyksIFdURk1vdmUo
b3RoZXJQcmltZUluZm9zKSk7CiAgICAgLy8gTm90aWNlOiBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpTSEFfMSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkg
ZWZmZWN0IGlmIGhhc2ggaXMgV1RGOjpudWxsb3B0LgogICAgIHJldHVybiBDcnlwdG9LZXlSU0E6
OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRzLCBleHRyYWN0YWJsZSwgdXNh
Z2VzKTsKIH0KQEAgLTExOCwzMCArMTQwLDMwIEBAIEpzb25XZWJLZXkgQ3J5cHRvS2V5UlNBOjpl
eHBvcnRKd2soKSBjb24KICAgICBhdXRvIHJzYUNvbXBvbmVudHMgPSBleHBvcnREYXRhKCk7CiAK
ICAgICAvLyBwdWJsaWMga2V5Ci0gICAgcmVzdWx0Lm4gPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29t
cG9uZW50cy0+bW9kdWx1cygpKTsKLSAgICByZXN1bHQuZSA9IGJhc2U2NFVSTEVuY29kZShyc2FD
b21wb25lbnRzLT5leHBvbmVudCgpKTsKKyAgICByZXN1bHQubiA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5tb2R1bHVzKCkpKTsKKyAgICByZXN1bHQuZSA9IG1h
a2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5leHBvbmVudCgpKSk7CiAg
ICAgaWYgKHJzYUNvbXBvbmVudHMtPnR5cGUoKSA9PSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpU
eXBlOjpQdWJsaWMpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvLyBwcml2YXRlIGtl
eQotICAgIHJlc3VsdC5kID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnByaXZhdGVF
eHBvbmVudCgpKTsKKyAgICByZXN1bHQuZCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChy
c2FDb21wb25lbnRzLT5wcml2YXRlRXhwb25lbnQoKSkpOwogICAgIGlmICghcnNhQ29tcG9uZW50
cy0+aGFzQWRkaXRpb25hbFByaXZhdGVLZXlQYXJhbWV0ZXJzKCkpCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAKLSAgICByZXN1bHQucCA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5m
aXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9yKTsKLSAgICByZXN1bHQucSA9IGJhc2U2NFVSTEVu
Y29kZShyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5wcmltZUZhY3Rvcik7Ci0gICAg
cmVzdWx0LmRwID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPmZpcnN0UHJpbWVJbmZv
KCkuZmFjdG9yQ1JURXhwb25lbnQpOwotICAgIHJlc3VsdC5kcSA9IGJhc2U2NFVSTEVuY29kZShy
c2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBvbmVudCk7Ci0gICAg
cmVzdWx0LnFpID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5m
bygpLmZhY3RvckNSVENvZWZmaWNpZW50KTsKKyAgICByZXN1bHQucCA9IG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5maXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9y
KSk7CisgICAgcmVzdWx0LnEgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9u
ZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkucHJpbWVGYWN0b3IpKTsKKyAgICByZXN1bHQuZHAgPSBt
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8o
KS5mYWN0b3JDUlRFeHBvbmVudCkpOworICAgIHJlc3VsdC5kcSA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBv
bmVudCkpOworICAgIHJlc3VsdC5xaSA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FD
b21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRDb2VmZmljaWVudCkpOwogICAg
IGlmIChyc2FDb21wb25lbnRzLT5vdGhlclByaW1lSW5mb3MoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAKICAgICBWZWN0b3I8UnNhT3RoZXJQcmltZXNJbmZvPiBvdGg7CiAg
ICAgZm9yIChjb25zdCBhdXRvJiBpbmZvIDogcnNhQ29tcG9uZW50cy0+b3RoZXJQcmltZUluZm9z
KCkpIHsKICAgICAgICAgUnNhT3RoZXJQcmltZXNJbmZvIG90aGVySW5mbzsKLSAgICAgICAgb3Ro
ZXJJbmZvLnIgPSBiYXNlNjRVUkxFbmNvZGUoaW5mby5wcmltZUZhY3Rvcik7Ci0gICAgICAgIG90
aGVySW5mby5kID0gYmFzZTY0VVJMRW5jb2RlKGluZm8uZmFjdG9yQ1JURXhwb25lbnQpOwotICAg
ICAgICBvdGhlckluZm8udCA9IGJhc2U2NFVSTEVuY29kZShpbmZvLmZhY3RvckNSVENvZWZmaWNp
ZW50KTsKKyAgICAgICAgb3RoZXJJbmZvLnIgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQo
aW5mby5wcmltZUZhY3RvcikpOworICAgICAgICBvdGhlckluZm8uZCA9IG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChpbmZvLmZhY3RvckNSVEV4cG9uZW50KSk7CisgICAgICAgIG90aGVySW5m
by50ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKGluZm8uZmFjdG9yQ1JUQ29lZmZpY2ll
bnQpKTsKICAgICAgICAgb3RoLmFwcGVuZChXVEZNb3ZlKG90aGVySW5mbykpOwogICAgIH0KICAg
ICByZXN1bHQub3RoID0gV1RGTW92ZShvdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRv
L21hYy9DcnlwdG9LZXlFQ01hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcsMTAgKzE5NywxMCBAQCBib29sIENyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVu
CiAKICAgICBpZiAoVU5MSUtFTFkoKHNpemUgIT0gcHVibGljS2V5U2l6ZSkgJiYgKHNpemUgIT0g
cHJpdmF0ZUtleVNpemUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGp3ay54ID0gV1RG
OjpiYXNlNjRVUkxFbmNvZGUocmVzdWx0LmRhdGEoKSArIDEsIGtleVNpemVJbkJ5dGVzKTsKLSAg
ICBqd2sueSA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHJlc3VsdC5kYXRhKCkgKyBrZXlTaXplSW5C
eXRlcyArIDEsIGtleVNpemVJbkJ5dGVzKTsKKyAgICBqd2sueCA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsgMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2su
eSA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUlu
Qnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRlcykpOwogICAgIGlmIChzaXplID4gcHVibGljS2V5U2l6
ZSkKLSAgICAgICAgandrLmQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShyZXN1bHQuZGF0YSgpICsg
cHVibGljS2V5U2l6ZSwga2V5U2l6ZUluQnl0ZXMpOworICAgICAgICBqd2suZCA9IG1ha2VTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6
ZUluQnl0ZXMpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1w
b3J0IDxDb21tb25DcnlwdG8vQ29tbW9uU3ltbWV0cmljS2V5d3JhcC5oPgogI2ltcG9ydCA8Y3J0
X2V4dGVybnMuaD4KICNpbXBvcnQgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CisjaW1w
b3J0IDx3dGYvT3B0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5
U1BJLmg+CkBAIC04MCwxMSArODEsMTEgQEAgc3RhdGljIE5TU3RyaW5nKiBtYXN0ZXJLZXlBY2Nv
dW50TmFtZUZvcgogICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImNvbS5h
cHBsZS5XZWJLaXQuV2ViQ3J5cHRvLm1hc3RlcislQCIsIGJ1bmRsZUlkZW50aWZpZXJdOwogfQog
Ci1zdGF0aWMgYm9vbCBjcmVhdGVBbmRTdG9yZU1hc3RlcktleShWZWN0b3I8dWludDhfdD4mIG1h
c3RlcktleURhdGEpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBjcmVhdGVBbmRT
dG9yZU1hc3RlcktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVn
ZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFscykpOwogCi0gICAgbWFzdGVy
S2V5RGF0YS5yZXNpemUobWFzdGVyS2V5U2l6ZUluQnl0ZXMpOworICAgIFZlY3Rvcjx1aW50OF90
PiBtYXN0ZXJLZXlEYXRhKG1hc3RlcktleVNpemVJbkJ5dGVzKTsKICAgICBhdXRvIHJjID0gQ0NS
YW5kb21HZW5lcmF0ZUJ5dGVzKG1hc3RlcktleURhdGEuZGF0YSgpLCBtYXN0ZXJLZXlEYXRhLnNp
emUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmMgPT0ga0NDU3VjY2Vzcyk7CiAKQEAgLTEwNyw3
ICsxMDgsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVBbmRTdG9yZU1hc3RlcktleShWZWN0CiAgICAg
c3RhdHVzID0gU2VjQWNjZXNzQ3JlYXRlKChfX2JyaWRnZSBDRlN0cmluZ1JlZilsb2NhbGl6ZWRJ
dGVtTmFtZSwgbnVsbHB0ciwgJmFjY2Vzc1JlZik7CiAgICAgaWYgKHN0YXR1cykgewogICAgICAg
ICBXVEZMb2dBbHdheXMoIkNhbm5vdCBjcmVhdGUgYSBzZWN1cml0eSBhY2Nlc3Mgb2JqZWN0IGZv
ciBzdG9yaW5nIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IH0KICAgICBSZXRhaW5QdHI8U2VjQWNjZXNzUmVmPiBhY2Nlc3MgPSBhZG9wdENGKGFjY2Vzc1Jl
Zik7CiAKQEAgLTEyMCwxOSArMTIxLDE4IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICBpZiAoc3RhdHVz
KSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IGNyZWF0ZSBhIHRydXN0ZWQgYXBwbGlj
YXRpb24gb2JqZWN0IGZvciBzdG9yaW5nIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIs
IChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIH0KICAgICBSZXRhaW5QdHI8U2VjVHJ1c3RlZEFwcGxpY2F0aW9uUmVm
PiB0cnVzdGVkQXBwID0gYWRvcHRDRih0cnVzdGVkQXBwUmVmKTsKIAogICAgIHN0YXR1cyA9IFNl
Y0FDTFNldENvbnRlbnRzKGFjbCwgKF9fYnJpZGdlIENGQXJyYXlSZWYpQFsgKF9fYnJpZGdlIGlk
KXRydXN0ZWRBcHAuZ2V0KCkgXSwgKF9fYnJpZGdlIENGU3RyaW5nUmVmKWxvY2FsaXplZEl0ZW1O
YW1lLCBrU2VjS2V5Y2hhaW5Qcm9tcHRSZXF1aXJlUGFzc3BoYXNlKTsKICAgICBpZiAoc3RhdHVz
KSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IHNldCBBQ0wgZm9yIFdlYkNyeXB0byBt
YXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KICNlbmRpZgogCi0gICAgVmVj
dG9yPGNoYXI+IGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhOwotICAgIGJhc2U2NEVuY29kZSht
YXN0ZXJLZXlEYXRhLCBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YSk7CisgICAgYXV0byBiYXNl
NjRFbmNvZGVkTWFzdGVyS2V5RGF0YSA9IGJhc2U2NEVuY29kZShtYXN0ZXJLZXlEYXRhKTsKIAog
ICAgIC8vIENhbm5vdCB1c2Uga1NlY0NsYXNzS2V5IGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVt
LzE2MDY4MjA3Pi4KICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBAewpAQCAtMTUwLDEy
ICsxNTAsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgc3RhdHVz
ID0gU2VjSXRlbUFkZCgoQ0ZEaWN0aW9uYXJ5UmVmKWF0dHJpYnV0ZXMsIG51bGxwdHIpOwogICAg
IGlmIChzdGF0dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3Qgc3RvcmUgV2ViQ3J5
cHRvIG1hc3RlciBrZXksIGVycm9yICVkIiwgKGludClzdGF0dXMpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiB0
cnVlOworCisgICAgcmV0dXJuIG1hc3RlcktleURhdGE7CiB9CiAKLXN0YXRpYyBib29sIGZpbmRN
YXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXlEYXRhKQorc3RhdGljIE9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gZmluZE1hc3RlcktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
aGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFs
cykpOwogCkBAIC0xNzAsMjAgKzE3MSwyNSBAQCBzdGF0aWMgYm9vbCBmaW5kTWFzdGVyS2V5KFZl
Y3Rvcjx1aW50OF90CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBpZiAoc3RhdHVzICE9IGVy
clNlY0l0ZW1Ob3RGb3VuZCAmJiBzdGF0dXMgIT0gZXJyU2VjVXNlckNhbmNlbGVkKQogICAgICAg
ICAgICAgV1RGTG9nQWx3YXlzKCJDb3VsZCBub3QgZmluZCBXZWJDcnlwdG8gbWFzdGVyIGtleSBp
biBLZXljaGFpbiwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPENG
RGF0YVJlZj4ga2V5RGF0YSA9IGFkb3B0Q0Yoa2V5RGF0YVJlZik7Ci0KLSAgICBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEgPSB2ZWN0b3JGcm9tTlNEYXRhKChfX2Jy
aWRnZSBOU0RhdGEgKilrZXlEYXRhLmdldCgpKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlKChj
b25zdCBjaGFyKiliYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YS5kYXRhKCksIGJhc2U2NEVuY29k
ZWRNYXN0ZXJLZXlEYXRhLnNpemUoKSwgbWFzdGVyS2V5RGF0YSk7CisgICAgcmV0dXJuIGJhc2U2
NERlY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKGtl
eURhdGEuZ2V0KCkpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGtleURhdGEuZ2V0KCkpKTsKIH0KIAotYm9v
bCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5
KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkK
IHsKLSAgICBpZiAoIWZpbmRNYXN0ZXJLZXkobWFzdGVyS2V5KSAmJiAhY3JlYXRlQW5kU3RvcmVN
YXN0ZXJLZXkobWFzdGVyS2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJFTEVBU0Vf
QVNTRVJUKG1hc3RlcktleS5zaXplKCkgPT0gbWFzdGVyS2V5U2l6ZUluQnl0ZXMpOwotICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChhdXRvIG1hc3RlcktleSA9IGZpbmRNYXN0ZXJLZXkoKSkgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtYXN0ZXJLZXktPnNpemUoKSA9PSBtYXN0ZXJLZXlTaXpl
SW5CeXRlcyk7CisgICAgICAgIHJldHVybiBtYXN0ZXJLZXk7CisgICAgfQorCisgICAgaWYgKGF1
dG8gbWFzdGVyS2V5ID0gY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoKSkgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtYXN0ZXJLZXktPnNpemUoKSA9PSBtYXN0ZXJLZXlTaXplSW5CeXRlcyk7Cisg
ICAgICAgIHJldHVybiBtYXN0ZXJLZXk7CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIH0KIAogYm9vbCBkZWxldGVEZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNT
TC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2VyaWFs
aXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2VyaWFsaXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDE0IEBACiAjaWYgRU5BQkxFKFdFQl9DUllQ
VE8pCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleShWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICBVTlVTRURfUEFSQU0obWFzdGVyS2V5KTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiAvLyBJbml0aWFsbHkgdGhlc2UgaGVscGVyIGZ1
bmN0aW9ucyB3ZXJlIGludGVuZGVkIHRvIHBlcmZvcm0gS0VLIHdyYXBwaW5nIGFuZCB1bndyYXBw
aW5nLApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsMjYgKzMzMywxMiBAQCB2b2lkIEZpbGVS
ZWFkZXJMb2FkZXI6OmNvbnZlcnRUb1RleHQoKQogCiB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNv
bnZlcnRUb0RhdGFVUkwoKQogewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoImRhdGE6Iik7Ci0KICAgICBpZiAoIW1fYnl0ZXNMb2FkZWQpIHsK
LSAgICAgICAgbV9zdHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIG1f
c3RyaW5nUmVzdWx0ID0gImRhdGE6Il9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKG1fZGF0YVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtIik7Ci0gICAgZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVuZCht
X2RhdGFUeXBlKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjtiYXNlNjQsIik7Ci0KLSAg
ICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgIGJhc2U2NEVuY29kZShtX3Jhd0RhdGEtPmRhdGEoKSwg
bV9ieXRlc0xvYWRlZCwgb3V0KTsKLSAgICBvdXQuYXBwZW5kKCdcMCcpOwotICAgIGJ1aWxkZXIu
YXBwZW5kKG91dC5kYXRhKCkpOwotCi0gICAgbV9zdHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3Ry
aW5nKCk7CisgICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3RyaW5nKCJkYXRhOjtiYXNlNjQsIiwg
bV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0
YVR5cGUsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQpLCAn
XDAnKTsKIH0KIAogYm9vbCBGaWxlUmVhZGVyTG9hZGVyOjppc0NvbXBsZXRlZCgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOSwxNCArNDI5LDE0IEBAIHN0ZDo6dW5pcXVlX3B0
cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNI
QTE6OkRpZ2VzdCBhdHRyc0hhc2g7CiAgICAgICAgICAgICBhdHRyc1NIQTEuY29tcHV0ZUhhc2go
YXR0cnNIYXNoKTsKLSAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0gYmFzZTY0RW5jb2Rl
KGF0dHJzSGFzaC5kYXRhKCksIDEwKTsKKyAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0g
bWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGF0dHJzSGFzaC5kYXRhKCksIDEwKSk7CiAgICAgICAg
ICAgICBhZGRTdHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaCho
YXNoKTsKLSAgICBkaWdlc3QtPnNoYTEgPSBiYXNlNjRFbmNvZGUoaGFzaC5kYXRhKCksIDEwKTsK
KyAgICBkaWdlc3QtPnNoYTEgPSBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoaGFzaC5kYXRhKCks
IDEwKSk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+
YWRkKGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsMTEgKzU5OCwxMSBAQCBib29sIEluc3BlY3RvckZy
b250ZW5kSG9zdDo6c2hvd0NlcnRpZmljCiAgICAgaWYgKCFtX2NsaWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYgKCFiYXNlNjRE
ZWNvZGUoc2VyaWFsaXplZENlcnRpZmljYXRlLCBkYXRhKSkKKyAgICBhdXRvIGRhdGEgPSBiYXNl
NjREZWNvZGUoc2VyaWFsaXplZENlcnRpZmljYXRlKTsKKyAgICBpZiAoIWRhdGEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2Rlcihk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CiAgICAgT3B0aW9uYWw8Q2VydGlm
aWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUlu
Zm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB1bnNpZ25lZCBOZXR3b3JrUmVzb3VyY2Vz
RGF0YTo6UmVzb3VyY2VECiAgICAgICAgIG1fY29udGVudCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5k
Rmx1c2gobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIG1fYmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0gICAgICAgIG1fY29udGVudCA9IGJhc2U2
NEVuY29kZShtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCk7CisgICAgICAgIG1fY29u
dGVudCA9IG1ha2VTdHJpbmcoV1RGOjpiYXNlNjRFbmNvZGVkKG1fZGF0YUJ1ZmZlci0+ZGF0YSgp
LCBkYXRhTGVuZ3RoKSk7CiAgICAgfQogCiAgICAgbV9kYXRhQnVmZmVyID0gbnVsbHB0cjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwOSw3
ICsxNzA5LDcgQEAgc3RhdGljIFN0cmluZyBjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saQogICAg
IGF1dG8gY3J5cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0
b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVz
KGNvbnRlbnQuZGF0YSgpLCBjb250ZW50LnNpemUoKSk7CiAgICAgYXV0byBkaWdlc3QgPSBjcnlw
dG9EaWdlc3QtPmNvbXB1dGVIYXNoKCk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1Ni0i
LCBiYXNlNjRFbmNvZGUoZGlnZXN0LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOworICAgIHJldHVy
biBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChkaWdlc3QuZGF0YSgpLCBkaWdl
c3Quc2l6ZSgpKSk7CiB9CiAKIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01B
Z2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwgTm9kZVRvSWRN
YXAqIG5vZGVzTWFwKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAgUmVmPFByb3RvY29sOjpOZXR3
b3JrOjpXZWJTb2NrZXRGcmFtZT4gYgogICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6V2Vi
U29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQog
ICAgICAgICAuc2V0TWFzayhmcmFtZS5tYXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShm
cmFtZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJh
bWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNlNjRFbmNvZGUoZnJhbWUucGF5
bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpCisgICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFt
ZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUu
cGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQo
ZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpKQogICAgICAgICAuc2V0UGF5bG9h
ZExlbmd0aChmcmFtZS5wYXlsb2FkTGVuZ3RoKQogICAgICAgICAucmVsZWFzZSgpOwogfQpAQCAt
NTg2LDcgKzU4Niw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGEK
ICAgICAgICAgLy8gT2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBhIGRl
Y29kZXIsIGJ1dCBmb3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAgICAg
IC8vIFN5bmMgWEhScyBtYXkgbm90IGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5vbi1z
eW5jIFhIUnMgdXN1YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAgICAg
ICAgaWYgKG1fbG9hZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFyZXNv
dXJjZURhdGEtPmhhc0J1ZmZlcmVkRGF0YSgpICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291
cmNlKCkpCi0gICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChy
ZXF1ZXN0SWQsIGJhc2U2NEVuY29kZShkYXRhLCBkYXRhTGVuZ3RoKSwgdHJ1ZSk7CisgICAgICAg
ICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIG1ha2VT
dHJpbmcoYmFzZTY0RW5jb2RlZChkYXRhLCBkYXRhTGVuZ3RoKSksIHRydWUpOwogICAgIH0KIAog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kYXRhUmVjZWl2ZWQocmVxdWVzdElkLCB0aW1lc3Rh
bXAoKSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGFMZW5ndGgpOwpAQCAtMTAwNCw3ICsxMDA0LDcg
QEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0bwogCiAgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIFdURjo6UGVyc2lzdGVuY2U6OkNvZGVy
PFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZShlbmNvZGVyLCBjZXJ0aWZpY2F0ZS52
YWx1ZSgpKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGVu
Y29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKSk7CiB9CiAKIFdlYlNvY2tldCog
SW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9j
b2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQpAQCAtMTIwMiwxMSArMTIwMiwxMSBA
QCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOCiAgICAgICAgIHJlcXVl
c3Quc2V0SFRUUEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0SGVhZGVycykpOwogICAgIH0K
ICAgICBpZiAoISFwb3N0RGF0YSkgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwot
ICAgICAgICBpZiAoIWJhc2U2NERlY29kZShwb3N0RGF0YSwgYnVmZmVyKSkKKyAgICAgICAgYXV0
byBidWZmZXIgPSBiYXNlNjREZWNvZGUocG9zdERhdGEpOworICAgICAgICBpZiAoIWJ1ZmZlcikK
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZl
biBwb3N0RGF0YSJfcyk7CiAKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShGb3JtRGF0YTo6
Y3JlYXRlKGJ1ZmZlcikpOworICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KEZvcm1EYXRhOjpj
cmVhdGUoV1RGTW92ZSgqYnVmZmVyKSkpOwogICAgIH0KICAgICAvLyBGSVhNRTogZmlndXJlIG91
dCBob3cgdG8gaWRlbnRpZnkgd2hlbiBhIHJlcXVlc3QgaGFzIGJlZW4gb3ZlcnJpZGRlbiB3aGVu
IHdlIGFkZCB0aGlzIHRvIHRoZSBmcm9udGVuZC4KICAgICBwZW5kaW5nUmVxdWVzdC0+Y29udGlu
dWVXaXRoUmVxdWVzdChyZXF1ZXN0KTsKQEAgLTEyNDIsMTEgKzEyNDIsMTEgQEAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gb3ZlcnJpZGVEYXRhOwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1
ZmZlcikpCisgICAgICAgIGF1dG8gYnVmZmVyID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQpOworICAg
ICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5h
YmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zKTsKIAotICAgICAgICBvdmVycmlkZURhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICBvdmVycmlk
ZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVs
c2UKICAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC51
dGY4KCkuZGF0YSgpLCBjb250ZW50LnV0ZjgoKS5sZW5ndGgoKSk7CiAKQEAgLTEyNjgsMTEgKzEy
NjgsMTEgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgogCiAgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAg
ICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShj
b250ZW50LCBidWZmZXIpKQorICAgICAgICBhdXRvIGJ1ZmZlciA9IGJhc2U2NERlY29kZShjb250
ZW50KTsKKyAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfcyk7CiAKLSAgICAgICAgZGF0
YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIGRhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVsc2UKICAg
ICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwg
Y29udGVudC51dGY4KCkubGVuZ3RoKCkpOwogCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCBib29sIElu
c3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3VyCiAgICAgICAgIH0KIAogICAgICAgICAq
YmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGUoYnVm
ZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgKnJlc3VsdCA9IG1ha2VTdHJp
bmcoV1RGOjpiYXNlNjRFbmNvZGVkKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBib29sIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29uCiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZGF0YUNvbnRlbnQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaW5n
JiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0
KQogewogICAgIGlmICh3aXRoQmFzZTY0RW5jb2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNl
NjRFbmNvZGUoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1bHQgPSBtYWtlU3RyaW5nKGJhc2U2
NEVuY29kZWQoZGF0YSwgc2l6ZSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTExMDIsNyArMTEwMiw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG8KICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBh
cmNoaXZlIGZvciBtYWluIGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1
ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgIHJldHVybiBiYXNl
NjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgo
YnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChDRkRh
dGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkp
KSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTE4LDcgKzMxMTgsNyBAQCB1bnNpZ25lZCBsb25nIEZy
YW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTCiAgICAgICAgIEFTU0VSVCghbmV3UmVxdWVzdC5pc051
bGwoKSk7CiAKICAgICAgICAgaWYgKCFkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLm1heWJlTG9hZFN5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNl
LCBkYXRhKSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAgICAgICAg
IFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CiAgICAgICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSgqdGhpcywgaWRl
bnRpZmllciwgbmV3UmVxdWVzdCwgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgb3B0aW9ucywgb3Jp
Z2luYWxSZXF1ZXN0SGVhZGVycywgZXJyb3IsIHJlc3BvbnNlLCBidWZmZXIpOwogICAgICAgICAg
ICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CiAgICAgICAg
ICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLm1heWJlTG9hZEZh
bGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBGZXRjaE9wdGlvbnM7CiBjbGFzcyBXRUJDT1JF
X0VYUE9SVCBMb2FkZXJTdHJhdGVneSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZShGcmFtZSYsIENhY2hlZFJlc291cmNlJiwgUmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0
IFJlc291cmNlTG9hZGVyT3B0aW9ucyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiYmKT4mJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBGZXRj
aE9wdGlvbnMmLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29u
c3QgRmV0Y2hPcHRpb25zJiwgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHBhZ2VMb2FkQ29tcGxldGVkKFBhZ2UmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGJy
b3dzaW5nQ29udGV4dFJlbW92ZWQoRnJhbWUmKSA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL1ByaXZhdGVDbGlja01lYXN1cmVtZW50LmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1ByaXZhdGVDbGlja01lYXN1cmVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDEwICsxODksMTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudDo6RXBoZW1lcmFsUwogewogICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBpZiB3
ZSBjYW4gZG8gd2l0aCBhIHNpbXBsZSBsZW5ndGggY2hlY2sgaW5zdGVhZCBvZiBkZWNvZGluZy4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxOTQ1Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKLSAgICBpZiAoIWJhc2U2NFVSTERlY29kZShub25j
ZSwgZGlnZXN0KSkKKyAgICBhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShub25jZSk7Cisg
ICAgaWYgKCFkaWdlc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZGlnZXN0
LnNpemUoKSA9PSBFcGhlbWVyYWxTb3VyY2VOb25jZVJlcXVpcmVkTnVtYmVyT2ZCeXRlczsKKyAg
ICByZXR1cm4gZGlnZXN0LT5zaXplKCkgPT0gRXBoZW1lcmFsU291cmNlTm9uY2VSZXF1aXJlZE51
bWJlck9mQnl0ZXM7CiB9CiAKIHZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OnNldEVwaGVt
ZXJhbFNvdXJjZU5vbmNlKEVwaGVtZXJhbFNvdXJjZU5vbmNlJiYgbm9uY2UpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDE0ICs2OSwxNSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgCiAgICAgaWYgKGJ1ZmZl
ci5wb3NpdGlvbigpID09IGJlZ2luSGFzaFZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKICAgICBTdHJpbmdWaWV3IGhhc2hW
YWx1ZShiZWdpbkhhc2hWYWx1ZSwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbkhhc2hWYWx1ZSk7
Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoaGFzaFZhbHVlLCBkaWdlc3QsIEJhc2U2NFZhbGlkYXRl
UGFkZGluZykpIHsKLSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoaGFzaFZhbHVlLCBkaWdl
c3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CiAKLSAgICByZXR1
cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgV1RGTW92ZShkaWdl
c3QpIH07CisgICAgaWYgKGF1dG8gZGlnZXN0ID0gYmFzZTY0RGVjb2RlKGhhc2hWYWx1ZSwgQmFz
ZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsK
KworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShoYXNoVmFsdWUpKQorICAg
ICAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgV1RG
TW92ZSgqZGlnZXN0KSB9OworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogT3B0aW9u
YWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3Qo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIGJ1ZmZlcikKQEAgLTEyNCwxMyArMTI1LDEzIEBA
IE9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWcKIAogT3B0aW9uYWw8UmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0KGNvbnN0IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QmIGVuY29k
ZWREaWdlc3QpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKLSAgICBpZiAoIWJhc2U2
NERlY29kZShlbmNvZGVkRGlnZXN0LmRpZ2VzdCwgZGlnZXN0LCBCYXNlNjRWYWxpZGF0ZVBhZGRp
bmcpKSB7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGVuY29kZWREaWdlc3QuZGlnZXN0
LCBkaWdlc3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CisgICAg
aWYgKGF1dG8gZGlnZXN0ID0gYmFzZTY0RGVjb2RlKGVuY29kZWREaWdlc3QuZGlnZXN0LCBCYXNl
NjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICByZXR1cm4gUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERpZ2VzdC5hbGdvcml0aG0sIFdURk1vdmUo
KmRpZ2VzdCkgfTsKKworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShlbmNv
ZGVkRGlnZXN0LmRpZ2VzdCkpCisgICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QgeyBlbmNvZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZSgqZGlnZXN0KSB9OwogCi0g
ICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGVuY29kZWREaWdlc3QuYWxn
b3JpdGhtLCBXVEZNb3ZlKGRpZ2VzdCkgfTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
CiBzdGF0aWMgUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobSB0b0NyeXB0b0RpZ2VzdEFsZ29y
aXRobShSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG0pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1M
QXJjaGl2ZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw5ICsx
NjcsNyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlCiAKICAgICBm
b3IgKGF1dG8mIHJlc291cmNlIDogcmVzb3VyY2VzKSB7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
Y2xlYXIoKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNvdXJjZUJvdW5k
YXJ5KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQtVHlwZTogIik7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291cmNlLm1pbWVUeXBlKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNvdXJjZUJvdW5kYXJ5LCAiQ29udGVudC1UeXBl
OiAiLCByZXNvdXJjZS5taW1lVHlwZSk7CiAKICAgICAgICAgY29uc3QgY2hhciogY29udGVudEVu
Y29kaW5nID0gbnVsbHB0cjsKICAgICAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSmF2YVNjcmlwdE1JTUVUeXBlKHJlc291cmNlLm1pbWVUeXBlKSB8fCBNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUocmVzb3VyY2UubWltZVR5cGUpKQpAQCAt
MTc3LDExICsxNzUsNyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRl
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZyA9IGJhc2U2NDsKIAot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rp
bmc6ICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjb250ZW50RW5jb2RpbmcpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtTG9jYXRpb246ICIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyZXNvdXJjZS51cmwuc3RyaW5nKCkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcblxyXG4iKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIlxyXG5Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAiLCBjb250ZW50RW5j
b2RpbmcsICJcclxuQ29udGVudC1Mb2NhdGlvbjogIiwgcmVzb3VyY2UudXJsLnN0cmluZygpLCAi
XHJcblxyXG4iKTsKIAogICAgICAgICBhc2NpaVN0cmluZyA9IHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKS51dGY4KCk7CiAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEo
KSwgYXNjaWlTdHJpbmcubGVuZ3RoKCkpOwpAQCAtMTg5LDE1ICsxODMsMTQgQEAgUmVmPFNoYXJl
ZEJ1ZmZlcj4gTUhUTUxBcmNoaXZlOjpnZW5lcmF0ZQogICAgICAgICAvLyBGSVhNRTogaWRlYWxs
eSB3ZSB3b3VsZCBlbmNvZGUgdGhlIGNvbnRlbnQgYXMgYSBzdHJlYW0gd2l0aG91dCBoYXZpbmcg
dG8gZmV0Y2ggaXQgYWxsLgogICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gcmVzb3VyY2UuZGF0
YS0+ZGF0YSgpOwogICAgICAgICBzaXplX3QgZGF0YUxlbmd0aCA9IHJlc291cmNlLmRhdGEtPnNp
emUoKTsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOwogICAgICAgICBpZiAoIXN0
cmNtcChjb250ZW50RW5jb2RpbmcsIHF1b3RlZFByaW50YWJsZSkpIHsKLSAgICAgICAgICAgIHF1
b3RlZFByaW50YWJsZUVuY29kZShkYXRhLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YSk7CisgICAg
ICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGRhdGEsIGRh
dGFMZW5ndGgpOwogICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5jb2RlZERhdGEuZGF0
YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpOwogICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQo
IlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCghc3RyY21w
KGNvbnRlbnRFbmNvZGluZywgYmFzZTY0KSk7CiAgICAgICAgICAgICAvLyBXZSBhcmUgbm90IHNw
ZWNpZnlpbmcgaW5zZXJ0TEZzID0gdHJ1ZSBiZWxvdyBhcyBpdCB3b3VsZCBjdXQgdGhlIGxpbmVz
IHdpdGggTEZzIGFuZCBNSFRNTCByZXF1aXJlcyBDUkxGcy4KLSAgICAgICAgICAgIGJhc2U2NEVu
Y29kZShkYXRhLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YSk7CisgICAgICAgICAgICBhdXRvIGVu
Y29kZWREYXRhID0gYmFzZTY0RW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgpOwogICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gNzY7CiAgICAgICAgICAgICBzaXplX3Qg
aW5kZXggPSAwOwogICAgICAgICAgICAgc2l6ZV90IGVuY29kZWREYXRhTGVuZ3RoID0gZW5jb2Rl
ZERhdGEuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwv
TUhUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNo
aXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTIsMTYgKzE5MiwxOSBAQCBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBNSFRNTFBhcnNl
cjo6cGFyCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIFZlY3RvcjxjaGFy
PiBkYXRhOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIHN3aXRjaCAobWltZUhlYWRl
ci5jb250ZW50VHJhbnNmZXJFbmNvZGluZygpKSB7Ci0gICAgY2FzZSBNSU1FSGVhZGVyOjpCYXNl
NjQ6Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+
c2l6ZSgpLCBkYXRhKSkgeworICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OiB7CisgICAgICAg
IGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50
LT5zaXplKCkpOworICAgICAgICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBMT0df
RVJST1IoIkludmFsaWQgYmFzZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQorICAgICAgICBkYXRhID0gV1RGTW92ZSgq
ZGVjb2RlZERhdGEpOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBNSU1FSGVhZGVy
OjpRdW90ZWRQcmludGFibGU6Ci0gICAgICAgIHF1b3RlZFByaW50YWJsZURlY29kZShjb250ZW50
LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSwgZGF0YSk7CisgICAgICAgIGRhdGEgPSBxdW90ZWRQ
cmludGFibGVEZWNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oY29udGVudC0+
ZGF0YSgpKSwgY29udGVudC0+c2l6ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNSU1F
SGVhZGVyOjpTZXZlbkJpdDoKICAgICBjYXNlIE1JTUVIZWFkZXI6OkJpbmFyeToKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jb2NvYS9Qcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudENvY29hLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzQsMTAgKzM0LDEwIEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OmNhbGN1
bGF0ZUEKIHsKICNpZiBIQVZFKFJTQV9CU1NBKQogICAgIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHNlcnZlclB1YmxpY0tleURhdGE7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKHNl
cnZlclB1YmxpY0tleUJhc2U2NFVSTCwgc2VydmVyUHVibGljS2V5RGF0YSkpCisgICAgICAgIGF1
dG8gc2VydmVyUHVibGljS2V5RGF0YSA9IGJhc2U2NFVSTERlY29kZShzZXJ2ZXJQdWJsaWNLZXlC
YXNlNjRVUkwpOworICAgICAgICBpZiAoIXNlcnZlclB1YmxpY0tleURhdGEpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gc2VydmVyUHVibGljS2V5ID0gYWRvcHROUyhb
W05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzZXJ2ZXJQdWJsaWNLZXlEYXRhLmRhdGEoKSBs
ZW5ndGg6c2VydmVyUHVibGljS2V5RGF0YS5zaXplKCldKTsKKyAgICAgICAgYXV0byBzZXJ2ZXJQ
dWJsaWNLZXkgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZlclB1
YmxpY0tleURhdGEtPmRhdGEoKSBsZW5ndGg6c2VydmVyUHVibGljS2V5RGF0YS0+c2l6ZSgpXSk7
CiAKICAgICAgICAgLy8gRklYTUUoMjIyMDE4KTogQ2hlY2sgZXJyb3IuCiAgICAgICAgIG1fc291
cmNlVW5saW5rYWJsZVRva2VuLmJsaW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jUlNBQlNTQVRv
a2VuQmxpbmRlckluc3RhbmNlKCkgaW5pdFdpdGhQdWJsaWNLZXk6c2VydmVyUHVibGljS2V5Lmdl
dCgpIGVycm9yOm51bGxwdHJdKTsKQEAgLTUwLDcgKzUwLDcgQEAgYm9vbCBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogICAgIGlmICghbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4u
d2FpdGluZ1Rva2VuKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3NvdXJjZVVubGlu
a2FibGVUb2tlbi52YWx1ZUJhc2U2NFVSTCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKFttX3NvdXJj
ZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4gYmxpbmRlZE1lc3NhZ2VdLmJ5dGVzLCBbbV9z
b3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuIGJsaW5kZWRNZXNzYWdlXS5sZW5ndGgp
OworICAgIG1fc291cmNlVW5saW5rYWJsZVRva2VuLnZhbHVlQmFzZTY0VVJMID0gbWFrZVN0cmlu
ZyhiYXNlNjRVUkxFbmNvZGVkKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4g
YmxpbmRlZE1lc3NhZ2VdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rv
a2VuIGJsaW5kZWRNZXNzYWdlXS5sZW5ndGgpKTsKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCk7CkBAIC02NSwxMCArNjUs
MTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBzZXJ2ZXJSZXNw
b25zZURhdGE7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKHNlcnZlclJlc3BvbnNlQmFz
ZTY0VVJMLCBzZXJ2ZXJSZXNwb25zZURhdGEpKQorICAgICAgICBhdXRvIHNlcnZlclJlc3BvbnNl
RGF0YSA9IGJhc2U2NFVSTERlY29kZShzZXJ2ZXJSZXNwb25zZUJhc2U2NFVSTCk7CisgICAgICAg
IGlmICghc2VydmVyUmVzcG9uc2VEYXRhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBhdXRvIHNlcnZlclJlc3BvbnNlID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdp
dGhCeXRlczpzZXJ2ZXJSZXNwb25zZURhdGEuZGF0YSgpIGxlbmd0aDpzZXJ2ZXJSZXNwb25zZURh
dGEuc2l6ZSgpXSk7CisgICAgICAgIGF1dG8gc2VydmVyUmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNE
YXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZlclJlc3BvbnNlRGF0YS0+ZGF0YSgpIGxlbmd0
aDpzZXJ2ZXJSZXNwb25zZURhdGEtPnNpemUoKV0pOwogCiAgICAgICAgIC8vIEZJWE1FKDIyMjAx
OCk6IENoZWNrIGVycm9yLgogICAgICAgICBtX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRv
a2VuID0gW21fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBhY3RpdmF0ZVRva2Vu
V2l0aFNlcnZlclJlc3BvbnNlOnNlcnZlclJlc3BvbnNlLmdldCgpIGVycm9yOm51bGxwdHJdOwpA
QCAtNzcsOSArNzcsOSBAQCBib29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVB
CiAgICAgfQogCiAgICAgU291cmNlU2VjcmV0VG9rZW4gdG9rZW47Ci0gICAgdG9rZW4udG9rZW5C
YXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4u
cmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4u
cmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmxlbmd0aCk7Ci0gICAgdG9rZW4ua2V5SURCYXNlNjRV
UkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlU
b2tlbiBrZXlJZF0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIGtl
eUlkXS5sZW5ndGgpOwotICAgIHRva2VuLnNpZ25hdHVyZUJhc2U2NFVSTCA9IFdURjo6YmFzZTY0
VVJMRW5jb2RlKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHNpZ25hdHVyZV0u
Ynl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHNpZ25hdHVyZV0ubGVu
Z3RoKTsKKyAgICB0b2tlbi50b2tlbkJhc2U2NFVSTCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5j
b2RlZChbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmJ5
dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmxl
bmd0aCkpOworICAgIHRva2VuLmtleUlEQmFzZTY0VVJMID0gbWFrZVN0cmluZyhiYXNlNjRVUkxF
bmNvZGVkKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIGtleUlkXS5ieXRlcywg
W21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRdLmxlbmd0aCkpOworICAg
IHRva2VuLnNpZ25hdHVyZUJhc2U2NFVSTCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChb
bV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1cmVdLmJ5dGVzLCBbbV9z
b3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1cmVdLmxlbmd0aCkpOwogCiAg
ICAgbV9zb3VyY2VTZWNyZXRUb2tlbiA9IFdURk1vdmUodG9rZW4pOwogICAgIHJldHVybiB0cnVl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gQmFzZTY0VXRp
bGl0aWVzOjpidG8KICAgICBpZiAoIXN0cmluZ1RvRW5jb2RlLmlzQWxsTGF0aW4xKCkpCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGUoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkpOworICAgIHJldHVybiBt
YWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkpKTsKIH0KIAog
RXhjZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0b2IoY29uc3QgU3RyaW5nJiBl
bmNvZGVkU3RyaW5nKQpAQCAtNDYsMTEgKzQ2LDExIEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gQmFz
ZTY0VXRpbGl0aWVzOjphdG8KICAgICBpZiAoZW5jb2RlZFN0cmluZy5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICBpZiAoIWJh
c2U2NERlY29kZShlbmNvZGVkU3RyaW5nLCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZyB8IEJh
c2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzIHwgQmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiKSkK
KyAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGVuY29kZWRTdHJpbmcsIHsgQmFz
ZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nLCBCYXNlNjREZWNvZGVPcHRpb25zOjpJ
Z25vcmVTcGFjZXNBbmROZXdMaW5lcywgQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlzY2FyZFZlcnRp
Y2FsVGFiIH0pOworICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAotICAgIHJldHVybiBTdHJpbmcob3V0LmRh
dGEoKSwgb3V0LnNpemUoKSk7CisgICAgcmV0dXJuIFN0cmluZyhkZWNvZGVkRGF0YS0+ZGF0YSgp
LCBkZWNvZGVkRGF0YS0+c2l6ZSgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODQ4LDkgKzE4NDgsOCBAQCB2b2lkIFBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9j
YXRpb25DaGFuZ2VkCiAgICAgaWYgKHVybC5wcm90b2NvbElzRGF0YSgpICYmIHVybC5zdHJpbmco
KS5zdGFydHNXaXRoKCJkYXRhOnRleHQvY3NzO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCIpKSB7CiAg
ICAgICAgIG1fZGlkTG9hZFVzZXJTdHlsZVNoZWV0ID0gdHJ1ZTsKIAotICAgICAgICBWZWN0b3I8
Y2hhcj4gc3R5bGVTaGVldEFzVVRGODsKLSAgICAgICAgaWYgKGJhc2U2NERlY29kZShkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXModXJsLnN0cmluZygpLnN1YnN0cmluZygzNSkpLCBzdHlsZVNoZWV0
QXNVVEY4LCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykpCi0gICAgICAgICAgICBtX3Vz
ZXJTdHlsZVNoZWV0ID0gU3RyaW5nOjpmcm9tVVRGOChzdHlsZVNoZWV0QXNVVEY4LmRhdGEoKSwg
c3R5bGVTaGVldEFzVVRGOC5zaXplKCkpOworICAgICAgICBpZiAoYXV0byBzdHlsZVNoZWV0QXNV
VEY4ID0gYmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCku
c3Vic3RyaW5nKDM1KSksIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xp
bmVzKSkKKyAgICAgICAgICAgIG1fdXNlclN0eWxlU2hlZXQgPSBTdHJpbmc6OmZyb21VVEY4KHN0
eWxlU2hlZXRBc1VURjgtPmRhdGEoKSwgc3R5bGVTaGVldEFzVVRGOC0+c2l6ZSgpKTsKICAgICB9
CiAKICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODgsNiArMTg4LDExIEBAIHZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3Qg
Y2hhciogZGEKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7CiB9CiAKK3ZvaWQg
U2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkK
K3sKKyAgICBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIGxlbmd0
aCk7Cit9CisKIHZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoVmVjdG9yPGNoYXI+JiYgZGF0YSkK
IHsKICAgICBBU1NFUlQoIW1faGFzQmVlbkNvbWJpbmVkSW50b09uZVNlZ21lbnQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTIsNiArMTEyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU2hhcmVk
QnVmZmVyJik7CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciosIHNpemVfdCk7CisgICAgdm9p
ZCBhcHBlbmQoY29uc3QgdWludDhfdCosIHNpemVfdCk7CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9y
PGNoYXI+JiYpOwogCiAgICAgdm9pZCBjbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNs
ZWFyS2V5LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OSwxMiArNzksMTUgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxl
PgogICAgICAgICAgICAgaWYgKCFrZXlWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgICAgIEtleUlEVHlwZSBrZXlJRERhdGE7Ci0gICAgICAgICAgICBWZWN0
b3I8dWludDhfdD4ga2V5SGFuZGxlVmFsdWVEYXRhOwotICAgICAgICAgICAgaWYgKCFXVEY6OmJh
c2U2NFVSTERlY29kZShrZXlJRCwgeyBrZXlJRERhdGEgfSkgfHwgIVdURjo6YmFzZTY0VVJMRGVj
b2RlKGtleVZhbHVlLCB7IGtleUhhbmRsZVZhbHVlRGF0YSB9KSkKKyAgICAgICAgICAgIGF1dG8g
a2V5SUREYXRhID0gYmFzZTY0VVJMRGVjb2RlKGtleUlEKTsKKyAgICAgICAgICAgIGlmICgha2V5
SUREYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
ICAgICBhdXRvIGtleUhhbmRsZVZhbHVlRGF0YSA9IGJhc2U2NFVSTERlY29kZShrZXlWYWx1ZSk7
CisgICAgICAgICAgICBpZiAoIWtleUhhbmRsZVZhbHVlRGF0YSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZChLZXlIYW5kbGU6
OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlLCBXVEZNb3ZlKGtl
eUlERGF0YSksIFdURk1vdmUoa2V5SGFuZGxlVmFsdWVEYXRhKSkpOworICAgICAgICAgICAgZGVj
b2RlZEtleXMuYXBwZW5kKEtleUhhbmRsZTo6Y3JlYXRlKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5
U3RhdHVzOjpVc2FibGUsIFdURk1vdmUoKmtleUlERGF0YSksIFdURk1vdmUoKmtleUhhbmRsZVZh
bHVlRGF0YSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICBp
ZiAoIXZhbGlkRm9ybWF0KQpAQCAtMjE1LDggKzIxOCw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVm
ZmVyPiBleHRyYWN0S2V5aWRzRnIKICAgICAvLyAia2lkcyIKICAgICAvLyBBbiBhcnJheSBvZiBr
ZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rp
bmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtleSBJRCB2YWx1ZS4KICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5SWRDb3VudDsgaSsrKSB7Ci0gICAgICAgIFN0
cmluZyBrZXlJZCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKCZkYXRhW2luZGV4XSwgQ2xlYXJLZXk6
OktleUlEU2l6ZUluQnl0ZXMpOwotICAgICAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhrZXlJ
ZCk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKG1ha2VTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlZCgmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKSkpOwogICAg
ICAgICBpbmRleCArPSBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlczsKICAgICB9CiAKQEAgLTI0
Myw4ICsyNDUsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleUlkRnJvCiAg
ICAgLy8gVGhlIGZvcm1hdCBpcyBhIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2lu
ZyBtZW1iZXJzOgogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFycmF5IG9mIGtleSBJRHMuIEVh
Y2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUg
b2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZhbHVlLgotICAgIFN0cmluZyBr
ZXlJZCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKGluaXREYXRhLmRhdGEoKSwgaW5pdERhdGEuc2l6
ZSgpKTsKLSAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhrZXlJZCk7CisgICAga2V5SWRzQXJy
YXktPnB1c2hTdHJpbmcobWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKGluaXREYXRhLmRhdGEo
KSwgaW5pdERhdGEuc2l6ZSgpKSkpOwogCiAgICAgb2JqZWN0LT5zZXRBcnJheSgia2lkcyIsIFdU
Rk1vdmUoa2V5SWRzQXJyYXkpKTsKICAgICBDU3RyaW5nIGpzb25EYXRhID0gb2JqZWN0LT50b0pT
T05TdHJpbmcoKS51dGY4KCk7CkBAIC01ODcsNyArNTg4LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNl
c3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAgICAgYXV0byBhcnJheSA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlT
dG9yZSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChrZXktPmlkKCkuc2l6ZSgpIDw9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXkt
PnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNvZGUoa2V5LT5pZCgpLmRhdGEoKSwga2V5LT5p
ZCgpLnNpemUoKSkpOworICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKG1ha2VTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlZChrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcm9vdE9iamVjdC0+c2V0QXJyYXkoImtpZHMi
LCBXVEZNb3ZlKGFycmF5KSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NE
TUZhaXJQbGF5U3RyZWFtaW5nLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDExICsxMTMsMTEgQEAgc3RhdGljIFZlY3RvcjxSZWY8
U2hhcmVkQnVmZmVyPj4gZXh0cmFjdAogICAgICAgICBpZiAoIWtleUlEKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgVmVjdG9yPGNoYXI+IHNpbmZEYXRhOwotICAgICAgICBpZiAo
IVdURjo6YmFzZTY0RGVjb2RlKGtleUlELCB7IHNpbmZEYXRhIH0sIFdURjo6QmFzZTY0SWdub3Jl
U3BhY2VzQW5kTmV3TGluZXMpKQorICAgICAgICBhdXRvIHNpbmZEYXRhID0gYmFzZTY0RGVjb2Rl
KGtleUlELCBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyk7Cisg
ICAgICAgIGlmICghc2luZkRhdGEpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBz
aW5mcy51bmNoZWNrZWRBcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShzaW5mRGF0
YSkpKTsKKyAgICAgICAgc2luZnMudW5jaGVja2VkQXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KFdURk1vdmUoKnNpbmZEYXRhKSkpOwogICAgIH0KIAogICAgIHJldHVybiBzaW5mczsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUlu
c3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFp
clBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQ
bGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzE1LDcgKzcxNSw3IEBA
IHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAgICAgaWRlbnRp
ZmllciA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmluaXREYXRhLT5j
cmVhdGVOU0RhdGEoKS5nZXQoKSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOwogI2lm
IEhBVkUoRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19JTklUREFUQSkKICAgICBlbHNlIGlmIChpbml0
RGF0YVR5cGUgPT0gSW5pdERhdGFSZWdpc3RyeTo6Y2VuY05hbWUoKSkgewotICAgICAgICBTdHJp
bmcgcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZShpbml0RGF0YS0+ZGF0YSgpLCBpbml0RGF0YS0+
c2l6ZSgpKTsKKyAgICAgICAgYXV0byBwc3NoU3RyaW5nID0gbWFrZVN0cmluZyhiYXNlNjRFbmNv
ZGVkKGluaXREYXRhLT5kYXRhKCksIGluaXREYXRhLT5zaXplKCkpKTsKICAgICAgICAgaW5pdGlh
bGl6YXRpb25EYXRhID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7
IEAicHNzaCI6IChOU1N0cmluZyopcHNzaFN0cmluZyB9IG9wdGlvbnM6TlNKU09OV3JpdGluZ1By
ZXR0eVByaW50ZWQgZXJyb3I6bmlsXTsKICAgICB9CiAjZW5kaWYKQEAgLTg1MCwxMSArODUwLDEx
IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAgICAgICAg
IGlmICgha2V5SURTdHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SURWZWN0b3I7Ci0gICAgICAgICAgICBpZiAoIWJh
c2U2NERlY29kZShrZXlJRFN0cmluZywga2V5SURWZWN0b3IpKQorICAgICAgICAgICAgYXV0byBr
ZXlJRFZlY3RvciA9IGJhc2U2NERlY29kZShrZXlJRFN0cmluZyk7CisgICAgICAgICAgICBpZiAo
a2V5SURWZWN0b3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAg
ICBhdXRvIGtleUlEID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlJRFZlY3Rvcikp
OworICAgICAgICAgICAgYXV0byBrZXlJRCA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUo
KmtleUlEVmVjdG9yKSk7CiAgICAgICAgICAgICBhdXRvIGZvdW5kSW5kZXggPSBtX2N1cnJlbnRS
ZXF1ZXN0LnZhbHVlKCkucmVxdWVzdHMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgcmVxdWVzdCkg
ewogICAgICAgICAgICAgICAgIGF1dG8ga2V5SURzID0ga2V5SURzRm9yUmVxdWVzdChyZXF1ZXN0
LmdldCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4ga2V5SURzLmZpbmRNYXRjaGluZyhbJl0o
Y29uc3QgUmVmPFNoYXJlZEJ1ZmZlcj4mIGlkKSB7CkBAIC04ODUsMTAgKzg4NSwxMCBAQCB2b2lk
IENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgICAgICAgICAgYXV0
byBwYXlsb2FkU3RyaW5nID0gcGF5bG9hZEZpbmRSZXN1bHRzLT52YWx1ZS0+YXNTdHJpbmcoKTsK
ICAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWRTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gcGF5bG9hZFZl
Y3RvcjsKLSAgICAgICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShwYXlsb2FkU3RyaW5nLCBw
YXlsb2FkVmVjdG9yKSkKKyAgICAgICAgICAgICAgICBhdXRvIHBheWxvYWRWZWN0b3IgPSBiYXNl
NjREZWNvZGUocGF5bG9hZFN0cmluZyk7CisgICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkVmVj
dG9yKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
YXV0byBwYXlsb2FkRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUocGF5bG9hZFZl
Y3RvcikpOworICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZERhdGEgPSBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShXVEZNb3ZlKCpwYXlsb2FkVmVjdG9yKSk7CiAgICAgICAgICAgICAgICAgW3JlcXVl
c3QgcHJvY2Vzc0NvbnRlbnRLZXlSZXNwb25zZTpbUEFMOjpnZXRBVkNvbnRlbnRLZXlSZXNwb25z
ZUNsYXNzKCkgY29udGVudEtleVJlc3BvbnNlV2l0aEZhaXJQbGF5U3RyZWFtaW5nS2V5UmVzcG9u
c2VEYXRhOnBheWxvYWREYXRhLT5jcmVhdGVOU0RhdGEoKS5nZXQoKV1dOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTk1LDggKzExOTUsOCBAQCB2b2lkIENE
TUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgICAgICBhdXRvIGVudHJ5
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGF1dG8mIGtleUlEID0gcmVx
dWVzdERhdGEuZmlyc3Q7CiAgICAgICAgICAgICBhdXRvJiBwYXlsb2FkID0gcmVxdWVzdERhdGEu
c2Vjb25kOwotICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygia2V5SUQiLCBiYXNlNjRFbmNv
ZGUoa2V5SUQtPmRhdGEoKSwga2V5SUQtPnNpemUoKSkpOwotICAgICAgICAgICAgZW50cnktPnNl
dFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZShwYXlsb2FkLmdldCgpLmJ5dGVzLCBwYXls
b2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygia2V5SUQi
LCBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoa2V5SUQtPmRhdGEoKSwga2V5SUQtPnNpemUoKSkp
KTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoInBheWxvYWQiLCBtYWtlU3RyaW5nKGJh
c2U2NEVuY29kZWQocGF5bG9hZC5nZXQoKS5ieXRlcywgcGF5bG9hZC5nZXQoKS5sZW5ndGgpKSk7
CiAgICAgICAgICAgICByZXF1ZXN0SlNPTi0+cHVzaE9iamVjdChXVEZNb3ZlKGVudHJ5KSk7CiAg
ICAgICAgIH0KICAgICAgICAgYXV0byByZXF1ZXN0QnVmZmVyID0gdXRmOEJ1ZmZlcihyZXF1ZXN0
SlNPTi0+dG9KU09OU3RyaW5nKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzAsMTAgKzEzMCw3IEBAIFN0cmluZyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRh
VVIKICAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuICJkYXRh
OiwiOwogCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGVu
Y29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0g
ICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwor
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNl
NjRFbmNvZGVkKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCkpKTsKIH0K
IAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzQsMTAgKzE3NCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBjZkRhdGEoY29uc3QKIAogU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAg
YmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRh
KSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5
cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZE
YXRhR2V0TGVuZ3RoKGRhdGEpKSk7CiB9CiAKIFN0cmluZyBkYXRhVVJMKGNvbnN0IFBpeGVsQnVm
ZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHN0YXRpYyBT
dHJpbmcgY3JlYXRlVW5pcXVlRm9udE5hbWUoKQogICAgIEdVSUQgZm9udFV1aWQ7CiAgICAgQ29D
cmVhdGVHdWlkKCZmb250VXVpZCk7CiAKLSAgICBTdHJpbmcgZm9udE5hbWUgPSBiYXNlNjRFbmNv
ZGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSk7
CisgICAgYXV0byBmb250TmFtZSA9IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChyZWludGVycHJl
dF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKSk7CiAgICAgQVNTRVJU
KGZvbnROYW1lLmxlbmd0aCgpIDwgTEZfRkFDRVNJWkUpOwogICAgIHJldHVybiBmb250TmFtZTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBA
QCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlk
OwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQpOwogCi0gICAgU3RyaW5nIGZvbnROYW1lID0g
YmFzZTY0RW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihm
b250VXVpZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSkpOwog
ICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpFKTsKICAgICByZXR1cm4g
Zm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2Vu
ZXJhdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
U0xLZXlHZW5lcmF0b3JNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIx
OSw3ICsyMTksNyBAQCBzdGF0aWMgU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nCiAg
ICAgaWYgKFNlY0FzbjFFbmNvZGVJdGVtKGNvZGVyLCAmc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlLCBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VUZW1wbGF0ZSwgJmVuY29kZWRTaWduZWRQ
dWJsaWNLZXlBbmRDaGFsbGVuZ2UpICE9IG5vRXJyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFs
bGVuZ2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpOwor
ICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoZW5jb2RlZFNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxl
bmd0aCkpOwogfQogCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBs
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVnaXN0cnlJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBz
dGF0aWMgUmVmPFJlc291cmNlSGFuZGxlPiBjcmVhdGVCbG9iUmVzCiAgICAgcmV0dXJuIGJsb2JS
ZWdpc3RyeSgpLmJsb2JSZWdpc3RyeUltcGwoKS0+Y3JlYXRlUmVzb3VyY2VIYW5kbGUocmVxdWVz
dCwgY2xpZW50KTsKIH0KIAotc3RhdGljIHZvaWQgbG9hZEJsb2JSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0
b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3N0YXRpYyB2b2lkIGxvYWRCbG9i
UmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYg
ZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEp
CiB7CiAgICAgYXV0byogYmxvYkRhdGEgPSBibG9iUmVnaXN0cnkoKS5ibG9iUmVnaXN0cnlJbXBs
KCktPmdldEJsb2JEYXRhRnJvbVVSTChyZXF1ZXN0LnVybCgpKTsKICAgICBCbG9iUmVzb3VyY2VI
YW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoYmxvYkRhdGEsIHJlcXVlc3QsIGVycm9y
LCByZXNwb25zZSwgZGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgbmFtZXNwYWNlIHsKIAogY2xhc3MgQmxv
YlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQg
ewogcHVibGljOgotICAgIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJy
b3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+Jik7CisgICAgQmxvYlJlc291cmNl
U3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0
b3I8dWludDhfdD4mKTsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMoUmVzb3Vy
Y2VIYW5kbGUqLCBSZXNvdXJjZVJlc3BvbnNlJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JikgZmluYWw7CiAgICAgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYpIGZpbmFsOwpAQCAtODUsMTAgKzg1LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgUmVzb3VyY2VFcnJvciYgbV9lcnJvcjsKICAgICBSZXNvdXJjZVJlc3BvbnNlJiBtX3Jlc3Bv
bnNlOwotICAgIFZlY3RvcjxjaGFyPiYgbV9kYXRhOworICAgIFZlY3Rvcjx1aW50OF90PiYgbV9k
YXRhOwogfTsKIAotQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXI6OkJsb2JSZXNvdXJjZVN5
bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQorQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2Fk
ZXI6OkJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogICAgIDog
bV9lcnJvcihlcnJvcikKICAgICAsIG1fcmVzcG9uc2UocmVzcG9uc2UpCiAgICAgLCBtX2RhdGEo
ZGF0YSkKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9h
ZGVyOjpkaWRSCiAKICAgICAvLyBSZWFkIGFsbCB0aGUgZGF0YS4KICAgICBtX2RhdGEucmVzaXpl
KHN0YXRpY19jYXN0PHNpemVfdD4ocmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpKTsK
LSAgICBzdGF0aWNfY2FzdDxCbG9iUmVzb3VyY2VIYW5kbGUqPihoYW5kbGUpLT5yZWFkU3luYyht
X2RhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fZGF0YS5zaXplKCkpKTsKKyAgICBzdGF0
aWNfY2FzdDxCbG9iUmVzb3VyY2VIYW5kbGUqPihoYW5kbGUpLT5yZWFkU3luYyhyZWludGVycHJl
dF9jYXN0PGNoYXIqPihtX2RhdGEuZGF0YSgpKSwgc3RhdGljX2Nhc3Q8aW50PihtX2RhdGEuc2l6
ZSgpKSk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIApAQCAtMTQxLDcgKzE0MSw3IEBA
IFJlZjxCbG9iUmVzb3VyY2VIYW5kbGU+IEJsb2JSZXNvdXJjZUhhbmQKICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBCbG9iUmVzb3VyY2VIYW5kbGUoYmxvYkRhdGEsIHJlcXVlc3QsIGNsaWVudCwg
dHJ1ZSkpOwogfQogCi12b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseShCbG9iRGF0YSogYmxvYkRhdGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0
b3I8Y2hhcj4mIGRhdGEpCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShCbG9iRGF0YSogYmxvYkRhdGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBW
ZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgImdldCIpKSB7CiAgICAgICAgIGVycm9yID0g
UmVzb3VyY2VFcnJvcih3ZWJLaXRCbG9iUmVzb3VyY2VEb21haW4sIHN0YXRpY19jYXN0PGludD4o
RXJyb3I6Ok1ldGhvZE5vdEFsbG93ZWQpLCByZXNwb25zZS51cmwoKSwgIlJlcXVlc3QgbWV0aG9k
IG11c3QgYmUgR0VUIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgQmxvYlJlc291cmNlSGFuZGxlIGZpbmFsIDog
cHVibGljIAogcHVibGljOgogICAgIHN0YXRpYyBSZWY8QmxvYlJlc291cmNlSGFuZGxlPiBjcmVh
dGVBc3luYyhCbG9iRGF0YSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxl
Q2xpZW50Kik7CiAKLSAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEJs
b2JEYXRhKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoQmxvYkRhdGEqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNv
dXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAK
ICAgICB2b2lkIHN0YXJ0KCk7CiAgICAgaW50IHJlYWRTeW5jKGNoYXIqLCBpbnQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j
bHVkZSAiQ3JlZGVudGlhbEJhc2UuaCIKIAogI2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKKyNpbmNs
dWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05NCw0
ICs5NSwxMCBAQCBib29sIENyZWRlbnRpYWxCYXNlOjpjb21wYXJlKGNvbnN0IENyZWRlCiAgICAg
cmV0dXJuIENyZWRlbnRpYWw6OnBsYXRmb3JtQ29tcGFyZShhLCBiKTsKIH0KIAorU3RyaW5nIENy
ZWRlbnRpYWxCYXNlOjpzZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkg
Y29uc3QKK3sKKyAgICBhdXRvIGNyZWRlbnRpYWxTdHJpbmdEYXRhID0gbWFrZVN0cmluZyhtX3Vz
ZXIsICc6JywgbV9wYXNzd29yZCkudXRmOCgpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJCYXNp
YyAiLCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRpYWxTdHJpbmdEYXRhKSk7Cit9CisKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmgJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3Jl
ZGVudGlhbEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCBlbnVtIENyZWRl
bnRpYWxQZXJzaXN0ZW5jZSB7CiB9OwogCiBjbGFzcyBDcmVkZW50aWFsQmFzZSB7Ci0KIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgICAKQEAgLTUy
LDYgKzUxLDggQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgY29t
cGFyZShjb25zdCBDcmVkZW50aWFsJiwgY29uc3QgQ3JlZGVudGlhbCYpOwogCisgICAgV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIo
KSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIFdFQkNPUkVfRVhQT1JUIENyZWRlbnRpYWxCYXNl
KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ3JlZGVudGlhbEJhc2UoY29uc3QgU3RyaW5nJiB1c2Vy
LCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkLCBDcmVkZW50aWFsUGVyc2lzdGVuY2UpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
RGF0YVVSTERlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsMzYgKzE0OCwyNiBAQCBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPERlY29kZVRhc2s+IGNyZWF0CiAgICAgKTsKIH0KIAotc3Rh
dGljIGJvb2wgZGVjb2RlQmFzZTY0KERlY29kZVRhc2smIHRhc2ssIE1vZGUgbW9kZSkKK3N0YXRp
YyBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlY29kZUJhc2U2NChjb25zdCBEZWNvZGVUYXNr
JiB0YXNrLCBNb2RlIG1vZGUpCiB7Ci0gICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKLSAgICBpZiAo
bW9kZSA9PSBNb2RlOjpGb3JnaXZpbmdCYXNlNjQpIHsKLSAgICAgICAgYXV0byB1bmVzY2FwZWRT
dHJpbmcgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModGFzay5lbmNvZGVkRGF0YS50b1N0cmlu
Z1dpdGhvdXRDb3B5aW5nKCkpOwotICAgICAgICBpZiAoIWJhc2U2NERlY29kZSh1bmVzY2FwZWRT
dHJpbmcsIGJ1ZmZlciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nIHwgQmFzZTY0SWdub3JlU3BhY2Vz
QW5kTmV3TGluZXMgfCBCYXNlNjREaXNjYXJkVmVydGljYWxUYWIpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBN
b2RlOjpGb3JnaXZpbmdCYXNlNjQ6CisgICAgICAgIHJldHVybiBiYXNlNjREZWNvZGUoZGVjb2Rl
VVJMRXNjYXBlU2VxdWVuY2VzKHRhc2suZW5jb2RlZERhdGEpLCB7IEJhc2U2NERlY29kZU9wdGlv
bnM6OlZhbGlkYXRlUGFkZGluZywgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5k
TmV3TGluZXMsIEJhc2U2NERlY29kZU9wdGlvbnM6OkRpc2NhcmRWZXJ0aWNhbFRhYn0pOworCisg
ICAgY2FzZSBNb2RlOjpMZWdhY3k6CiAgICAgICAgIC8vIEZpcnN0IHRyeSBiYXNlNjR1cmwuCi0g
ICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKHRhc2suZW5jb2RlZERhdGEudG9TdHJpbmdXaXRo
b3V0Q29weWluZygpLCBidWZmZXIpKSB7Ci0gICAgICAgICAgICAvLyBEaWRuJ3Qgd29yaywgdHJ5
IHVuZXNjYXBpbmcgYW5kIGRlY29kaW5nIGFzIGJhc2U2NC4KLSAgICAgICAgICAgIGF1dG8gdW5l
c2NhcGVkU3RyaW5nID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRhc2suZW5jb2RlZERhdGEu
dG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2Rl
KHVuZXNjYXBlZFN0cmluZywgYnVmZmVyLCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyB8
IEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0VVJMRGVj
b2RlKHRhc2suZW5jb2RlZERhdGEpKQorICAgICAgICAgICAgcmV0dXJuIGRlY29kZWREYXRhOwor
ICAgICAgICAvLyBEaWRuJ3Qgd29yaywgdHJ5IHVuZXNjYXBpbmcgYW5kIGRlY29kaW5nIGFzIGJh
c2U2NC4KKyAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZShkZWNvZGVVUkxFc2NhcGVTZXF1ZW5j
ZXModGFzay5lbmNvZGVkRGF0YSksIHsgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2Vz
QW5kTmV3TGluZXMsIEJhc2U2NERlY29kZU9wdGlvbnM6OkRpc2NhcmRWZXJ0aWNhbFRhYiB9KTsK
ICAgICB9Ci0gICAgYnVmZmVyLnNocmlua1RvRml0KCk7Ci0gICAgdGFzay5yZXN1bHQuZGF0YSA9
IFdURk1vdmUoYnVmZmVyKTsKLQotICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBk
ZWNvZGVFc2NhcGVkKERlY29kZVRhc2smIHRhc2spCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGRl
Y29kZUVzY2FwZWQoY29uc3QgRGVjb2RlVGFzayYgdGFzaykKIHsKICAgICBUZXh0RW5jb2Rpbmcg
ZW5jb2RpbmdGcm9tQ2hhcnNldCh0YXNrLnJlc3VsdC5jaGFyc2V0KTsKICAgICBhdXRvJiBlbmNv
ZGluZyA9IGVuY29kaW5nRnJvbUNoYXJzZXQuaXNWYWxpZCgpID8gZW5jb2RpbmdGcm9tQ2hhcnNl
dCA6IFVURjhFbmNvZGluZygpOwotICAgIGF1dG8gYnVmZmVyID0gZGVjb2RlVVJMRXNjYXBlU2Vx
dWVuY2VzQXNEYXRhKHRhc2suZW5jb2RlZERhdGEsIGVuY29kaW5nKTsKLQotICAgIGJ1ZmZlci5z
aHJpbmtUb0ZpdCgpOwotICAgIHRhc2sucmVzdWx0LmRhdGEgPSBXVEZNb3ZlKGJ1ZmZlcik7Cisg
ICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0YSh0YXNrLmVuY29kZWREYXRh
LCBlbmNvZGluZyk7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxSZXN1bHQ+IGRlY29kZVN5bmNocm9u
b3VzbHkoRGVjb2RlVGFzayYgdGFzaywgTW9kZSBtb2RlKQpAQCAtMTg2LDExICsxNzYsMTQgQEAg
c3RhdGljIE9wdGlvbmFsPFJlc3VsdD4gZGVjb2RlU3luY2hyb25vdQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgaWYgKHRhc2suaXNCYXNlNjQpIHsKLSAgICAgICAgaWYgKCFk
ZWNvZGVCYXNlNjQodGFzaywgbW9kZSkpCisgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBkZWNv
ZGVCYXNlNjQodGFzaywgbW9kZSk7CisgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB0YXNrLnJlc3VsdC5kYXRhID0gV1RG
TW92ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxzZQotICAgICAgICBkZWNvZGVFc2NhcGVkKHRh
c2spOworICAgICAgICB0YXNrLnJlc3VsdC5kYXRhID0gZGVjb2RlRXNjYXBlZCh0YXNrKTsKIAor
ICAgIHRhc2sucmVzdWx0LmRhdGEuc2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gV1RGTW92ZSh0
YXNrLnJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
RGF0YVVSTERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBzdHJ1Y3QgUmVzdWx0IHsKICAgICBTdHJpbmcgbWltZVR5cGU7CiAgICAg
U3RyaW5nIGNoYXJzZXQ7CiAgICAgU3RyaW5nIGNvbnRlbnRUeXBlOwotICAgIFZlY3RvcjxjaGFy
PiBkYXRhOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogfTsKIAogdXNpbmcgRGVjb2RlQ29t
cGxldGlvbkhhbmRsZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQgKE9wdGlvbmFsPFJlc3VsdD4pPjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3
IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmZhaWx1cmVUaW1lckZpcmVkKCkKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBW
ZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBpZiAoYXV0byBjb25zdHJ1Y3RvciA9IGJ1aWx0
aW5SZXNvdXJjZUhhbmRsZVN5bmNocm9ub3VzTG9hZGVyTWFwKCkuZ2V0KHJlcXVlc3QudXJsKCku
cHJvdG9jb2woKS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpKSB7CiAgICAgICAgIGNvbnN0cnVj
dG9yKGNvbnRleHQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBlcnJvciwgcmVz
cG9uc2UsIGRhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3
ICs5NSw3IEBAIGNsYXNzIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOwogY2xhc3MgUmVzb3Vy
Y2VIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT4sIHB1YmxpYyBBdXRo
ZW50aWNhdGlvbkNsaWVudCB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqLCBib29sIGRlZmVyc0xvYWRpbmcs
IGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZENvbnRlbnRFbmNvZGluZ1NuaWZm
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PGNoYXI+JiBkYXRhKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3Bv
bnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5SZXNvdXJjZUhhbmRsZSgpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDRlVSTENP
Tk5FQ1RJT04pCkBAIC0xOTMsNyArMTkzLDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgUmVmPFJl
c291cmNlSGFuZGxlPiAoKkJ1aWx0aW5Db25zdHJ1Y3RvcikoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KTsKICAgICBzdGF0aWMgdm9p
ZCByZWdpc3RlckJ1aWx0aW5Db25zdHJ1Y3Rvcihjb25zdCBBdG9tU3RyaW5nJiBwcm90b2NvbCwg
QnVpbHRpbkNvbnN0cnVjdG9yKTsKIAotICAgIHR5cGVkZWYgdm9pZCAoKkJ1aWx0aW5TeW5jaHJv
bm91c0xvYWRlcikoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2Um
LCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIHR5cGVkZWYgdm9pZCAoKkJ1aWx0aW5TeW5jaHJv
bm91c0xvYWRlcikoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2Um
LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQnVpbHRp
blN5bmNocm9ub3VzTG9hZGVyKGNvbnN0IEF0b21TdHJpbmcmIHByb3RvY29sLCBCdWlsdGluU3lu
Y2hyb25vdXNMb2FkZXIpOwogCiBwcm90ZWN0ZWQ6CkBAIC0yMTMsNyArMjEzLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNjaGVkdWxlRmFpbHVyZShGYWlsdXJlVHlwZSk7CiAKICAgICBib29sIHN0
YXJ0KCk7Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNo
YXI+JiBkYXRhKTsKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0
b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgdm9pZCByZWZBdXRoZW50aWNhdGlvbkNsaWVudCgp
IG92ZXJyaWRlIHsgcmVmKCk7IH0KICAgICB2b2lkIGRlcmVmQXV0aGVudGljYXRpb25DbGllbnQo
KSBvdmVycmlkZSB7IGRlcmVmKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9u
b3VzTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lk
IFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlCiAKIHZvaWQgU3luY2hyb25vdXNM
b2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBpbnQgLyplbmNvZGVkRGF0YUxlbmd0aCovKQogewotICAg
IG1fZGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKKyAgICBtX2RhdGEuYXBwZW5kKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOwogfQogCiB2b2lkIFN5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9h
ZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRBbGxvd1N0
b3JlZENyZWRlbnRpYWxzKGJvb2wgYWxsb3cpIHsgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0g
YWxsb3c7IH0KICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzcG9uc2U7IH0KLSAgICBWZWN0b3I8Y2hhcj4mIG11dGFibGVEYXRhKCkgeyBy
ZXR1cm4gbV9kYXRhOyB9CisgICAgVmVjdG9yPHVpbnQ4X3Q+JiBtdXRhYmxlRGF0YSgpIHsgcmV0
dXJuIG1fZGF0YTsgfQogICAgIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9lcnJvcjsgfQogICAgIFN5bmNocm9ub3VzTG9hZGVyTWVzc2FnZVF1ZXVlJiBtZXNz
YWdlUXVldWUoKSB7IHJldHVybiBtX21lc3NhZ2VRdWV1ZS5nZXQoKTsgfQogCkBAIC03NSw3ICs3
NSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyB7IGZh
bHNlIH07CiAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFy
PiBtX2RhdGE7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fZGF0YTsKICAgICBSZXNvdXJjZUVycm9y
IG1fZXJyb3I7CiAgICAgUmVmPFN5bmNocm9ub3VzTG9hZGVyTWVzc2FnZVF1ZXVlPiBtX21lc3Nh
Z2VRdWV1ZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jl
c291cmNlSGFuZGxlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5l
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDkgKzg1LDcgQEAgc3RhdGljIEhhc2hNYXA8U3Ry
aW5nLCBSZXRhaW5QdHI8Q0ZEYXRhUgogCiBzdGF0aWMgdm9pZCBhcHBseUJhc2ljQXV0aG9yaXph
dGlvbkhlYWRlcihSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENyZWRlbnRpYWwmIGNy
ZWRlbnRpYWwpCiB7Ci0gICAgU3RyaW5nIGF1dGhlbnRpY2F0aW9uSGVhZGVyID0gIkJhc2ljICIg
KyBiYXNlNjRFbmNvZGUoU3RyaW5nKGNyZWRlbnRpYWwudXNlcigpICsgIjoiICsgY3JlZGVudGlh
bC5wYXNzd29yZCgpKS51dGY4KCkpOwotCi0gICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGF1dGhlbnRpY2F0aW9uSGVhZGVyKTsKKyAg
ICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlv
biwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkp
OwogfQogCiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgp
CkBAIC01MjQsNyArNTIyLDcgQEAgc3RhdGljIHZvaWQgZW1wdHlQZXJmb3JtKHZvaWQqKQogewog
fQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJl
c291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNo
YXI+JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBMT0coTmV0d29yaywgIlJlc291cmNlSGFuZGxl
OjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHk6JXMgc3N0b3JlZENyZWRlbnRpYWxz
UG9saWN5OiV1IiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlQ3VybC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjgsNyArMzY4LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVzdGFydFJlcXVlc3RXaXRo
QwogICAgIGQtPm1fY3VybFJlcXVlc3QtPnN0YXJ0KCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5k
bGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFs
c1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291
cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVy
cm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFyZXF1ZXN0LmlzRW1w
dHkoKSk7CkBAIC01NjIsOSArNTYyLDkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxlRGF0
YVVSTCgpCiAKICAgICAgICAgLy8gZGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBj
bGllbnQgdG8gYmUgZGVsZXRlZC4KICAgICAgICAgaWYgKGNsaWVudCgpKSB7Ci0gICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYgKGJhc2U2NERlY29kZShkYXRhLCBv
dXQsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSAmJiBvdXQuc2l6ZSgpID4gMCkKLSAg
ICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcih0aGlzLCBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpKSwgb3JpZ2luYWxTaXplKTsKKyAgICAg
ICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoZGF0YSwgQmFzZTY0RGVjb2Rl
T3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpOworICAgICAgICAgICAgaWYgKGRlY29k
ZWREYXRhICYmIGRlY29kZWREYXRhLT5zaXplKCkgPiAwKQorICAgICAgICAgICAgICAgIGNsaWVu
dCgpLT5kaWRSZWNlaXZlQnVmZmVyKHRoaXMsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRlY29kZWRE
YXRhLT5kYXRhKCksIGRlY29kZWREYXRhLT5zaXplKCkpLCBvcmlnaW5hbFNpemUpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nKGNoYXJzZXQp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5k
bGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvUmVzb3VyY2VIYW5kbGVNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw5ICs2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIHN0YXRpYyB2
b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKLSAgICBTdHJpbmcgYXV0aGVudGlj
YXRpb25IZWFkZXIgPSAiQmFzaWMgIiArIGJhc2U2NEVuY29kZShTdHJpbmcoY3JlZGVudGlhbC51
c2VyKCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3b3JkKCkpLnV0ZjgoKSk7Ci0KLSAgICByZXF1
ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlvbiwgYXV0
aGVudGljYXRpb25IZWFkZXIpOworICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBI
ZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uLCBjcmVkZW50aWFsLnNlcmlhbGl6YXRpb25Gb3JCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIoKSk7CiB9CiAKIHN0YXRpYyBOU09wZXJhdGlvblF1ZXVlICpv
cGVyYXRpb25RdWV1ZUZvckFzeW5jQ2xpZW50cygpCkBAIC0zNTIsNyArMzUwLDcgQEAgQ0ZTdHJp
bmdSZWYgUmVzb3VyY2VIYW5kbGU6OnN5bmNocm9ub3VzTAogICAgIHJldHVybiBDRlNUUigiV2Vi
Q29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUiKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhh
bmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRp
YWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgUmVz
b3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRD
cmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYg
ZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEp
CiB7CiAgICAgTE9HKE5ldHdvcmssICJSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5OiVAIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5OiV1IiwgcmVxdWVzdC5u
c1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlSGFuZGxlU291cC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXRE
ZWZlcnNMbwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFJlc291cmNlSGFu
ZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQq
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3Vy
Y2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mKQordm9pZCBSZXNvdXJj
ZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250
ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJl
c291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JikKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
U291cE5ldHdvcmtTZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBw
cml2YXRlOgogICAgICAgICBkaWdlc3QtPmFkZEJ5dGVzKGNlcnRpZmljYXRlRGF0YS0+ZGF0YSwg
Y2VydGlmaWNhdGVEYXRhLT5sZW4pOwogCiAgICAgICAgIGF1dG8gaGFzaCA9IGRpZ2VzdC0+Y29t
cHV0ZUhhc2goKTsKLSAgICAgICAgcmV0dXJuIGJhc2U2NEVuY29kZShyZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihoYXNoLmRhdGEoKSksIGhhc2guc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPiho
YXNoLmRhdGEoKSksIGhhc2guc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgSGFzaFNldDxTdHJpbmc+
IG1fY2VydGlmaWNhdGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNv
ZGVFc2NhcGVTZXF1ZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTQsMTEgKzE1NCwxMSBAQCBTdHJpbmcgZGVjb2RlRXNjYXBlU2VxdWVuY2Vz
KFN0cmluZ1ZpZXcgCiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1pbmxpbmUg
VmVjdG9yPGNoYXI+IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0
cmluZywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK2lubGluZSBWZWN0b3I8dWludDhf
dD4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewogICAgIEFTU0VSVChlbmNvZGluZy5pc1ZhbGlk
KCkpOwogCi0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVz
dWx0OwogICAgIHNpemVfdCBkZWNvZGVkUG9zaXRpb24gPSAwOwogICAgIHNpemVfdCBzZWFyY2hQ
b3NpdGlvbiA9IDA7CiAgICAgd2hpbGUgKHRydWUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heGltdW1M
aW5lTGVuZ3RoID0gCiAKIHN0YXRpYyBjb25zdCBjaGFyIGNybGZMaW5lRW5kaW5nW10gPSAiXHJc
biI7CiAKLXN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRleChjb25zdCBjaGFy
KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoLCBzaXplX3QgaW5kZXgpCitzdGF0aWMgc2l6ZV90
IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoY29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBp
bnB1dExlbmd0aCwgc2l6ZV90IGluZGV4KQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKGluZGV4IDwgaW5wdXRMZW5ndGgpOwogICAgIGlmIChpbnB1dFtpbmRleF0gPT0g
J1xuJykKQEAgLTU1LDE5ICs1NSwxOSBAQCBzdGF0aWMgc2l6ZV90IGxlbmd0aE9mTGluZUVuZGlu
Z0F0SW5kZXgoCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRW5jb2Rl
KGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0KQorVmVjdG9yPHVpbnQ4
X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQog
ewotICAgIHF1b3RlZFByaW50YWJsZUVuY29kZShpbi5kYXRhKCksIGluLnNpemUoKSwgb3V0KTsK
KyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6
ZSgpKTsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgY2hhciogaW5wdXQs
IHNpemVfdCBpbnB1dExlbmd0aCwgVmVjdG9yPGNoYXI+JiBvdXQpCitWZWN0b3I8dWludDhfdD4g
cXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRM
ZW5ndGgpCiB7Ci0gICAgb3V0LmNsZWFyKCk7Ci0gICAgb3V0LnJlc2VydmVDYXBhY2l0eShpbnB1
dExlbmd0aCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dDsKKyAgICBvdXQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShpbnB1dExlbmd0aCk7CiAgICAgc2l6ZV90IGN1cnJlbnRMaW5lTGVuZ3RoID0g
MDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyArK2kpIHsKICAgICAg
ICAgYm9vbCBpc0xhc3RDaGFyYWN0ZXIgPSAoaSA9PSBpbnB1dExlbmd0aCAtIDEpOwotICAgICAg
ICBjaGFyIGN1cnJlbnRDaGFyYWN0ZXIgPSBpbnB1dFtpXTsKKyAgICAgICAgdWludDhfdCBjdXJy
ZW50Q2hhcmFjdGVyID0gaW5wdXRbaV07CiAgICAgICAgIGJvb2wgcmVxdWlyZXNFbmNvZGluZyA9
IGZhbHNlOwogICAgICAgICAvLyBBbGwgbm9uLXByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzIGFu
ZCA9IHJlcXVpcmUgZW5jb2RpbmcuCiAgICAgICAgIGlmICgoY3VycmVudENoYXJhY3RlciA8ICcg
JyB8fCBjdXJyZW50Q2hhcmFjdGVyID4gJ34nIHx8IGN1cnJlbnRDaGFyYWN0ZXIgPT0gJz0nKSAm
JiBjdXJyZW50Q2hhcmFjdGVyICE9ICdcdCcpCkBAIC0xMTIsMTggKzExMiwyMCBAQCB2b2lkIHF1
b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBjaGFyKiBpCiAgICAgICAgICAgICBjdXJyZW50TGlu
ZUxlbmd0aCsrOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIG91dDsKIH0KIAotdm9p
ZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbiwgVmVjdG9yPGNo
YXI+JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgaW5wdXQpCiB7Ci0gICAgcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGluLmRh
dGEoKSwgaW4uc2l6ZSgpLCBvdXQpOworICAgIHJldHVybiBxdW90ZWRQcmludGFibGVEZWNvZGUo
aW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwogfQogCi12b2lkIHF1b3RlZFByaW50YWJsZURl
Y29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgVmVjdG9yPGNoYXI+JiBv
dXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQogewotICAgIG91dC5jbGVhcigpOworICAgIFZlY3Rv
cjx1aW50OF90PiBvdXQ7CiAgICAgaWYgKCFkYXRhTGVuZ3RoKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBvdXQ7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGFMZW5n
dGg7ICsraSkgewogICAgICAgICBjaGFyIGN1cnJlbnRDaGFyYWN0ZXIgPSBkYXRhW2ldOwpAQCAt
MTQ5LDggKzE1MSw5IEBAIHZvaWQgcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IGNoYXIqIGQK
ICAgICAgICAgICAgIG91dC5hcHBlbmQobG93ZXJDaGFyYWN0ZXIpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KLSAgICAgICAgb3V0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPih0
b0FTQ0lJSGV4VmFsdWUodXBwZXJDaGFyYWN0ZXIsIGxvd2VyQ2hhcmFjdGVyKSkpOworICAgICAg
ICBvdXQuYXBwZW5kKHRvQVNDSUlIZXhWYWx1ZSh1cHBlckNoYXJhY3RlciwgbG93ZXJDaGFyYWN0
ZXIpKTsKICAgICB9CisgICAgcmV0dXJuIG91dDsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxOSArMjgsMTYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lm
bmRlZiBRdW90ZWRQcmludGFibGVfaAotI2RlZmluZSBRdW90ZWRQcmludGFibGVfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYsIFZlY3Rv
cjxjaGFyPiYpOwotdm9pZCBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgY2hhciosIHNpemVf
dCwgVmVjdG9yPGNoYXI+Jik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2Rl
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJs
ZUVuY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIAotdm9pZCBxdW90ZWRQcmludGFibGVE
ZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgVmVjdG9yPGNoYXI+Jik7Ci12b2lkIHF1b3RlZFBy
aW50YWJsZURlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90LCBWZWN0b3I8Y2hhcj4mKTsKK1ZlY3Rv
cjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7
CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBRdW90ZWRQcmlu
dGFibGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NTTEtleUdlbmVyYXRv
cldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NTTEtl
eUdlbmVyYXRvcldpbi5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3
ICs4MCw3IEBAIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcKICAgICAg
ICAgaWYgKCFDcnlwdFNpZ25BbmRFbmNvZGVDZXJ0aWZpY2F0ZShoQ29udGV4dCwgQVRfS0VZRVhD
SEFOR0UsIFg1MDlfQVNOX0VOQ09ESU5HLCBYNTA5X0tFWUdFTl9SRVFVRVNUX1RPX0JFX1NJR05F
RCwgJnJlcXVlc3RJbmZvLCAmc2lnbkFsZ28sIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBCWVRFPihi
aW5hcnkuZGF0YSgpKSwgJmR3RW5jb2RlZExlbmd0aCkpCiAgICAgICAgICAgICBicmVhazsKIAot
ICAgICAgICBrZXlTdHJpbmcgPSBiYXNlNjRFbmNvZGUoYmluYXJ5KTsKKyAgICAgICAga2V5U3Ry
aW5nID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGJpbmFyeSkpOwogICAgIH0gd2hpbGUoMCk7
CiAKICAgICBpZiAocFB1YkluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZp
Y2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0
U3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgU3RyaW5nIFNXU2Ny
aXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgUwogICAgIGF1dG8gaW5wdXRVdGY4ID0gaW5wdXQu
dXRmOCgpOwogICAgIGNyeXB0by0+YWRkQnl0ZXMoaW5wdXRVdGY4LmRhdGEoKSwgaW5wdXRVdGY4
Lmxlbmd0aCgpKTsKICAgICBhdXRvIGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7Ci0gICAg
cmV0dXJuIFdURjo6YmFzZTY0VVJMRW5jb2RlKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSk7Cisg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChoYXNoLmRhdGEoKSwgaGFzaC5z
aXplKCkpKTsKIH0KIAogU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgVVJM
JiBpbnB1dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc2NTQpCisrKyBTb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDIxLTA1
LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFz
ZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJ
UF0KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNlbmRSZXBseVRvU3luY2hyb25vdXNSZXF1
ZXN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1h
bmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFn
ZXI6OmZpcmVDb252ZXJzaW9uUmVxdWVzdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OmFwcGx5QmFzaWNB
dXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQSURhdGEuaDoKKyAg
ICAgICAgKEFQSTo6RGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEFQSTo6RGF0YTo6ZnJlZVZlY3Rv
ckJ5dGVzKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OnNhbmRib3hGaWxlUGF0aCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
Lm1tOgorICAgICAgICAocHJvZHVjZUNsaWVudERhdGFKc29uKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQXV0b21hdGlvbi9jYWlyby9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6YmFzZTY0RW5jb2RlZFBOR0RhdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9OYXZpZ2F0aW9uU3RhdGUubW06CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0
ZTo6TmF2aWdhdGlvbkNsaWVudDo6d2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlH
dGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybVNhdmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3Rv
clVJUHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpw
bGF0Zm9ybVNhdmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rv
ci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcyk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbToKKyAg
ICAgICAgKFdlYktpdDo6TG9jYWxBdXRoZW50aWNhdG9ySW50ZXJuYWw6OnByb2R1Y2VIYXNoU2V0
KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCk6
CisgICAgICAgIChXZWJLaXQ6OkxvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1vY2tIaWRDb25uZWN0aW9uOjpmZWVkUmVwb3J0cyk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29u
bmVjdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6TW9ja0xvY2FsQ29ubmVjdGlvbjo6ZmlsdGVy
UmVzcG9uc2VzIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVUkxTY2hlbWVUYXNrOjpkaWRDb21wbGV0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlVS
TFNjaGVtZVRhc2suaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3Ry
YXRlZ3kuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRl
clN0cmF0ZWd5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhh
bmRsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRsZXJQcm94
eTo6bG9hZFN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJV
UkxTY2hlbWVIYW5kbGVyUHJveHkuaDoKKwogMjAyMS0wNS0xOCAgWW91ZW5uIEZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVzdXJyZWN0IFdLV2ViVmlldyBtZWRpYSBjb250
cm9scyBBUEkgcmVtb3ZlZCBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjIxOTI5CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMu
aW4JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTIzLDcgKzIzLDcgQEAKIG1lc3NhZ2VzIC0+IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
IExlZ2FjeVJlY2VpdmVyIHsKIAogICAgIFNjaGVkdWxlUmVzb3VyY2VMb2FkKFdlYktpdDo6TmV0
d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykKLSAgICBQ
ZXJmb3JtU3luY2hyb25vdXNMb2FkKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJy
b3IsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiBkYXRh
KSBTeW5jaHJvbm91cworICAgIFBlcmZvcm1TeW5jaHJvbm91c0xvYWQoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKSAtPiAoV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZSwgVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgVGVzdFByb2Nlc3NJbmNv
bWluZ1N5bmNNZXNzYWdlc1doZW5XYWl0aW5nRm9yU3luY1JlcGx5KFdlYktpdDo6V2ViUGFnZVBy
b3h5SWRlbnRpZmllciBwYWdlSUQpIC0+IChib29sIGhhbmRsZWQpIFN5bmNocm9ub3VzCiAgICAg
TG9hZFBpbmcoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzKQogICAgIFJlbW92ZUxvYWRJZGVudGlmaWVyKHVpbnQ2NF90IHJlc291cmNl
TG9hZElkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIHZvaWQgc2VuZFJlcGx5VG9TeW5j
aHJvbm91c1JlcXVlcwogICAgIEFTU0VSVChkYXRhLmRlbGF5ZWRSZXBseSk7CiAgICAgQVNTRVJU
KCFkYXRhLnJlc3BvbnNlLmlzTnVsbCgpIHx8ICFkYXRhLmVycm9yLmlzTnVsbCgpKTsKIAotICAg
IFZlY3RvcjxjaGFyPiByZXNwb25zZUJ1ZmZlcjsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzcG9u
c2VCdWZmZXI7CiAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPnNpemUoKSkKICAgICAgICAgcmVz
cG9uc2VCdWZmZXIuYXBwZW5kKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1By
aXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE0ICszMTUsMTUgQEAgdm9pZCBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcgogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBwdWJsaWNLZXlEYXRhOwot
ICAgICAgICBXVEY6OmJhc2U2NFVSTERlY29kZShwdWJsaWNLZXlCYXNlNjRVUkwsIHB1YmxpY0tl
eURhdGEpOworICAgICAgICBhdXRvIHB1YmxpY0tleURhdGEgPSBiYXNlNjRVUkxEZWNvZGUocHVi
bGljS2V5QmFzZTY0VVJMKTsKKyAgICAgICAgaWYgKCFwdWJsaWNLZXlEYXRhKQorICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gY3J5cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNy
ZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKLSAgICAgICAgY3J5
cHRvLT5hZGRCeXRlcyhwdWJsaWNLZXlEYXRhLmRhdGEoKSwgcHVibGljS2V5RGF0YS5zaXplKCkp
OworICAgICAgICBjcnlwdG8tPmFkZEJ5dGVzKHB1YmxpY0tleURhdGEtPmRhdGEoKSwgcHVibGlj
S2V5RGF0YS0+c2l6ZSgpKTsKICAgICAgICAgYXV0byBwdWJsaWNLZXlEYXRhSGFzaCA9IGNyeXB0
by0+Y29tcHV0ZUhhc2goKTsKIAotICAgICAgICBhdXRvIGtleUlEID0gV1RGOjpiYXNlNjRVUkxF
bmNvZGUocHVibGljS2V5RGF0YUhhc2guZGF0YSgpLCBwdWJsaWNLZXlEYXRhSGFzaC5zaXplKCkp
OworICAgICAgICBhdXRvIGtleUlEID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKHB1Ymxp
Y0tleURhdGFIYXNoLmRhdGEoKSwgcHVibGljS2V5RGF0YUhhc2guc2l6ZSgpKSk7CiAgICAgICAg
IGlmIChrZXlJRCAhPSBhdHRyaWJ1dGlvbi5zb3VyY2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURC
YXNlNjRVUkwpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5t
bQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2Nv
YS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKICNpZiBVU0UoQ1JFREVOVElBTF9TVE9SQUdFX1dJVEhfTkVU
V09SS19TRVNTSU9OKQogc3RhdGljIHZvaWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpDcmVkZW50
aWFsJiBjcmVkZW50aWFsKQogewotICAgIFN0cmluZyBhdXRoZW50aWNhdGlvbkhlYWRlciA9ICJC
YXNpYyAiICsgYmFzZTY0RW5jb2RlKFN0cmluZyhjcmVkZW50aWFsLnVzZXIoKSArICI6IiArIGNy
ZWRlbnRpYWwucGFzc3dvcmQoKSkudXRmOCgpKTsKLSAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJG
aWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlvbiwgYXV0aGVudGljYXRp
b25IZWFkZXIpOworICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBI
ZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uLCBjcmVkZW50aWFsLnNlcmlhbGl6YXRpb25Gb3JCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIoKSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktp
dC9TaGFyZWQvQVBJL0FQSURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9BUEkvQVBJRGF0YS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9BUEkvQVBJRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCwxMCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBtZW1jcHkoY29waWVkQnl0ZXMsIGJ5dGVzLCBzaXplKTsKICAgICAgICAg
fQogCi0gICAgICAgIHJldHVybiBjcmVhdGVXaXRob3V0Q29weWluZyhjb3BpZWRCeXRlcywgc2l6
ZSwgZmFzdEZyZWVCeXRlcywgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBjcmVhdGVXaXRob3V0
Q29weWluZyhjb3BpZWRCeXRlcywgc2l6ZSwgW10gKHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBjb25z
dCB2b2lkKikgeworICAgICAgICAgICAgaWYgKGJ5dGVzKQorICAgICAgICAgICAgICAgIGZhc3RG
cmVlKHN0YXRpY19jYXN0PHZvaWQqPihieXRlcykpOworICAgICAgICB9LCBudWxscHRyKTsKICAg
ICB9CiAgICAgCiAgICAgc3RhdGljIFJlZjxEYXRhPiBjcmVhdGUoY29uc3QgVmVjdG9yPHVuc2ln
bmVkIGNoYXI+JiBidWZmZXIpCkBAIC02OCw2ICs3MSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBjcmVhdGUoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CiAgICAgfQogCisgICAg
c3RhdGljIFJlZjxEYXRhPiBjcmVhdGUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYgYnVmZmVyKQor
ICAgIHsKKyAgICAgICAgYXV0byBidWZmZXJTaXplID0gYnVmZmVyLnNpemUoKTsKKyAgICAgICAg
YXV0byBidWZmZXJQb2ludGVyID0gYnVmZmVyLnJlbGVhc2VCdWZmZXIoKS5sZWFrUHRyKCk7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVXaXRob3V0Q29weWluZyhidWZmZXJQb2ludGVyLCBidWZmZXJT
aXplLCBbXSAodW5zaWduZWQgY2hhciogYnl0ZXMsIGNvbnN0IHZvaWQqKSB7CisgICAgICAgICAg
ICBpZiAoYnl0ZXMpCisgICAgICAgICAgICAgICAgV1RGOjpWZWN0b3JNYWxsb2M6OmZyZWUoYnl0
ZXMpOworICAgICAgICB9LCBudWxscHRyKTsKKyAgICB9CisKICAgICBzdGF0aWMgUmVmUHRyPERh
dGE+IGNyZWF0ZShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKICAgICAKICNpZiBQTEFURk9S
TShDT0NPQSkKQEAgLTk2LDEyICsxMDksNiBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBmYXN0RnJlZUJ5dGVzKHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBjb25zdCB2
b2lkKikKLSAgICB7Ci0gICAgICAgIGlmIChieXRlcykKLSAgICAgICAgICAgIGZhc3RGcmVlKHN0
YXRpY19jYXN0PHZvaWQqPihieXRlcykpOwotICAgIH0KLQogICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIqIG1fYnl0ZXMgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKIApJbmRl
eDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0J
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQ
cm9jZXNzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsMTggKzMxNSwxMyBAQCBzdGF0aWMg
U3RyaW5nIHNhbmRib3hEaXJlY3RvcnkoV2ViQ29yZTo6CiAKIHN0YXRpYyBTdHJpbmcgc2FuZGJv
eEZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCwgY29uc3QgQ1N0cmluZyYgaGVh
ZGVyKQogewotICAgIFN0cmluZ0J1aWxkZXIgc2FuZGJveEZpbGU7Ci0gICAgc2FuZGJveEZpbGUu
YXBwZW5kKGRpcmVjdG9yeVBhdGgpOwotICAgIHNhbmRib3hGaWxlLmFwcGVuZCgiL0NvbXBpbGVk
U2FuZGJveCsiKTsKLQogICAgIC8vIE1ha2UgdGhlIGZpbGVuYW1lIHNlbWktdW5pcXVlIGJhc2Vk
IG9uIHRoZSBjb250ZW50cyBvZiB0aGUgaGVhZGVyLgorCiAgICAgYXV0byBjcnlwdG8gPSBQQUw6
OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8y
NTYpOwogICAgIGNyeXB0by0+YWRkQnl0ZXMoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLmxlbmd0aCgp
KTsKLSAgICBWZWN0b3I8dWludDhfdD4gaGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKLSAg
ICBTdHJpbmcgcmVhZGFibGVIYXNoID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoaGFzaC5kYXRhKCks
IGhhc2guc2l6ZSgpKTsKKyAgICBhdXRvIGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAK
LSAgICBzYW5kYm94RmlsZS5hcHBlbmQocmVhZGFibGVIYXNoKTsKLSAgICByZXR1cm4gc2FuZGJv
eEZpbGUudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhkaXJlY3RvcnlQYXRoLCAi
L0NvbXBpbGVkU2FuZGJveCsiLCBiYXNlNjRVUkxFbmNvZGVkKGhhc2guZGF0YSgpLCBoYXNoLnNp
emUoKSkpOwogfQogCiBzdGF0aWMgYm9vbCBlbnN1cmVTYW5kYm94Q2FjaGVEaXJlY3RvcnkoY29u
c3QgU2FuZGJveEluZm8mIGluZm8pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkK
QEAgLTUyMCw3ICs1MjAsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgU3Rh
cnRVUkxTY2hlbWVUYXNrKHN0cnVjdCBXZWJLaXQ6OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBh
cmFtZXRlcnMpCiAgICAgU3RvcFVSTFNjaGVtZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50aWZp
ZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKQotICAgIExvYWRTeW5jaHJvbm91c1VSTFNjaGVt
ZVRhc2soc3RydWN0IFdlYktpdDo6VVJMU2NoZW1lVGFza1BhcmFtZXRlcnMgcGFyYW1ldGVycykg
LT4gKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNl
RXJyb3IgZXJyb3IsIFZlY3RvcjxjaGFyPiBkYXRhKSBTeW5jaHJvbm91cworICAgIExvYWRTeW5j
aHJvbm91c1VSTFNjaGVtZVRhc2soc3RydWN0IFdlYktpdDo6VVJMU2NoZW1lVGFza1BhcmFtZXRl
cnMgcGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFdl
YkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJv
bm91cwogCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBTaG91bGRBbGxvd0Rl
dmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBm
cmFtZUlELCBzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIGZyYW1lSW5mbywgYm9vbCBtYXlQ
cm9tcHQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6RGV2aWNlT3JpZW50YXRpb25Pck1vdGlv
blBlcm1pc3Npb25TdGF0ZSBwZXJtaXNzaW9uU3RhdGUpIEFzeW5jCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgc3RydWN0IFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJz
OwogY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3MgV2ViUHJvY2Vzc1Byb3h5OwogCi11c2luZyBT
eW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYs
IGNvbnN0IFZlY3RvcjxjaGFyPiYpPjsKK3VzaW5nIFN5bmNMb2FkQ29tcGxldGlvbkhhbmRsZXIg
PSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik+
OwogCiBjbGFzcyBXZWJVUkxTY2hlbWVIYW5kbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVVJM
U2NoZW1lSGFuZGxlcj4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlVSTFNjaGVtZUhh
bmRsZXIpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFz
ay5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVS
TFNjaGVtZVRhc2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsMTAgKzIxMiwxMCBAQCBhdXRv
IFdlYlVSTFNjaGVtZVRhc2s6OmRpZENvbXBsZXRlKGNvbnN0CiAgICAgbV9jb21wbGV0ZWQgPSB0
cnVlOwogICAgIAogICAgIGlmIChpc1N5bmMoKSkgewotICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0
YTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgICAgIGlmIChtX3N5bmNEYXRh
KSB7CiAgICAgICAgICAgICBkYXRhLnJlc2l6ZShtX3N5bmNEYXRhLT5zaXplKCkpOwotICAgICAg
ICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPiht
X3N5bmNEYXRhLT5kYXRhKCkpLCBtX3N5bmNEYXRhLT5zaXplKCkpOworICAgICAgICAgICAgbWVt
Y3B5KGRhdGEuZGF0YSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX3N5bmNE
YXRhLT5kYXRhKCkpLCBtX3N5bmNEYXRhLT5zaXplKCkpOwogICAgICAgICB9CiAKICAgICAgICAg
bV9zeW5jQ29tcGxldGlvbkhhbmRsZXIobV9zeW5jUmVzcG9uc2UsIGVycm9yLCBXVEZNb3ZlKGRh
dGEpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVt
ZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBzdHJ1Y3QgVVJMU2NoZW1l
VGFza1BhcmFtZXRlcnM7CiBjbGFzcyBXZWJVUkxTY2hlbWVIYW5kbGVyOwogY2xhc3MgV2ViUGFn
ZVByb3h5OwogCi11c2luZyBTeW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0gQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3RvcjxjaGFyPiYpPjsKK3VzaW5nIFN5bmNMb2Fk
Q29tcGxldGlvbkhhbmRsZXIgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+Jik+OwogCiBjbGFzcyBXZWJVUkxTY2hlbWVUYXNrIDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6VVJMU2NoZW1lVGFzaz4sIHB1YmxpYyBJ
bnN0YW5jZUNvdW50ZWQ8V2ViVVJMU2NoZW1lVGFzaz4gewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFdlYlVSTFNjaGVtZVRhc2spOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzM4LDEzICsyMzM4LDE0IEBA
IHZvaWQgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQoV0tQYWcKICAgICAgICAgICAgIGlm
IChtX2NsaWVudC5jb3B5V2ViQ3J5cHRvTWFzdGVyS2V5KQogICAgICAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZih0b0ltcGwobV9jbGllbnQuY29weVdlYkNyeXB0b01hc3RlcktleSh0b0FQSSgm
cGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbykpKTsKIAotICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IG1hc3RlcktleTsKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKLSAgICAgICAgICAg
IGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQorICAgICAgICAg
ICAgYXV0byBtYXN0ZXJLZXkgPSBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgICAg
ICAgICBpZiAoIW1hc3RlcktleSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShXVEZNb3ZlKCptYXN0ZXJLZXkpKTsK
KyNlbHNlCisgICAgICAgICAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUobnVsbHB0ciwgMCk7
CiAjZW5kaWYKLQotICAgICAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKG1hc3Rlcktl
eS5kYXRhKCksIG1hc3RlcktleS5zaXplKCkpOwogICAgICAgICB9CiAKICAgICAgICAgUmVmUHRy
PEFQSTo6U3RyaW5nPiBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoV2ViUGFnZVBy
b3h5JiBwYWdlLCB1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFJlZlB0cjxBUEk6OlN0cmlu
Zz4mIGNoYWxsZW5nZVN0cmluZywgY29uc3QgVVJMJiB1cmwpIG92ZXJyaWRlCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vi
QXV0aGVudGljYXRpb25QYW5lbC5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0JKHdvcmtp
bmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgc3RhdGljIFJldGFpblB0cjxOU0RhdGE+IHByb2R1
Y2VDbGllbnREYQogICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6QCJ3ZWJhdXRobi5nZXQi
IGZvcktleTpAInR5cGUiXTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIFtkaWN0aW9uYXJ5
IHNldE9iamVjdDpXVEY6OmJhc2U2NFVSTEVuY29kZShjaGFsbGVuZ2UuYnl0ZXMsIGNoYWxsZW5n
ZS5sZW5ndGgpIGZvcktleTpAImNoYWxsZW5nZSJdOworICAgIFtkaWN0aW9uYXJ5IHNldE9iamVj
dDptYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoY2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2Uu
bGVuZ3RoKSkgZm9yS2V5OkAiY2hhbGxlbmdlIl07CiAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0
Om9yaWdpbiBmb3JLZXk6QCJvcmlnaW4iXTsKIAogICAgIHJldHVybiBbTlNKU09OU2VyaWFsaXph
dGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6ZGljdGlvbmFyeS5nZXQoKSBvcHRpb25zOk5TSlNPTldy
aXRpbmdTb3J0ZWRLZXlzIGVycm9yOm5pbF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2ViQXV0b21h
dGlvblNlc3Npb25DYWlyby5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2ViQXV0b21hdGlvblNlc3Npb25DYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIE9wdGlvbmFsPFN0cmluZz4g
YmFzZTY0RW5jb2RlZFBORwogICAgIGlmIChwbmdEYXRhLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBiYXNlNjRFbmNvZGUocG5nRGF0YSk7Cisg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChwbmdEYXRhKSk7CiB9CiAKIE9wdGlv
bmFsPFN0cmluZz4gV2ViQXV0b21hdGlvblNlc3Npb246OnBsYXRmb3JtR2V0QmFzZTY0RW5jb2Rl
ZFBOR0RhdGEoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRp
b25TdGF0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEzNSwxMSArMTEzNSwxMSBAQCBSZWZQdHI8
QVBJOjpEYXRhPiBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRo
b2RzLndlYkNyeXB0b01hc3RlcktleUZvcldlYlZpZXcpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IG1hc3RlcktleTsKLSAgICAgICAgaWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5
KG1hc3RlcktleSkpCisgICAgICAgIGF1dG8gbWFzdGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleSgpOworICAgICAgICBpZiAoIW1hc3RlcktleSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0
YSgpLCBtYXN0ZXJLZXkuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRl
KFdURk1vdmUoKm1hc3RlcktleSkpOwogICAgIH0KIAogICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVn
YXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9y
Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGll
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsMTMgKzE5NCwxMSBAQCB2b2lkIFJlbW90ZUlu
c3BlY3RvckNsaWVudDo6c2V0dXBDb25uZWN0CiB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6
c2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IGNoYXIqIGJhY2tlbmRDb21tYW5kcykKIHsKICAgICBp
ZiAoIWJhY2tlbmRDb21tYW5kcyB8fCAhYmFja2VuZENvbW1hbmRzWzBdKSB7Ci0gICAgICAgIG1f
YmFja2VuZENvbW1hbmRzVVJMID0gU3RyaW5nKCk7CisgICAgICAgIG1fYmFja2VuZENvbW1hbmRz
VVJMID0geyB9OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPGNoYXI+IGJh
c2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGJhY2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tl
bmRDb21tYW5kcyksIGJhc2U2NERhdGEpOwotICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gImRh
dGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICBtX2JhY2tlbmRD
b21tYW5kc1VSTCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBi
YXNlNjRFbmNvZGVkKGJhY2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tlbmRDb21tYW5kcykpKTsK
IH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNvbm5lY3Rpb25EaWRDbG9zZSgpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHlHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw5ICsxNDIs
MTEgQEAgdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybQogICAgIFZlY3Rv
cjxjaGFyPiBkYXRhVmVjdG9yOwogICAgIENTdHJpbmcgZGF0YVN0cmluZzsKICAgICBpZiAoYmFz
ZTY0RW5jb2RlZCkgewotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBkYXRhVmVj
dG9yLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICBhdXRvIGRlY29kZWREYXRhID0g
YmFzZTY0RGVjb2RlKGNvbnRlbnQsIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGlu
Zyk7CisgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgZGVjb2RlZERhdGEtPnNocmlu
a1RvRml0KCk7CisgICAgICAgIGRhdGFWZWN0b3IgPSBXVEZNb3ZlKCpkZWNvZGVkRGF0YSk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGRhdGFTdHJpbmcgPSBjb250ZW50LnV0ZjgoKTsKIApJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
Z3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDEsOSArNTQxLDExIEBAIHZvaWQgV2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm1TYXZlKGMKICAgICBWZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKICAg
ICBDU3RyaW5nIGRhdGFTdHJpbmc7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAg
aWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRk
aW5nKSkKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50LCBC
YXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICBpZiAoIWRlY29k
ZWREYXRhKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkYXRhVmVjdG9yLnNocmlua1Rv
Rml0KCk7CisgICAgICAgIGRlY29kZWREYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgICAgICBkYXRh
VmVjdG9yID0gV1RGTW92ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxzZQogICAgICAgICBkYXRh
U3RyaW5nID0gY29udGVudC51dGY4KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHlNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTc0LDEwICsxNzQsMTAgQEAgdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5OjpwbGF0Zm9ybQogICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChz
dWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwogCiAgICAgICAgIGlmIChiYXNlNjRFbmNvZGVk
KSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYgKCFiYXNl
NjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAg
ICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudENvcHksIEJhc2U2
NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZWREYXRhKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFpblB0cjxO
U0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRl
czpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAgICBhdXRvIGRhdGFD
b250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpkZWNvZGVkRGF0
YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0YS0+c2l6ZSgpXSk7CiAgICAgICAgICAgICBbZGF0
YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9t
aWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlQ
cm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94eU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTA5LDEwICs1MDksMTAgQEAgdm9pZCBXZWJJbnNwZWN0
b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUoYwogICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJM
TWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwogCiAgICAgICAgIGlmIChiYXNl
NjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAg
aWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5n
KSkKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudENv
cHksIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgICAgICBp
ZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJl
dGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5p
dFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAgICBh
dXRvIGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpk
ZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0YS0+c2l6ZSgpXSk7CiAgICAgICAg
ICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVh
bFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpO
VUxMXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiw3IEBA
IHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ28KICAgICBpZiAoIWV2ZW50
Lm1lc3NhZ2UgfHwgZXZlbnQubWVzc2FnZS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9qYXZhc2Ny
aXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGUoZXZlbnQubWVzc2FnZS0+dXRmOCgpKSk7CisgICAg
bV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvamF2YXNjcmlwdDti
YXNlNjQsIiwgYmFzZTY0RW5jb2RlZChldmVudC5tZXNzYWdlLT51dGY4KCkpKTsKIH0KIAogdm9p
ZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50
KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2Ev
TG9jYWxBdXRoZW50aWNhdG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
Q29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMCArODIs
OCBAQCBzdGF0aWMgaW5saW5lIEhhc2hTZXQ8U3RyaW5nPiBwcm9kdWNlSGFzCiB7CiAgICAgSGFz
aFNldDxTdHJpbmc+IHJlc3VsdDsKICAgICBmb3IgKGF1dG8mIGNyZWRlbnRpYWxEZXNjcmlwdG9y
IDogY3JlZGVudGlhbERlc2NyaXB0b3JzKSB7Ci0gICAgICAgIGlmIChlbXB0eVRyYW5zcG9ydHNP
ckNvbnRhaW4oY3JlZGVudGlhbERlc2NyaXB0b3IudHJhbnNwb3J0cywgQXV0aGVudGljYXRvclRy
YW5zcG9ydDo6SW50ZXJuYWwpCi0gICAgICAgICAgICAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci50
eXBlID09IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkKLSAgICAgICAgICAgICYm
IGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5n
dGgpCi0gICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZShjcmVkZW50aWFsRGVzY3Jp
cHRvci5pZFZlY3Rvci5kYXRhKCksIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUo
KSkpOworICAgICAgICBpZiAoZW1wdHlUcmFuc3BvcnRzT3JDb250YWluKGNyZWRlbnRpYWxEZXNj
cmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKSAmJiBj
cmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJs
aWNLZXkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpID09IGNyZWRlbnRp
YWxJZExlbmd0aCkKKyAgICAgICAgICAgIHJlc3VsdC5hZGQobWFrZVN0cmluZyhiYXNlNjRFbmNv
ZGVkKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLmRhdGEoKSwgY3JlZGVudGlhbERlc2Ny
aXB0b3IuaWRWZWN0b3Iuc2l6ZSgpKSkpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpA
QCAtMjQxLDcgKzIzOSw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlh
bCgKICAgICAgICAgaWYgKG5vdEZvdW5kICE9IG1fZXhpc3RpbmdDcmVkZW50aWFscy5maW5kTWF0
Y2hpbmcoWyZleGNsdWRlQ3JlZGVudGlhbElkc10gKGF1dG8mIGNyZWRlbnRpYWwpIHsKICAgICAg
ICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+cmF3SWQoKTsKICAgICAgICAgICAgIEFT
U0VSVChyYXdJZCk7Ci0gICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29u
dGFpbnMoYmFzZTY0RW5jb2RlKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKTsK
KyAgICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhtYWtlU3Ry
aW5nKGJhc2U2NEVuY29kZWQocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpKTsK
ICAgICAgICAgfSkpIHsKICAgICAgICAgICAgIHJlY2VpdmVFeGNlcHRpb24oeyBOb3RBbGxvd2Vk
RXJyb3IsICJBdCBsZWFzdCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBl
eGNsdWRlQ3JlZGVudGlhbHMgbGlzdCBpbiB0aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGlj
YXRvci4iX3MgfSwgV2ViQXV0aGVudGljYXRpb25TdGF0dXM6OkxBRXhjbHVkZUNyZWRlbnRpYWxz
TWF0Y2hlZCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01MTgsNyArNTE2LDcgQEAgdm9pZCBM
b2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCiAgICAgICAgIH0KIAogICAgICAgICBh
dXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7Ci0gICAgICAgIGlmIChhbGxvd0NyZWRl
bnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRl
TGVuZ3RoKCkpKSkKKyAgICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlucyhtYWtl
U3RyaW5nKGJhc2U2NEVuY29kZWQocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkp
KSkKICAgICAgICAgICAgIGFzc2VydGlvblJlc3BvbnNlcy51bmNoZWNrZWRBcHBlbmQoY3JlZGVu
dGlhbC5jb3B5UmVmKCkpOwogICAgIH0KICAgICBpZiAoYXNzZXJ0aW9uUmVzcG9uc2VzLmlzRW1w
dHkoKSkgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
TW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsMTUg
KzI2MSwxMyBAQCB2b2lkIE1vY2tIaWRDb25uZWN0aW9uOjpmZWVkUmVwb3J0cygpCiAgICAgICAg
IGlmIChzdGFnZXNNYXRjaCgpICYmIG1fY29uZmlndXJhdGlvbi5oaWQtPmVycm9yID09IE1vY2s6
OkhpZEVycm9yOjpVbnN1cHBvcnRlZE9wdGlvbnMgJiYgKG1fcmVxdWlyZVJlc2lkZW50S2V5IHx8
IG1fcmVxdWlyZVVzZXJWZXJpZmljYXRpb24pKQogICAgICAgICAgICAgbWVzc2FnZSA9IEZpZG9I
aWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNvbW1hbmQ6
OmtDYm9yLCB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEN0YXBEZXZpY2VSZXNwb25zZUNvZGU6OmtD
dGFwMkVyclVuc3VwcG9ydGVkT3B0aW9uKSB9KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBWZWN0b3I8dWludDhfdD4gcGF5bG9hZDsKICAgICAgICAgICAgIEFTU0VSVCghbV9jb25maWd1
cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgYXV0byBz
dGF0dXMgPSBiYXNlNjREZWNvZGUobV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NFsw
XSwgcGF5bG9hZCk7CisgICAgICAgICAgICBhdXRvIHBheWxvYWQgPSBiYXNlNjREZWNvZGUobV9j
b25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NFswXSk7CiAgICAgICAgICAgICBtX2NvbmZp
Z3VyYXRpb24uaGlkLT5wYXlsb2FkQmFzZTY0LnJlbW92ZSgwKTsKLSAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQoc3RhdHVzLCBzdGF0dXMpOwogICAgICAgICAgICAgaWYgKCFtX2NvbmZpZ3VyYXRp
b24uaGlkLT5pc1UyZikKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3NhZ2U6
OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a0Nib3IsIHBh
eWxvYWQpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRl
KG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21tYW5kOjprQ2JvciwgV1RGTW92ZSgq
cGF5bG9hZCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBG
aWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21t
YW5kOjprTXNnLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1l
c3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a01z
ZywgV1RGTW92ZSgqcGF5bG9hZCkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rp
b24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENv
bm5lY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIE1vY2tM
b2NhbENvbm5lY3Rpb246OmZpbHRlclJlc3BvbnNlCiAgICAgZm9yICg7IGl0ciAhPSByZXNwb25z
ZXMuZW5kKCk7ICsraXRyKSB7CiAgICAgICAgIGF1dG8qIHJhd0lkID0gaXRyLT5nZXQoKS5yYXdJ
ZCgpOwogICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAgICBhdXRvIHJhd0lkQmFzZTY0ID0g
YmFzZTY0RW5jb2RlKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpOworICAgICAg
ICBhdXRvIHJhd0lkQmFzZTY0ID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJhd0lkLT5kYXRh
KCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKTsKICAgICAgICAgaWYgKHJhd0lkQmFzZTY0ID09IHBy
ZWZlcnJlZENyZWRlbnRpYWxJZEJhc2U2NCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2Fk
ZXJTdHJhdGVneS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc4
LDcgKzU3OCw3IEBAIE9wdGlvbmFsPFdlYkxvYWRlclN0cmF0ZWd5OjpTeW5jTG9hZFJlc3UKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFdlYkxvYWRlclN0cmF0ZWd5Ojpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciwgdW5zaWduZWQgbG9uZyBy
ZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENs
aWVudENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgIGNvbnN0IEZldGNo
T3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYgb3JpZ2luYWxSZXF1ZXN0SGVh
ZGVycywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBW
ZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYkxvYWRlclN0cmF0ZWd5Ojpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciwgdW5zaWduZWQgbG9uZyByZXNv
dXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVu
dENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgIGNvbnN0IEZldGNoT3B0
aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYgb3JpZ2luYWxSZXF1ZXN0SGVhZGVy
cywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0
b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgYXV0byogd2ViRnJhbWVMb2FkZXJDbGllbnQgPSB0
b1dlYkZyYW1lTG9hZGVyQ2xpZW50KGZyYW1lTG9hZGVyLmNsaWVudCgpKTsKICAgICBhdXRvKiB3
ZWJGcmFtZSA9IHdlYkZyYW1lTG9hZGVyQ2xpZW50ID8gJndlYkZyYW1lTG9hZGVyQ2xpZW50LT53
ZWJGcmFtZSgpIDogbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuaAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuaAkod29y
a2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfldlYkxvYWRlclN0cmF0
ZWd5KCkgZmluYWw7CiAgICAgCiAgICAgdm9pZCBsb2FkUmVzb3VyY2UoV2ViQ29yZTo6RnJhbWUm
LCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFJlZlB0cjxXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcj4mJik+JiYpIGZpbmFsOwotICAg
IHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpGcmFtZUxvYWRlciYsIHVu
c2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgV2ViQ29y
ZTo6RmV0Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYsIFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+
JiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29y
ZTo6RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQ
b2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBI
ZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgZmluYWw7CiAgICAgdm9pZCBwYWdlTG9hZENv
bXBsZXRlZChXZWJDb3JlOjpQYWdlJikgZmluYWw7CiAgICAgdm9pZCBicm93c2luZ0NvbnRleHRS
ZW1vdmVkKFdlYkNvcmU6OkZyYW1lJikgZmluYWw7CiAKQEAgLTEwMSw3ICsxMDEsNyBAQCBwcml2
YXRlOgogICAgIHN0cnVjdCBTeW5jTG9hZFJlc3VsdCB7CiAgICAgICAgIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UgcmVzcG9uc2U7CiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJy
b3I7Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgICAgICBWZWN0b3I8dWludDhfdD4g
ZGF0YTsKICAgICB9OwogICAgIE9wdGlvbmFsPFN5bmNMb2FkUmVzdWx0PiB0cnlMb2FkaW5nU3lu
Y2hyb25vdXNseVVzaW5nVVJMU2NoZW1lSGFuZGxlcihXZWJDb3JlOjpGcmFtZUxvYWRlciYsIFJl
c291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwog
ICAgIFN5bmNMb2FkUmVzdWx0IGxvYWREYXRhVVJMU3luY2hyb25vdXNseShjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNwcAkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJM
U2NoZW1lSGFuZGxlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2
b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6c3RhcnROZXdUCiAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS0+c3RhcnRMb2FkaW5nKCk7CiB9CiAKLXZvaWQgV2ViVVJMU2NoZW1lSGFuZGxl
clByb3h5Ojpsb2FkU3luY2hyb25vdXNseShSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGxvYWRJZGVu
dGlmaWVyLCBXZWJGcmFtZSYgd2ViRnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291cmNlRXJyb3ImIGVycm9yLCBWZWN0
b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6bG9hZFN5bmNo
cm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBsb2FkSWRlbnRpZmllciwgV2ViRnJhbWUm
IHdlYkZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRh
KQogewogICAgIGRhdGEuc2hyaW5rKDApOwogICAgIGlmICghbV93ZWJQYWdlLnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxvYWRTeW5jaHJvbm91c1VSTFNjaGVtZVRhc2soVVJMU2No
ZW1lVGFza1BhcmFtZXRlcnMgeyBtX2lkZW50aWZpZXIsIGxvYWRJZGVudGlmaWVyLCByZXF1ZXN0
LCB3ZWJGcmFtZS5pbmZvKCkgfSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxvYWRTeW5jaHJv
bm91c1VSTFNjaGVtZVRhc2s6OlJlcGx5KHJlc3BvbnNlLCBlcnJvciwgZGF0YSkpKSB7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJV
UkxTY2hlbWVIYW5kbGVyUHJveHkuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnROZXdUYXNrKFdl
YkNvcmU6OlJlc291cmNlTG9hZGVyJiwgV2ViRnJhbWUmKTsKICAgICB2b2lkIHN0b3BBbGxUYXNr
cygpOwogCi0gICAgdm9pZCBsb2FkU3luY2hyb25vdXNseShSZXNvdXJjZUxvYWRJZGVudGlmaWVy
LCBXZWJGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgVmVjdG9yPGNoYXI+Jik7
CisgICAgdm9pZCBsb2FkU3luY2hyb25vdXNseShSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBXZWJG
cmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgVmVjdG9yPHVpbnQ4X3Q+Jik7CiAK
ICAgICB1aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9
CiAgICAgV2ViUGFnZSYgcGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFnZTsgfQpJbmRleDogU291cmNl
L1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2Fj
eS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDUtMTggIFNhbSBX
ZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2Rp
bmcvZGVjb2RpbmcgdG8gbWF0Y2ggbW9yZSBtb2Rlcm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oOgorICAgICAgICBVcGRhdGUgdG8g
bWF0Y2ggbmV3IHNpZ25hdHVyZS4gY2hhciAtPiB1aW50OF90LgorCiAyMDIxLTA1LTE0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEZpbGVTeXN0ZW06
OmdldEZpbGVTaXplKCkgdG8gRmlsZVN5c3RlbTo6ZmlsZVNpemUoKQpJbmRleDogU291cmNlL1dl
YktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdExl
Z2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OmxvYWRSZXNvdQogICAgIH0pOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2ln
bmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2xpZW50Q3JlZGVudGlh
bFBvbGljeSwgY29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zLCBjb25zdCBIVFRQSGVhZGVyTWFw
JiwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0
b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSwg
Y29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhf
dD4mIGRhdGEpCiB7CiAgICAgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoZnJhbWVMb2FkZXIubmV0d29ya2luZ0NvbnRleHQoKSwgcmVxdWVzdCwgb3B0aW9ucy5jcmVk
ZW50aWFscyA9PSBGZXRjaE9wdGlvbnM6OkNyZWRlbnRpYWxzOjpPbWl0ID8gU3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3k6OkRvTm90VXNlIDogU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSwgZXJy
b3IsIHJlc3BvbnNlLCBkYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29y
ZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAko
cmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9X
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBA
QCBwdWJsaWM6CiAgICAgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAKICAgICB2b2lkIGxv
YWRSZXNvdXJjZShXZWJDb3JlOjpGcmFtZSYsIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlJiwgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZGVyT3B0
aW9ucyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdlYkNvcmU6OlN1YnJlc291cmNl
TG9hZGVyPiYmKT4mJikgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KFdlYkNvcmU6OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZywgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgV2Vi
Q29yZTo6RmV0Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYsIFdlYkNv
cmU6OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNo
YXI+JikgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6
OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZywgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgV2ViQ29yZTo6RmV0
Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYsIFdlYkNvcmU6OlJlc291
cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+Jikg
ZmluYWw7CiAgICAgdm9pZCBwYWdlTG9hZENvbXBsZXRlZChXZWJDb3JlOjpQYWdlJikgZmluYWw7
CiAgICAgdm9pZCBicm93c2luZ0NvbnRleHRSZW1vdmVkKFdlYkNvcmU6OkZyYW1lJikgZmluYWw7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUgbW9k
ZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAg
ICAgIChXZWJDaHJvbWVDbGllbnQ6OndyYXBDcnlwdG9LZXkgY29uc3QpOgorICAgICAgICAoV2Vi
Q2hyb21lQ2xpZW50Ojp1bndyYXBDcnlwdG9LZXkgY29uc3QpOgorICAgICAgICBVcGRhdGUgdG8g
dXNlIG5ldyBPcHRpb25hbCByZXR1cm5pbmcgZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpLgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNhdmUpOgorICAgICAgICBVcGRhdGUgdG8g
dXNlIG5ldyBPcHRpb25hbCByZXR1cm5pbmcgYmFzZTY0RGVjb2RlKCkuCisKIDIwMjEtMDUtMTUg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRGVsZXRlIFdlYlNR
TCBjb2RlIGZyb20gV2ViS2l0MgpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY2LDI4ICsxMDY2LDM0IEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpleGl0RnVsbFNjcmVlbkZvckUKIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6
OndyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1aW50OF90
PiYgd3JhcHBlZEtleSkgY29uc3QKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5Owog
ICAgIFNFTCBzZWxlY3RvciA9IEBzZWxlY3Rvcih3ZWJDcnlwdG9NYXN0ZXJLZXlGb3JXZWJWaWV3
Oik7CiAgICAgaWYgKFtbbV93ZWJWaWV3IFVJRGVsZWdhdGVdIHJlc3BvbmRzVG9TZWxlY3Rvcjpz
ZWxlY3Rvcl0pIHsKICAgICAgICAgTlNEYXRhICprZXlEYXRhID0gQ2FsbFVJRGVsZWdhdGUobV93
ZWJWaWV3LCBzZWxlY3Rvcik7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAg
ICAgICAgIG1hc3RlcktleS5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGNvbnN0X2Nhc3Q8
dm9pZCo+KFtrZXlEYXRhIGJ5dGVzXSkpLCBba2V5RGF0YSBsZW5ndGhdKTsKLSAgICB9IGVsc2Ug
aWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkpCisgICAgICAgIHJl
dHVybiB3cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIGtleSwgd3JhcHBlZEtleSk7
CisgICAgfQorICAgIAorICAgIGF1dG8gbWFzdGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3Rl
cktleSgpOworICAgIGlmICghbWFzdGVyS2V5KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gd3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCBrZXksIHdyYXBwZWRL
ZXkpOworICAgIHJldHVybiB3cmFwU2VyaWFsaXplZENyeXB0b0tleShXVEZNb3ZlKCptYXN0ZXJL
ZXkpLCBrZXksIHdyYXBwZWRLZXkpOwogfQogCiBib29sIFdlYkNocm9tZUNsaWVudDo6dW53cmFw
Q3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSwgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXkpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICAgICBT
RUwgc2VsZWN0b3IgPSBAc2VsZWN0b3Iod2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmlldzopOwog
ICAgIGlmIChbW21fd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0
b3JdKSB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAgICAgICAgIE5TRGF0
YSAqa2V5RGF0YSA9IENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgc2VsZWN0b3IpOwogICAgICAg
ICBtYXN0ZXJLZXkuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihjb25zdF9jYXN0PHZvaWQq
Pihba2V5RGF0YSBieXRlc10pKSwgW2tleURhdGEgbGVuZ3RoXSk7Ci0gICAgfSBlbHNlIGlmICgh
Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiB1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3Rlcktl
eSwgd3JhcHBlZEtleSwga2V5KTsKKyAgICB9CiAKLSAgICByZXR1cm4gdW53cmFwU2VyaWFsaXpl
ZENyeXB0b0tleShtYXN0ZXJLZXksIHdyYXBwZWRLZXksIGtleSk7CisgICAgYXV0byBtYXN0ZXJL
ZXkgPSBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgaWYgKCFtYXN0ZXJLZXkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdW53cmFwU2VyaWFsaXplZENyeXB0b0tl
eShXVEZNb3ZlKCptYXN0ZXJLZXkpLCB3cmFwcGVkS2V5LCBrZXkpOwogfQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDA4LDEwICs0MDgsMTAgQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6c2F2ZShjbwogICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChz
dWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwogCiAgICAgICAgIGlmIChiYXNlNjRFbmNvZGVk
KSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYgKCFiYXNl
NjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAg
ICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudCwgQmFzZTY0RGVj
b2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKTsKKyAgICAgICAgICAgIGlmICghZGVjb2RlZERh
dGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0
YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91
dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU0Rh
dGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpk
ZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0YS0+c2l6ZSgpXSk7CiAgICAgICAg
ICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVh
bFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpO
VUxMXTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI3NzY5NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI3IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNv
bT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1v
cmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OnN0YXJ0U2VjdXJlQ29ubmVjdGlvbik6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OnRlc3RDZXJ0aWZpY2F0ZSk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OnRlc3RQcml2YXRlS2V5KToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcDoKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9j
b2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9D
aGFsbGVuZ2UubW06CisgICAgICAgICh0ZXN0SWRlbnRpdHkyKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0V2ZW50QXR0cmlidXRpb24ubW06CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9T
U0xLZXlHZW5lcmF0b3IubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkNvbm5lY3Rpb246OndlYlNvY2tldEhhbmRzaGFrZSk6CisKIDIwMjEtMDUtMTgg
IEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10g
VGl0bGViYXIgc2VwYXJhdG9yIGRvZXNuJ3Qgc2hvdyB3aGVuIFdLV2ViVmlldyBpcyBzY3JvbGxl
ZApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUs
OSArMTU1LDggQEAgdm9pZCBUQ1BTZXJ2ZXI6OnN0YXJ0U2VjdXJlQ29ubmVjdGlvbihTbwogICAg
ICJsZFk5YXZjVEdTd2J3b2l1SXF2MGpUTDFmSEZuenkzUkhNTERoK0xwdm9sYzVEU3JTSkhDUDVX
dUswZWVKWGhyIgogICAgICJUNW9RcEhMOXovY0NETEFLQ0tSYTR1VjBmaEVkT1dCcXlSOXA4eTVq
SnR5ZTcydDZDdUZVVjVpcWNwRjRCSDRmIgogICAgICJqMlZOSHdzU3JKd2tENFFVR2xVdEg3dndu
UW15Q0Z4Wk1tV0FKZz09Iik7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGNlcnRERVI7Ci0gICAgYmFz
ZTY0RGVjb2RlKGNlcnRQRU0sIGNlcnRERVIsIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6QmFz
ZTY0RGVmYXVsdCk7Ci0gICAgc3NsOjp1bmlxdWVfcHRyPENSWVBUT19CVUZGRVI+IGNlcnQoQ1JZ
UFRPX0JVRkZFUl9uZXcoY2VydERFUi5kYXRhKCksIGNlcnRERVIuc2l6ZSgpLCBudWxscHRyKSk7
CisgICAgYXV0byBjZXJ0REVSID0gYmFzZTY0RGVjb2RlKGNlcnRQRU0pOworICAgIHNzbDo6dW5p
cXVlX3B0cjxDUllQVE9fQlVGRkVSPiBjZXJ0KENSWVBUT19CVUZGRVJfbmV3KGNlcnRERVItPmRh
dGEoKSwgY2VydERFUi0+c2l6ZSgpLCBudWxscHRyKSk7CiAgICAgQVNTRVJUKGNlcnQpOwogCiAg
ICAgLy8gVGhpcyBpcyBhIHRlc3Qga2V5IGZyb20gQm9yaW5nU1NMLgpAQCAtNDEyLDkgKzQxMSw4
IEBAIFZlY3Rvcjx1aW50OF90PiBUQ1BTZXJ2ZXI6OnRlc3RDZXJ0aWZpY2EKICAgICAiRzNQRm5Z
Ylc4dXJIME5TSkcvVysvOURBK1k3QWEwY3M0VFBwdUJHWjBOVTFXOTRPb0NNbzRsa082SC95Nkxl
dSIKICAgICAiM3ZqWkQzeTlrWms3bXJlOVhId2tJOE1kSzVzPSIpOwogICAgIAotICAgIFZlY3Rv
cjx1aW50OF90PiB2ZWN0b3I7Ci0gICAgYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0
ZSwgdmVjdG9yLCBXVEY6OkJhc2U2NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwotICAg
IHJldHVybiB2ZWN0b3I7CisgICAgYXV0byBkZWNvZGVkQ2VydGlmaWNhdGUgPSBiYXNlNjREZWNv
ZGUocGVtRW5jb2RlZENlcnRpZmljYXRlKTsKKyAgICByZXR1cm4gV1RGTW92ZSgqZGVjb2RlZENl
cnRpZmljYXRlKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IFRDUFNlcnZlcjo6dGVzdFByaXZhdGVL
ZXkoKQpAQCAtNDcxLDkgKzQ2OSw4IEBAIFZlY3Rvcjx1aW50OF90PiBUQ1BTZXJ2ZXI6OnRlc3RQ
cml2YXRlS2UKICAgICAiZEVPYnZjcFNoUDIySXRPVmpTYW1wUnVBdVJHMjZaZW1FYkdDSTNKNk1x
eDN5Nm0rNkh3dWx0c2d0ZHpEZ3JGZSIKICAgICAicUpmVThiYmRidTJwaTQ3WTRGZEpLMEhMZmZs
NVJ3PT0iKTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7Ci0gICAgYmFzZTY0RGVjb2Rl
KHBlbUVuY29kZWRQcml2YXRlS2V5LCB2ZWN0b3IsIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6
QmFzZTY0RGVmYXVsdCk7Ci0gICAgcmV0dXJuIHZlY3RvcjsKKyAgICBhdXRvIGRlY29kZWRQcml2
YXRlS2V5ID0gYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRQcml2YXRlS2V5KTsKKyAgICByZXR1cm4g
V1RGTW92ZSgqZGVjb2RlZFByaXZhdGVLZXkpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0lTT0Jv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0lT
T0JveC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9JU09Cb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTEgQEAgc3Rh
dGljIGNvbnN0IGNoYXIqIGJhc2U2NEVuY29kZWRTaW5mV2l0aAogCiBURVNUKElTT0JveCwgSVNP
UHJvdGVjdGlvblNjaGVtZUluZm9Cb3gpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHNpbmZBcnJh
eTsKLSAgICBBU1NFUlRfVFJVRShiYXNlNjREZWNvZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNvZGVk
U2luZldpdGhLZXlJRDMpLCBzaW5mQXJyYXkpKTsKLSAgICBBU1NFUlRfRVEoOTdVTCwgc2luZkFy
cmF5LnNpemUoKSk7CisgICAgYXV0byBzaW5mQXJyYXkgPSBiYXNlNjREZWNvZGUoU3RyaW5nVmll
dyhiYXNlNjRFbmNvZGVkU2luZldpdGhLZXlJRDMpKTsKKyAgICBBU1NFUlRfVFJVRShzaW5mQXJy
YXkpOworICAgIEFTU0VSVF9FUSg5N1VMLCBzaW5mQXJyYXktPnNpemUoKSk7CiAKLSAgICBhdXRv
IHZpZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShzaW5mQXJy
YXkuZGF0YSgpLCBzaW5mQXJyYXkuc2l6ZSgpKSwgMCwgc2luZkFycmF5LnNpemUoKSk7CisgICAg
YXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUoc2lu
ZkFycmF5LT5kYXRhKCksIHNpbmZBcnJheS0+c2l6ZSgpKSwgMCwgc2luZkFycmF5LT5zaXplKCkp
OwogCiAgICAgSVNPUHJvdGVjdGlvblNjaGVtZUluZm9Cb3ggc2luZkJveDsKICAgICBBU1NFUlRf
VFJVRShzaW5mQm94LnJlYWQodmlldykpOwpAQCAtNzgsMTEgKzc4LDExIEBAIHN0YXRpYyBjb25z
dCBjaGFyKiBiYXNlNjRFbmNvZGVkUHNzaFdpdGgKIAogVEVTVChJU09Cb3gsIElTT0ZhaXJQbGF5
U3RyZWFtaW5nUHNzaEJveCkKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gcHNzaEFycmF5OwotICAg
IEFTU0VSVF9UUlVFKGJhc2U2NERlY29kZShTdHJpbmdWaWV3KGJhc2U2NEVuY29kZWRQc3NoV2l0
aEFzc2V0SWQpLCBwc3NoQXJyYXkpKTsKLSAgICBBU1NFUlRfRVEoMTc2VUwsIHBzc2hBcnJheS5z
aXplKCkpOworICAgIGF1dG8gcHNzaEFycmF5ID0gYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFz
ZTY0RW5jb2RlZFBzc2hXaXRoQXNzZXRJZCkpOworICAgIEFTU0VSVF9UUlVFKHBzc2hBcnJheSk7
CisgICAgQVNTRVJUX0VRKDE3NlVMLCBwc3NoQXJyYXktPnNpemUoKSk7CiAKLSAgICBhdXRvIHZp
ZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShwc3NoQXJyYXku
ZGF0YSgpLCBwc3NoQXJyYXkuc2l6ZSgpKSwgMCwgcHNzaEFycmF5LnNpemUoKSk7CisgICAgYXV0
byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUocHNzaEFy
cmF5LT5kYXRhKCksIHBzc2hBcnJheS0+c2l6ZSgpKSwgMCwgcHNzaEFycmF5LT5zaXplKCkpOwog
CiAgICAgSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94IHBzc2hCb3g7CiAKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBURVNU
KFByaXZhdGVDbGlja01lYXN1cmVtZW50LCBWYWxpZEJsaW5kCiAgICAgYXV0byAqbnNTcGtpRGF0
YSA9IChfX2JyaWRnZSBOU0RhdGEgKilzcGtpRGF0YS5nZXQoKTsKIAogICAgIC8vIENvbnRpbnVl
IHRoZSB0ZXN0LgotICAgIEVYUEVDVF9UUlVFKHBjbS5jYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VV
bmxpbmthYmxlVG9rZW4oV1RGOjpiYXNlNjRVUkxFbmNvZGUobnNTcGtpRGF0YS5ieXRlcywgbnNT
cGtpRGF0YS5sZW5ndGgpKSk7CisgICAgRVhQRUNUX1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVwZGF0
ZVNvdXJjZVVubGlua2FibGVUb2tlbihtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQobnNTcGtp
RGF0YS5ieXRlcywgbnNTcGtpRGF0YS5sZW5ndGgpKSkpOwogICAgIGF1dG8gc291cmNlU2VjcmV0
VG9rZW4gPSBwY20udG9rZW5TaWduYXR1cmVKU09OKCk7CiAgICAgRVhQRUNUX0VRKHNvdXJjZVNl
Y3JldFRva2VuLT5hc09iamVjdCgpLT5zaXplKCksIDR1bCk7CiAgICAgRVhQRUNUX1NUUkVRKHNv
dXJjZVNlY3JldFRva2VuLT5nZXRTdHJpbmcoInNvdXJjZV9lbmdhZ2VtZW50X3R5cGUiX3MpLnV0
ZjgoKS5kYXRhKCksICJjbGljayIpOwpAQCAtOTAsMTQgKzkwLDEzIEBAIFRFU1QoUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQsIFZhbGlkQmxpbmQKICAgICBFWFBFQ1RfRVEoc291cmNlU2VjcmV0VG9r
ZW4tPmdldEludGVnZXIoInZlcnNpb24iX3MpLCAyKTsKIAogICAgIC8vIEdlbmVyYXRlIHRoZSBz
aWduYXR1cmUuCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGJsaW5kZWRNZXNzYWdlOwotICAgIGJhc2U2
NFVSTERlY29kZShzb3VyY2VTZWNyZXRUb2tlbi0+Z2V0U3RyaW5nKCJzb3VyY2Vfc2VjcmV0X3Rv
a2VuIl9zKSwgYmxpbmRlZE1lc3NhZ2UpOworICAgIGF1dG8gYmxpbmRlZE1lc3NhZ2UgPSBiYXNl
NjRVUkxEZWNvZGUoc291cmNlU2VjcmV0VG9rZW4tPmdldFN0cmluZygic291cmNlX3NlY3JldF90
b2tlbiJfcykpOwogCi0gICAgYXV0byBibGluZGVkU2lnbmF0dXJlID0gYWRvcHROUyhbW05TTXV0
YWJsZURhdGEgYWxsb2NdIGluaXRXaXRoTGVuZ3RoOiBtb2R1bHVzTkJ5dGVzXSk7Ci0gICAgY2Ny
c2Fic3NhX3NpZ25fYmxpbmRlZF9tZXNzYWdlKGNpcGhlcnN1aXRlLCByc2FQcml2YXRlS2V5LCBi
bGluZGVkTWVzc2FnZS5kYXRhKCksIGJsaW5kZWRNZXNzYWdlLnNpemUoKSwgc3RhdGljX2Nhc3Q8
dWludDhfdCAqPihbYmxpbmRlZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWdu
YXR1cmUgbGVuZ3RoXSwgcm5nKTsKKyAgICBhdXRvIGJsaW5kZWRTaWduYXR1cmUgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdFdpdGhMZW5ndGg6bW9kdWx1c05CeXRlc10pOwor
ICAgIGNjcnNhYnNzYV9zaWduX2JsaW5kZWRfbWVzc2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJpdmF0
ZUtleSwgYmxpbmRlZE1lc3NhZ2UtPmRhdGEoKSwgYmxpbmRlZE1lc3NhZ2UtPnNpemUoKSwgc3Rh
dGljX2Nhc3Q8dWludDhfdCAqPihbYmxpbmRlZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2Js
aW5kZWRTaWduYXR1cmUgbGVuZ3RoXSwgcm5nKTsKIAogICAgIC8vIENvbnRpbnVlIHRoZSB0ZXN0
LgotICAgIEVYUEVDVF9UUlVFKHBjbS5jYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VTZWNyZXRUb2tl
bihXVEY6OmJhc2U2NFVSTEVuY29kZShbYmxpbmRlZFNpZ25hdHVyZSBieXRlc10sIFtibGluZGVk
U2lnbmF0dXJlIGxlbmd0aF0pKSk7CisgICAgRVhQRUNUX1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVw
ZGF0ZVNvdXJjZVNlY3JldFRva2VuKG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChbYmxpbmRl
ZFNpZ25hdHVyZSBieXRlc10sIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0pKSkpOwogICAgIGF1
dG8mIHBlcnNpc3RlbnRUb2tlbiA9IHBjbS5zb3VyY2VVbmxpbmthYmxlVG9rZW4oKTsKICAgICBF
WFBFQ1RfVFJVRShwZXJzaXN0ZW50VG9rZW4pOwogICAgIEVYUEVDVF9GQUxTRShwZXJzaXN0ZW50
VG9rZW4tPnRva2VuQmFzZTY0VVJMLmlzRW1wdHkoKSk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvU2VyaWFsaXplZENyeXB0b0tleVdyYXAubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1NlcmlhbGl6
ZWRDcnlwdG9LZXlXcmFwLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvU2VyaWFsaXplZENyeXB0b0tleVdyYXAubW0JKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDM3ICs0NCwzNyBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotVEVTVF9G
KFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVzdCwgR2V0RGVmYXVsdFdlYkNyeXB0b01hc3Rlcktl
eSkKK1RFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFRlc3QsIERlZmF1bHRXZWJDcnlwdG9N
YXN0ZXJLZXkpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTE7Ci0gICAgRVhQRUNU
X1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkxKSk7
CisgICAgYXV0byBtYXN0ZXJLZXkxID0gV2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3Rlcktl
eSgpOworICAgIEVYUEVDVF9UUlVFKG1hc3RlcktleTEpOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+
IG1hc3RlcktleTI7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleShtYXN0ZXJLZXkyKSk7CisgICAgYXV0byBtYXN0ZXJLZXkyID0gV2ViQ29yZTo6
ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIEVYUEVDVF9UUlVFKG1hc3RlcktleTIp
OwogCiAgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5MSA9PSBtYXN0ZXJLZXkyKTsKIH0KIAogVEVT
VF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVzdCwgRGVsZXRlRGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleSkKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5MTsKLSAgICBFWFBFQ1Rf
VFJVRShXZWJDb3JlOjpnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleTEpKTsK
KyAgICBhdXRvIG1hc3RlcktleTEgPSBXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5
KCk7CisgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5MSk7CiAgICAgRVhQRUNUX1RSVUUoV2ViQ29y
ZTo6ZGVsZXRlRGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpKTsKIAotICAgIFZlY3Rvcjx1aW50
OF90PiBtYXN0ZXJLZXkyOwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmdldERlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5MikpOworICAgIGF1dG8gbWFzdGVyS2V5MiA9IFdlYkNv
cmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJL
ZXkyKTsKIAogICAgIEVYUEVDVF9UUlVFKG1hc3RlcktleTEgIT0gbWFzdGVyS2V5Mik7CiB9CiAK
IFRFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFRlc3QsIFNlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwVW53cmFwKQogewotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7Ci0gICAgRVhQRUNU
X1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKTsK
KyAgICBhdXRvIG1hc3RlcktleSA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXko
KTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkpOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGNy
eXB0b0tleSgxNiwgMSk7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHdyYXBwZWRLZXk7Ci0gICAgRVhQ
RUNUX1RSVUUoV2ViQ29yZTo6d3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCBjcnlw
dG9LZXksIHdyYXBwZWRLZXkpKTsKKyAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjp3cmFwU2VyaWFs
aXplZENyeXB0b0tleSgqbWFzdGVyS2V5LCBjcnlwdG9LZXksIHdyYXBwZWRLZXkpKTsKICAgICBF
WFBFQ1RfVFJVRShjcnlwdG9LZXkgIT0gd3JhcHBlZEtleSk7CiAgICAgLy8gZW5zdXJlIHdyYXBw
ZWRLZXkgZG9lc24ndCBjb250YWluIGNyeXB0b0tleQogICAgIGJvb2wgbm90Q29udGFpbmVkID0g
dHJ1ZTsKQEAgLTkwLDcgKzkwLDcgQEAgVEVTVF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVz
dCwgU2VyaQogICAgIEVYUEVDVF9UUlVFKG5vdENvbnRhaW5lZCk7CiAKICAgICBWZWN0b3I8dWlu
dDhfdD4gdW53cmFwcGVkS2V5OwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OnVud3JhcFNlcmlh
bGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCB3cmFwcGVkS2V5LCB1bndyYXBwZWRLZXkpKTsKKyAg
ICBFWFBFQ1RfVFJVRShXZWJDb3JlOjp1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KCptYXN0ZXJL
ZXksIHdyYXBwZWRLZXksIHVud3JhcHBlZEtleSkpOwogICAgIEVYUEVDVF9UUlVFKHVud3JhcHBl
ZEtleSA9PSBjcnlwdG9LZXkpOwogfQogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0NoYWxsZW5nZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE3NiwxMyArMTc2LDEwIEBAIFJldGFpblB0cjxTZWNJZGVudGl0eVJlZj4g
dGVzdElkZW50aXR5MigKICAgICAiSkFIMm54S0d1cXRBSzJoV2JBQ3U2MVJUNWdBcUF2L2hCOUpZ
bmMyT2lRMlZtallrT2syR0VkSWpuMHhTZ1g3VyIKICAgICAibUkvaEhieEtNRzNSa3Y5cTFDeCtX
Qi92MXQ4PSIpOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZhdGVLZXlCeXRlczsKLSAgICBi
YXNlNjREZWNvZGUocGVtRW5jb2RlZFByaXZhdGVLZXksIHByaXZhdGVLZXlCeXRlcywgV1RGOjpC
YXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsKKyAgICBhdXRvIHByaXZhdGVLZXlC
eXRlcyA9IGJhc2U2NERlY29kZShwZW1FbmNvZGVkUHJpdmF0ZUtleSk7CisgICAgYXV0byBjZXJ0
aWZpY2F0ZUJ5dGVzID0gYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSk7CiAKLSAg
ICBWZWN0b3I8dWludDhfdD4gY2VydGlmaWNhdGVCeXRlczsKLSAgICBiYXNlNjREZWNvZGUocGVt
RW5jb2RlZENlcnRpZmljYXRlLCBjZXJ0aWZpY2F0ZUJ5dGVzLCBXVEY6OkJhc2U2NERlY29kZU9w
dGlvbnM6OkJhc2U2NERlZmF1bHQpOwotCi0gICAgcmV0dXJuIGNyZWF0ZVRlc3RJZGVudGl0eShw
cml2YXRlS2V5Qnl0ZXMsIGNlcnRpZmljYXRlQnl0ZXMpOworICAgIHJldHVybiBjcmVhdGVUZXN0
SWRlbnRpdHkoV1RGTW92ZSgqcHJpdmF0ZUtleUJ5dGVzKSwgV1RGTW92ZSgqY2VydGlmaWNhdGVC
eXRlcykpOwogfQogCiBzdGF0aWMgUmV0YWluUHRyPE5TVVJMQ3JlZGVudGlhbD4gY3JlZGVudGlh
bFdpdGhJZGVudGl0eSgpCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0V2ZW50QXR0cmlidXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJpYnV0aW9uLm1tCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0V2ZW50QXR0cmlidXRp
b24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4NCwxMyArMTg0LDEyIEBAIFRFU1QoRXZlbnRBdHRy
aWJ1dGlvbiwgRnJhdWRQcmV2ZW50aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBl
bmQgPSByZXF1ZXN0MlN0cmluZy5maW5kKCciJywgc3RhcnQpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byB0b2tlbiA9IHJlcXVlc3QyU3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5kIC0g
c3RhcnQpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYmxpbmRl
ZE1lc3NhZ2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjRVUkxEZWNvZGUodG9rZW4s
IGJsaW5kZWRNZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gYmxpbmRlZE1l
c3NhZ2UgPSBiYXNlNjRVUkxEZWNvZGUodG9rZW4pOwogCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdHJ1Y3QgY2Nyc2Fic3NhX2NpcGhlcnN1aXRlICpjaXBoZXJzdWl0ZSA9ICZjY3Jz
YWJzc2FfY2lwaGVyc3VpdGVfcnNhNDA5Nl9zaGEzODQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGJsaW5kZWRTaWduYXR1cmUgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10g
aW5pdFdpdGhMZW5ndGg6IG1vZHVsdXNOQnl0ZXNdKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNjcnNhYnNzYV9zaWduX2JsaW5kZWRfbWVzc2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJpdmF0ZUtl
eSwgYmxpbmRlZE1lc3NhZ2UuZGF0YSgpLCBibGluZGVkTWVzc2FnZS5zaXplKCksIHN0YXRpY19j
YXN0PHVpbnQ4X3QgKj4oW2JsaW5kZWRTaWduYXR1cmUgbXV0YWJsZUJ5dGVzXSksIFtibGluZGVk
U2lnbmF0dXJlIGxlbmd0aF0sIHJuZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVu
bGlua2FibGVUb2tlbiA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKFtibGluZGVkU2lnbmF0dXJlIGJ5
dGVzXSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGJsaW5kZWRTaWduYXR1cmUgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10g
aW5pdFdpdGhMZW5ndGg6bW9kdWx1c05CeXRlc10pOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2Nyc2Fic3NhX3NpZ25fYmxpbmRlZF9tZXNzYWdlKGNpcGhlcnN1aXRlLCByc2FQcml2YXRlS2V5
LCBibGluZGVkTWVzc2FnZS0+ZGF0YSgpLCBibGluZGVkTWVzc2FnZS0+c2l6ZSgpLCBzdGF0aWNf
Y2FzdDx1aW50OF90ICo+KFtibGluZGVkU2lnbmF0dXJlIG11dGFibGVCeXRlc10pLCBbYmxpbmRl
ZFNpZ25hdHVyZSBsZW5ndGhdLCBybmcpOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1
bmxpbmthYmxlVG9rZW4gPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW2JsaW5kZWRTaWdu
YXR1cmUgYnl0ZXNdLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdKSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEV4YW1wbGUgcmVzcG9uc2U6IHsgInVubGlua2FibGVfdG9rZW4iOiAi
QUJDRCIgfS4gIkFCQ0QiIHNob3VsZCBiZSBCYXNlNjRVUkwgZW5jb2RlZC4KICAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gcmVzcG9uc2UgPSBtYWtlU3RyaW5nKCJIVFRQLzEuMSAyMDAgT0tc
clxuIgpAQCAtMjIyLDE4ICsyMjEsMTYgQEAgVEVTVChFdmVudEF0dHJpYnV0aW9uLCBGcmF1ZFBy
ZXZlbnRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQg
Kz0ga2V5Lmxlbmd0aCgpICsgMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGVuZCA9IHJlcXVlc3Q0U3RyaW5nLmZpbmQoJyInLCBzdGFydCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0b2tlbiA9IHJlcXVlc3Q0U3Ry
aW5nLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiB0b2tlblZlY3RvcjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjRVUkxEZWNvZGUodG9rZW4sIHRv
a2VuVmVjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IHRva2VuRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6dG9rZW5W
ZWN0b3IuZGF0YSgpIGxlbmd0aDp0b2tlblZlY3Rvci5zaXplKCldKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRva2VuVmVjdG9yID0gYmFzZTY0VVJMRGVj
b2RlKHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IHRva2VuRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6dG9rZW5W
ZWN0b3ItPmRhdGEoKSBsZW5ndGg6dG9rZW5WZWN0b3ItPnNpemUoKV0pOwogCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gU3RyaW5nKCJzb3VyY2Vfc2VjcmV0
X3Rva2VuX3NpZ25hdHVyZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0ID0gcmVxdWVzdDRTdHJpbmcuZmluZChrZXkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICs9IGtleS5sZW5ndGgoKSArIDM7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gcmVxdWVzdDRTdHJpbmcuZmlu
ZCgnIicsIHN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIHNpZ25hdHVyZSA9IHJlcXVlc3Q0U3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3Rh
cnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50
OF90PiBzaWduYXR1cmVWZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmFzZTY0VVJMRGVjb2RlKHNpZ25hdHVyZSwgc2lnbmF0dXJlVmVjdG9yKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHNpZ25hdHVyZURhdGEgPSBh
ZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNpZ25hdHVyZVZlY3Rvci5kYXRh
KCkgbGVuZ3RoOnNpZ25hdHVyZVZlY3Rvci5zaXplKCldKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvIHNpZ25hdHVyZVZlY3RvciA9IGJhc2U2NFVSTERlY29k
ZShzaWduYXR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gc2lnbmF0dXJlRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6
c2lnbmF0dXJlVmVjdG9yLT5kYXRhKCkgbGVuZ3RoOnNpZ25hdHVyZVZlY3Rvci0+c2l6ZSgpXSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShT
ZWNLZXlWZXJpZnlTaWduYXR1cmUoc2VjS2V5LmdldCgpLCBrU2VjS2V5QWxnb3JpdGhtUlNBU2ln
bmF0dXJlTWVzc2FnZVBTU1NIQTM4NCwgKF9fYnJpZGdlIENGRGF0YVJlZil0b2tlbkRhdGEuZ2V0
KCksIChfX2JyaWRnZSBDRkRhdGFSZWYpc2lnbmF0dXJlRGF0YS5nZXQoKSwgTlVMTCkpOwogCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9y
Lm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9T
U0xLZXlHZW5lcmF0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTk4LDggKzk4LDggQEAgVEVTVF9G
KFNTTEtleUdlbmVyYXRvclRlc3QsIERlZmF1bHRUZXN0KQogICAgIGNoYXIgY2hhbGxlbmdlW10g
PSAiMDEyMzQ1Njc4OSI7CiAgICAgYXV0byByYXdSZXN1bHQgPSBXZWJDb3JlOjpzaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoMCwgY2hhbGxlbmdlLCB1cmwpOwogICAgIEFTU0VSVF9G
QUxTRShyYXdSZXN1bHQuaXNFbXB0eSgpKTsKLSAgICBWZWN0b3I8dWludDhfdD4gZGVyUmVzdWx0
OwotICAgIEFTU0VSVF9UUlVFKGJhc2U2NERlY29kZShyYXdSZXN1bHQsIGRlclJlc3VsdCkpOwor
ICAgIGF1dG8gZGVyUmVzdWx0ID0gYmFzZTY0RGVjb2RlKHJhd1Jlc3VsdCk7CisgICAgQVNTRVJU
X1RSVUUoZGVyUmVzdWx0KTsKIAogICAgIFNlY0FzbjFDb2RlclJlZiBjb2RlciA9IG51bGxwdHI7
CiAgICAgQVNTRVJUX0VRKGVyclNlY1N1Y2Nlc3MsIFNlY0FzbjFDb2RlckNyZWF0ZSgmY29kZXIp
KTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBURVNUX0YoU1NMS2V5R2VuZXJhdG9yVGVzdCwgRGVmYXVs
dFRlc3QpCiAgICAgfSk7CiAKICAgICBTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UgZGVjb2Rl
ZFJlc3VsdCB7IH07Ci0gICAgU2VjQXNuMUl0ZW0gZGVyUmVzdWx0SXRlbSB7IGRlclJlc3VsdC5z
aXplKCksIGRlclJlc3VsdC5kYXRhKCkgfTsKKyAgICBTZWNBc24xSXRlbSBkZXJSZXN1bHRJdGVt
IHsgZGVyUmVzdWx0LT5zaXplKCksIGRlclJlc3VsdC0+ZGF0YSgpIH07CiAgICAgQVNTRVJUX0VR
KGVyclNlY1N1Y2Nlc3MsIFNlY0FzbjFEZWNvZGVEYXRhKGNvZGVyLCAmZGVyUmVzdWx0SXRlbSwg
c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlVGVtcGxhdGUsICZkZWNvZGVkUmVzdWx0KSk7CiAK
ICAgICAvLyBDaGVjayBjaGFsbGVuZ2UKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2Ev
SFRUUFNlcnZlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hU
VFBTZXJ2ZXIubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29j
b2EvSFRUUFNlcnZlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQg
Q29ubmVjdGlvbjo6d2ViU29ja2V0SGFuZHNoYWtlKENvbXAKICAgICAgICAgICAgIHNoYTEuYWRk
Qnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4od2ViU29ja2V0S2V5R1VJRCks
IHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSk7CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFz
aDsKICAgICAgICAgICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1
cm4gYmFzZTY0RW5jb2RlKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGhhc2guZGF0YSgpLCBTSEExOjpoYXNo
U2l6ZSkpOwogICAgICAgICB9OwogCiAgICAgICAgIGNvbm5lY3Rpb24uc2VuZChIVFRQUmVzcG9u
c2UoMTAxLCB7Cg==
</data>
<flag name="commit-queue"
          id="450085"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429020</attachid>
            <date>2021-05-18 18:57:01 -0700</date>
            <delta_ts>2021-05-18 19:54:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210518185700.patch</filename>
            <type>text/plain</type>
            <size>190253</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIHd0Zi90ZXh0
L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVybmFsKToKKyAgICAg
ICAgKFdURjo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRV
UkxEZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5oOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgor
ICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNv
ZGUpOgorICAgICAgICAoV1RGOjppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdURjo6Y2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNl
NjRFbmNvZGVkKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlZCk6CisgICAgICAgIChX
VEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpTdHJpbmdUeXBlQWRh
cHRlcik6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRp
b24+OjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNl
NjRTcGVjaWZpY2F0aW9uPjo6aXM4Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlw
ZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46OndyaXRlVG8gY29uc3QpOgorCiAyMDIxLTA1
LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXpl
IC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dURi93
dGYvdGV4dC9CYXNlNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAg
IENvcHlyaWdodCAoQykgMjAwMC0yMDAxIERhd2l0IEFsZW1heWVodSA8YWRhd2l0QGtkZS5vcmc+
CiAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9y
Zz4KLSAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5z
dGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMTMgKzI1
LDE2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbmNsdWRlIDxsaW1pdHMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNvbnN0IGNoYXIgbm9uQWxwaGFiZXQgPSAtMTsK
IAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RW5jTWFwWzY0XSA9IHsKK3N0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgZW5jb2RlTWFwU2l6ZSA9IDY0Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBkZWNvZGVNYXBTaXplID0gMTI4OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRFbmNNYXBb
ZW5jb2RlTWFwU2l6ZV0gPSB7CiAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0
NiwgMHg0NywgMHg0OCwKICAgICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAw
eDRGLCAweDUwLAogICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcs
IDB4NTgsCkBAIC00Miw3ICs0NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVuY01hcFs2
NF0gPSB7CiAgICAgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHgy
RgogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RGVjTWFwWzEyOF0gPSB7CitzdGF0aWMg
Y29uc3QgY2hhciBiYXNlNjREZWNNYXBbZGVjb2RlTWFwU2l6ZV0gPSB7CiAgICAgbm9uQWxwaGFi
ZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCkBAIC02MSw3ICs2NCw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyIGJhc2U2NERlY01hcFsxMjhdID0gewogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJl
dAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IHsKK3N0YXRp
YyBjb25zdCBjaGFyIGJhc2U2NFVSTEVuY01hcFtlbmNvZGVNYXBTaXplXSA9IHsKICAgICAweDQx
LCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAogICAgIDB4NDksIDB4
NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCiAgICAgMHg1MSwgMHg1Miwg
MHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKQEAgLTcyLDcgKzc1LDcgQEAgc3Rh
dGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IAogICAgIDB4MzQsIDB4MzUsIDB4
MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4MkQsIDB4NUYKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFy
IGJhc2U2NFVSTERlY01hcFsxMjhdID0geworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRGVj
TWFwW2RlY29kZU1hcFNpemVdID0gewogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9u
QWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsCiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LApAQCAtOTEsMjQzICs5NCwyMTggQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJM
RGVjTWFwWzEyOF0gPQogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0LCBub25BbHBo
YWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsKIAotc3RhdGlj
IGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3ksIGNvbnN0IGNoYXIgKCZlbmNvZGVNYXApWzY0XSkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVpbnQ4
X3QqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUq
IGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNs
ZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVzdGlu
YXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUo
aW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5ndGgpOwogCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSAib3V0TGVuZ3Ro
IiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkg
cHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0gICAgY29uc3QgdW5zaWduZWQg
bWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwotICAg
IGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRv
IGVuY29kZU1hcCA9IChtYXAgPT0gQmFzZTY0RW5jb2RlTWFwOjpVUkwpID8gYmFzZTY0VVJMRW5j
TWFwIDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9IDA7CiAgICAgdW5zaWdu
ZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0gICAgdW5zaWduZWQgb3V0
TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGluc2VydExGcyA9IChwb2xp
Y3kgPT0gQmFzZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnMgJiYgZGVzdGluYXRpb25MZW5ndGgg
PiBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOwogCi0gICAgLy8gRGVh
bCB3aXRoIHRoZSA3NiBjaGFyYWN0ZXIgcGVyIGxpbmUgbGltaXQgc3BlY2lmaWVkIGluIFJGQyAy
MDQ1LgotICAgIGJvb2wgaW5zZXJ0TEZzID0gKHBvbGljeSA9PSBCYXNlNjRJbnNlcnRMRnMgJiYg
b3V0TGVuZ3RoID4gNzYpOwotICAgIGlmIChpbnNlcnRMRnMpCi0gICAgICAgIG91dExlbmd0aCAr
PSAoKG91dExlbmd0aCAtIDEpIC8gNzYpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBvdXQu
Z3JvdyhvdXRMZW5ndGgpOwotCi0gICAgLy8gMy1ieXRlIHRvIDQtYnl0ZSBjb252ZXJzaW9uICsg
MC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgotICAgIGlmIChsZW4gPiAxKSB7Ci0g
ICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAgIGlmIChpbnB1dExlbmd0aCA+IDEp
IHsKKyAgICAgICAgd2hpbGUgKHNpZHggPCBpbnB1dExlbmd0aCAtIDIpIHsKICAgICAgICAgICAg
IGlmIChpbnNlcnRMRnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoY291bnQgJiYgIShjb3VudCAl
IDc2KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOworICAgICAgICAg
ICAgICAgIGlmIChjb3VudCAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVu
SW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHgrK10gPSAnXG4nOwogICAgICAgICAgICAgICAgIGNvdW50ICs9IDQ7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA+PiAy
KSAmIDA3N107Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lk
eCArIDFdID4+IDQpICYgMDE3KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3NyldOwotICAgICAg
ICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAyXSA+PiA2KSAmIDAw
MykgfCAoKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlk
eCsrXSA9IGVuY29kZU1hcFtkYXRhW3NpZHggKyAyXSAmIDA3N107CisKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXREYXRhQnVmZmVy
W3NpZHggICAgXSA+PiAyKSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZm
ZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPj4gNCkg
JiAwMTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3KV07CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0
RGF0YUJ1ZmZlcltzaWR4ICsgMl0gPj4gNikgJiAwMDMpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lk
eCArIDFdIDw8IDIpICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJb
ZGlkeCsrXSA9IGVuY29kZU1hcFsgIGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0gICAgICAgJiAw
NzddOwogICAgICAgICAgICAgc2lkeCArPSAzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KHNpZHggPCBsZW4pIHsKLSAgICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAh
KGNvdW50ICUgNzYpKQotICAgICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7Ci0KLSAgICAgICAg
b3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzddOwotICAgICAg
ICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2Rl
TWFwWygoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYg
MDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4ICsg
MV0gPDwgMikgJiAwNzddOworICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsKKyAgICAgICAg
aWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExp
bmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlcltkaWR4KytdID0gJ1xuJzsKKworICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlk
eCsrXSA9IGVuY29kZU1hcFsoaW5wdXREYXRhQnVmZmVyW3NpZHhdID4+IDIpICYgMDc3XTsKKyAg
ICAgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHgg
KyAxXSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA8PCA0KSAmIDA3Nyld
OworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBb
IChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA8PCA0KSAm
IDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29k
ZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzddOwogICAgIH0KIAot
ICAgIC8vIEFkZCBwYWRkaW5nCi0gICAgaWYgKHBvbGljeSA9PSBCYXNlNjRVUkxQb2xpY3kpCi0g
ICAgICAgIG91dC5yZXNpemUoZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdoaWxlIChkaWR4
IDwgb3V0LnNpemUoKSkgewotICAgICAgICAgICAgb3V0W2RpZHhdID0gJz0nOwotICAgICAgICAg
ICAgKytkaWR4OwotICAgICAgICB9CisgICAgQVNTRVJUKHBvbGljeSAhPSBCYXNlNjRFbmNvZGVQ
b2xpY3k6OlVSTCB8fCBkaWR4ID09IGRlc3RpbmF0aW9uTGVuZ3RoKTsKKworICAgIHdoaWxlIChk
aWR4IDwgZGVzdGluYXRpb25MZW5ndGgpIHsKKyAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHhdID0gJz0nOworICAgICAgICArK2RpZHg7CiAgICAgfQogfQogCi1TdHJpbmcgYmFzZTY0
RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSkKK3N0YXRpYyBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBWZWN0b3I8
Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5j
TWFwKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwor
ICAgIGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShp
bnB1dExlbmd0aCwgcG9saWN5KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGRlc3RpbmF0aW9uVmVjdG9yKGRlc3Rp
bmF0aW9uTGVuZ3RoKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChpbnB1dERhdGFCdWZmZXIs
IGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvblZlY3Rvci5kYXRhKCksIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uVmVjdG9yOwogfQogCi12b2lk
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFy
PiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQorVmVjdG9yPGNoYXI+IGJhc2U2NEVu
Y29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJh
c2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRh
KSwgbGVuLCBvdXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5j
b2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciks
IGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUo
Y29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBiYXNlNjRFbmNvZGUoY29u
c3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBCYXNlNjRVUkxQb2xpY3ksIGJh
c2U2NFVSTEVuY01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQu
c2l6ZSgpKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm47Cisg
ICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0
aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0
IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQpCit2b2lkIGJhc2U2
NEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3Ro
LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0
aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
ZGF0YSksIGxlbiwgb3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7CisgICAg
aWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGJhc2U2NEVuY29k
ZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZmZXIpLCBp
bnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9s
aWN5LCBtYXApOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBib29s
IGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyJiBvdXQsIHVuc2lnbmVkIG9wdGlvbnMsIGNv
bnN0IGNoYXIgKCZkZWNvZGVNYXApWzEyOF0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBp
bnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICBvdXQuY2xl
YXIoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFp
bnB1dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIFZlY3Rvcjx1aW50OF90PiB7IH07CiAKLSAgICBv
dXQuZ3JvdyhsZW5ndGgpOworICAgIGF1dG8gZGVjb2RlTWFwID0gKG1hcCA9PSBCYXNlNjREZWNv
ZGVNYXA6OlVSTCkgPyBiYXNlNjRVUkxEZWNNYXAgOiBiYXNlNjREZWNNYXA7CisKKyAgICBWZWN0
b3I8dWludDhfdD4gZGVzdGluYXRpb24oaW5wdXRMZW5ndGgpOwogCiAgICAgdW5zaWduZWQgZXF1
YWxzU2lnbkNvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBvdXRMZW5ndGggPSAwOwotICAgIGJvb2wg
aGFkRXJyb3IgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbmd0
aDsgKytpZHgpIHsKLSAgICAgICAgdW5zaWduZWQgY2ggPSBkYXRhW2lkeF07CisgICAgdW5zaWdu
ZWQgZGVzdGluYXRpb25MZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4
IDwgaW5wdXRMZW5ndGg7ICsraWR4KSB7CisgICAgICAgIHVuc2lnbmVkIGNoID0gaW5wdXREYXRh
QnVmZmVyW2lkeF07CiAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKICAgICAgICAgICAgICsrZXF1
YWxzU2lnbkNvdW50OwogICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIG5ldmVyIGJlIG1vcmUg
dGhhbiAyIHBhZGRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChvcHRpb25zICYgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKLSAgICAgICAgICAg
ICAgICBoYWRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAob3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRp
bmcpICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y2hhciBkZWNvZGVkQ2hhcmFjdGVyID0gY2ggPCBXVEZfQVJSQVlfTEVOR1RIKGRlY29kZU1hcCkg
PyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFiZXQ7CisgICAgICAgICAgICBjaGFyIGRlY29kZWRD
aGFyYWN0ZXIgPSBjaCA8IGRlY29kZU1hcFNpemUgPyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFi
ZXQ7CiAgICAgICAgICAgICBpZiAoZGVjb2RlZENoYXJhY3RlciAhPSBub25BbHBoYWJldCkgewot
ICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaGFkRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3V0W291dExlbmd0aCsrXSA9IGRlY29kZWRDaGFy
YWN0ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucyAmIEJhc2U2NElnbm9yZVNw
YWNlc0FuZE5ld0xpbmVzKQotICAgICAgICAgICAgICAgIHx8ICghaXNMYXRpbjEoY2gpIHx8ICFp
c0FTQ0lJU3BhY2UoY2gpIHx8ICgob3B0aW9ucyAmIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikg
JiYgY2ggPT0gJ1x2JykpKSB7Ci0gICAgICAgICAgICAgICAgaGFkRXJyb3IgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAg
ICAgZGVzdGluYXRpb25bZGVzdGluYXRpb25MZW5ndGgrK10gPSBkZWNvZGVkQ2hhcmFjdGVyOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRp
b25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykgfHwgKCFpc0xhdGluMShjaCkgfHwgIWlzQVND
SUlTcGFjZShjaCkgfHwgKG9wdGlvbnMuY29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlz
Y2FyZFZlcnRpY2FsVGFiKSAmJiBjaCA9PSAnXHYnKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Ly8gTWFrZSBzdXJlIHdlIHNocmluayBiYWNrIHRoZSBWZWN0b3IgYmVmb3JlIHJldHVybmluZy4g
b3V0TGVuZ3RoIG1heSBiZSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQKKyAgICAvLyBNYWtlIHN1cmUg
d2Ugc2hyaW5rIGJhY2sgdGhlIFZlY3RvciBiZWZvcmUgcmV0dXJuaW5nLiBkZXN0aW5hdGlvbkxl
bmd0aCBtYXkgYmUgc2hvcnRlciB0aGFuIGV4cGVjdGVkCiAgICAgLy8gaW4gY2FzZSBvZiBlcnJv
ciBvciBpbiBjYXNlIG9mIGlnbm9yZWQgc3BhY2VzLgotICAgIGlmIChvdXRMZW5ndGggPCBvdXQu
c2l6ZSgpKQotICAgICAgICBvdXQuc2hyaW5rKG91dExlbmd0aCk7Ci0KLSAgICBpZiAoaGFkRXJy
b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGggPCBk
ZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNocmluayhkZXN0aW5hdGlv
bkxlbmd0aCk7CiAKLSAgICBpZiAoIW91dExlbmd0aCkKLSAgICAgICAgcmV0dXJuICFlcXVhbHNT
aWduQ291bnQ7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkgeworICAgICAgICBpZiAoIWVx
dWFsc1NpZ25Db3VudCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IHJldHVybiBWZWN0b3I8dWludDhfdD4geyB9OworICAgIH0KIAogICAgIC8vIFRoZSBzaG91bGQg
YmUgbm8gcGFkZGluZyBpZiBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiA0LgotICAgIC8vIFdlIHVz
ZSAob3V0TGVuZ3RoICsgZXF1YWxzU2lnbkNvdW50KSBpbnN0ZWFkIG9mIGxlbmd0aCBiZWNhdXNl
IHdlIGRvbid0IHdhbnQgdG8gYWNjb3VudCBmb3IgaWdub3JlZCBjaGFyYWN0ZXJzIChpLmUuIHNw
YWNlcykuCi0gICAgaWYgKG9wdGlvbnMgJiBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgJiYgZXF1YWxz
U2lnbkNvdW50ICYmIChvdXRMZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIC8vIFdlIHVzZSAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNT
aWduQ291bnQpIGluc3RlYWQgb2YgbGVuZ3RoIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhY2Nv
dW50IGZvciBpZ25vcmVkIGNoYXJhY3RlcnMgKGkuZS4gc3BhY2VzKS4KKyAgICBpZiAob3B0aW9u
cy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpICYmIGVxdWFs
c1NpZ25Db3VudCAmJiAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFZhbGlkIGRhdGEgaXMgKG4g
KiA0ICsgWzAsMiwzXSkgY2hhcmFjdGVycyBsb25nLgotICAgIGlmICgob3V0TGVuZ3RoICUgNCkg
PT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoZGVzdGluYXRpb25MZW5ndGgg
JSA0KSA9PSAxKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIC8vIDQt
Ynl0ZSB0byAzLWJ5dGUgY29udmVyc2lvbgotICAgIG91dExlbmd0aCAtPSAob3V0TGVuZ3RoICsg
MykgLyA0OwotICAgIGlmICghb3V0TGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVzdGluYXRpb25MZW5ndGggLT0gKGRlc3RpbmF0aW9uTGVuZ3RoICsgMykgLyA0OworICAgIGlm
ICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICB1bnNpZ25lZCBzaWR4ID0gMDsKICAgICB1bnNpZ25lZCBkaWR4ID0gMDsKLSAgICBpZiAob3V0
TGVuZ3RoID4gMSkgewotICAgICAgICB3aGlsZSAoZGlkeCA8IG91dExlbmd0aCAtIDIpIHsKLSAg
ICAgICAgICAgIG91dFtkaWR4XSA9ICgoKG91dFtzaWR4XSA8PCAyKSAmIDI1NSkgfCAoKG91dFtz
aWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsKLSAgICAgICAgICAgIG91dFtkaWR4ICsgMV0gPSAoKChv
dXRbc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgob3V0W3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OwotICAgICAgICAgICAgb3V0W2RpZHggKyAyXSA9ICgoKG91dFtzaWR4ICsgMl0gPDwgNikgJiAy
NTUpIHwgKG91dFtzaWR4ICsgM10gJiAwNzcpKTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGgg
PiAxKSB7CisgICAgICAgIHdoaWxlIChkaWR4IDwgZGVzdGluYXRpb25MZW5ndGggLSAyKSB7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbltkaWR4ICAgIF0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICAg
IF0gPDwgMikgJiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2RpZHggKyAxXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHgg
KyAxXSA8PCA0KSAmIDI1NSkgfCAoKGRlc3RpbmF0aW9uW3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OworICAgICAgICAgICAgZGVzdGluYXRpb25bZGlkeCArIDJdID0gKCgoZGVzdGluYXRpb25bc2lk
eCArIDJdIDw8IDYpICYgMjU1KSB8ICAoZGVzdGluYXRpb25bc2lkeCArIDNdICAgICAgICYgMDc3
KSk7CiAgICAgICAgICAgICBzaWR4ICs9IDQ7CiAgICAgICAgICAgICBkaWR4ICs9IDM7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2Rp
ZHhdID0gKCgob3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHggKyAxXSA+PiA0KSAm
IDAwMykpOwotCi0gICAgaWYgKCsrZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2RpZHhd
ID0gKCgob3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikg
JiAwMTcpKTsKKyAgICBpZiAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0
aW5hdGlvbltkaWR4XSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggICAgXSA8PCAyKSAmIDI1NSkgfCAo
KGRlc3RpbmF0aW9uW3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOwogCi0gICAgaWYgKG91dExlbmd0
aCA8IG91dC5zaXplKCkpCi0gICAgICAgIG91dC5zaHJpbmsob3V0TGVuZ3RoKTsKKyAgICBpZiAo
KytkaWR4IDwgZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0aW9uW2RpZHhdID0g
KCgoZGVzdGluYXRpb25bc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lk
eCArIDJdID4+IDIpICYgMDE3KSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGVzdGlu
YXRpb25MZW5ndGggPCBkZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNo
cmluayhkZXN0aW5hdGlvbkxlbmd0aCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwogfQogCi1i
b29sIGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZl
Y3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBs
ZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBvcHRpb25zLCBiYXNl
NjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlm
ICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2Rl
SW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3Ro
LCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29kZShTdHJpbmdWaWV3IGluLCBT
aWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQor
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5n
dGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChp
bi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwg
b3V0LCBvcHRpb25zLCBiYXNlNjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNl
NjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNsZWFy
KCk7Ci0KLSAgICAvLyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdl
LCBqdXN0IHJldHVybiBub3RoaW5nLgotICAgIGlmIChpbi5zaXplKCkgPiBVSU5UX01BWCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihpbi5kYXRhKCkpLCBpbi5zaXplKCksIG91dCwg
b3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKKyAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7CiB9
CiAKLWJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJh
c2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuLCBvdXQsIG9wdGlvbnMsIGJh
c2U2NERlY01hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1i
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbi5s
ZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0LCBCYXNl
NjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2
NFVSTERlY01hcCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAg
aWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0g
ICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwg
YmFzZTY0VVJMRGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hh
cmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXAp
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
KyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxl
bmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0KQogewotICAgIG91dC5jbGVhcigpOwotCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICBpZiAoaW4uc2l6ZSgpID4gVUlOVF9NQVgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oaW4uZGF0YSgpKSwgaW4uc2l6ZSgpLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJh
c2U2NFVSTERlY01hcCk7CisgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJM
KTsKIH0KIAotYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQogewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRV
UkxEZWNNYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDI1ICsyNywzNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdURiB7CiAKLWVudW0gQmFzZTY0RW5jb2RlUG9saWN5IHsKLSAgICBCYXNl
NjREb05vdEluc2VydExGcywKLSAgICBCYXNlNjRJbnNlcnRMRnMsCi0gICAgQmFzZTY0VVJMUG9s
aWN5IC8vIE5vIHBhZGRpbmcsIG5vIExGcy4KK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlUG9saWN5
IHsKKyAgICBEb05vdEluc2VydExGcywKKyAgICBJbnNlcnRMRnMsCisgICAgVVJMIC8vIE5vIHBh
ZGRpbmcsIG5vIExGcy4KIH07CiAKLWVudW0gQmFzZTY0RGVjb2RlT3B0aW9ucyB7Ci0gICAgQmFz
ZTY0RGVmYXVsdCA9IDAsCi0gICAgQmFzZTY0VmFsaWRhdGVQYWRkaW5nID0gMSA8PCAwLAotICAg
IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzID0gMSA8PCAxLAotICAgIEJhc2U2NERpc2Nh
cmRWZXJ0aWNhbFRhYiA9IDEgPDwgMiwKK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlTWFwIHsgRGVm
YXVsdCwgVVJMIH07CisKK2VudW0gY2xhc3MgQmFzZTY0RGVjb2RlT3B0aW9ucyA6IHVpbnQ4X3Qg
eworICAgIFZhbGlkYXRlUGFkZGluZyAgICAgICAgID0gMSA8PCAwLAorICAgIElnbm9yZVNwYWNl
c0FuZE5ld0xpbmVzID0gMSA8PCAxLAorICAgIERpc2NhcmRWZXJ0aWNhbFRhYiAgICAgID0gMSA8
PCAyLAogfTsKIAorZW51bSBjbGFzcyBCYXNlNjREZWNvZGVNYXAgeyBEZWZhdWx0LCBVUkwgfTsK
Kworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5J
bnNlcnRpbmdMRnMgPSA3NjsKKworLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2lj
YWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90aGluZy4KKy8vIFJhdGhlciB0aGFuIGJlaW5nIHBl
cmZlY3RseSBwcmVjaXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZhdGl2ZS4KK3N0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwor
CiBjbGFzcyBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgewogcHVibGljOgogICAg
IFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8Y2hhcj4mIHZlY3RvcikK
QEAgLTE0NCw5MCArMTU0LDE2MyBAQCBwcml2YXRlOgogICAgIH0gbV92ZWN0b3I7CiB9OwogCi1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExG
cyk7Ci12b2lkIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNl
cnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLVdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29k
ZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBD
U3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOworV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVu
c2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwg
VUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5
OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwg
dW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29k
ZU1hcDo6RGVmYXVsdCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JV
bnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOworVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9S
VF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0
cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2Rl
TWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8
QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29k
ZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQp
OworCitpbmxpbmUgVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlciBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFz
ZTY0RW5jb2RlTWFwIG1hcCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Cit9CisKK2lubGluZSBWZWN0b3I8Y2hhcj4g
YmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9s
aWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW5w
dXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOworfQorCisKKy8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBBbGwgdGhlIHNhbWUgZnVuY3Rpb25zIG1vZGlm
aWVkIGZvciBiYXNlNjR1cmwsIGFzIGRlZmluZWQgaW4gUkZDIDQ2NDguCisvLyBUaGlzIGZvcm1h
dCB1c2VzICctJyBhbmQgJ18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5Lgor
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9y
QWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOwotV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcsIFNpZ25lZE9yVW5zaWduZWRDaGFy
VmVjdG9yQWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOwotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYsIFNpZ25l
ZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERl
ZmF1bHQpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIq
LCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBv
cHRpb25zID0gQmFzZTY0RGVmYXVsdCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNv
bnN0IHZvaWQqLCB1bnNpZ25lZCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKENvbnN0
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKK1ZlY3RvcjxjaGFyPiBiYXNlNjRV
UkxFbmNvZGUoY29uc3QgQ1N0cmluZyYpOworCitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7CitXVEZfRVhQ
T1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoU3Ry
aW5nVmlldyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7CitXVEZfRVhQT1JUX1BSSVZBVEUg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciosIHVu
c2lnbmVkKTsKIAotaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25l
ZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91dCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZv
aWQqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRhdGEo
KSwgaW4uc2l6ZSgpLCBvdXQsIHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbnB1
dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwp
OwogfQogCi1pbmxpbmUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3Rv
cjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoraW5saW5lIFZlY3Rvcjxj
aGFyPiBiYXNlNjRVUkxFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgaW5wdXQpCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIG91
dCwgcG9saWN5KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQu
c2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFy
VmVjdG9yQWRhcHRlciBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0
b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGlucHV0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIHBvbGljeSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNv
ZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5n
IGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBp
c0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIHBvbGljeSk7CisgICAgcmV0
dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLycgfHwgYyA9
PSAnLScgfHwgYyA9PSAnXyc7CiB9CiAKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0vLyBBbGwgdGhlIHNhbWUgZnVuY3Rpb25zIG1vZGlmaWVkIGZvciBiYXNlNjR1cmwsIGFzIGRl
ZmluZWQgaW4gUkZDIDQ2NDguCi0vLyBUaGlzIGZvcm1hdCB1c2VzICctJyBhbmQgJ18nIGluc3Rl
YWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5LgotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KK2lubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZSh1bnNp
Z25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3sKKyAgICBpZiAo
IWlucHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgVmVjdG9yPGNoYXI+Jik7
Ci12b2lkIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgVmVjdG9yPGNoYXI+Jik7Ci12b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5n
JiwgVmVjdG9yPGNoYXI+Jik7CisgICAgaWYgKGlucHV0TGVuZ3RoID4gbWF4aW11bUJhc2U2NEVu
Y29kZXJJbnB1dEJ1ZmZlclNpemUpCisgICAgICAgIHJldHVybiAwOwogCi1XVEZfRVhQT1JUX1BS
SVZBVEUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
cik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmKTsKKyAgICBhdXRvIGJh
c2VQYWRkZWRFbmNvZGVkU2l6ZSA9IFsmXSB7CisgICAgICAgIHJldHVybiAoKGlucHV0TGVuZ3Ro
ICsgMikgLyAzKSAqIDQ7CisgICAgfTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0
VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
cik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldywg
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVdURl9FWFBPUlRfUFJJVkFURSBi
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBTaWduZWRPclVuc2lnbmVk
Q2hhclZlY3RvckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyKTsKKyAgICBhdXRvIGJhc2VVbnBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAgICAg
cmV0dXJuICgoaW5wdXRMZW5ndGggKiA0KSArIDIpIC8gMzsKKyAgICB9OworCisgICAgc3dpdGNo
IChwb2xpY3kpIHsKKyAgICBjYXNlIEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnM6
CisgICAgICAgIHJldHVybiBiYXNlUGFkZGVkRW5jb2RlZFNpemUoKTsKKworICAgIGNhc2UgQmFz
ZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnM6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBiYXNl
UGFkZGVkRW5jb2RlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0g
MSkgLyBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOworICAgIH0KIAot
aW5saW5lIHZvaWQgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91dCkKKyAgICBjYXNlIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMOgorICAgICAgICByZXR1cm4gYmFzZVVucGFkZGVkRW5jb2RlZFNpemUoKTsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3Ry
dWN0IEJhc2U2NFNwZWNpZmljYXRpb24geworICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKKyAg
ICB1bnNpZ25lZCBpbnB1dExlbmd0aDsKKyAgICBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5Owor
ICAgIEJhc2U2NEVuY29kZU1hcCBtYXA7Cit9OworCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KQogewotICAgIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLnNpemUoKSwgb3V0KTsKKyAg
ICByZXR1cm4geyBpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCB9OwogfQogCi1p
bmxpbmUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3RvcjxjaGFy
PiYgb3V0KQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChDb25zdFNp
Z25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCiB7Ci0gICAgYmFz
ZTY0VVJMRW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIG91dCk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSk7CiB9CiAKLWlu
bGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGluKQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChj
b25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NFVSTEVuY29k
ZShpbi5kYXRhKCksIGluLnNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQu
ZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5KTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNl
NjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4pCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0
aCgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNCYXNlNjRP
ckJhc2U2NFVSTENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCitpbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIGlucHV0KQogewotICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMg
PT0gJysnIHx8IGMgPT0gJy8nIHx8IGMgPT0gJy0nIHx8IGMgPT0gJ18nOworICAgIHJldHVybiBi
YXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xp
Y3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworfQorCitpbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IENTdHJpbmcmIGlucHV0KQoreworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKK3RlbXBsYXRlPD4g
Y2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj4geworcHVibGljOgor
ICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IEJhc2U2NFNwZWNpZmljYXRpb24mIGJhc2U2NCkK
KyAgICAgICAgOiBtX2Jhc2U2NCB7IGJhc2U2NCB9CisgICAgICAgICwgbV9lbmNvZGVkTGVuZ3Ro
IHsgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoYmFzZTY0LmlucHV0TGVuZ3RoLCBiYXNlNjQu
cG9saWN5KSB9CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5jb2RlZExlbmd0aDsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3
cml0ZVRvKENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAg
YmFzZTY0RW5jb2RlKG1fYmFzZTY0LmlucHV0RGF0YSwgbV9iYXNlNjQuaW5wdXRMZW5ndGgsIGRl
c3RpbmF0aW9uLCBtX2VuY29kZWRMZW5ndGgsIG1fYmFzZTY0LnBvbGljeSwgbV9iYXNlNjQubWFw
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzZTY0U3BlY2lmaWNhdGlvbiBtX2Jhc2U2NDsK
KyAgICB1bnNpZ25lZCBtX2VuY29kZWRMZW5ndGg7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAordXNpbmcgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOwogdXNpbmcgV1RGOjpCYXNlNjRFbmNv
ZGVQb2xpY3k7Ci11c2luZyBXVEY6OkJhc2U2NERvTm90SW5zZXJ0TEZzOwotdXNpbmcgV1RGOjpC
YXNlNjRJbnNlcnRMRnM7Ci11c2luZyBXVEY6OkJhc2U2NFZhbGlkYXRlUGFkZGluZzsKLXVzaW5n
IFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXM7Ci11c2luZyBXVEY6OkJhc2U2NERp
c2NhcmRWZXJ0aWNhbFRhYjsKLXVzaW5nIFdURjo6YmFzZTY0RW5jb2RlOwordXNpbmcgV1RGOjpC
YXNlNjRTcGVjaWZpY2F0aW9uOwogdXNpbmcgV1RGOjpiYXNlNjREZWNvZGU7Cit1c2luZyBXVEY6
OmJhc2U2NEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0RW5jb2RlZDsKK3VzaW5nIFdURjo6YmFz
ZTY0VVJMRGVjb2RlOwogdXNpbmcgV1RGOjpiYXNlNjRVUkxEZWNvZGU7Cit1c2luZyBXVEY6OmJh
c2U2NFVSTEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0VVJMRW5jb2RlZDsKIHVzaW5nIFdURjo6
aXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3RlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3
NzY4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1NSBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1v
ZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L0luaXREYXRhUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleUlEc0tl
eWlkcyk6CisgICAgICAgIChXZWJDb3JlOjpzYW5pdGl6ZUtleWlkcyk6CisgICAgICAgICogTW9k
dWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKToKKyAgICAgICAg
KiBNb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW06CisgICAgICAg
IChXZWJDb3JlOjpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
anNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlbUluQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXV0aGVudGljYXRvckNvb3JkaW5hdG9ySW50ZXJuYWw6OnByb2R1Y2VDbGllbnREYXRhSnNvbik6
CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwp
OgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVTZWNXZWJTb2NrZXRLZXkpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNvY2tldEFjY2VwdCk6Cisg
ICAgICAgICogY3J5cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmg6CisgICAgICAgICogY3J5
cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKiBjcnlw
dG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5QUVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6aW1w
b3J0SndrKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6ZXhwb3J0SndrIGNvbnN0
KToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9LZXlFQzo6aW1wb3J0SndrKToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9Dcnlw
dG9LZXlITUFDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmltcG9ydEp3
ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjpleHBvcnRKd2sgY29uc3QpOgor
ICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXlSU0E6OmltcG9ydEp3ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlS
U0E6OmV4cG9ydEp3ayBjb25zdCk6CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01h
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVs
ZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmluZE1hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpkZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICAqIGNyeXB0by9vcGVuc3NsL1Nlcmlh
bGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRh
VVJMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
TmV0d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291
cmNlc0RhdGE6OlJlc291cmNlRGF0YTo6ZGVjb2RlRGF0YVRvQ29udGVudCk6CisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaCk6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yOjpidWlsZFdlYlNvY2tldE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0
aFJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50
ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCk6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUGFnZUFnZW50OjpkYXRhQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmFyY2hpdmUpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6
CisgICAgICAgICogbG9hZGVyL0xvYWRlclN0cmF0ZWd5Lmg6CisgICAgICAgICogbG9hZGVyL1By
aXZhdGVDbGlja01lYXN1cmVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50OjpFcGhlbWVyYWxTb3VyY2VOb25jZTo6aXNWYWxpZCBjb25zdCk6CisgICAg
ICAgICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OmRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAgICAqIGxv
YWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
SFRNTEFyY2hpdmU6OmdlbmVyYXRlTUhUTUxEYXRhKToKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSFRNTFBhcnNlcjo6
cGFyc2VOZXh0UGFydCk6CisgICAgICAgICogbG9hZGVyL2NvY29hL1ByaXZhdGVDbGlja01lYXN1
cmVtZW50Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dDo6Y2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJsZVRva2VuKToKKyAgICAgICAgKFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VT
ZWNyZXRUb2tlbik6CisgICAgICAgICogcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmFzZTY0VXRpbGl0aWVzOjpidG9hKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2U2NFV0aWxpdGllczo6YXRvYik6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vuc2VGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0
cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtl
eUlkRnJvbVdlYk1Jbml0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
OjpyZXF1ZXN0TGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25G
YWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUxpY2Vuc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjpkaWRQcm92aWRl
UmVxdWVzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVW5pcXVlRm9udE5hbWUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlVW5pcXVlRm9udE5hbWUpOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsb2FkQmxvYlJlc291cmNlU3lu
Y2hyb25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5k
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJj
ZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q3JlZGVudGlhbEJhc2U6OnNlcmlhbGl6YXRpb25Gb3JCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbEJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNv
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVCYXNlNjQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRlY29kZUVzY2FwZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRlY29kZVN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9T
eW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91
c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25v
dXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIb3N0VExTQ2VydGlmaWNhdGVTZXQ6OmNvbXB1dGVD
ZXJ0aWZpY2F0ZUhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2Vx
dWVuY2VzLmg6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoIGNvbnN0KToKKwogMjAyMS0wNS0x
OCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVUF0gUmVt
b3RlQXVkaW9TZXNzaW9uIGNhbGxzIGludG8gQVZBdWRpb1Nlc3Npb24gd2hlbiBHUFVQIGlzIGVu
YWJsZWQsIGNhdXNpbmcgaGFuZ3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlw
dGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0
YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTUgKzgwLDE0IEBAIHN0YXRpYyBP
cHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4KICAgICAgICAgaWYgKCFrZXlJRCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFZlY3RvcjxjaGFyPiBrZXlJRERhdGE7Ci0g
ICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pKQor
ICAgICAgICBhdXRvIGtleUlERGF0YSA9IGJhc2U2NFVSTERlY29kZShrZXlJRCk7CisgICAgICAg
IGlmICgha2V5SUREYXRhKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGtl
eUlERGF0YS5zaXplKCkgPCBrS2V5SWRzTWluS2V5SWRTaXplSW5CeXRlcyB8fCBrZXlJRERhdGEu
c2l6ZSgpID4ga0tleUlkc01heEtleUlkU2l6ZUluQnl0ZXMpCisgICAgICAgIGlmIChrZXlJRERh
dGEtPnNpemUoKSA8IGtLZXlJZHNNaW5LZXlJZFNpemVJbkJ5dGVzIHx8IGtleUlERGF0YS0+c2l6
ZSgpID4ga0tleUlkc01heEtleUlkU2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgICAgIFJlZjxTaGFyZWRCdWZmZXI+IGtleUlEQnVmZmVyID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlJRERhdGEpKTsKLSAgICAgICAga2V5SURzLmFw
cGVuZChXVEZNb3ZlKGtleUlEQnVmZmVyKSk7CisgICAgICAgIGtleUlEcy5hcHBlbmQoU2hhcmVk
QnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqa2V5SUREYXRhKSkpOwogICAgIH0KIAogICAgIHJldHVy
biBrZXlJRHM7CkBAIC0xMDUsNyArMTA0LDcgQEAgc3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IHNhbml0aXplS2V5aQogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBhdXRvIGtpZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1
dG8mIGJ1ZmZlciA6IGtleUlEQnVmZmVyLnZhbHVlKCkpCi0gICAgICAgIGtpZHNBcnJheS0+cHVz
aFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXpl
KCkpKTsKKyAgICAgICAga2lkc0FycmF5LT5wdXNoU3RyaW5nKG1ha2VTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlZChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpKSk7CiAgICAgb2JqZWN0LT5z
ZXRBcnJheSgia2lkcyIsIFdURk1vdmUoa2lkc0FycmF5KSk7CiAKICAgICBDU3RyaW5nIGpzb25E
YXRhID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
bGVnYWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNl
c3Npb25DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwxMyArMTY5LDEzIEBAIGJv
b2wgQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoVWludDhBcnIKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtl
eURhdGE7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShyYXdLZXlEYXRhLCBrZXlEYXRh
KSB8fCBrZXlEYXRhLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBrZXlEYXRhID0gYmFz
ZTY0RGVjb2RlKHJhd0tleURhdGEpOworICAgICAgICAgICAgaWYgKCFrZXlEYXRhIHx8IGtleURh
dGEtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25D
bGVhcktleTo6dXBkYXRlKCVwKSAtIGZhaWxlZDogdW5hYmxlIHRvIGJhc2U2NCBkZWNvZGUga2V5
IiwgdGhpcyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIG1fY2FjaGVkS2V5cy5zZXQoa2V5SWQsIFdURk1vdmUoa2V5RGF0YSkpOworICAg
ICAgICAgICAgbV9jYWNoZWRLZXlzLnNldChrZXlJZCwgV1RGTW92ZSgqa2V5RGF0YSkpOwogICAg
ICAgICAgICAgZm91bmRWYWxpZEtleSA9IHRydWU7CiAgICAgICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudC5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDMsMTQgKzI0MywxMiBAQCB2b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojpw
b3N0RXZlCiAKIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQoTlNEYXRh
ICpkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBKU0NvbnRleHQgKmNvbnRleHQpCiB7Ci0g
ICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKFtkYXRhIGJ5dGVz
XSwgW2RhdGEgbGVuZ3RoXSwgYmFzZTY0RGF0YSk7Ci0KKyAgICAvLyBGSVhNRTogQWRkIG1ha2VD
RlN0cmluZy9tYWtlTlNTdHJpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkgU3RyaW5nIGFsbG9jYXRp
b24uCiAgICAgU3RyaW5nIGRhdGE2NDsKICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAg
ICAgICAgZGF0YTY0ID0gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERh
dGE7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFz
ZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKSk7CiAgICAg
ZWxzZQotICAgICAgICBkYXRhNjQgPSAiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKKyAgICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2
NCwiLCBiYXNlNjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOwogCiAgICAg
cmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDooaWQpZGF0YTY0LmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQpAQCAtMzQyLDkgKzM0MCw3IEBAIHN0YXRp
YyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGUKICAgICAgICAgaWQgdmFsdWUgPSBp
dGVtLnZhbHVlOwogICAgICAgICBOU1N0cmluZyAqbWltZVR5cGUgPSBbW2l0ZW0gZXh0cmFBdHRy
aWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJNSU1FdHlwZSJdOwogICAgICAgICBpZiAoW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dICYmIG1pbWVUeXBlKSB7Ci0gICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICAgICAgICAgIGJhc2U2NEVuY29kZShbdmFsdWUg
Ynl0ZXNdLCBbdmFsdWUgbGVuZ3RoXSwgYmFzZTY0RGF0YSk7Ci0gICAgICAgICAgICBTdHJpbmcg
ZGF0YTY0ID0gImRhdGE6IiArIFN0cmluZyhtaW1lVHlwZSkgKyAiO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKKyAgICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToiLCBTdHJp
bmcobWltZVR5cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFt2YWx1ZSBieXRlc10sIFt2
YWx1ZSBsZW5ndGhdKSk7CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6KF9fYnJp
ZGdlIE5TU3RyaW5nICopZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5OkAidmFs
dWUiXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBz
dGF0aWMgUmVmPEFycmF5QnVmZmVyPiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9iamVjdC0+
c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIFdURjo6YmFzZTY0VVJM
RW5jb2RlKGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOworICAgIG9iamVj
dC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChj
aGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVuZ2UubGVuZ3RoKCkpKSk7CiAgICAgb2JqZWN0LT5zZXRT
dHJpbmcoIm9yaWdpbiJfcywgb3JpZ2luLnRvUmF3U3RyaW5nKCkpOwogCiAgICAgYXV0byB1dGY4
SlNPTlN0cmluZyA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRp
YWwuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3
IEBAIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgUHUKIH0KIAogUHVibGlj
S2V5Q3JlZGVudGlhbDo6UHVibGljS2V5Q3JlZGVudGlhbChSZWY8QXV0aGVudGljYXRvclJlc3Bv
bnNlPiYmIHJlc3BvbnNlKQotICAgIDogQmFzaWNDcmVkZW50aWFsKFdURjo6YmFzZTY0VVJMRW5j
b2RlKHJlc3BvbnNlLT5yYXdJZCgpLT5kYXRhKCksIHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlTGVu
Z3RoKCkpLCBUeXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQorICAgIDogQmFzaWND
cmVkZW50aWFsKG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyZXNwb25zZS0+cmF3SWQoKS0+
ZGF0YSgpLCByZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSksIFR5cGU6OlB1YmxpY0tl
eSwgRGlzY292ZXJ5OjpSZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2Up
KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dEhhbmRzaGFrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZWNXZWJT
b2NrZXRLZXkoKQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uY2VTaXplID0gMTY7CiAgICAg
dW5zaWduZWQgY2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRv
bVZhbHVlcyhrZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShrZXksIG5v
bmNlU2l6ZSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChrZXksIG5vbmNl
U2l6ZSkpOwogfQogCiBTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNv
Y2tldEFjY2VwdChjb25zdCBTdHJpbmcmIHNlY1dlYlNvY2tldEtleSkKQEAgLTExMCw3ICsxMTAs
NyBAQCBTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlCiAgICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlE
KSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAg
ICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaGFzaC5k
YXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNv
ZGVkKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSkpOwogfQogCiBXZWJTb2NrZXRIYW5kc2hh
a2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90
b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgY2xpZW50T3JpZ2lu
LCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TZXJpYWxp
emVkQ3J5cHRvS2V5V3JhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9T
ZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBvZiBwcm90ZWN0aW9uIGlzIG5v
dCByZXF1aXJlZCBieSB0aGUgc3BlYyBhcyBvZiAxMSBEZWNlbWJlciAyMDE0OgogLy8gaHR0cHM6
Ly93d3cudzMub3JnL1RSL1dlYkNyeXB0b0FQSS8jc2VjdXJpdHktZGV2ZWxvcGVycwogCi1XRUJD
T1JFX0VYUE9SVCBib29sIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4
X3Q+Jik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkoKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZGVsZXRlRGVmYXVsdFdl
YkNyeXB0b01hc3RlcktleSgpOwogCiBXRUJDT1JFX0VYUE9SVCBib29sIHdyYXBTZXJpYWxpemVk
Q3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5LCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNH
Q3J5cHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjMsMTEgKzUyMywxMSBAQCBib29sIENyeXB0
b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVuCiAgICAgICAgIGlmIChxICYmIHEtPnNpemUo
KSA9PSBjdXJ2ZVVuY29tcHJlc3NlZFBvaW50U2l6ZShtX2N1cnZlKSkgewogICAgICAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGE7CiAgICAgICAgICAgICBhLmFwcGVuZChxLT5kYXRhKCkgKyAxLCB1
bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplKTsKLSAgICAgICAgICAgIGp3ay54ID0gYmFzZTY0
VVJMRW5jb2RlKGEpOworICAgICAgICAgICAgandrLnggPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoYSkpOwogCiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYjsKICAgICAgICAgICAg
IGIuYXBwZW5kKHEtPmRhdGEoKSArIDEgKyB1bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplLCB1
bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplKTsKLSAgICAgICAgICAgIGp3ay55ID0gYmFzZTY0
VVJMRW5jb2RlKGIpOworICAgICAgICAgICAgandrLnkgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoYikpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NDMsNyArNTQzLDcgQEAgYm9vbCBD
cnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogICAgICAgICAgICAgICAgICAgICAq
ZCA9IFdURk1vdmUocGFkZGVkRGF0YSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGUoKmQpOworICAgICAgICAgICAgICAgIGp3ay5k
ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCpkKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1NlcmlhbGl6
ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcEdDcnlwdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE1ICsyOSwxNCBAQAogI2lm
IEVOQUJMRShXRUJfQ1JZUFRPKQogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGdldERl
ZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCitPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogLy8gSW5pdGlhbGx5
IHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgd2VyZSBpbnRlbmRlZCB0byBwZXJmb3JtIEtFSyB3cmFw
cGluZyBhbmQgdW53cmFwcGluZywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUFFUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5QUVTLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTAgKzg4LDEw
IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEuay5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG9jdGV0U2VxdWVuY2U7Ci0gICAgaWYgKCFi
YXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rLCBvY3RldFNlcXVlbmNlKSkKKyAgICBhdXRvIG9jdGV0
U2VxdWVuY2UgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rKTsKKyAgICBpZiAoIW9jdGV0U2Vx
dWVuY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghY2FsbGJhY2sob2N0ZXRT
ZXF1ZW5jZS5zaXplKCkgKiA4LCBrZXlEYXRhLmFsZykpCisgICAgaWYgKCFjYWxsYmFjayhvY3Rl
dFNlcXVlbmNlLT5zaXplKCkgKiA4LCBrZXlEYXRhLmFsZykpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGlmICh1c2FnZXMgJiYgIWtleURhdGEudXNlLmlzTnVsbCgpICYmIGtleURhdGEu
dXNlICE9ICJlbmMiKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMCwxNCArMTAwLDE0
IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICBpZiAoa2V5
RGF0YS5leHQgJiYgIWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFjdGFibGUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMo
YWxnb3JpdGhtLCBXVEZNb3ZlKG9jdGV0U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCBXVEZNb3Zl
KCpvY3RldFNlcXVlbmNlKSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwogfQogCiBKc29uV2ViS2V5
IENyeXB0b0tleUFFUzo6ZXhwb3J0SndrKCkgY29uc3QKIHsKICAgICBKc29uV2ViS2V5IHJlc3Vs
dDsKICAgICByZXN1bHQua3R5ID0gIm9jdCI7Ci0gICAgcmVzdWx0LmsgPSBiYXNlNjRVUkxFbmNv
ZGUobV9rZXkpOworICAgIHJlc3VsdC5rID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKG1f
a2V5KSk7CiAgICAgcmVzdWx0LmtleV9vcHMgPSB1c2FnZXMoKTsKICAgICByZXN1bHQuZXh0ID0g
ZXh0cmFjdGFibGUoKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OCwyMiArOTgsMjIgQEAgUmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6aW1wb3J0Sgog
CiAgICAgaWYgKGtleURhdGEueC5pc051bGwoKSB8fCBrZXlEYXRhLnkuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90PiB4OwotICAgIGlmICghV1RG
OjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS54LCB4KSkKKyAgICBhdXRvIHggPSBiYXNlNjRVUkxE
ZWNvZGUoa2V5RGF0YS54KTsKKyAgICBpZiAoIXgpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIFZlY3Rvcjx1aW50OF90PiB5OwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5
RGF0YS55LCB5KSkKKyAgICBhdXRvIHkgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS55KTsKKyAg
ICBpZiAoIXkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmQuaXNO
dWxsKCkpIHsKICAgICAgICAgLy8gaW1wb3J0IHB1YmxpYyBrZXkKLSAgICAgICAgcmV0dXJuIHBs
YXRmb3JtSW1wb3J0SldLUHVibGljKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKHgp
LCBXVEZNb3ZlKHkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmV0dXJuIHBsYXRm
b3JtSW1wb3J0SldLUHVibGljKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKCp4KSwg
V1RGTW92ZSgqeSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgIH0KIAotICAgIFZlY3Rvcjx1
aW50OF90PiBkOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kLCBkKSkK
KyAgICBhdXRvIGQgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBpZiAoIWQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIGltcG9ydCBwcml2YXRlIGtleQotICAgIHJl
dHVybiBwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3VydmUsIFdU
Rk1vdmUoeCksIFdURk1vdmUoeSksIFdURk1vdmUoZCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwor
ICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3Vy
dmUsIFdURk1vdmUoKngpLCBXVEZNb3ZlKCp5KSwgV1RGTW92ZSgqZCksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogfQogCiBSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjppbXBvcnRTcGtp
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBjdXJ2
ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5
VXNhZ2VCaXRtYXAgdXNhZ2VzKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5SE1BQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5SE1BQy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOCArMTAz
LDggQEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5rLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4gb2N0ZXRTZXF1ZW5jZTsKLSAgICBpZiAo
IWJhc2U2NFVSTERlY29kZShrZXlEYXRhLmssIG9jdGV0U2VxdWVuY2UpKQorICAgIGF1dG8gb2N0
ZXRTZXF1ZW5jZSA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmspOworICAgIGlmICghb2N0ZXRT
ZXF1ZW5jZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFjYWxsYmFjayhoYXNo
LCBrZXlEYXRhLmFsZykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTE1LDE0ICsxMTUs
MTQgQEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgIGlmIChr
ZXlEYXRhLmV4dCAmJiAha2V5RGF0YS5leHQudmFsdWUoKSAmJiBleHRyYWN0YWJsZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3
KGxlbmd0aEJpdHMsIGhhc2gsIFdURk1vdmUob2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOworICAgIHJldHVybiBDcnlwdG9LZXlITUFDOjppbXBvcnRSYXcobGVuZ3RoQml0cywg
aGFzaCwgV1RGTW92ZSgqb2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQog
CiBKc29uV2ViS2V5IENyeXB0b0tleUhNQUM6OmV4cG9ydEp3aygpIGNvbnN0CiB7CiAgICAgSnNv
bldlYktleSByZXN1bHQ7CiAgICAgcmVzdWx0Lmt0eSA9ICJvY3QiOwotICAgIHJlc3VsdC5rID0g
YmFzZTY0VVJMRW5jb2RlKG1fa2V5KTsKKyAgICByZXN1bHQuayA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChtX2tleSkpOwogICAgIHJlc3VsdC5rZXlfb3BzID0gdXNhZ2VzKCk7CiAgICAg
cmVzdWx0LmV4dCA9IGV4dHJhY3RhYmxlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNjUgKzQ1LDg3IEBAIFJlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0
b0tleVJTQTo6aW1wb3IKIAogICAgIGlmIChrZXlEYXRhLm4uaXNOdWxsKCkgfHwga2V5RGF0YS5l
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4g
bW9kdWx1czsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEubiwgbW9kdWx1
cykpCisgICAgYXV0byBtb2R1bHVzID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEubik7CisgICAg
aWYgKCFtb2R1bHVzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBQZXIgUkZDIDc1
MTggU2VjdGlvbiA2LjMuMS4xOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUxOCNz
ZWN0aW9uLTYuMy4xLjEKLSAgICBpZiAoIW1vZHVsdXMuaXNFbXB0eSgpICYmICFtb2R1bHVzWzBd
KQotICAgICAgICBtb2R1bHVzLnJlbW92ZSgwKTsKLSAgICBWZWN0b3I8dWludDhfdD4gZXhwb25l
bnQ7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLmUsIGV4cG9uZW50KSkK
KyAgICBpZiAoIW1vZHVsdXMtPmlzRW1wdHkoKSAmJiAhbW9kdWx1cy0+YXQoMCkpCisgICAgICAg
IG1vZHVsdXMtPnJlbW92ZSgwKTsKKyAgICBhdXRvIGV4cG9uZW50ID0gYmFzZTY0VVJMRGVjb2Rl
KGtleURhdGEuZSk7CisgICAgaWYgKCFleHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgaWYgKGtleURhdGEuZC5pc051bGwoKSkgewogICAgICAgICAvLyBpbXBvcnQgcHVibGlj
IGtleQotICAgICAgICBhdXRvIHB1YmxpY0tleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21w
b25lbnRzOjpjcmVhdGVQdWJsaWMoV1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCkp
OworICAgICAgICBhdXRvIHB1YmxpY0tleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25l
bnRzOjpjcmVhdGVQdWJsaWMoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50KSk7
CiAgICAgICAgIC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEgaXMg
anVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBpZiBoYXNo
IGlzIFdURjo6bnVsbG9wdC4KICAgICAgICAgcmV0dXJuIENyeXB0b0tleVJTQTo6Y3JlYXRlKGFs
Z29yaXRobSwgaGFzaC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xKSwg
ISFoYXNoLCAqcHVibGljS2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAg
fQogCiAgICAgLy8gaW1wb3J0IHByaXZhdGUga2V5Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZh
dGVFeHBvbmVudDsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZCwgcHJp
dmF0ZUV4cG9uZW50KSkKKyAgICBhdXRvIHByaXZhdGVFeHBvbmVudCA9IGJhc2U2NFVSTERlY29k
ZShrZXlEYXRhLmQpOworICAgIGlmICghcHJpdmF0ZUV4cG9uZW50KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5wLmlzTnVsbCgpICYmIGtleURhdGEucS5pc051bGwo
KSAmJiBrZXlEYXRhLmRwLmlzTnVsbCgpICYmIGtleURhdGEuZHAuaXNOdWxsKCkgJiYga2V5RGF0
YS5xaS5pc051bGwoKSkgewotICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5
cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZN
b3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpKTsKKyAgICAgICAgYXV0byBw
cml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZh
dGUoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50KSwgV1RGTW92ZSgqcHJpdmF0
ZUV4cG9uZW50KSk7CiAgICAgICAgIC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cjo6U0hBXzEgaXMganVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVm
ZmVjdCBpZiBoYXNoIGlzIFdURjo6bnVsbG9wdC4KICAgICAgICAgcmV0dXJuIENyeXB0b0tleVJT
QTo6Y3JlYXRlKGFsZ29yaXRobSwgaGFzaC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OlNIQV8xKSwgISFoYXNoLCAqcHJpdmF0ZUtleUNvbXBvbmVudHMsIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogICAgIH0KIAogICAgIGlmIChrZXlEYXRhLnAuaXNOdWxsKCkgfHwga2V5RGF0YS5x
LmlzTnVsbCgpIHx8IGtleURhdGEuZHAuaXNOdWxsKCkgfHwga2V5RGF0YS5kcS5pc051bGwoKSB8
fCBrZXlEYXRhLnFpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBDcnlw
dG9LZXlSU0FDb21wb25lbnRzOjpQcmltZUluZm8gZmlyc3RQcmltZUluZm87Ci0gICAgQ3J5cHRv
S2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mbzsKLSAgICBpZiAoIVdU
Rjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEucCwgZmlyc3RQcmltZUluZm8ucHJpbWVGYWN0b3Ip
KQorICAgIAorICAgIGF1dG8gZmlyc3RQcmltZUZhY3RvciA9IGJhc2U2NFVSTERlY29kZShrZXlE
YXRhLnApOworICAgIGlmICghZmlyc3RQcmltZUZhY3RvcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRwLCBmaXJzdFByaW1l
SW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisgICAgYXV0byBmaXJzdEZhY3RvckNSVEV4cG9uZW50
ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZHApOworICAgIGlmICghZmlyc3RGYWN0b3JDUlRF
eHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVS
TERlY29kZShrZXlEYXRhLnEsIHNlY29uZFByaW1lSW5mby5wcmltZUZhY3RvcikpCisgICAgYXV0
byBzZWNvbmRQcmltZUZhY3RvciA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLnEpOworICAgIGlm
ICghc2Vjb25kUHJpbWVGYWN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICgh
V1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kcSwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNS
VEV4cG9uZW50KSkKKyAgICBhdXRvIHNlY29uZEZhY3RvckNSVEV4cG9uZW50ID0gYmFzZTY0VVJM
RGVjb2RlKGtleURhdGEuZHEpOworICAgIGlmICghc2Vjb25kRmFjdG9yQ1JURXhwb25lbnQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5
RGF0YS5xaSwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KSkKKyAgICBhdXRv
IHNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEucWkp
OworICAgIGlmICghc2Vjb25kRmFjdG9yQ1JUQ29lZmZpY2llbnQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGZpcnN0UHJp
bWVJbmZvOworICAgIGZpcnN0UHJpbWVJbmZvLnByaW1lRmFjdG9yID0gV1RGTW92ZSgqZmlyc3RQ
cmltZUZhY3Rvcik7CisgICAgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZN
b3ZlKCpmaXJzdEZhY3RvckNSVEV4cG9uZW50KTsKKyAgICAKKyAgICBDcnlwdG9LZXlSU0FDb21w
b25lbnRzOjpQcmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOworICAgIHNlY29uZFByaW1lSW5mby5w
cmltZUZhY3RvciA9IFdURk1vdmUoKnNlY29uZFByaW1lRmFjdG9yKTsKKyAgICBzZWNvbmRQcmlt
ZUluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZNb3ZlKCpzZWNvbmRGYWN0b3JDUlRFeHBvbmVu
dCk7CisgICAgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50ID0gV1RGTW92ZSgq
c2Vjb25kRmFjdG9yQ1JUQ29lZmZpY2llbnQpOworCiAgICAgaWYgKCFrZXlEYXRhLm90aCkgewot
ICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50
czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZN
b3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJp
bWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCB7IH0pOworICAgICAgICBhdXRvIHBy
aXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0
ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKCptb2R1bHVzKSwgV1RGTW92ZSgqZXhwb25lbnQp
LCBXVEZNb3ZlKCpwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RG
TW92ZShzZWNvbmRQcmltZUluZm8pLCB7IH0pOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxk
IG5vdCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJl
dHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRz
LCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAKICAgICBWZWN0b3I8Q3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclByaW1lSW5mb3M7CiAgICAgZm9yIChjb25zdCBh
dXRvJiB2YWx1ZSA6IGtleURhdGEub3RoLnZhbHVlKCkpIHsKLSAgICAgICAgQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87Ci0gICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxE
ZWNvZGUodmFsdWUuciwgaW5mby5wcmltZUZhY3RvcikpCisgICAgICAgIGF1dG8gcHJpbWVGYWN0
b3IgPSBiYXNlNjRVUkxEZWNvZGUodmFsdWUucik7CisgICAgICAgIGlmICghcHJpbWVGYWN0b3Ip
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVS
TERlY29kZSh2YWx1ZS5kLCBpbmZvLmZhY3RvckNSVEV4cG9uZW50KSkKKyAgICAgICAgYXV0byBm
YWN0b3JDUlRFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZSh2YWx1ZS5kKTsKKyAgICAgICAgaWYg
KCFmYWN0b3JDUlRFeHBvbmVudCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKHZhbHVlLnQsIGluZm8uZmFjdG9yQ1JUQ29lZmZp
Y2llbnQpKQorICAgICAgICBhdXRvIGZhY3RvckNSVENvZWZmaWNpZW50ID0gYmFzZTY0VVJMRGVj
b2RlKHZhbHVlLnQpOworICAgICAgICBpZiAoIWZhY3RvckNSVENvZWZmaWNpZW50KQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG90aGVyUHJpbWVJbmZvcy5hcHBlbmQoaW5m
byk7CisKKyAgICAgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87Cisg
ICAgICAgIGluZm8ucHJpbWVGYWN0b3IgPSBXVEZNb3ZlKCpwcmltZUZhY3Rvcik7CisgICAgICAg
IGluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZNb3ZlKCpmYWN0b3JDUlRFeHBvbmVudCk7Cisg
ICAgICAgIGluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQgPSBXVEZNb3ZlKCpmYWN0b3JDUlRDb2Vm
ZmljaWVudCk7CisKKyAgICAgICAgb3RoZXJQcmltZUluZm9zLmFwcGVuZChXVEZNb3ZlKGluZm8p
KTsKICAgICB9CiAKLSAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKG1vZHVs
dXMpLCBXVEZNb3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpLCBXVEZNb3Zl
KGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCBXVEZNb3ZlKG90aGVy
UHJpbWVJbmZvcykpOworICAgIGF1dG8gcHJpdmF0ZUtleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlS
U0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKFdURk1vdmUoKm1v
ZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVudCksIFdURk1vdmUoKnByaXZhdGVFeHBvbmVudCksIFdU
Rk1vdmUoZmlyc3RQcmltZUluZm8pLCBXVEZNb3ZlKHNlY29uZFByaW1lSW5mbyksIFdURk1vdmUo
b3RoZXJQcmltZUluZm9zKSk7CiAgICAgLy8gTm90aWNlOiBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpTSEFfMSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkg
ZWZmZWN0IGlmIGhhc2ggaXMgV1RGOjpudWxsb3B0LgogICAgIHJldHVybiBDcnlwdG9LZXlSU0E6
OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRzLCBleHRyYWN0YWJsZSwgdXNh
Z2VzKTsKIH0KQEAgLTExOCwzMCArMTQwLDMwIEBAIEpzb25XZWJLZXkgQ3J5cHRvS2V5UlNBOjpl
eHBvcnRKd2soKSBjb24KICAgICBhdXRvIHJzYUNvbXBvbmVudHMgPSBleHBvcnREYXRhKCk7CiAK
ICAgICAvLyBwdWJsaWMga2V5Ci0gICAgcmVzdWx0Lm4gPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29t
cG9uZW50cy0+bW9kdWx1cygpKTsKLSAgICByZXN1bHQuZSA9IGJhc2U2NFVSTEVuY29kZShyc2FD
b21wb25lbnRzLT5leHBvbmVudCgpKTsKKyAgICByZXN1bHQubiA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5tb2R1bHVzKCkpKTsKKyAgICByZXN1bHQuZSA9IG1h
a2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5leHBvbmVudCgpKSk7CiAg
ICAgaWYgKHJzYUNvbXBvbmVudHMtPnR5cGUoKSA9PSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpU
eXBlOjpQdWJsaWMpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvLyBwcml2YXRlIGtl
eQotICAgIHJlc3VsdC5kID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnByaXZhdGVF
eHBvbmVudCgpKTsKKyAgICByZXN1bHQuZCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChy
c2FDb21wb25lbnRzLT5wcml2YXRlRXhwb25lbnQoKSkpOwogICAgIGlmICghcnNhQ29tcG9uZW50
cy0+aGFzQWRkaXRpb25hbFByaXZhdGVLZXlQYXJhbWV0ZXJzKCkpCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAKLSAgICByZXN1bHQucCA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5m
aXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9yKTsKLSAgICByZXN1bHQucSA9IGJhc2U2NFVSTEVu
Y29kZShyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5wcmltZUZhY3Rvcik7Ci0gICAg
cmVzdWx0LmRwID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPmZpcnN0UHJpbWVJbmZv
KCkuZmFjdG9yQ1JURXhwb25lbnQpOwotICAgIHJlc3VsdC5kcSA9IGJhc2U2NFVSTEVuY29kZShy
c2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBvbmVudCk7Ci0gICAg
cmVzdWx0LnFpID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5m
bygpLmZhY3RvckNSVENvZWZmaWNpZW50KTsKKyAgICByZXN1bHQucCA9IG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5maXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9y
KSk7CisgICAgcmVzdWx0LnEgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9u
ZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkucHJpbWVGYWN0b3IpKTsKKyAgICByZXN1bHQuZHAgPSBt
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8o
KS5mYWN0b3JDUlRFeHBvbmVudCkpOworICAgIHJlc3VsdC5kcSA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBv
bmVudCkpOworICAgIHJlc3VsdC5xaSA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FD
b21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRDb2VmZmljaWVudCkpOwogICAg
IGlmIChyc2FDb21wb25lbnRzLT5vdGhlclByaW1lSW5mb3MoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAKICAgICBWZWN0b3I8UnNhT3RoZXJQcmltZXNJbmZvPiBvdGg7CiAg
ICAgZm9yIChjb25zdCBhdXRvJiBpbmZvIDogcnNhQ29tcG9uZW50cy0+b3RoZXJQcmltZUluZm9z
KCkpIHsKICAgICAgICAgUnNhT3RoZXJQcmltZXNJbmZvIG90aGVySW5mbzsKLSAgICAgICAgb3Ro
ZXJJbmZvLnIgPSBiYXNlNjRVUkxFbmNvZGUoaW5mby5wcmltZUZhY3Rvcik7Ci0gICAgICAgIG90
aGVySW5mby5kID0gYmFzZTY0VVJMRW5jb2RlKGluZm8uZmFjdG9yQ1JURXhwb25lbnQpOwotICAg
ICAgICBvdGhlckluZm8udCA9IGJhc2U2NFVSTEVuY29kZShpbmZvLmZhY3RvckNSVENvZWZmaWNp
ZW50KTsKKyAgICAgICAgb3RoZXJJbmZvLnIgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQo
aW5mby5wcmltZUZhY3RvcikpOworICAgICAgICBvdGhlckluZm8uZCA9IG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChpbmZvLmZhY3RvckNSVEV4cG9uZW50KSk7CisgICAgICAgIG90aGVySW5m
by50ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKGluZm8uZmFjdG9yQ1JUQ29lZmZpY2ll
bnQpKTsKICAgICAgICAgb3RoLmFwcGVuZChXVEZNb3ZlKG90aGVySW5mbykpOwogICAgIH0KICAg
ICByZXN1bHQub3RoID0gV1RGTW92ZShvdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRv
L21hYy9DcnlwdG9LZXlFQ01hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcsMTAgKzE5NywxMCBAQCBib29sIENyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVu
CiAKICAgICBpZiAoVU5MSUtFTFkoKHNpemUgIT0gcHVibGljS2V5U2l6ZSkgJiYgKHNpemUgIT0g
cHJpdmF0ZUtleVNpemUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGp3ay54ID0gV1RG
OjpiYXNlNjRVUkxFbmNvZGUocmVzdWx0LmRhdGEoKSArIDEsIGtleVNpemVJbkJ5dGVzKTsKLSAg
ICBqd2sueSA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHJlc3VsdC5kYXRhKCkgKyBrZXlTaXplSW5C
eXRlcyArIDEsIGtleVNpemVJbkJ5dGVzKTsKKyAgICBqd2sueCA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsgMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2su
eSA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUlu
Qnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRlcykpOwogICAgIGlmIChzaXplID4gcHVibGljS2V5U2l6
ZSkKLSAgICAgICAgandrLmQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShyZXN1bHQuZGF0YSgpICsg
cHVibGljS2V5U2l6ZSwga2V5U2l6ZUluQnl0ZXMpOworICAgICAgICBqd2suZCA9IG1ha2VTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6
ZUluQnl0ZXMpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1w
b3J0IDxDb21tb25DcnlwdG8vQ29tbW9uU3ltbWV0cmljS2V5d3JhcC5oPgogI2ltcG9ydCA8Y3J0
X2V4dGVybnMuaD4KICNpbXBvcnQgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CisjaW1w
b3J0IDx3dGYvT3B0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5
U1BJLmg+CkBAIC04MCwxMSArODEsMTEgQEAgc3RhdGljIE5TU3RyaW5nKiBtYXN0ZXJLZXlBY2Nv
dW50TmFtZUZvcgogICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImNvbS5h
cHBsZS5XZWJLaXQuV2ViQ3J5cHRvLm1hc3RlcislQCIsIGJ1bmRsZUlkZW50aWZpZXJdOwogfQog
Ci1zdGF0aWMgYm9vbCBjcmVhdGVBbmRTdG9yZU1hc3RlcktleShWZWN0b3I8dWludDhfdD4mIG1h
c3RlcktleURhdGEpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBjcmVhdGVBbmRT
dG9yZU1hc3RlcktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVn
ZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFscykpOwogCi0gICAgbWFzdGVy
S2V5RGF0YS5yZXNpemUobWFzdGVyS2V5U2l6ZUluQnl0ZXMpOworICAgIFZlY3Rvcjx1aW50OF90
PiBtYXN0ZXJLZXlEYXRhKG1hc3RlcktleVNpemVJbkJ5dGVzKTsKICAgICBhdXRvIHJjID0gQ0NS
YW5kb21HZW5lcmF0ZUJ5dGVzKG1hc3RlcktleURhdGEuZGF0YSgpLCBtYXN0ZXJLZXlEYXRhLnNp
emUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmMgPT0ga0NDU3VjY2Vzcyk7CiAKQEAgLTEwNyw3
ICsxMDgsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVBbmRTdG9yZU1hc3RlcktleShWZWN0CiAgICAg
c3RhdHVzID0gU2VjQWNjZXNzQ3JlYXRlKChfX2JyaWRnZSBDRlN0cmluZ1JlZilsb2NhbGl6ZWRJ
dGVtTmFtZSwgbnVsbHB0ciwgJmFjY2Vzc1JlZik7CiAgICAgaWYgKHN0YXR1cykgewogICAgICAg
ICBXVEZMb2dBbHdheXMoIkNhbm5vdCBjcmVhdGUgYSBzZWN1cml0eSBhY2Nlc3Mgb2JqZWN0IGZv
ciBzdG9yaW5nIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IH0KICAgICBSZXRhaW5QdHI8U2VjQWNjZXNzUmVmPiBhY2Nlc3MgPSBhZG9wdENGKGFjY2Vzc1Jl
Zik7CiAKQEAgLTEyMCwxOSArMTIxLDE4IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICBpZiAoc3RhdHVz
KSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IGNyZWF0ZSBhIHRydXN0ZWQgYXBwbGlj
YXRpb24gb2JqZWN0IGZvciBzdG9yaW5nIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIs
IChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIH0KICAgICBSZXRhaW5QdHI8U2VjVHJ1c3RlZEFwcGxpY2F0aW9uUmVm
PiB0cnVzdGVkQXBwID0gYWRvcHRDRih0cnVzdGVkQXBwUmVmKTsKIAogICAgIHN0YXR1cyA9IFNl
Y0FDTFNldENvbnRlbnRzKGFjbCwgKF9fYnJpZGdlIENGQXJyYXlSZWYpQFsgKF9fYnJpZGdlIGlk
KXRydXN0ZWRBcHAuZ2V0KCkgXSwgKF9fYnJpZGdlIENGU3RyaW5nUmVmKWxvY2FsaXplZEl0ZW1O
YW1lLCBrU2VjS2V5Y2hhaW5Qcm9tcHRSZXF1aXJlUGFzc3BoYXNlKTsKICAgICBpZiAoc3RhdHVz
KSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IHNldCBBQ0wgZm9yIFdlYkNyeXB0byBt
YXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KICNlbmRpZgogCi0gICAgVmVj
dG9yPGNoYXI+IGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhOwotICAgIGJhc2U2NEVuY29kZSht
YXN0ZXJLZXlEYXRhLCBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YSk7CisgICAgYXV0byBiYXNl
NjRFbmNvZGVkTWFzdGVyS2V5RGF0YSA9IGJhc2U2NEVuY29kZShtYXN0ZXJLZXlEYXRhKTsKIAog
ICAgIC8vIENhbm5vdCB1c2Uga1NlY0NsYXNzS2V5IGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVt
LzE2MDY4MjA3Pi4KICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBAewpAQCAtMTUwLDEy
ICsxNTAsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgc3RhdHVz
ID0gU2VjSXRlbUFkZCgoQ0ZEaWN0aW9uYXJ5UmVmKWF0dHJpYnV0ZXMsIG51bGxwdHIpOwogICAg
IGlmIChzdGF0dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3Qgc3RvcmUgV2ViQ3J5
cHRvIG1hc3RlciBrZXksIGVycm9yICVkIiwgKGludClzdGF0dXMpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiB0
cnVlOworCisgICAgcmV0dXJuIG1hc3RlcktleURhdGE7CiB9CiAKLXN0YXRpYyBib29sIGZpbmRN
YXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXlEYXRhKQorc3RhdGljIE9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gZmluZE1hc3RlcktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
aGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFs
cykpOwogCkBAIC0xNzAsMjAgKzE3MSwyNSBAQCBzdGF0aWMgYm9vbCBmaW5kTWFzdGVyS2V5KFZl
Y3Rvcjx1aW50OF90CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBpZiAoc3RhdHVzICE9IGVy
clNlY0l0ZW1Ob3RGb3VuZCAmJiBzdGF0dXMgIT0gZXJyU2VjVXNlckNhbmNlbGVkKQogICAgICAg
ICAgICAgV1RGTG9nQWx3YXlzKCJDb3VsZCBub3QgZmluZCBXZWJDcnlwdG8gbWFzdGVyIGtleSBp
biBLZXljaGFpbiwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPENG
RGF0YVJlZj4ga2V5RGF0YSA9IGFkb3B0Q0Yoa2V5RGF0YVJlZik7Ci0KLSAgICBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEgPSB2ZWN0b3JGcm9tTlNEYXRhKChfX2Jy
aWRnZSBOU0RhdGEgKilrZXlEYXRhLmdldCgpKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlKChj
b25zdCBjaGFyKiliYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YS5kYXRhKCksIGJhc2U2NEVuY29k
ZWRNYXN0ZXJLZXlEYXRhLnNpemUoKSwgbWFzdGVyS2V5RGF0YSk7CisgICAgcmV0dXJuIGJhc2U2
NERlY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKGtl
eURhdGEuZ2V0KCkpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGtleURhdGEuZ2V0KCkpKTsKIH0KIAotYm9v
bCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5
KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkK
IHsKLSAgICBpZiAoIWZpbmRNYXN0ZXJLZXkobWFzdGVyS2V5KSAmJiAhY3JlYXRlQW5kU3RvcmVN
YXN0ZXJLZXkobWFzdGVyS2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJFTEVBU0Vf
QVNTRVJUKG1hc3RlcktleS5zaXplKCkgPT0gbWFzdGVyS2V5U2l6ZUluQnl0ZXMpOwotICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChhdXRvIG1hc3RlcktleSA9IGZpbmRNYXN0ZXJLZXkoKSkgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtYXN0ZXJLZXktPnNpemUoKSA9PSBtYXN0ZXJLZXlTaXpl
SW5CeXRlcyk7CisgICAgICAgIHJldHVybiBtYXN0ZXJLZXk7CisgICAgfQorCisgICAgaWYgKGF1
dG8gbWFzdGVyS2V5ID0gY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoKSkgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtYXN0ZXJLZXktPnNpemUoKSA9PSBtYXN0ZXJLZXlTaXplSW5CeXRlcyk7Cisg
ICAgICAgIHJldHVybiBtYXN0ZXJLZXk7CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIH0KIAogYm9vbCBkZWxldGVEZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNT
TC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2VyaWFs
aXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2VyaWFsaXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDE0IEBACiAjaWYgRU5BQkxFKFdFQl9DUllQ
VE8pCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleShWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICBVTlVTRURfUEFSQU0obWFzdGVyS2V5KTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiAvLyBJbml0aWFsbHkgdGhlc2UgaGVscGVyIGZ1
bmN0aW9ucyB3ZXJlIGludGVuZGVkIHRvIHBlcmZvcm0gS0VLIHdyYXBwaW5nIGFuZCB1bndyYXBw
aW5nLApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsMjYgKzMzMywxMiBAQCB2b2lkIEZpbGVS
ZWFkZXJMb2FkZXI6OmNvbnZlcnRUb1RleHQoKQogCiB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNv
bnZlcnRUb0RhdGFVUkwoKQogewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoImRhdGE6Iik7Ci0KICAgICBpZiAoIW1fYnl0ZXNMb2FkZWQpIHsK
LSAgICAgICAgbV9zdHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIG1f
c3RyaW5nUmVzdWx0ID0gImRhdGE6Il9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKG1fZGF0YVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtIik7Ci0gICAgZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVuZCht
X2RhdGFUeXBlKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjtiYXNlNjQsIik7Ci0KLSAg
ICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgIGJhc2U2NEVuY29kZShtX3Jhd0RhdGEtPmRhdGEoKSwg
bV9ieXRlc0xvYWRlZCwgb3V0KTsKLSAgICBvdXQuYXBwZW5kKCdcMCcpOwotICAgIGJ1aWxkZXIu
YXBwZW5kKG91dC5kYXRhKCkpOwotCi0gICAgbV9zdHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3Ry
aW5nKCk7CisgICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3RyaW5nKCJkYXRhOjtiYXNlNjQsIiwg
bV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0
YVR5cGUsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQpLCAn
XDAnKTsKIH0KIAogYm9vbCBGaWxlUmVhZGVyTG9hZGVyOjppc0NvbXBsZXRlZCgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOSwxNCArNDI5LDE0IEBAIHN0ZDo6dW5pcXVlX3B0
cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNI
QTE6OkRpZ2VzdCBhdHRyc0hhc2g7CiAgICAgICAgICAgICBhdHRyc1NIQTEuY29tcHV0ZUhhc2go
YXR0cnNIYXNoKTsKLSAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0gYmFzZTY0RW5jb2Rl
KGF0dHJzSGFzaC5kYXRhKCksIDEwKTsKKyAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0g
bWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGF0dHJzSGFzaC5kYXRhKCksIDEwKSk7CiAgICAgICAg
ICAgICBhZGRTdHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaCho
YXNoKTsKLSAgICBkaWdlc3QtPnNoYTEgPSBiYXNlNjRFbmNvZGUoaGFzaC5kYXRhKCksIDEwKTsK
KyAgICBkaWdlc3QtPnNoYTEgPSBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoaGFzaC5kYXRhKCks
IDEwKSk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+
YWRkKGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsMTEgKzU5OCwxMSBAQCBib29sIEluc3BlY3RvckZy
b250ZW5kSG9zdDo6c2hvd0NlcnRpZmljCiAgICAgaWYgKCFtX2NsaWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYgKCFiYXNlNjRE
ZWNvZGUoc2VyaWFsaXplZENlcnRpZmljYXRlLCBkYXRhKSkKKyAgICBhdXRvIGRhdGEgPSBiYXNl
NjREZWNvZGUoc2VyaWFsaXplZENlcnRpZmljYXRlKTsKKyAgICBpZiAoIWRhdGEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2Rlcihk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CiAgICAgT3B0aW9uYWw8Q2VydGlm
aWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUlu
Zm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB1bnNpZ25lZCBOZXR3b3JrUmVzb3VyY2Vz
RGF0YTo6UmVzb3VyY2VECiAgICAgICAgIG1fY29udGVudCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5k
Rmx1c2gobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIG1fYmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0gICAgICAgIG1fY29udGVudCA9IGJhc2U2
NEVuY29kZShtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCk7CisgICAgICAgIG1fY29u
dGVudCA9IG1ha2VTdHJpbmcoV1RGOjpiYXNlNjRFbmNvZGVkKG1fZGF0YUJ1ZmZlci0+ZGF0YSgp
LCBkYXRhTGVuZ3RoKSk7CiAgICAgfQogCiAgICAgbV9kYXRhQnVmZmVyID0gbnVsbHB0cjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwOSw3
ICsxNzA5LDcgQEAgc3RhdGljIFN0cmluZyBjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saQogICAg
IGF1dG8gY3J5cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0
b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVz
KGNvbnRlbnQuZGF0YSgpLCBjb250ZW50LnNpemUoKSk7CiAgICAgYXV0byBkaWdlc3QgPSBjcnlw
dG9EaWdlc3QtPmNvbXB1dGVIYXNoKCk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1Ni0i
LCBiYXNlNjRFbmNvZGUoZGlnZXN0LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOworICAgIHJldHVy
biBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChkaWdlc3QuZGF0YSgpLCBkaWdl
c3Quc2l6ZSgpKSk7CiB9CiAKIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01B
Z2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwgTm9kZVRvSWRN
YXAqIG5vZGVzTWFwKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAgUmVmPFByb3RvY29sOjpOZXR3
b3JrOjpXZWJTb2NrZXRGcmFtZT4gYgogICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6V2Vi
U29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQog
ICAgICAgICAuc2V0TWFzayhmcmFtZS5tYXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShm
cmFtZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJh
bWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNlNjRFbmNvZGUoZnJhbWUucGF5
bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpCisgICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFt
ZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUu
cGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQo
ZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpKQogICAgICAgICAuc2V0UGF5bG9h
ZExlbmd0aChmcmFtZS5wYXlsb2FkTGVuZ3RoKQogICAgICAgICAucmVsZWFzZSgpOwogfQpAQCAt
NTg2LDcgKzU4Niw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGEK
ICAgICAgICAgLy8gT2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBhIGRl
Y29kZXIsIGJ1dCBmb3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAgICAg
IC8vIFN5bmMgWEhScyBtYXkgbm90IGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5vbi1z
eW5jIFhIUnMgdXN1YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAgICAg
ICAgaWYgKG1fbG9hZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFyZXNv
dXJjZURhdGEtPmhhc0J1ZmZlcmVkRGF0YSgpICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291
cmNlKCkpCi0gICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChy
ZXF1ZXN0SWQsIGJhc2U2NEVuY29kZShkYXRhLCBkYXRhTGVuZ3RoKSwgdHJ1ZSk7CisgICAgICAg
ICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIG1ha2VT
dHJpbmcoYmFzZTY0RW5jb2RlZChkYXRhLCBkYXRhTGVuZ3RoKSksIHRydWUpOwogICAgIH0KIAog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kYXRhUmVjZWl2ZWQocmVxdWVzdElkLCB0aW1lc3Rh
bXAoKSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGFMZW5ndGgpOwpAQCAtMTAwNCw3ICsxMDA0LDcg
QEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0bwogCiAgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIFdURjo6UGVyc2lzdGVuY2U6OkNvZGVy
PFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZShlbmNvZGVyLCBjZXJ0aWZpY2F0ZS52
YWx1ZSgpKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGVu
Y29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKSk7CiB9CiAKIFdlYlNvY2tldCog
SW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9j
b2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQpAQCAtMTIwMiwxMSArMTIwMiwxMSBA
QCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOCiAgICAgICAgIHJlcXVl
c3Quc2V0SFRUUEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0SGVhZGVycykpOwogICAgIH0K
ICAgICBpZiAoISFwb3N0RGF0YSkgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwot
ICAgICAgICBpZiAoIWJhc2U2NERlY29kZShwb3N0RGF0YSwgYnVmZmVyKSkKKyAgICAgICAgYXV0
byBidWZmZXIgPSBiYXNlNjREZWNvZGUocG9zdERhdGEpOworICAgICAgICBpZiAoIWJ1ZmZlcikK
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZl
biBwb3N0RGF0YSJfcyk7CiAKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShGb3JtRGF0YTo6
Y3JlYXRlKGJ1ZmZlcikpOworICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KEZvcm1EYXRhOjpj
cmVhdGUoV1RGTW92ZSgqYnVmZmVyKSkpOwogICAgIH0KICAgICAvLyBGSVhNRTogZmlndXJlIG91
dCBob3cgdG8gaWRlbnRpZnkgd2hlbiBhIHJlcXVlc3QgaGFzIGJlZW4gb3ZlcnJpZGRlbiB3aGVu
IHdlIGFkZCB0aGlzIHRvIHRoZSBmcm9udGVuZC4KICAgICBwZW5kaW5nUmVxdWVzdC0+Y29udGlu
dWVXaXRoUmVxdWVzdChyZXF1ZXN0KTsKQEAgLTEyNDIsMTEgKzEyNDIsMTEgQEAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gb3ZlcnJpZGVEYXRhOwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1
ZmZlcikpCisgICAgICAgIGF1dG8gYnVmZmVyID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQpOworICAg
ICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5h
YmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zKTsKIAotICAgICAgICBvdmVycmlkZURhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICBvdmVycmlk
ZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVs
c2UKICAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC51
dGY4KCkuZGF0YSgpLCBjb250ZW50LnV0ZjgoKS5sZW5ndGgoKSk7CiAKQEAgLTEyNjgsMTEgKzEy
NjgsMTEgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgogCiAgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAg
ICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShj
b250ZW50LCBidWZmZXIpKQorICAgICAgICBhdXRvIGJ1ZmZlciA9IGJhc2U2NERlY29kZShjb250
ZW50KTsKKyAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfcyk7CiAKLSAgICAgICAgZGF0
YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIGRhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVsc2UKICAg
ICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwg
Y29udGVudC51dGY4KCkubGVuZ3RoKCkpOwogCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCBib29sIElu
c3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3VyCiAgICAgICAgIH0KIAogICAgICAgICAq
YmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGUoYnVm
ZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgKnJlc3VsdCA9IG1ha2VTdHJp
bmcoV1RGOjpiYXNlNjRFbmNvZGVkKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBib29sIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29uCiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZGF0YUNvbnRlbnQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaW5n
JiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0
KQogewogICAgIGlmICh3aXRoQmFzZTY0RW5jb2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNl
NjRFbmNvZGUoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1bHQgPSBtYWtlU3RyaW5nKGJhc2U2
NEVuY29kZWQoZGF0YSwgc2l6ZSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTExMDIsNyArMTEwMiw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG8KICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBh
cmNoaXZlIGZvciBtYWluIGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1
ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgIHJldHVybiBiYXNl
NjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgo
YnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChDRkRh
dGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkp
KSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTE4LDcgKzMxMTgsNyBAQCB1bnNpZ25lZCBsb25nIEZy
YW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTCiAgICAgICAgIEFTU0VSVCghbmV3UmVxdWVzdC5pc051
bGwoKSk7CiAKICAgICAgICAgaWYgKCFkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLm1heWJlTG9hZFN5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNl
LCBkYXRhKSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAgICAgICAg
IFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CiAgICAgICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSgqdGhpcywgaWRl
bnRpZmllciwgbmV3UmVxdWVzdCwgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgb3B0aW9ucywgb3Jp
Z2luYWxSZXF1ZXN0SGVhZGVycywgZXJyb3IsIHJlc3BvbnNlLCBidWZmZXIpOwogICAgICAgICAg
ICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CiAgICAgICAg
ICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLm1heWJlTG9hZEZh
bGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBGZXRjaE9wdGlvbnM7CiBjbGFzcyBXRUJDT1JF
X0VYUE9SVCBMb2FkZXJTdHJhdGVneSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZShGcmFtZSYsIENhY2hlZFJlc291cmNlJiwgUmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0
IFJlc291cmNlTG9hZGVyT3B0aW9ucyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiYmKT4mJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBGZXRj
aE9wdGlvbnMmLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29u
c3QgRmV0Y2hPcHRpb25zJiwgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHBhZ2VMb2FkQ29tcGxldGVkKFBhZ2UmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGJy
b3dzaW5nQ29udGV4dFJlbW92ZWQoRnJhbWUmKSA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL1ByaXZhdGVDbGlja01lYXN1cmVtZW50LmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1ByaXZhdGVDbGlja01lYXN1cmVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDEwICsxODksMTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudDo6RXBoZW1lcmFsUwogewogICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBpZiB3
ZSBjYW4gZG8gd2l0aCBhIHNpbXBsZSBsZW5ndGggY2hlY2sgaW5zdGVhZCBvZiBkZWNvZGluZy4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxOTQ1Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKLSAgICBpZiAoIWJhc2U2NFVSTERlY29kZShub25j
ZSwgZGlnZXN0KSkKKyAgICBhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShub25jZSk7Cisg
ICAgaWYgKCFkaWdlc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZGlnZXN0
LnNpemUoKSA9PSBFcGhlbWVyYWxTb3VyY2VOb25jZVJlcXVpcmVkTnVtYmVyT2ZCeXRlczsKKyAg
ICByZXR1cm4gZGlnZXN0LT5zaXplKCkgPT0gRXBoZW1lcmFsU291cmNlTm9uY2VSZXF1aXJlZE51
bWJlck9mQnl0ZXM7CiB9CiAKIHZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OnNldEVwaGVt
ZXJhbFNvdXJjZU5vbmNlKEVwaGVtZXJhbFNvdXJjZU5vbmNlJiYgbm9uY2UpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDE0ICs2OSwxNSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgCiAgICAgaWYgKGJ1ZmZl
ci5wb3NpdGlvbigpID09IGJlZ2luSGFzaFZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKICAgICBTdHJpbmdWaWV3IGhhc2hW
YWx1ZShiZWdpbkhhc2hWYWx1ZSwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbkhhc2hWYWx1ZSk7
Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoaGFzaFZhbHVlLCBkaWdlc3QsIEJhc2U2NFZhbGlkYXRl
UGFkZGluZykpIHsKLSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoaGFzaFZhbHVlLCBkaWdl
c3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CiAKLSAgICByZXR1
cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgV1RGTW92ZShkaWdl
c3QpIH07CisgICAgaWYgKGF1dG8gZGlnZXN0ID0gYmFzZTY0RGVjb2RlKGhhc2hWYWx1ZSwgQmFz
ZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsK
KworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShoYXNoVmFsdWUpKQorICAg
ICAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgV1RG
TW92ZSgqZGlnZXN0KSB9OworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogT3B0aW9u
YWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3Qo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIGJ1ZmZlcikKQEAgLTEyNCwxMyArMTI1LDEzIEBA
IE9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWcKIAogT3B0aW9uYWw8UmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0KGNvbnN0IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QmIGVuY29k
ZWREaWdlc3QpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKLSAgICBpZiAoIWJhc2U2
NERlY29kZShlbmNvZGVkRGlnZXN0LmRpZ2VzdCwgZGlnZXN0LCBCYXNlNjRWYWxpZGF0ZVBhZGRp
bmcpKSB7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGVuY29kZWREaWdlc3QuZGlnZXN0
LCBkaWdlc3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CisgICAg
aWYgKGF1dG8gZGlnZXN0ID0gYmFzZTY0RGVjb2RlKGVuY29kZWREaWdlc3QuZGlnZXN0LCBCYXNl
NjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICByZXR1cm4gUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERpZ2VzdC5hbGdvcml0aG0sIFdURk1vdmUo
KmRpZ2VzdCkgfTsKKworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShlbmNv
ZGVkRGlnZXN0LmRpZ2VzdCkpCisgICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QgeyBlbmNvZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZSgqZGlnZXN0KSB9OwogCi0g
ICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGVuY29kZWREaWdlc3QuYWxn
b3JpdGhtLCBXVEZNb3ZlKGRpZ2VzdCkgfTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
CiBzdGF0aWMgUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobSB0b0NyeXB0b0RpZ2VzdEFsZ29y
aXRobShSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG0pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1M
QXJjaGl2ZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw5ICsx
NjcsNyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlCiAKICAgICBm
b3IgKGF1dG8mIHJlc291cmNlIDogcmVzb3VyY2VzKSB7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
Y2xlYXIoKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNvdXJjZUJvdW5k
YXJ5KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQtVHlwZTogIik7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291cmNlLm1pbWVUeXBlKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNvdXJjZUJvdW5kYXJ5LCAiQ29udGVudC1UeXBl
OiAiLCByZXNvdXJjZS5taW1lVHlwZSk7CiAKICAgICAgICAgY29uc3QgY2hhciogY29udGVudEVu
Y29kaW5nID0gbnVsbHB0cjsKICAgICAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSmF2YVNjcmlwdE1JTUVUeXBlKHJlc291cmNlLm1pbWVUeXBlKSB8fCBNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUocmVzb3VyY2UubWltZVR5cGUpKQpAQCAt
MTc3LDExICsxNzUsNyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRl
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZyA9IGJhc2U2NDsKIAot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rp
bmc6ICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjb250ZW50RW5jb2RpbmcpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtTG9jYXRpb246ICIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyZXNvdXJjZS51cmwuc3RyaW5nKCkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcblxyXG4iKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIlxyXG5Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAiLCBjb250ZW50RW5j
b2RpbmcsICJcclxuQ29udGVudC1Mb2NhdGlvbjogIiwgcmVzb3VyY2UudXJsLnN0cmluZygpLCAi
XHJcblxyXG4iKTsKIAogICAgICAgICBhc2NpaVN0cmluZyA9IHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKS51dGY4KCk7CiAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEo
KSwgYXNjaWlTdHJpbmcubGVuZ3RoKCkpOwpAQCAtMTg5LDE1ICsxODMsMTQgQEAgUmVmPFNoYXJl
ZEJ1ZmZlcj4gTUhUTUxBcmNoaXZlOjpnZW5lcmF0ZQogICAgICAgICAvLyBGSVhNRTogaWRlYWxs
eSB3ZSB3b3VsZCBlbmNvZGUgdGhlIGNvbnRlbnQgYXMgYSBzdHJlYW0gd2l0aG91dCBoYXZpbmcg
dG8gZmV0Y2ggaXQgYWxsLgogICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gcmVzb3VyY2UuZGF0
YS0+ZGF0YSgpOwogICAgICAgICBzaXplX3QgZGF0YUxlbmd0aCA9IHJlc291cmNlLmRhdGEtPnNp
emUoKTsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOwogICAgICAgICBpZiAoIXN0
cmNtcChjb250ZW50RW5jb2RpbmcsIHF1b3RlZFByaW50YWJsZSkpIHsKLSAgICAgICAgICAgIHF1
b3RlZFByaW50YWJsZUVuY29kZShkYXRhLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YSk7CisgICAg
ICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBkYXRhTGVuZ3RoKTsKICAgICAgICAgICAg
IG1odG1sRGF0YS0+YXBwZW5kKGVuY29kZWREYXRhLmRhdGEoKSwgZW5jb2RlZERhdGEuc2l6ZSgp
KTsKICAgICAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKCJcclxuIiwgMik7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoIXN0cmNtcChjb250ZW50RW5jb2RpbmcsIGJhc2U2
NCkpOwogICAgICAgICAgICAgLy8gV2UgYXJlIG5vdCBzcGVjaWZ5aW5nIGluc2VydExGcyA9IHRy
dWUgYmVsb3cgYXMgaXQgd291bGQgY3V0IHRoZSBsaW5lcyB3aXRoIExGcyBhbmQgTUhUTUwgcmVx
dWlyZXMgQ1JMRnMuCi0gICAgICAgICAgICBiYXNlNjRFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCwg
ZW5jb2RlZERhdGEpOworICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGJhc2U2NEVuY29k
ZShkYXRhLCBkYXRhTGVuZ3RoKTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhpbXVtTGlu
ZUxlbmd0aCA9IDc2OwogICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKICAgICAgICAgICAg
IHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21o
dG1sL01IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDE2ICsxOTIsMTkgQEAg
UmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gTUhUTUxQYXJzZXI6OnBhcgogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKICAgICBzd2l0Y2ggKG1pbWVIZWFkZXIuY29udGVudFRyYW5zZmVyRW5jb2Rp
bmcoKSkgewotICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OgotICAgICAgICBpZiAoIWJhc2U2
NERlY29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSwgZGF0YSkpIHsKKyAgICBj
YXNlIE1JTUVIZWFkZXI6OkJhc2U2NDogeworICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFz
ZTY0RGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+c2l6ZSgpKTsKKyAgICAgICAgaWYg
KCFkZWNvZGVkRGF0YSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIGJhc2U2NCBj
b250ZW50IGZvciBNSFRNTCBwYXJ0LiIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIH0KKyAgICAgICAgZGF0YSA9IFdURk1vdmUoKmRlY29kZWREYXRhKTsKICAgICAgICAg
YnJlYWs7CisgICAgfQogICAgIGNhc2UgTUlNRUhlYWRlcjo6UXVvdGVkUHJpbnRhYmxlOgotICAg
ICAgICBxdW90ZWRQcmludGFibGVEZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXpl
KCksIGRhdGEpOworICAgICAgICBkYXRhID0gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNvbnRlbnQtPmRhdGEoKSksIGNvbnRlbnQtPnNpemUo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTUlNRUhlYWRlcjo6U2V2ZW5CaXQ6CiAgICAg
Y2FzZSBNSU1FSGVhZGVyOjpCaW5hcnk6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY29j
b2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NvY29hL1ByaXZhdGVDbGlj
a01lYXN1cmVtZW50Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwxMCBAQCBi
b29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBCiB7CiAjaWYgSEFWRShSU0Ff
QlNTQSkKICAgICB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBzZXJ2ZXJQdWJsaWNLZXlEYXRh
OwotICAgICAgICBpZiAoIWJhc2U2NFVSTERlY29kZShzZXJ2ZXJQdWJsaWNLZXlCYXNlNjRVUkws
IHNlcnZlclB1YmxpY0tleURhdGEpKQorICAgICAgICBhdXRvIHNlcnZlclB1YmxpY0tleURhdGEg
PSBiYXNlNjRVUkxEZWNvZGUoc2VydmVyUHVibGljS2V5QmFzZTY0VVJMKTsKKyAgICAgICAgaWYg
KCFzZXJ2ZXJQdWJsaWNLZXlEYXRhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBhdXRvIHNlcnZlclB1YmxpY0tleSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRo
Qnl0ZXM6c2VydmVyUHVibGljS2V5RGF0YS5kYXRhKCkgbGVuZ3RoOnNlcnZlclB1YmxpY0tleURh
dGEuc2l6ZSgpXSk7CisgICAgICAgIGF1dG8gc2VydmVyUHVibGljS2V5ID0gYWRvcHROUyhbW05T
RGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzZXJ2ZXJQdWJsaWNLZXlEYXRhLT5kYXRhKCkgbGVu
Z3RoOnNlcnZlclB1YmxpY0tleURhdGEtPnNpemUoKV0pOwogCiAgICAgICAgIC8vIEZJWE1FKDIy
MjAxOCk6IENoZWNrIGVycm9yLgogICAgICAgICBtX3NvdXJjZVVubGlua2FibGVUb2tlbi5ibGlu
ZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1JTQUJTU0FUb2tlbkJsaW5kZXJJbnN0YW5jZSgpIGlu
aXRXaXRoUHVibGljS2V5OnNlcnZlclB1YmxpY0tleS5nZXQoKSBlcnJvcjpudWxscHRyXSk7CkBA
IC01MCw3ICs1MCw3IEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUEK
ICAgICBpZiAoIW1fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4udmFsdWVCYXNlNjRV
UkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGlu
Z1Rva2VuIGJsaW5kZWRNZXNzYWdlXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLndh
aXRpbmdUb2tlbiBibGluZGVkTWVzc2FnZV0ubGVuZ3RoKTsKKyAgICBtX3NvdXJjZVVubGlua2Fi
bGVUb2tlbi52YWx1ZUJhc2U2NFVSTCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChbbV9z
b3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuIGJsaW5kZWRNZXNzYWdlXS5ieXRlcywg
W21fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBibGluZGVkTWVzc2FnZV0ubGVu
Z3RoKSk7CiAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZXJ2ZXJQ
dWJsaWNLZXlCYXNlNjRVUkwpOwpAQCAtNjUsMTAgKzY1LDEwIEBAIGJvb2wgUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUEKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgewot
ICAgICAgICBWZWN0b3I8dWludDhfdD4gc2VydmVyUmVzcG9uc2VEYXRhOwotICAgICAgICBpZiAo
IWJhc2U2NFVSTERlY29kZShzZXJ2ZXJSZXNwb25zZUJhc2U2NFVSTCwgc2VydmVyUmVzcG9uc2VE
YXRhKSkKKyAgICAgICAgYXV0byBzZXJ2ZXJSZXNwb25zZURhdGEgPSBiYXNlNjRVUkxEZWNvZGUo
c2VydmVyUmVzcG9uc2VCYXNlNjRVUkwpOworICAgICAgICBpZiAoIXNlcnZlclJlc3BvbnNlRGF0
YSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byBzZXJ2ZXJSZXNwb25z
ZSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2VydmVyUmVzcG9uc2VE
YXRhLmRhdGEoKSBsZW5ndGg6c2VydmVyUmVzcG9uc2VEYXRhLnNpemUoKV0pOworICAgICAgICBh
dXRvIHNlcnZlclJlc3BvbnNlID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRl
czpzZXJ2ZXJSZXNwb25zZURhdGEtPmRhdGEoKSBsZW5ndGg6c2VydmVyUmVzcG9uc2VEYXRhLT5z
aXplKCldKTsKIAogICAgICAgICAvLyBGSVhNRSgyMjIwMTgpOiBDaGVjayBlcnJvci4KICAgICAg
ICAgbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiA9IFttX3NvdXJjZVVubGlua2Fi
bGVUb2tlbi53YWl0aW5nVG9rZW4gYWN0aXZhdGVUb2tlbldpdGhTZXJ2ZXJSZXNwb25zZTpzZXJ2
ZXJSZXNwb25zZS5nZXQoKSBlcnJvcjpudWxscHRyXTsKQEAgLTc3LDkgKzc3LDkgQEAgYm9vbCBQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogICAgIH0KIAogICAgIFNvdXJjZVNl
Y3JldFRva2VuIHRva2VuOwotICAgIHRva2VuLnRva2VuQmFzZTY0VVJMID0gV1RGOjpiYXNlNjRV
UkxFbmNvZGUoW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50
XS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50
XS5sZW5ndGgpOwotICAgIHRva2VuLmtleUlEQmFzZTY0VVJMID0gV1RGOjpiYXNlNjRVUkxFbmNv
ZGUoW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRdLmJ5dGVzLCBbbV9z
b3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBrZXlJZF0ubGVuZ3RoKTsKLSAgICB0b2tl
bi5zaWduYXR1cmVCYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxp
bmthYmxlVG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1cmVdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmth
YmxlVG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1cmVdLmxlbmd0aCk7CisgICAgdG9rZW4udG9rZW5C
YXNlNjRVUkwgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW21fc291cmNlVW5saW5rYWJs
ZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50XS5ieXRlcywgW21fc291cmNlVW5saW5rYWJs
ZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50XS5sZW5ndGgpKTsKKyAgICB0b2tlbi5rZXlJ
REJhc2U2NFVSTCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChbbV9zb3VyY2VVbmxpbmth
YmxlVG9rZW4ucmVhZHlUb2tlbiBrZXlJZF0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tl
bi5yZWFkeVRva2VuIGtleUlkXS5sZW5ndGgpKTsKKyAgICB0b2tlbi5zaWduYXR1cmVCYXNlNjRV
UkwgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW21fc291cmNlVW5saW5rYWJsZVRva2Vu
LnJlYWR5VG9rZW4gc2lnbmF0dXJlXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJl
YWR5VG9rZW4gc2lnbmF0dXJlXS5sZW5ndGgpKTsKIAogICAgIG1fc291cmNlU2VjcmV0VG9rZW4g
PSBXVEZNb3ZlKHRva2VuKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YnRvCiAgICAgaWYgKCFz
dHJpbmdUb0VuY29kZS5pc0FsbExhdGluMSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKHN0cmlu
Z1RvRW5jb2RlLmxhdGluMSgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVk
KHN0cmluZ1RvRW5jb2RlLmxhdGluMSgpKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPFN0cmluZz4gQmFz
ZTY0VXRpbGl0aWVzOjphdG9iKGNvbnN0IFN0cmluZyYgZW5jb2RlZFN0cmluZykKQEAgLTQ2LDEx
ICs0NiwxMSBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YXRvCiAgICAg
aWYgKGVuY29kZWRTdHJpbmcuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAot
ICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoZW5jb2RlZFN0cmlu
Zywgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgfCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdM
aW5lcyB8IEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikpCisgICAgYXV0byBkZWNvZGVkRGF0YSA9
IGJhc2U2NERlY29kZShlbmNvZGVkU3RyaW5nLCB7IEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlk
YXRlUGFkZGluZywgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMs
IEJhc2U2NERlY29kZU9wdGlvbnM6OkRpc2NhcmRWZXJ0aWNhbFRhYiB9KTsKKyAgICBpZiAoIWRl
Y29kZWREYXRhKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVy
cm9yIH07CiAKLSAgICByZXR1cm4gU3RyaW5nKG91dC5kYXRhKCksIG91dC5zaXplKCkpOworICAg
IHJldHVybiBTdHJpbmcoZGVjb2RlZERhdGEtPmRhdGEoKSwgZGVjb2RlZERhdGEtPnNpemUoKSk7
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0OCw5ICsxODQ4
LDggQEAgdm9pZCBQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZAogICAgIGlmICh1
cmwucHJvdG9jb2xJc0RhdGEoKSAmJiB1cmwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiZGF0YTp0ZXh0
L2NzcztjaGFyc2V0PXV0Zi04O2Jhc2U2NCwiKSkgewogICAgICAgICBtX2RpZExvYWRVc2VyU3R5
bGVTaGVldCA9IHRydWU7CiAKLSAgICAgICAgVmVjdG9yPGNoYXI+IHN0eWxlU2hlZXRBc1VURjg7
Ci0gICAgICAgIGlmIChiYXNlNjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5z
dHJpbmcoKS5zdWJzdHJpbmcoMzUpKSwgc3R5bGVTaGVldEFzVVRGOCwgQmFzZTY0SWdub3JlU3Bh
Y2VzQW5kTmV3TGluZXMpKQotICAgICAgICAgICAgbV91c2VyU3R5bGVTaGVldCA9IFN0cmluZzo6
ZnJvbVVURjgoc3R5bGVTaGVldEFzVVRGOC5kYXRhKCksIHN0eWxlU2hlZXRBc1VURjguc2l6ZSgp
KTsKKyAgICAgICAgaWYgKGF1dG8gc3R5bGVTaGVldEFzVVRGOCA9IGJhc2U2NERlY29kZShkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnN0cmluZygpLnN1YnN0cmluZygzNSkpLCBCYXNlNjRE
ZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykpCisgICAgICAgICAgICBtX3Vz
ZXJTdHlsZVNoZWV0ID0gU3RyaW5nOjpmcm9tVVRGOChzdHlsZVNoZWV0QXNVVEY4LT5kYXRhKCks
IHN0eWxlU2hlZXRBc1VURjgtPnNpemUoKSk7CiAgICAgfQogCiAgICAgZm9yRWFjaERvY3VtZW50
KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCwxMSBA
QCB2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IGNoYXIqIGRhCiAgICAgQVNTRVJUKGlu
dGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCit2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXBwZW5kKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBsZW5ndGgpOworfQorCiB2b2lkIFNoYXJlZEJ1
ZmZlcjo6YXBwZW5kKFZlY3RvcjxjaGFyPiYmIGRhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0Jl
ZW5Db21iaW5lZEludG9PbmVTZWdtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1No
YXJlZEJ1ZmZlci5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwogICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IGNoYXIqLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QpOwogICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxjaGFyPiYmKTsKIAogICAgIHZvaWQg
Y2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2Ns
ZWFya2V5L0NETUNsZWFyS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5
L0NETUNsZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTIgKzc5LDE1IEBAIHN0YXRp
YyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4KICAgICAgICAgICAgIGlmICgha2V5
VmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBLZXlJ
RFR5cGUga2V5SUREYXRhOwotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUhhbmRsZVZh
bHVlRGF0YTsKLSAgICAgICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsg
a2V5SUREYXRhIH0pIHx8ICFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlWYWx1ZSwgeyBrZXlIYW5k
bGVWYWx1ZURhdGEgfSkpCisgICAgICAgICAgICBhdXRvIGtleUlERGF0YSA9IGJhc2U2NFVSTERl
Y29kZShrZXlJRCk7CisgICAgICAgICAgICBpZiAoIWtleUlERGF0YSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAgICAgYXV0byBrZXlIYW5kbGVWYWx1
ZURhdGEgPSBiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUpOworICAgICAgICAgICAgaWYgKCFrZXlI
YW5kbGVWYWx1ZURhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
ICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5SGFuZGxlOjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNz
aW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3ZlKGtleUhh
bmRsZVZhbHVlRGF0YSkpKTsKKyAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZChLZXlIYW5k
bGU6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlLCBXVEZNb3Zl
KCprZXlJRERhdGEpLCBXVEZNb3ZlKCprZXlIYW5kbGVWYWx1ZURhdGEpKSk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSk7CiAgICAgaWYgKCF2YWxpZEZvcm1hdCkKQEAgLTIx
NSw4ICsyMTgsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiAg
ICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9m
IHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5j
ZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGtleUlkQ291bnQ7IGkrKykgewotICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2
NFVSTEVuY29kZSgmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKTsKLSAg
ICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOworICAgICAgICBrZXlJZHNBcnJh
eS0+cHVzaFN0cmluZyhtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoJmRhdGFbaW5kZXhdLCBD
bGVhcktleTo6S2V5SURTaXplSW5CeXRlcykpKTsKICAgICAgICAgaW5kZXggKz0gQ2xlYXJLZXk6
OktleUlEU2l6ZUluQnl0ZXM7CiAgICAgfQogCkBAIC0yNDMsOCArMjQ1LDcgQEAgc3RhdGljIFJl
ZjxTaGFyZWRCdWZmZXI+IGV4dHJhY3RLZXlJZEZybwogICAgIC8vIFRoZSBmb3JtYXQgaXMgYSBK
U09OIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKICAgICAvLyAia2lk
cyIKICAgICAvLyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5
IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5p
bmcgdGhlIGtleSBJRCB2YWx1ZS4KLSAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVu
Y29kZShpbml0RGF0YS5kYXRhKCksIGluaXREYXRhLnNpemUoKSk7Ci0gICAga2V5SWRzQXJyYXkt
PnB1c2hTdHJpbmcoa2V5SWQpOworICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKG1ha2VTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlZChpbml0RGF0YS5kYXRhKCksIGluaXREYXRhLnNpemUoKSkpKTsK
IAogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtleUlkc0FycmF5KSk7CiAg
ICAgQ1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpAQCAt
NTg3LDcgKzU4OCw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVMK
ICAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsKICAgICAgICAgICAgICAg
ICBBU1NFUlQoa2V5LT5pZCgpLnNpemUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpOwotICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKFdURjo6YmFzZTY0
VVJMRW5jb2RlKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5zaXplKCkpKTsKKyAgICAgICAg
ICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoa2V5
LT5pZCgpLmRhdGEoKSwga2V5LT5pZCgpLnNpemUoKSkpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJvb3RPYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShhcnJheSkpOwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MywxMSArMTEzLDExIEBAIHN0YXRpYyBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+IGV4dHJhY3QK
ICAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFZl
Y3RvcjxjaGFyPiBzaW5mRGF0YTsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NERlY29kZShrZXlJ
RCwgeyBzaW5mRGF0YSB9LCBXVEY6OkJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSkKKyAg
ICAgICAgYXV0byBzaW5mRGF0YSA9IGJhc2U2NERlY29kZShrZXlJRCwgQmFzZTY0RGVjb2RlT3B0
aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpOworICAgICAgICBpZiAoIXNpbmZEYXRhKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc2luZnMudW5jaGVja2VkQXBwZW5kKFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoc2luZkRhdGEpKSk7CisgICAgICAgIHNpbmZzLnVu
Y2hlY2tlZEFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpzaW5mRGF0YSkpKTsK
ICAgICB9CiAKICAgICByZXR1cm4gc2luZnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5t
bQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTcxNSw3ICs3MTUsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lv
bkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgIGlkZW50aWZpZXIgPSBhZG9wdE5TKFtbTlNTdHJp
bmcgYWxsb2NdIGluaXRXaXRoRGF0YTppbml0RGF0YS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZW5j
b2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKICNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5H
X0NFTkNfSU5JVERBVEEpCiAgICAgZWxzZSBpZiAoaW5pdERhdGFUeXBlID09IEluaXREYXRhUmVn
aXN0cnk6OmNlbmNOYW1lKCkpIHsKLSAgICAgICAgU3RyaW5nIHBzc2hTdHJpbmcgPSBiYXNlNjRF
bmNvZGUoaW5pdERhdGEtPmRhdGEoKSwgaW5pdERhdGEtPnNpemUoKSk7CisgICAgICAgIGF1dG8g
cHNzaFN0cmluZyA9IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChpbml0RGF0YS0+ZGF0YSgpLCBp
bml0RGF0YS0+c2l6ZSgpKSk7CiAgICAgICAgIGluaXRpYWxpemF0aW9uRGF0YSA9IFtOU0pTT05T
ZXJpYWxpemF0aW9uIGRhdGFXaXRoSlNPTk9iamVjdDpAeyBAInBzc2giOiAoTlNTdHJpbmcqKXBz
c2hTdHJpbmcgfSBvcHRpb25zOk5TSlNPTldyaXRpbmdQcmV0dHlQcmludGVkIGVycm9yOm5pbF07
CiAgICAgfQogI2VuZGlmCkBAIC04NTAsMTEgKzg1MCwxMSBAQCB2b2lkIENETUluc3RhbmNlU2Vz
c2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgICAgICBpZiAoIWtleUlEU3RyaW5nKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGtleUlEVmVjdG9yOwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoa2V5SURTdHJpbmcs
IGtleUlEVmVjdG9yKSkKKyAgICAgICAgICAgIGF1dG8ga2V5SURWZWN0b3IgPSBiYXNlNjREZWNv
ZGUoa2V5SURTdHJpbmcpOworICAgICAgICAgICAgaWYgKGtleUlEVmVjdG9yKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgYXV0byBrZXlJRCA9IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5SURWZWN0b3IpKTsKKyAgICAgICAgICAgIGF1dG8ga2V5
SUQgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCprZXlJRFZlY3RvcikpOwogICAgICAg
ICAgICAgYXV0byBmb3VuZEluZGV4ID0gbV9jdXJyZW50UmVxdWVzdC52YWx1ZSgpLnJlcXVlc3Rz
LmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIHJlcXVlc3QpIHsKICAgICAgICAgICAgICAgICBhdXRv
IGtleUlEcyA9IGtleUlEc0ZvclJlcXVlc3QocmVxdWVzdC5nZXQoKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGtleUlEcy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IFJlZjxTaGFyZWRCdWZmZXI+
JiBpZCkgewpAQCAtODg1LDEwICs4ODUsMTAgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWly
UGxheVN0cmVhbWluZwogICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZFN0cmluZyA9IHBheWxv
YWRGaW5kUmVzdWx0cy0+dmFsdWUtPmFzU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFw
YXlsb2FkU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHBheWxvYWRWZWN0b3I7Ci0gICAgICAgICAgICAgICAg
aWYgKCFiYXNlNjREZWNvZGUocGF5bG9hZFN0cmluZywgcGF5bG9hZFZlY3RvcikpCisgICAgICAg
ICAgICAgICAgYXV0byBwYXlsb2FkVmVjdG9yID0gYmFzZTY0RGVjb2RlKHBheWxvYWRTdHJpbmcp
OworICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZFZlY3RvcikKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZERhdGEgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKHBheWxvYWRWZWN0b3IpKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHBheWxvYWREYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqcGF5bG9h
ZFZlY3RvcikpOwogICAgICAgICAgICAgICAgIFtyZXF1ZXN0IHByb2Nlc3NDb250ZW50S2V5UmVz
cG9uc2U6W1BBTDo6Z2V0QVZDb250ZW50S2V5UmVzcG9uc2VDbGFzcygpIGNvbnRlbnRLZXlSZXNw
b25zZVdpdGhGYWlyUGxheVN0cmVhbWluZ0tleVJlc3BvbnNlRGF0YTpwYXlsb2FkRGF0YS0+Y3Jl
YXRlTlNEYXRhKCkuZ2V0KCldXTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMTE5NSw4ICsxMTk1LDggQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxh
eVN0cmVhbWluZwogICAgICAgICAgICAgYXV0byBlbnRyeSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICBhdXRvJiBrZXlJRCA9IHJlcXVlc3REYXRhLmZpcnN0OwogICAgICAg
ICAgICAgYXV0byYgcGF5bG9hZCA9IHJlcXVlc3REYXRhLnNlY29uZDsKLSAgICAgICAgICAgIGVu
dHJ5LT5zZXRTdHJpbmcoImtleUlEIiwgYmFzZTY0RW5jb2RlKGtleUlELT5kYXRhKCksIGtleUlE
LT5zaXplKCkpKTsKLSAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoInBheWxvYWQiLCBiYXNl
NjRFbmNvZGUocGF5bG9hZC5nZXQoKS5ieXRlcywgcGF5bG9hZC5nZXQoKS5sZW5ndGgpKTsKKyAg
ICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImtleUlEIiwgbWFrZVN0cmluZyhiYXNlNjRFbmNv
ZGVkKGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKSk7CisgICAgICAgICAgICBlbnRyeS0+
c2V0U3RyaW5nKCJwYXlsb2FkIiwgbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHBheWxvYWQuZ2V0
KCkuYnl0ZXMsIHBheWxvYWQuZ2V0KCkubGVuZ3RoKSkpOwogICAgICAgICAgICAgcmVxdWVzdEpT
T04tPnB1c2hPYmplY3QoV1RGTW92ZShlbnRyeSkpOwogICAgICAgICB9CiAgICAgICAgIGF1dG8g
cmVxdWVzdEJ1ZmZlciA9IHV0ZjhCdWZmZXIocmVxdWVzdEpTT04tPnRvSlNPTlN0cmluZygpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDEwICsxMzAsNyBAQCBTdHJp
bmcgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSCiAgICAgaWYgKGVuY29kZWRJbWFn
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAotICAgIFZlY3RvcjxjaGFy
PiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNv
ZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWlt
ZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygi
ZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChlbmNvZGVkSW1hZ2Uu
ZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpKSk7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
Y3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEw
ICsxNzQsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0CiAKIFN0
cmluZyBkYXRhVVJMKENGRGF0YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewot
ICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRC
eXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEpOwotCi0gICAg
cmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAg
IHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRF
bmNvZGVkKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSkpOwog
fQogCiBTdHJpbmcgZGF0YVVSTChjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnRO
YW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQpOwog
Ci0gICAgU3RyaW5nIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBt
YWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlk
KSwgc2l6ZW9mKGZvbnRVdWlkKSkpOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExG
X0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVV
bmlxdWVGb250TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZv
bnRVdWlkKTsKIAotICAgIFN0cmluZyBmb250TmFtZSA9IGJhc2U2NEVuY29kZShyZWludGVycHJl
dF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZv
bnROYW1lID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpKTsKICAgICBBU1NFUlQoZm9udE5hbWUubGVu
Z3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2Vu
ZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIFN0
cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlmIChTZWNBc24xRW5jb2RlSXRl
bShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwgc2lnbmVkUHVibGljS2V5QW5k
Q2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlKSAh
PSBub0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGJhc2U2NEVu
Y29kZShlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkRhdGEsIGVuY29kZWRTaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuTGVuZ3RoKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhi
YXNlNjRFbmNvZGVkKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwgZW5j
b2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpKTsKIH0KIAogQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIFJlZjxSZXNvdXJjZUhhbmRs
ZT4gY3JlYXRlQmxvYlJlcwogICAgIHJldHVybiBibG9iUmVnaXN0cnkoKS5ibG9iUmVnaXN0cnlJ
bXBsKCktPmNyZWF0ZVJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCk7CiB9CiAKLXN0YXRp
YyB2b2lkIGxvYWRCbG9iUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0Kiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwg
UmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8
Y2hhcj4mIGRhdGEpCitzdGF0aWMgdm9pZCBsb2FkQmxvYlJlc291cmNlU3luY2hyb25vdXNseShO
ZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIGF1dG8qIGJsb2JEYXRh
ID0gYmxvYlJlZ2lzdHJ5KCkuYmxvYlJlZ2lzdHJ5SW1wbCgpLT5nZXRCbG9iRGF0YUZyb21VUkwo
cmVxdWVzdC51cmwoKSk7CiAgICAgQmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KGJsb2JEYXRhLCByZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291
cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3
ICs3Myw3IEBAIG5hbWVzcGFjZSB7CiAKIGNsYXNzIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9h
ZGVyIDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBCbG9iUmVz
b3VyY2VTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYs
IFZlY3RvcjxjaGFyPiYpOworICAgIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291
cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+Jik7CiAKICAgICB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXNw
b25zZSYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwogICAgIHZvaWQgZGlk
RmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKSBmaW5hbDsKQEAgLTg1
LDEwICs4NSwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlc291cmNlRXJyb3ImIG1fZXJy
b3I7CiAgICAgUmVzb3VyY2VSZXNwb25zZSYgbV9yZXNwb25zZTsKLSAgICBWZWN0b3I8Y2hhcj4m
IG1fZGF0YTsKKyAgICBWZWN0b3I8dWludDhfdD4mIG1fZGF0YTsKIH07CiAKLUJsb2JSZXNvdXJj
ZVN5bmNocm9ub3VzTG9hZGVyOjpCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYg
ZGF0YSkKK0Jsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyOjpCbG9iUmVzb3VyY2VTeW5jaHJv
bm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKICAgICA6IG1fZXJyb3IoZXJyb3IpCiAgICAgLCBt
X3Jlc3BvbnNlKHJlc3BvbnNlKQogICAgICwgbV9kYXRhKGRhdGEpCkBAIC0xMjIsNyArMTIyLDcg
QEAgdm9pZCBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUgogCiAgICAgLy8gUmVh
ZCBhbGwgdGhlIGRhdGEuCiAgICAgbV9kYXRhLnJlc2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+KHJl
c3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpKSk7Ci0gICAgc3RhdGljX2Nhc3Q8QmxvYlJl
c291cmNlSGFuZGxlKj4oaGFuZGxlKS0+cmVhZFN5bmMobV9kYXRhLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8aW50PihtX2RhdGEuc2l6ZSgpKSk7CisgICAgc3RhdGljX2Nhc3Q8QmxvYlJlc291cmNlSGFu
ZGxlKj4oaGFuZGxlKS0+cmVhZFN5bmMocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9kYXRhLmRh
dGEoKSksIHN0YXRpY19jYXN0PGludD4obV9kYXRhLnNpemUoKSkpOwogICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CiB9CiAKQEAgLTE0MSw3ICsxNDEsNyBAQCBSZWY8QmxvYlJlc291cmNlSGFuZGxl
PiBCbG9iUmVzb3VyY2VIYW5kCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmxvYlJlc291cmNl
SGFuZGxlKGJsb2JEYXRhLCByZXF1ZXN0LCBjbGllbnQsIHRydWUpKTsKIH0KIAotdm9pZCBCbG9i
UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQmxvYkRhdGEqIGJsb2JE
YXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9y
LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBC
bG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQmxvYkRhdGEqIGJs
b2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVy
cm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQog
ewogICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocmVxdWVzdC5odHRwTWV0
aG9kKCksICJnZXQiKSkgewogICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3Iod2ViS2l0Qmxv
YlJlc291cmNlRG9tYWluLCBzdGF0aWNfY2FzdDxpbnQ+KEVycm9yOjpNZXRob2ROb3RBbGxvd2Vk
KSwgcmVzcG9uc2UudXJsKCksICJSZXF1ZXN0IG1ldGhvZCBtdXN0IGJlIEdFVCIpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhh
bmRsZS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBA
IGNsYXNzIEJsb2JSZXNvdXJjZUhhbmRsZSBmaW5hbCA6IHB1YmxpYyAKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPEJsb2JSZXNvdXJjZUhhbmRsZT4gY3JlYXRlQXN5bmMoQmxvYkRhdGEqLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCopOwogCi0gICAgc3RhdGlj
IHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSosIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+
JiBkYXRhKTsKKyAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEJsb2JE
YXRhKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVz
cG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgdm9pZCBzdGFydCgpOwogICAg
IGludCByZWFkU3luYyhjaGFyKiwgaW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNyZWRlbnRpYWxCYXNlLmgi
CiAKICNpbmNsdWRlICJDcmVkZW50aWFsLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTQsNCArOTUsMTAgQEAgYm9vbCBDcmVkZW50
aWFsQmFzZTo6Y29tcGFyZShjb25zdCBDcmVkZQogICAgIHJldHVybiBDcmVkZW50aWFsOjpwbGF0
Zm9ybUNvbXBhcmUoYSwgYik7CiB9CiAKK1N0cmluZyBDcmVkZW50aWFsQmFzZTo6c2VyaWFsaXph
dGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0Cit7CisgICAgYXV0byBjcmVk
ZW50aWFsU3RyaW5nRGF0YSA9IG1ha2VTdHJpbmcobV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0
ZjgoKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVk
ZW50aWFsU3RyaW5nRGF0YSkpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDYgQEAgZW51bSBDcmVkZW50aWFsUGVyc2lzdGVuY2UgewogfTsK
IAogY2xhc3MgQ3JlZGVudGlhbEJhc2UgewotCiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICAgCkBAIC01Miw2ICs1MSw4IEBAIHB1YmxpYzoKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgQ3JlZGVudGlhbCYs
IGNvbnN0IENyZWRlbnRpYWwmKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxp
emF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkgY29uc3Q7CisKIHByb3RlY3RlZDoK
ICAgICBXRUJDT1JFX0VYUE9SVCBDcmVkZW50aWFsQmFzZSgpOwogICAgIFdFQkNPUkVfRVhQT1JU
IENyZWRlbnRpYWxCYXNlKGNvbnN0IFN0cmluZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNzd29y
ZCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ4LDM2ICsxNDgsMjYgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxE
ZWNvZGVUYXNrPiBjcmVhdAogICAgICk7CiB9CiAKLXN0YXRpYyBib29sIGRlY29kZUJhc2U2NChE
ZWNvZGVUYXNrJiB0YXNrLCBNb2RlIG1vZGUpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBkZWNvZGVCYXNlNjQoY29uc3QgRGVjb2RlVGFzayYgdGFzaywgTW9kZSBtb2RlKQogewot
ICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7Ci0gICAgaWYgKG1vZGUgPT0gTW9kZTo6Rm9yZ2l2aW5n
QmFzZTY0KSB7Ci0gICAgICAgIGF1dG8gdW5lc2NhcGVkU3RyaW5nID0gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKHRhc2suZW5jb2RlZERhdGEudG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKLSAg
ICAgICAgaWYgKCFiYXNlNjREZWNvZGUodW5lc2NhcGVkU3RyaW5nLCBidWZmZXIsIEJhc2U2NFZh
bGlkYXRlUGFkZGluZyB8IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzIHwgQmFzZTY0RGlz
Y2FyZFZlcnRpY2FsVGFiKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2Ug
eworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTW9kZTo6Rm9yZ2l2aW5nQmFzZTY0Ogor
ICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0YXNr
LmVuY29kZWREYXRhKSwgeyBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcsIEJh
c2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzLCBCYXNlNjREZWNvZGVP
cHRpb25zOjpEaXNjYXJkVmVydGljYWxUYWJ9KTsKKworICAgIGNhc2UgTW9kZTo6TGVnYWN5Ogog
ICAgICAgICAvLyBGaXJzdCB0cnkgYmFzZTY0dXJsLgotICAgICAgICBpZiAoIWJhc2U2NFVSTERl
Y29kZSh0YXNrLmVuY29kZWREYXRhLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgYnVmZmVyKSkg
ewotICAgICAgICAgICAgLy8gRGlkbid0IHdvcmssIHRyeSB1bmVzY2FwaW5nIGFuZCBkZWNvZGlu
ZyBhcyBiYXNlNjQuCi0gICAgICAgICAgICBhdXRvIHVuZXNjYXBlZFN0cmluZyA9IGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyh0YXNrLmVuY29kZWREYXRhLnRvU3RyaW5nV2l0aG91dENvcHlpbmco
KSk7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZSh1bmVzY2FwZWRTdHJpbmcsIGJ1ZmZl
ciwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgfCBCYXNlNjREaXNjYXJkVmVydGljYWxU
YWIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAoYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NFVSTERlY29kZSh0YXNrLmVuY29kZWREYXRhKSkK
KyAgICAgICAgICAgIHJldHVybiBkZWNvZGVkRGF0YTsKKyAgICAgICAgLy8gRGlkbid0IHdvcmss
IHRyeSB1bmVzY2FwaW5nIGFuZCBkZWNvZGluZyBhcyBiYXNlNjQuCisgICAgICAgIHJldHVybiBi
YXNlNjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRhc2suZW5jb2RlZERhdGEpLCB7
IEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzLCBCYXNlNjREZWNv
ZGVPcHRpb25zOjpEaXNjYXJkVmVydGljYWxUYWIgfSk7CiAgICAgfQotICAgIGJ1ZmZlci5zaHJp
bmtUb0ZpdCgpOwotICAgIHRhc2sucmVzdWx0LmRhdGEgPSBXVEZNb3ZlKGJ1ZmZlcik7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgZGVjb2RlRXNjYXBlZChEZWNvZGVUYXNr
JiB0YXNrKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBkZWNvZGVFc2NhcGVkKGNvbnN0IERlY29k
ZVRhc2smIHRhc2spCiB7CiAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nRnJvbUNoYXJzZXQodGFz
ay5yZXN1bHQuY2hhcnNldCk7CiAgICAgYXV0byYgZW5jb2RpbmcgPSBlbmNvZGluZ0Zyb21DaGFy
c2V0LmlzVmFsaWQoKSA/IGVuY29kaW5nRnJvbUNoYXJzZXQgOiBVVEY4RW5jb2RpbmcoKTsKLSAg
ICBhdXRvIGJ1ZmZlciA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0YSh0YXNrLmVuY29k
ZWREYXRhLCBlbmNvZGluZyk7Ci0KLSAgICBidWZmZXIuc2hyaW5rVG9GaXQoKTsKLSAgICB0YXNr
LnJlc3VsdC5kYXRhID0gV1RGTW92ZShidWZmZXIpOworICAgIHJldHVybiBkZWNvZGVVUkxFc2Nh
cGVTZXF1ZW5jZXNBc0RhdGEodGFzay5lbmNvZGVkRGF0YSwgZW5jb2RpbmcpOwogfQogCiBzdGF0
aWMgT3B0aW9uYWw8UmVzdWx0PiBkZWNvZGVTeW5jaHJvbm91c2x5KERlY29kZVRhc2smIHRhc2ss
IE1vZGUgbW9kZSkKQEAgLTE4NiwxMSArMTc2LDE0IEBAIHN0YXRpYyBPcHRpb25hbDxSZXN1bHQ+
IGRlY29kZVN5bmNocm9ub3UKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlm
ICh0YXNrLmlzQmFzZTY0KSB7Ci0gICAgICAgIGlmICghZGVjb2RlQmFzZTY0KHRhc2ssIG1vZGUp
KQorICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gZGVjb2RlQmFzZTY0KHRhc2ssIG1vZGUpOwor
ICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgdGFzay5yZXN1bHQuZGF0YSA9IFdURk1vdmUoKmRlY29kZWREYXRhKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgZGVjb2RlRXNjYXBlZCh0YXNrKTsKKyAgICAgICAgdGFzay5yZXN1
bHQuZGF0YSA9IGRlY29kZUVzY2FwZWQodGFzayk7CiAKKyAgICB0YXNrLnJlc3VsdC5kYXRhLnNo
cmlua1RvRml0KCk7CiAgICAgcmV0dXJuIFdURk1vdmUodGFzay5yZXN1bHQpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5o
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Rh
dGFVUkxEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgc3RydWN0IFJl
c3VsdCB7CiAgICAgU3RyaW5nIG1pbWVUeXBlOwogICAgIFN0cmluZyBjaGFyc2V0OwogICAgIFN0
cmluZyBjb250ZW50VHlwZTsKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKIH07CiAKIHVzaW5nIERlY29kZUNvbXBsZXRpb25IYW5kbGVyID0gV1RGOjpG
dW5jdGlvbjx2b2lkIChPcHRpb25hbDxSZXN1bHQ+KT47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxl
OjpmYWlsdXJlVGltZXJGaXJlZCgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZv
aWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVy
cm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9p
ZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJy
b3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7
CiAgICAgaWYgKGF1dG8gY29uc3RydWN0b3IgPSBidWlsdGluUmVzb3VyY2VIYW5kbGVTeW5jaHJv
bm91c0xvYWRlck1hcCgpLmdldChyZXF1ZXN0LnVybCgpLnByb3RvY29sKCkudG9TdHJpbmdXaXRo
b3V0Q29weWluZygpKSkgewogICAgICAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCByZXF1ZXN0LCBz
dG9yZWRDcmVkZW50aWFsc1BvbGljeSwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBjbGFzcyBDdXJsUmVz
b3VyY2VIYW5kbGVEZWxlZ2F0ZTsKIGNsYXNzIFJlc291cmNlSGFuZGxlIDogcHVibGljIFJlZkNv
dW50ZWQ8UmVzb3VyY2VIYW5kbGU+LCBwdWJsaWMgQXV0aGVudGljYXRpb25DbGllbnQgewogcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNy
ZWF0ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNl
SGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlm
ZiwgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCos
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJj
ZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3Jr
aW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVzb3VyY2VIYW5kbGUoKTsKIAog
I2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQ0ZVUkxDT05ORUNUSU9OKQpAQCAtMTkzLDcgKzE5
Myw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFJlZjxSZXNvdXJjZUhhbmRsZT4gKCpCdWlsdGlu
Q29uc3RydWN0b3IpKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5k
bGVDbGllbnQqIGNsaWVudCk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCdWlsdGluQ29uc3Ry
dWN0b3IoY29uc3QgQXRvbVN0cmluZyYgcHJvdG9jb2wsIEJ1aWx0aW5Db25zdHJ1Y3Rvcik7CiAK
LSAgICB0eXBlZGVmIHZvaWQgKCpCdWlsdGluU3luY2hyb25vdXNMb2FkZXIpKE5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ks
IFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsK
KyAgICB0eXBlZGVmIHZvaWQgKCpCdWlsdGluU3luY2hyb25vdXNMb2FkZXIpKE5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ks
IFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRh
KTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlcihjb25z
dCBBdG9tU3RyaW5nJiBwcm90b2NvbCwgQnVpbHRpblN5bmNocm9ub3VzTG9hZGVyKTsKIAogcHJv
dGVjdGVkOgpAQCAtMjEzLDcgKzIxMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY2hlZHVsZUZh
aWx1cmUoRmFpbHVyZVR5cGUpOwogCiAgICAgYm9vbCBzdGFydCgpOwotICAgIHN0YXRpYyB2b2lk
IHBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVy
cm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisgICAgc3RhdGlj
IHZvaWQgcGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0
KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291
cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKIAog
ICAgIHZvaWQgcmVmQXV0aGVudGljYXRpb25DbGllbnQoKSBvdmVycmlkZSB7IHJlZigpOyB9CiAg
ICAgdm9pZCBkZXJlZkF1dGhlbnRpY2F0aW9uQ2xpZW50KCkgb3ZlcnJpZGUgeyBkZXJlZigpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVy
Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVu
dDo6ZGlkUmVjZWl2ZQogCiB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZl
RGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwg
aW50IC8qZW5jb2RlZERhdGFMZW5ndGgqLykKIHsKLSAgICBtX2RhdGEuYXBwZW5kKGRhdGEsIGxl
bmd0aCk7CisgICAgbV9kYXRhLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhKSwgbGVuZ3RoKTsKIH0KIAogdm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlk
RmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGll
bnQuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0QWxsb3dTdG9yZWRDcmVkZW50aWFscyhib29sIGFs
bG93KSB7IG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IGFsbG93OyB9CiAgICAgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9Ci0g
ICAgVmVjdG9yPGNoYXI+JiBtdXRhYmxlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIFZl
Y3Rvcjx1aW50OF90PiYgbXV0YWJsZURhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KICAgICBjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KICAgICBT
eW5jaHJvbm91c0xvYWRlck1lc3NhZ2VRdWV1ZSYgbWVzc2FnZVF1ZXVlKCkgeyByZXR1cm4gbV9t
ZXNzYWdlUXVldWUuZ2V0KCk7IH0KIApAQCAtNzUsNyArNzUsNyBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwogICAgIFJlc291cmNlUmVz
cG9uc2UgbV9yZXNwb25zZTsKLSAgICBWZWN0b3I8Y2hhcj4gbV9kYXRhOworICAgIFZlY3Rvcjx1
aW50OF90PiBtX2RhdGE7CiAgICAgUmVzb3VyY2VFcnJvciBtX2Vycm9yOwogICAgIFJlZjxTeW5j
aHJvbm91c0xvYWRlck1lc3NhZ2VRdWV1ZT4gbV9tZXNzYWdlUXVldWU7CiB9OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNl
SGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NSw5ICs4NSw3IEBAIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPENGRGF0YVIK
IAogc3RhdGljIHZvaWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogewotICAgIFN0cmlu
ZyBhdXRoZW50aWNhdGlvbkhlYWRlciA9ICJCYXNpYyAiICsgYmFzZTY0RW5jb2RlKFN0cmluZyhj
cmVkZW50aWFsLnVzZXIoKSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKSkudXRmOCgpKTsK
LQotICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpBdXRob3Jp
emF0aW9uLCBhdXRoZW50aWNhdGlvbkhlYWRlcik7CisgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGNyZWRlbnRpYWwuc2VyaWFsaXph
dGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpKTsKIH0KIAogUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQpAQCAtNTI0LDcgKzUyMiw3IEBAIHN0
YXRpYyB2b2lkIGVtcHR5UGVyZm9ybSh2b2lkKikKIHsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxz
UG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJy
b3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7
CiAgICAgTE9HKE5ldHdvcmssICJSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5OiVzIHNzdG9yZWRDcmVkZW50aWFsc1BvbGljeToldSIsIHJlcXVlc3QudXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3Vy
Y2VIYW5kbGVDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OnJlc3RhcnRSZXF1ZXN0V2l0aEMKICAgICBkLT5tX2N1cmxSZXF1ZXN0
LT5zdGFydCgpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIEFTU0VSVCghcmVxdWVzdC5pc0VtcHR5KCkpOwpAQCAtNTYyLDkgKzU2Miw5
IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwoKQogCiAgICAgICAgIC8vIGRp
ZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYXVzZSB0aGUgY2xpZW50IHRvIGJlIGRlbGV0ZWQuCiAg
ICAgICAgIGlmIChjbGllbnQoKSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAg
ICAgICAgICAgIGlmIChiYXNlNjREZWNvZGUoZGF0YSwgb3V0LCBCYXNlNjRJZ25vcmVTcGFjZXNB
bmROZXdMaW5lcykgJiYgb3V0LnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgY2xpZW50KCkt
PmRpZFJlY2VpdmVCdWZmZXIodGhpcywgU2hhcmVkQnVmZmVyOjpjcmVhdGUob3V0LmRhdGEoKSwg
b3V0LnNpemUoKSksIG9yaWdpbmFsU2l6ZSk7CisgICAgICAgICAgICBhdXRvIGRlY29kZWREYXRh
ID0gYmFzZTY0RGVjb2RlKGRhdGEsIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0Fu
ZE5ld0xpbmVzKTsKKyAgICAgICAgICAgIGlmIChkZWNvZGVkRGF0YSAmJiBkZWNvZGVkRGF0YS0+
c2l6ZSgpID4gMCkKKyAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcih0
aGlzLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkZWNvZGVkRGF0YS0+ZGF0YSgpLCBkZWNvZGVkRGF0
YS0+c2l6ZSgpKSwgb3JpZ2luYWxTaXplKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAg
ICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyhjaGFyc2V0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1t
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjcsOSArNjcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBzdGF0aWMgdm9pZCBhcHBseUJhc2ljQXV0aG9yaXph
dGlvbkhlYWRlcihSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENyZWRlbnRpYWwmIGNy
ZWRlbnRpYWwpCiB7Ci0gICAgU3RyaW5nIGF1dGhlbnRpY2F0aW9uSGVhZGVyID0gIkJhc2ljICIg
KyBiYXNlNjRFbmNvZGUoU3RyaW5nKGNyZWRlbnRpYWwudXNlcigpICsgIjoiICsgY3JlZGVudGlh
bC5wYXNzd29yZCgpKS51dGY4KCkpOwotCi0gICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGF1dGhlbnRpY2F0aW9uSGVhZGVyKTsKKyAg
ICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlv
biwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkp
OwogfQogCiBzdGF0aWMgTlNPcGVyYXRpb25RdWV1ZSAqb3BlcmF0aW9uUXVldWVGb3JBc3luY0Ns
aWVudHMoKQpAQCAtMzUyLDcgKzM1MCw3IEBAIENGU3RyaW5nUmVmIFJlc291cmNlSGFuZGxlOjpz
eW5jaHJvbm91c0wKICAgICByZXR1cm4gQ0ZTVFIoIldlYkNvcmVTeW5jaHJvbm91c0xvYWRlclJ1
bkxvb3BNb2RlIik7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291
cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50
aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIExPRyhOZXR3b3JrLCAi
UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseTolQCBzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeToldSIsIHJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBk
YXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VIYW5kbGVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG8KICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3Bv
bnNlJiwgVmVjdG9yPGNoYXI+JikKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJl
c291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VS
ZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdv
cmtTZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZGlnZXN0
LT5hZGRCeXRlcyhjZXJ0aWZpY2F0ZURhdGEtPmRhdGEsIGNlcnRpZmljYXRlRGF0YS0+bGVuKTsK
IAogICAgICAgICBhdXRvIGhhc2ggPSBkaWdlc3QtPmNvbXB1dGVIYXNoKCk7Ci0gICAgICAgIHJl
dHVybiBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaGFzaC5kYXRh
KCkpLCBoYXNoLnNpemUoKSk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29k
ZWQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaGFzaC5kYXRhKCkpLCBoYXNoLnNpemUo
KSkpOwogICAgIH0KIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2NlcnRpZmljYXRlczsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1
ZW5jZXMuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDExICsxNTQs
MTEgQEAgU3RyaW5nIGRlY29kZUVzY2FwZVNlcXVlbmNlcyhTdHJpbmdWaWV3IAogICAgIHJldHVy
biByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotaW5saW5lIFZlY3RvcjxjaGFyPiBkZWNvZGVVUkxF
c2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGlu
ZyYgZW5jb2RpbmcpCitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGlu
ZykKIHsKICAgICBBU1NFUlQoZW5jb2RpbmcuaXNWYWxpZCgpKTsKIAotICAgIFZlY3RvcjxjaGFy
PiByZXN1bHQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKICAgICBzaXplX3QgZGVjb2Rl
ZFBvc2l0aW9uID0gMDsKICAgICBzaXplX3Qgc2VhcmNoUG9zaXRpb24gPSAwOwogICAgIHdoaWxl
ICh0cnVlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90
ZWRQcmludGFibGUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhpbXVtTGluZUxlbmd0aCA9IAogCiBzdGF0aWMg
Y29uc3QgY2hhciBjcmxmTGluZUVuZGluZ1tdID0gIlxyXG4iOwogCi1zdGF0aWMgc2l6ZV90IGxl
bmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoY29uc3QgY2hhciogaW5wdXQsIHNpemVfdCBpbnB1dExl
bmd0aCwgc2l6ZV90IGluZGV4KQorc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRpbmdBdElu
ZGV4KGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgsIHNpemVfdCBpbmRl
eCkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGlucHV0
TGVuZ3RoKTsKICAgICBpZiAoaW5wdXRbaW5kZXhdID09ICdcbicpCkBAIC01NSwxOSArNTUsMTkg
QEAgc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4KAogICAgIHJldHVybiAw
OwogfQogCi12b2lkIHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGlu
LCBWZWN0b3I8Y2hhcj4mIG91dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNv
ZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKIHsKLSAgICBxdW90ZWRQcmludGFibGVF
bmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIG91dCk7CisgICAgcmV0dXJuIHF1b3RlZFByaW50
YWJsZUVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7CiB9CiAKLXZvaWQgcXVvdGVk
UHJpbnRhYmxlRW5jb2RlKGNvbnN0IGNoYXIqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgsIFZl
Y3RvcjxjaGFyPiYgb3V0KQorVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQogewotICAgIG91dC5jbGVh
cigpOwotICAgIG91dC5yZXNlcnZlQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOworICAgIFZlY3Rvcjx1
aW50OF90PiBvdXQ7CisgICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5wdXRMZW5ndGgp
OwogICAgIHNpemVfdCBjdXJyZW50TGluZUxlbmd0aCA9IDA7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbnB1dExlbmd0aDsgKytpKSB7CiAgICAgICAgIGJvb2wgaXNMYXN0Q2hhcmFjdGVy
ID0gKGkgPT0gaW5wdXRMZW5ndGggLSAxKTsKLSAgICAgICAgY2hhciBjdXJyZW50Q2hhcmFjdGVy
ID0gaW5wdXRbaV07CisgICAgICAgIHVpbnQ4X3QgY3VycmVudENoYXJhY3RlciA9IGlucHV0W2ld
OwogICAgICAgICBib29sIHJlcXVpcmVzRW5jb2RpbmcgPSBmYWxzZTsKICAgICAgICAgLy8gQWxs
IG5vbi1wcmludGFibGUgQVNDSUkgY2hhcmFjdGVycyBhbmQgPSByZXF1aXJlIGVuY29kaW5nLgog
ICAgICAgICBpZiAoKGN1cnJlbnRDaGFyYWN0ZXIgPCAnICcgfHwgY3VycmVudENoYXJhY3RlciA+
ICd+JyB8fCBjdXJyZW50Q2hhcmFjdGVyID09ICc9JykgJiYgY3VycmVudENoYXJhY3RlciAhPSAn
XHQnKQpAQCAtMTEyLDE4ICsxMTIsMjAgQEAgdm9pZCBxdW90ZWRQcmludGFibGVFbmNvZGUoY29u
c3QgY2hhciogaQogICAgICAgICAgICAgY3VycmVudExpbmVMZW5ndGgrKzsKICAgICAgICAgfQog
ICAgIH0KKworICAgIHJldHVybiBvdXQ7CiB9CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRGVjb2Rl
KGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0KQorVmVjdG9yPHVpbnQ4
X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQog
ewotICAgIHF1b3RlZFByaW50YWJsZURlY29kZShpbi5kYXRhKCksIGluLnNpemUoKSwgb3V0KTsK
KyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6
ZSgpKTsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IGRhdGFMZW5ndGgsIFZlY3RvcjxjaGFyPiYgb3V0KQorVmVjdG9yPHVpbnQ4X3Q+IHF1
b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0
aCkKIHsKLSAgICBvdXQuY2xlYXIoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0OwogICAgIGlm
ICghZGF0YUxlbmd0aCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gb3V0OwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHsKICAgICAgICAgY2hh
ciBjdXJyZW50Q2hhcmFjdGVyID0gZGF0YVtpXTsKQEAgLTE0OSw4ICsxNTEsOSBAQCB2b2lkIHF1
b3RlZFByaW50YWJsZURlY29kZShjb25zdCBjaGFyKiBkCiAgICAgICAgICAgICBvdXQuYXBwZW5k
KGxvd2VyQ2hhcmFjdGVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAg
ICAgIG91dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4odG9BU0NJSUhleFZhbHVlKHVwcGVyQ2hh
cmFjdGVyLCBsb3dlckNoYXJhY3RlcikpKTsKKyAgICAgICAgb3V0LmFwcGVuZCh0b0FTQ0lJSGV4
VmFsdWUodXBwZXJDaGFyYWN0ZXIsIGxvd2VyQ2hhcmFjdGVyKSk7CiAgICAgfQorICAgIHJldHVy
biBvdXQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVk
UHJpbnRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9R
dW90ZWRQcmludGFibGUuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTkgKzI4
LDE2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgUXVvdGVkUHJpbnRhYmxlX2gK
LSNkZWZpbmUgUXVvdGVkUHJpbnRhYmxlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHF1b3RlZFByaW50YWJs
ZUVuY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBWZWN0b3I8Y2hhcj4mKTsKLXZvaWQgcXVvdGVk
UHJpbnRhYmxlRW5jb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QsIFZlY3RvcjxjaGFyPiYpOworVmVj
dG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4m
KTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgdWludDhfdCos
IHNpemVfdCk7CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFy
PiYsIFZlY3RvcjxjaGFyPiYpOwotdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgY2hh
ciosIHNpemVfdCwgVmVjdG9yPGNoYXI+Jik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRh
YmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworVmVjdG9yPHVpbnQ4X3Q+IHF1b3Rl
ZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUXVvdGVkUHJpbnRhYmxlX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJh
dG9yV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBTdHJpbmcgc2lnbmVk
UHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nCiAgICAgICAgIGlmICghQ3J5cHRTaWduQW5kRW5j
b2RlQ2VydGlmaWNhdGUoaENvbnRleHQsIEFUX0tFWUVYQ0hBTkdFLCBYNTA5X0FTTl9FTkNPRElO
RywgWDUwOV9LRVlHRU5fUkVRVUVTVF9UT19CRV9TSUdORUQsICZyZXF1ZXN0SW5mbywgJnNpZ25B
bGdvLCAwLCByZWludGVycHJldF9jYXN0PExQQllURT4oYmluYXJ5LmRhdGEoKSksICZkd0VuY29k
ZWRMZW5ndGgpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAga2V5U3RyaW5nID0gYmFz
ZTY0RW5jb2RlKGJpbmFyeSk7CisgICAgICAgIGtleVN0cmluZyA9IG1ha2VTdHJpbmcoYmFzZTY0
RW5jb2RlZChiaW5hcnkpKTsKICAgICB9IHdoaWxlKDApOwogCiAgICAgaWYgKHBQdWJJbmZvKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3Jh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2
ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNv
bnN0IFMKICAgICBhdXRvIGlucHV0VXRmOCA9IGlucHV0LnV0ZjgoKTsKICAgICBjcnlwdG8tPmFk
ZEJ5dGVzKGlucHV0VXRmOC5kYXRhKCksIGlucHV0VXRmOC5sZW5ndGgoKSk7CiAgICAgYXV0byBo
YXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBXVEY6OmJhc2U2NFVSTEVu
Y29kZShoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJh
c2U2NFVSTEVuY29kZWQoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKSk7CiB9CiAKIFN0cmluZyBT
V1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNvbnN0IFVSTCYgaW5wdXQpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkocmV2aXNpb24gMjc3NjU0KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw2NCBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5p
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0
byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpzZW5kUmVwbHlUb1N5bmNocm9ub3VzUmVxdWVzdCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpmaXJlQ29udmVyc2lvblJlcXVl
c3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29h
Lm1tOgorICAgICAgICAoV2ViS2l0OjphcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcik6Cisg
ICAgICAgICogU2hhcmVkL0FQSS9BUElEYXRhLmg6CisgICAgICAgIChBUEk6OkRhdGE6OmNyZWF0
ZSk6CisgICAgICAgIChBUEk6OkRhdGE6OmZyZWVWZWN0b3JCeXRlcyk6CisgICAgICAgICogU2hh
cmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpzYW5kYm94
RmlsZVBhdGgpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAg
ICAoV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbToKKyAgICAgICAgKHByb2R1Y2VD
bGllbnREYXRhSnNvbik6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2Vi
QXV0b21hdGlvblNlc3Npb25DYWlyby5jcHA6CisgICAgICAgIChXZWJLaXQ6OmJhc2U2NEVuY29k
ZWRQTkdEYXRhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1t
OgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6Ondl
YkNyeXB0b01hc3RlcktleSk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1Jl
bW90ZUluc3BlY3RvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNh
dmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJv
eHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
U2F2ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpz
ZXRCYWNrZW5kQ29tbWFuZHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW06CisgICAgICAgIChXZWJLaXQ6OkxvY2FsQXV0
aGVudGljYXRvckludGVybmFsOjpwcm9kdWNlSGFzaFNldCk6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwpOgorICAgICAgICAoV2ViS2l0OjpMb2Nh
bEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0
OjpNb2NrSGlkQ29ubmVjdGlvbjo6ZmVlZFJlcG9ydHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW06CisgICAgICAgIChX
ZWJLaXQ6Ok1vY2tMb2NhbENvbm5lY3Rpb246OmZpbHRlclJlc3BvbnNlcyBjb25zdCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVUkxT
Y2hlbWVUYXNrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMU2NoZW1lVGFzazo6ZGlkQ29t
cGxldGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViTG9hZGVyU3RyYXRlZ3k6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OmxvYWRTeW5jaHJvbm91c2x5KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5Lmg6
CisKIDIwMjEtMDUtMTggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlc3VycmVjdCBXS1dlYlZpZXcgbWVkaWEgY29udHJvbHMgQVBJIHJlbW92ZWQgaW4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTkyOQpJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiBtZXNzYWdl
cyAtPiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAKICAg
ICBTY2hlZHVsZVJlc291cmNlTG9hZChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzIHJlc291cmNlTG9hZFBhcmFtZXRlcnMpCi0gICAgUGVyZm9ybVN5bmNocm9ub3VzTG9hZChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIHJlc291cmNlTG9hZFBhcmFtZXRl
cnMpIC0+IChXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4gZGF0YSkgU3luY2hyb25vdXMKKyAgICBQZXJm
b3JtU3luY2hyb25vdXNMb2FkKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMg
cmVzb3VyY2VMb2FkUGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3Is
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiBkYXRh
KSBTeW5jaHJvbm91cwogICAgIFRlc3RQcm9jZXNzSW5jb21pbmdTeW5jTWVzc2FnZXNXaGVuV2Fp
dGluZ0ZvclN5bmNSZXBseShXZWJLaXQ6OldlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlEKSAt
PiAoYm9vbCBoYW5kbGVkKSBTeW5jaHJvbm91cwogICAgIExvYWRQaW5nKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykKICAgICBSZW1v
dmVMb2FkSWRlbnRpZmllcih1aW50NjRfdCByZXNvdXJjZUxvYWRJZGVudGlmaWVyKQpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5
MSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRSZXBseVRvU3luY2hyb25vdXNSZXF1ZXMKICAgICBBU1NF
UlQoZGF0YS5kZWxheWVkUmVwbHkpOwogICAgIEFTU0VSVCghZGF0YS5yZXNwb25zZS5pc051bGwo
KSB8fCAhZGF0YS5lcnJvci5pc051bGwoKSk7CiAKLSAgICBWZWN0b3I8Y2hhcj4gcmVzcG9uc2VC
dWZmZXI7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3BvbnNlQnVmZmVyOwogICAgIGlmIChidWZm
ZXIgJiYgYnVmZmVyLT5zaXplKCkpCiAgICAgICAgIHJlc3BvbnNlQnVmZmVyLmFwcGVuZChidWZm
ZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1h
bmFnZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxNSwxNCArMzE1LDE1IEBAIHZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpm
aXIKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBWZWN0b3I8dWludDhfdD4gcHVibGljS2V5RGF0YTsKLSAgICAgICAgV1RGOjpiYXNlNjRVUkxE
ZWNvZGUocHVibGljS2V5QmFzZTY0VVJMLCBwdWJsaWNLZXlEYXRhKTsKKyAgICAgICAgYXV0byBw
dWJsaWNLZXlEYXRhID0gYmFzZTY0VVJMRGVjb2RlKHB1YmxpY0tleUJhc2U2NFVSTCk7CisgICAg
ICAgIGlmICghcHVibGljS2V5RGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBh
dXRvIGNyeXB0byA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdlc3Q6
OkFsZ29yaXRobTo6U0hBXzI1Nik7Ci0gICAgICAgIGNyeXB0by0+YWRkQnl0ZXMocHVibGljS2V5
RGF0YS5kYXRhKCksIHB1YmxpY0tleURhdGEuc2l6ZSgpKTsKKyAgICAgICAgY3J5cHRvLT5hZGRC
eXRlcyhwdWJsaWNLZXlEYXRhLT5kYXRhKCksIHB1YmxpY0tleURhdGEtPnNpemUoKSk7CiAgICAg
ICAgIGF1dG8gcHVibGljS2V5RGF0YUhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAg
ICAgICAgYXV0byBrZXlJRCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHB1YmxpY0tleURhdGFIYXNo
LmRhdGEoKSwgcHVibGljS2V5RGF0YUhhc2guc2l6ZSgpKTsKKyAgICAgICAgYXV0byBrZXlJRCA9
IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChwdWJsaWNLZXlEYXRhSGFzaC5kYXRhKCksIHB1
YmxpY0tleURhdGFIYXNoLnNpemUoKSkpOwogICAgICAgICBpZiAoa2V5SUQgIT0gYXR0cmlidXRp
b24uc291cmNlVW5saW5rYWJsZVRva2VuKCktPmtleUlEQmFzZTY0VVJMKQogICAgICAgICAgICAg
cmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtEYXRhVGFza0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAj
aWYgVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05FVFdPUktfU0VTU0lPTikKIHN0YXRpYyB2
b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKLSAg
ICBTdHJpbmcgYXV0aGVudGljYXRpb25IZWFkZXIgPSAiQmFzaWMgIiArIGJhc2U2NEVuY29kZShT
dHJpbmcoY3JlZGVudGlhbC51c2VyKCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3b3JkKCkpLnV0
ZjgoKSk7Ci0gICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRl
ck5hbWU6OkF1dGhvcml6YXRpb24sIGF1dGhlbnRpY2F0aW9uSGVhZGVyKTsKKyAgICByZXF1ZXN0
LnNldEhUVFBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlv
biwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkp
OwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURhdGEuaAkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNyArNjAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgbWVtY3B5KGNv
cGllZEJ5dGVzLCBieXRlcywgc2l6ZSk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gY3Jl
YXRlV2l0aG91dENvcHlpbmcoY29waWVkQnl0ZXMsIHNpemUsIGZhc3RGcmVlQnl0ZXMsIG51bGxw
dHIpOworICAgICAgICByZXR1cm4gY3JlYXRlV2l0aG91dENvcHlpbmcoY29waWVkQnl0ZXMsIHNp
emUsIFtdICh1bnNpZ25lZCBjaGFyKiBieXRlcywgY29uc3Qgdm9pZCopIHsKKyAgICAgICAgICAg
IGlmIChieXRlcykKKyAgICAgICAgICAgICAgICBmYXN0RnJlZShzdGF0aWNfY2FzdDx2b2lkKj4o
Ynl0ZXMpKTsKKyAgICAgICAgfSwgbnVsbHB0cik7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBS
ZWY8RGF0YT4gY3JlYXRlKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYgYnVmZmVyKQpAQCAt
NjgsNiArNzEsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlci5kYXRh
KCksIGJ1ZmZlci5zaXplKCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBSZWY8RGF0YT4gY3JlYXRl
KFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmIGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGF1dG8gYnVm
ZmVyU2l6ZSA9IGJ1ZmZlci5zaXplKCk7CisgICAgICAgIGF1dG8gYnVmZmVyUG9pbnRlciA9IGJ1
ZmZlci5yZWxlYXNlQnVmZmVyKCkubGVha1B0cigpOworICAgICAgICByZXR1cm4gY3JlYXRlV2l0
aG91dENvcHlpbmcoYnVmZmVyUG9pbnRlciwgYnVmZmVyU2l6ZSwgW10gKHVuc2lnbmVkIGNoYXIq
IGJ5dGVzLCBjb25zdCB2b2lkKikgeworICAgICAgICAgICAgaWYgKGJ5dGVzKQorICAgICAgICAg
ICAgICAgIFdURjo6VmVjdG9yTWFsbG9jOjpmcmVlKGJ5dGVzKTsKKyAgICAgICAgfSwgbnVsbHB0
cik7CisgICAgfQorCiAgICAgc3RhdGljIFJlZlB0cjxEYXRhPiBjcmVhdGUoY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlJik7CiAgICAgCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC05NiwxMiArMTA5
LDYgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZmFzdEZyZWVC
eXRlcyh1bnNpZ25lZCBjaGFyKiBieXRlcywgY29uc3Qgdm9pZCopCi0gICAgewotICAgICAgICBp
ZiAoYnl0ZXMpCi0gICAgICAgICAgICBmYXN0RnJlZShzdGF0aWNfY2FzdDx2b2lkKj4oYnl0ZXMp
KTsKLSAgICB9Ci0KICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBtX2J5dGVzIHsgbnVsbHB0ciB9
OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzE1LDE4ICszMTUsMTMgQEAgc3RhdGljIFN0cmluZyBzYW5kYm94RGlyZWN0b3J5
KFdlYkNvcmU6OgogCiBzdGF0aWMgU3RyaW5nIHNhbmRib3hGaWxlUGF0aChjb25zdCBTdHJpbmcm
IGRpcmVjdG9yeVBhdGgsIGNvbnN0IENTdHJpbmcmIGhlYWRlcikKIHsKLSAgICBTdHJpbmdCdWls
ZGVyIHNhbmRib3hGaWxlOwotICAgIHNhbmRib3hGaWxlLmFwcGVuZChkaXJlY3RvcnlQYXRoKTsK
LSAgICBzYW5kYm94RmlsZS5hcHBlbmQoIi9Db21waWxlZFNhbmRib3grIik7Ci0KICAgICAvLyBN
YWtlIHRoZSBmaWxlbmFtZSBzZW1pLXVuaXF1ZSBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhl
IGhlYWRlci4KKwogICAgIGF1dG8gY3J5cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQ
QUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBjcnlwdG8tPmFkZEJ5
dGVzKGhlYWRlci5kYXRhKCksIGhlYWRlci5sZW5ndGgoKSk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+
IGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7Ci0gICAgU3RyaW5nIHJlYWRhYmxlSGFzaCA9
IFdURjo6YmFzZTY0VVJMRW5jb2RlKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSk7CisgICAgYXV0
byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgc2FuZGJveEZpbGUuYXBwZW5k
KHJlYWRhYmxlSGFzaCk7Ci0gICAgcmV0dXJuIHNhbmRib3hGaWxlLnRvU3RyaW5nKCk7CisgICAg
cmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0aCwgIi9Db21waWxlZFNhbmRib3grIiwgYmFz
ZTY0VVJMRW5jb2RlZChoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpKTsKIH0KIAogc3RhdGljIGJv
b2wgZW5zdXJlU2FuZGJveENhY2hlRGlyZWN0b3J5KGNvbnN0IFNhbmRib3hJbmZvJiBpbmZvKQpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsNyArNTIwLDcgQEAgbWVz
c2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAogICAgIFN0YXJ0VVJMU2NoZW1lVGFzayhzdHJ1Y3Qg
V2ViS2l0OjpVUkxTY2hlbWVUYXNrUGFyYW1ldGVycyBwYXJhbWV0ZXJzKQogICAgIFN0b3BVUkxT
Y2hlbWVUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRp
ZmllcikKLSAgICBMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrKHN0cnVjdCBXZWJLaXQ6OlVS
TFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpIC0+IChXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlIHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBWZWN0b3I8Y2hh
cj4gZGF0YSkgU3luY2hyb25vdXMKKyAgICBMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrKHN0
cnVjdCBXZWJLaXQ6OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpIC0+IChXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVy
cm9yLCBWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKIAogI2lmIEVOQUJMRShERVZJ
Q0VfT1JJRU5UQVRJT04pCiAgICAgU2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlv
bkFjY2VzcyhXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgc3RydWN0IFdlYktpdDo6
RnJhbWVJbmZvRGF0YSBmcmFtZUluZm8sIGJvb2wgbWF5UHJvbXB0KSAtPiAoZW51bTp1aW50OF90
IFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9uU3RhdGUgcGVybWlz
c2lvblN0YXRlKSBBc3luYwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2No
ZW1lSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVS
TFNjaGVtZUhhbmRsZXIuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBAIHN0cnVjdCBVUkxTY2hlbWVUYXNrUGFyYW1ldGVyczsKIGNsYXNzIFdlYlBhZ2VQcm94eTsK
IGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKIAotdXNpbmcgU3luY0xvYWRDb21wbGV0aW9uSGFuZGxl
ciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBWZWN0b3I8Y2hhcj4mKT47
Cit1c2luZyBTeW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpPjsKIAogY2xhc3MgV2ViVVJMU2NoZW1l
SGFuZGxlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlVSTFNjaGVtZUhhbmRsZXI+IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxTY2hlbWVIYW5kbGVyKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEyLDEwICsyMTIsMTAgQEAgYXV0byBXZWJVUkxTY2hlbWVUYXNrOjpkaWRD
b21wbGV0ZShjb25zdAogICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKICAgICAKICAgICBpZiAoaXNT
eW5jKCkpIHsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAgIFZlY3Rvcjx1aW50
OF90PiBkYXRhOwogICAgICAgICBpZiAobV9zeW5jRGF0YSkgewogICAgICAgICAgICAgZGF0YS5y
ZXNpemUobV9zeW5jRGF0YS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIG1lbWNweShkYXRhLmRhdGEo
KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obV9zeW5jRGF0YS0+ZGF0YSgpKSwgbV9z
eW5jRGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9zeW5jRGF0YS0+ZGF0YSgpKSwgbV9zeW5jRGF0
YS0+c2l6ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fc3luY0NvbXBsZXRpb25IYW5kbGVy
KG1fc3luY1Jlc3BvbnNlLCBlcnJvciwgV1RGTW92ZShkYXRhKSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDcgQEAgc3RydWN0IFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzOwogY2xhc3Mg
V2ViVVJMU2NoZW1lSGFuZGxlcjsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIAotdXNpbmcgU3luY0xv
YWRDb21wbGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25z
dCBWZWN0b3I8Y2hhcj4mKT47Cit1c2luZyBTeW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0gQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpPjsKIAog
Y2xhc3MgV2ViVVJMU2NoZW1lVGFzayA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmpl
Y3Q6OlR5cGU6OlVSTFNjaGVtZVRhc2s+LCBwdWJsaWMgSW5zdGFuY2VDb3VudGVkPFdlYlVSTFNj
aGVtZVRhc2s+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxTY2hlbWVUYXNrKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMzOCwxMyArMjMzOCwxNCBAQCB2b2lkIFdLUGFnZVNldFBhZ2VOYXZp
Z2F0aW9uQ2xpZW50KFdLUGFnCiAgICAgICAgICAgICBpZiAobV9jbGllbnQuY29weVdlYkNyeXB0
b01hc3RlcktleSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYodG9JbXBsKG1fY2xp
ZW50LmNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pKSk7CiAKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAj
aWYgRU5BQkxFKFdFQl9DUllQVE8pCi0gICAgICAgICAgICBpZiAoIWdldERlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKKyAgICAgICAgICAgIGF1dG8gbWFzdGVyS2V5ID0gZGVm
YXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgICAgICAgICAgaWYgKCFtYXN0ZXJLZXkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gQVBJOjpE
YXRhOjpjcmVhdGUoV1RGTW92ZSgqbWFzdGVyS2V5KSk7CisjZWxzZQorICAgICAgICAgICAgcmV0
dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKG51bGxwdHIsIDApOwogI2VuZGlmCi0KLSAgICAgICAgICAg
IHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0YSgpLCBtYXN0ZXJLZXkuc2l6
ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIFJlZlB0cjxBUEk6OlN0cmluZz4gc2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKFdlYlBhZ2VQcm94eSYgcGFnZSwgdW5zaWduZWQga2V5
U2l6ZUluZGV4LCBjb25zdCBSZWZQdHI8QVBJOjpTdHJpbmc+JiBjaGFsbGVuZ2VTdHJpbmcsIGNv
bnN0IFVSTCYgdXJsKSBvdmVycmlkZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0J
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3
IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNEYXRhPiBwcm9kdWNlQ2xpZW50RGEKICAgICAgICAgW2Rp
Y3Rpb25hcnkgc2V0T2JqZWN0OkAid2ViYXV0aG4uZ2V0IiBmb3JLZXk6QCJ0eXBlIl07CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6V1RGOjpiYXNlNjRV
UkxFbmNvZGUoY2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2UubGVuZ3RoKSBmb3JLZXk6QCJjaGFs
bGVuZ2UiXTsKKyAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bWFrZVN0cmluZyhiYXNlNjRVUkxF
bmNvZGVkKGNoYWxsZW5nZS5ieXRlcywgY2hhbGxlbmdlLmxlbmd0aCkpIGZvcktleTpAImNoYWxs
ZW5nZSJdOwogICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpvcmlnaW4gZm9yS2V5OkAib3JpZ2lu
Il07CiAKICAgICByZXR1cm4gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0
OmRpY3Rpb25hcnkuZ2V0KCkgb3B0aW9uczpOU0pTT05Xcml0aW5nU29ydGVkS2V5cyBlcnJvcjpu
aWxdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9jYWlyby9XZWJB
dXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL2Nh
aXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIHN0YXRpYyBPcHRpb25hbDxTdHJpbmc+IGJhc2U2NEVuY29kZWRQTkcKICAgICBp
ZiAocG5nRGF0YS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlKHBuZ0RhdGEpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJh
c2U2NEVuY29kZWQocG5nRGF0YSkpOwogfQogCiBPcHRpb25hbDxTdHJpbmc+IFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpwbGF0Zm9ybUdldEJhc2U2NEVuY29kZWRQTkdEYXRhKGNvbnN0IFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTExMzUsMTEgKzExMzUsMTEgQEAgUmVmUHRyPEFQSTo6RGF0YT4gTmF2aWdhdGlvblN0
YXRlOjpOYXZpZwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghbV9uYXZpZ2F0
aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJDcnlwdG9NYXN0ZXJLZXlG
b3JXZWJWaWV3KSB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7Ci0gICAgICAg
IGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQorICAgICAgICBh
dXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICAgICAgaWYg
KCFtYXN0ZXJLZXkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICByZXR1
cm4gQVBJOjpEYXRhOjpjcmVhdGUobWFzdGVyS2V5LmRhdGEoKSwgbWFzdGVyS2V5LnNpemUoKSk7
CisgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShXVEZNb3ZlKCptYXN0ZXJLZXkpKTsK
ICAgICB9CiAKICAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRl
LT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9y
Q2xpZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk0LDEzICsxOTQsMTEgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldHVwQ29u
bmVjdAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcyhjb25z
dCBjaGFyKiBiYWNrZW5kQ29tbWFuZHMpCiB7CiAgICAgaWYgKCFiYWNrZW5kQ29tbWFuZHMgfHwg
IWJhY2tlbmRDb21tYW5kc1swXSkgewotICAgICAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IFN0
cmluZygpOworICAgICAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IHsgfTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVu
Y29kZShiYWNrZW5kQ29tbWFuZHMsIHN0cmxlbihiYWNrZW5kQ29tbWFuZHMpLCBiYXNlNjREYXRh
KTsKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9ICJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBtYWtlU3RyaW5n
KCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChiYWNrZW5kQ29t
bWFuZHMsIHN0cmxlbihiYWNrZW5kQ29tbWFuZHMpKSk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50Ojpjb25uZWN0aW9uRGlkQ2xvc2UoKQpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHlHdGsuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsOSArMTQyLDExIEBAIHZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm0KICAgICBWZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKICAg
ICBDU3RyaW5nIGRhdGFTdHJpbmc7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAg
aWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRk
aW5nKSkKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50LCBC
YXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICBpZiAoIWRlY29k
ZWREYXRhKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkYXRhVmVjdG9yLnNocmlua1Rv
Rml0KCk7CisgICAgICAgIGRlY29kZWREYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgICAgICBkYXRh
VmVjdG9yID0gV1RGTW92ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxzZQogICAgICAgICBkYXRh
U3RyaW5nID0gY29udGVudC51dGY4KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5
R3RrLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQxLDkgKzU0MSwxMSBAQCB2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZShj
CiAgICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7CiAgICAgQ1N0cmluZyBkYXRhU3RyaW5nOwog
ICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRl
bnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgIGF1dG8gZGVj
b2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudCwgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFs
aWRhdGVQYWRkaW5nKTsKKyAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgpOworICAgICAgICBkZWNvZGVk
RGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgZGF0YVZlY3RvciA9IFdURk1vdmUoKmRlY29k
ZWREYXRhKTsKICAgICB9IGVsc2UKICAgICAgICAgZGF0YVN0cmluZyA9IGNvbnRlbnQudXRmOCgp
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1Jl
bW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMCAr
MTc0LDEwIEBAIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm0KICAgICAg
ICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFs
VVJMKTsKIAogICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICAgICAgVmVjdG9y
PGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBv
dXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICBhdXRvIGRlY29kZWREYXRh
ID0gYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0
ZVBhZGRpbmcpOworICAgICAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFk
b3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0
LnNpemUoKV0pOworICAgICAgICAgICAgYXV0byBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0Rh
dGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGVjb2RlZERhdGEtPmRhdGEoKSBsZW5ndGg6ZGVjb2Rl
ZERhdGEtPnNpemUoKV0pOwogICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0
dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbY29u
dGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSVBy
b3h5TWFjLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTUwOSwxMCArNTA5LDEwIEBAIHZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZl
KGMKICAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29w
eSwgYWN0dWFsVVJMKTsKIAogICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRl
bnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICBhdXRvIGRl
Y29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBCYXNlNjREZWNvZGVPcHRpb25z
OjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29u
dGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBs
ZW5ndGg6b3V0LnNpemUoKV0pOworICAgICAgICAgICAgYXV0byBkYXRhQ29udGVudCA9IGFkb3B0
TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGVjb2RlZERhdGEtPmRhdGEoKSBsZW5n
dGg6ZGVjb2RlZERhdGEtPnNpemUoKV0pOwogICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRl
VG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5j
b2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckNs
aWVudDo6c2V0QmFja2VuZENvCiAgICAgaWYgKCFldmVudC5tZXNzYWdlIHx8IGV2ZW50Lm1lc3Nh
Z2UtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9iYWNrZW5kQ29tbWFuZHNV
UkwgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5j
b2RlKGV2ZW50Lm1lc3NhZ2UtPnV0ZjgoKSkpOworICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0g
bWFrZVN0cmluZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQo
ZXZlbnQubWVzc2FnZS0+dXRmOCgpKSk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50
OjpzZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50JiBldmVudCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9D
b2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRv
ci5tbQkod29ya2luZyBjb3B5KQpAQCAtODIsMTAgKzgyLDggQEAgc3RhdGljIGlubGluZSBIYXNo
U2V0PFN0cmluZz4gcHJvZHVjZUhhcwogewogICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CiAg
ICAgZm9yIChhdXRvJiBjcmVkZW50aWFsRGVzY3JpcHRvciA6IGNyZWRlbnRpYWxEZXNjcmlwdG9y
cykgewotICAgICAgICBpZiAoZW1wdHlUcmFuc3BvcnRzT3JDb250YWluKGNyZWRlbnRpYWxEZXNj
cmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKQotICAg
ICAgICAgICAgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IudHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50
aWFsVHlwZTo6UHVibGljS2V5Ci0gICAgICAgICAgICAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci5p
ZFZlY3Rvci5zaXplKCkgPT0gY3JlZGVudGlhbElkTGVuZ3RoKQotICAgICAgICAgICAgcmVzdWx0
LmFkZChiYXNlNjRFbmNvZGUoY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3IuZGF0YSgpLCBj
cmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkpKTsKKyAgICAgICAgaWYgKGVtcHR5
VHJhbnNwb3J0c09yQ29udGFpbihjcmVkZW50aWFsRGVzY3JpcHRvci50cmFuc3BvcnRzLCBBdXRo
ZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IudHlw
ZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5ICYmIGNyZWRlbnRpYWxEZXNj
cmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCisgICAgICAgICAg
ICByZXN1bHQuYWRkKG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChjcmVkZW50aWFsRGVzY3JpcHRv
ci5pZFZlY3Rvci5kYXRhKCksIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSkp
KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI0MSw3ICsyMzksNyBAQCB2b2lk
IExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoCiAgICAgICAgIGlmIChub3RGb3Vu
ZCAhPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZE1hdGNoaW5nKFsmZXhjbHVkZUNyZWRlbnRp
YWxJZHNdIChhdXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgICAgICBhdXRvKiByYXdJZCA9IGNy
ZWRlbnRpYWwtPnJhd0lkKCk7CiAgICAgICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAgICAg
ICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZShyYXdJ
ZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgICAgICByZXR1cm4gZXhj
bHVkZUNyZWRlbnRpYWxJZHMuY29udGFpbnMobWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJhd0lk
LT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKSk7CiAgICAgICAgIH0pKSB7CiAgICAgICAg
ICAgICByZWNlaXZlRXhjZXB0aW9uKHsgTm90QWxsb3dlZEVycm9yLCAiQXQgbGVhc3Qgb25lIGNy
ZWRlbnRpYWwgbWF0Y2hlcyBhbiBlbnRyeSBvZiB0aGUgZXhjbHVkZUNyZWRlbnRpYWxzIGxpc3Qg
aW4gdGhlIHBsYXRmb3JtIGF0dGFjaGVkIGF1dGhlbnRpY2F0b3IuIl9zIH0sIFdlYkF1dGhlbnRp
Y2F0aW9uU3RhdHVzOjpMQUV4Y2x1ZGVDcmVkZW50aWFsc01hdGNoZWQpOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtNTE4LDcgKzUxNiw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjpnZXRB
c3NlcnRpb24oKQogICAgICAgICB9CiAKICAgICAgICAgYXV0byogcmF3SWQgPSBjcmVkZW50aWFs
LT5yYXdJZCgpOwotICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2
NEVuY29kZShyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSkpCisgICAgICAgIGlm
IChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMobWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJh
d0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKSkpCiAgICAgICAgICAgICBhc3NlcnRp
b25SZXNwb25zZXMudW5jaGVja2VkQXBwZW5kKGNyZWRlbnRpYWwuY29weVJlZigpKTsKICAgICB9
CiAgICAgaWYgKGFzc2VydGlvblJlc3BvbnNlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tIaWRDb25uZWN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDE1ICsyNjEsMTMgQEAgdm9pZCBNb2NrSGlk
Q29ubmVjdGlvbjo6ZmVlZFJlcG9ydHMoKQogICAgICAgICBpZiAoc3RhZ2VzTWF0Y2goKSAmJiBt
X2NvbmZpZ3VyYXRpb24uaGlkLT5lcnJvciA9PSBNb2NrOjpIaWRFcnJvcjo6VW5zdXBwb3J0ZWRP
cHRpb25zICYmIChtX3JlcXVpcmVSZXNpZGVudEtleSB8fCBtX3JlcXVpcmVVc2VyVmVyaWZpY2F0
aW9uKSkKICAgICAgICAgICAgIG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3Vy
cmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21tYW5kOjprQ2JvciwgeyBzdGF0aWNfY2FzdDx1
aW50OF90PihDdGFwRGV2aWNlUmVzcG9uc2VDb2RlOjprQ3RhcDJFcnJVbnN1cHBvcnRlZE9wdGlv
bikgfSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHBheWxv
YWQ7CiAgICAgICAgICAgICBBU1NFUlQoIW1fY29uZmlndXJhdGlvbi5oaWQtPnBheWxvYWRCYXNl
NjQuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIGF1dG8gc3RhdHVzID0gYmFzZTY0RGVjb2RlKG1f
Y29uZmlndXJhdGlvbi5oaWQtPnBheWxvYWRCYXNlNjRbMF0sIHBheWxvYWQpOworICAgICAgICAg
ICAgYXV0byBwYXlsb2FkID0gYmFzZTY0RGVjb2RlKG1fY29uZmlndXJhdGlvbi5oaWQtPnBheWxv
YWRCYXNlNjRbMF0pOwogICAgICAgICAgICAgbV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJh
c2U2NC5yZW1vdmUoMCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN0YXR1cywgc3RhdHVz
KTsKICAgICAgICAgICAgIGlmICghbV9jb25maWd1cmF0aW9uLmhpZC0+aXNVMmYpCi0gICAgICAg
ICAgICAgICAgbWVzc2FnZSA9IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hhbm5l
bCwgRmlkb0hpZERldmljZUNvbW1hbmQ6OmtDYm9yLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAg
ICBtZXNzYWdlID0gRmlkb0hpZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRv
SGlkRGV2aWNlQ29tbWFuZDo6a0Nib3IsIFdURk1vdmUoKnBheWxvYWQpKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3NhZ2U6OmNyZWF0ZSht
X2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a01zZywgcGF5bG9hZCk7Cisg
ICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50
Q2hhbm5lbCwgRmlkb0hpZERldmljZUNvbW1hbmQ6OmtNc2csIFdURk1vdmUoKnBheWxvYWQpKTsK
ICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29u
bmVjdGlvbi5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBNb2NrTG9jYWxDb25uZWN0aW9uOjpmaWx0ZXJS
ZXNwb25zZQogICAgIGZvciAoOyBpdHIgIT0gcmVzcG9uc2VzLmVuZCgpOyArK2l0cikgewogICAg
ICAgICBhdXRvKiByYXdJZCA9IGl0ci0+Z2V0KCkucmF3SWQoKTsKICAgICAgICAgQVNTRVJUKHJh
d0lkKTsKLSAgICAgICAgYXV0byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZShyYXdJZC0+ZGF0
YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYXV0byByYXdJZEJhc2U2NCA9IG1h
a2VTdHJpbmcoYmFzZTY0RW5jb2RlZChyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgp
KSk7CiAgICAgICAgIGlmIChyYXdJZEJhc2U2NCA9PSBwcmVmZXJyZWRDcmVkZW50aWFsSWRCYXNl
NjQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJT
dHJhdGVneS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3OCw3ICs1NzgsNyBAQCBPcHRpb25hbDxX
ZWJMb2FkZXJTdHJhdGVneTo6U3luY0xvYWRSZXN1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxv
YWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGllbnRDcmVkZW50aWFsUG9saWN5IGNs
aWVudENyZWRlbnRpYWxQb2xpY3ksICBjb25zdCBGZXRjaE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0
IEhUVFBIZWFkZXJNYXAmIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIFJlc291cmNlRXJyb3ImIGVy
cm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9p
ZCBXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRl
ciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGllbnRDcmVkZW50aWFsUG9saWN5IGNsaWVu
dENyZWRlbnRpYWxQb2xpY3ksICBjb25zdCBGZXRjaE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IEhU
VFBIZWFkZXJNYXAmIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIFJlc291cmNlRXJyb3ImIGVycm9y
LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewog
ICAgIGF1dG8qIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0gdG9XZWJGcmFtZUxvYWRlckNsaWVudChm
cmFtZUxvYWRlci5jbGllbnQoKSk7CiAgICAgYXV0byogd2ViRnJhbWUgPSB3ZWJGcmFtZUxvYWRl
ckNsaWVudCA/ICZ3ZWJGcmFtZUxvYWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IG51bGxwdHI7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRl
clN0cmF0ZWd5LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUy
LDcgQEAgcHVibGljOgogICAgIH5XZWJMb2FkZXJTdHJhdGVneSgpIGZpbmFsOwogICAgIAogICAg
IHZvaWQgbG9hZFJlc291cmNlKFdlYkNvcmU6OkZyYW1lJiwgV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2UmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VM
b2FkZXJPcHRpb25zJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8V2ViQ29yZTo6U3Vi
cmVzb3VyY2VMb2FkZXI+JiYpPiYmKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9h
ZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OkNs
aWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0aW9ucyYsIGNvbnN0
IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkgZmluYWw7CisgICAgdm9p
ZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6OkZyYW1lTG9hZGVyJiwgdW5zaWdu
ZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBXZWJDb3JlOjpG
ZXRjaE9wdGlvbnMmLCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiwgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4m
IGRhdGEpIGZpbmFsOwogICAgIHZvaWQgcGFnZUxvYWRDb21wbGV0ZWQoV2ViQ29yZTo6UGFnZSYp
IGZpbmFsOwogICAgIHZvaWQgYnJvd3NpbmdDb250ZXh0UmVtb3ZlZChXZWJDb3JlOjpGcmFtZSYp
IGZpbmFsOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgU3luY0xv
YWRSZXN1bHQgewogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwog
ICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yOwotICAgICAgICBWZWN0b3I8Y2hh
cj4gZGF0YTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgfTsKICAgICBPcHRp
b25hbDxTeW5jTG9hZFJlc3VsdD4gdHJ5TG9hZGluZ1N5bmNocm9ub3VzbHlVc2luZ1VSTFNjaGVt
ZUhhbmRsZXIoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICAgICBTeW5jTG9hZFJlc3VsdCBsb2Fk
RGF0YVVSTFN5bmNocm9ub3VzbHkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVy
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVy
UHJveHk6OnN0YXJ0TmV3VAogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnN0YXJ0TG9hZGlu
ZygpOwogfQogCi12b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6bG9hZFN5bmNocm9ub3Vz
bHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBsb2FkSWRlbnRpZmllciwgV2ViRnJhbWUmIHdlYkZy
YW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBX
ZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OmxvYWRTeW5jaHJvbm91c2x5KFJlc291cmNlTG9hZElk
ZW50aWZpZXIgbG9hZElkZW50aWZpZXIsIFdlYkZyYW1lJiB3ZWJGcmFtZSwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVzb3VyY2VF
cnJvciYgZXJyb3IsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBkYXRhLnNocmluaygw
KTsKICAgICBpZiAoIW1fd2ViUGFnZS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpM
b2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrKFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHsgbV9p
ZGVudGlmaWVyLCBsb2FkSWRlbnRpZmllciwgcmVxdWVzdCwgd2ViRnJhbWUuaW5mbygpIH0pLCBN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrOjpSZXBs
eShyZXNwb25zZSwgZXJyb3IsIGRhdGEpKSkgewpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmgJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0TmV3VGFzayhXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciYs
IFdlYkZyYW1lJik7CiAgICAgdm9pZCBzdG9wQWxsVGFza3MoKTsKIAotICAgIHZvaWQgbG9hZFN5
bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgV2ViRnJhbWUmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYsIFZlY3RvcjxjaGFyPiYpOworICAgIHZvaWQgbG9hZFN5bmNocm9u
b3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgV2ViRnJhbWUmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYsIFZlY3Rvcjx1aW50OF90PiYpOwogCiAgICAgdWludDY0X3QgaWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogICAgIFdlYlBhZ2UmIHBhZ2UoKSB7
IHJldHVybiBtX3dlYlBhZ2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNv
bT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1v
cmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIuY3BwOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuaDoKKyAgICAgICAgVXBkYXRlIHRvIG1hdGNoIG5ldyBzaWduYXR1cmUuIGNo
YXIgLT4gdWludDhfdC4KKwogMjAyMS0wNS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlbmFtZSBGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSgpIHRvIEZpbGVT
eXN0ZW06OmZpbGVTaXplKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBv
cnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3
IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3UKICAgICB9KTsKIH0K
IAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0
aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3ImIGVycm9y
LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWVM
b2FkZXImIGZyYW1lTG9hZGVyLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0aW9ucyYgb3B0
aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIFJlc291
cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGZyYW1lTG9hZGVyLm5ldHdvcmtp
bmdDb250ZXh0KCksIHJlcXVlc3QsIG9wdGlvbnMuY3JlZGVudGlhbHMgPT0gRmV0Y2hPcHRpb25z
OjpDcmVkZW50aWFsczo6T21pdCA/IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZSA6
IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9h
ZFNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1
cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcigpOwogCiAgICAgdm9pZCBsb2FkUmVzb3VyY2UoV2ViQ29yZTo6RnJh
bWUmLCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYm
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcj4mJik+JiYpIGZpbmFsOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpGcmFtZUxvYWRlciYs
IHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6
OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0aW9ucyYsIGNv
bnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpIGZpbmFsOworICAgIHZvaWQg
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpGcmFtZUxvYWRlciYsIHVuc2lnbmVk
IGxvbmcsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OkNsaWVudENy
ZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0aW9ucyYsIGNvbnN0IFdlYkNv
cmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYpIGZpbmFsOwogICAgIHZvaWQgcGFnZUxv
YWRDb21wbGV0ZWQoV2ViQ29yZTo6UGFnZSYpIGZpbmFsOwogICAgIHZvaWQgYnJvd3NpbmdDb250
ZXh0UmVtb3ZlZChXZWJDb3JlOjpGcmFtZSYpIGZpbmFsOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAyMS0wNS0xOCAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEJhc2U2NCBl
bmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVudGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTkyMAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50Ojp3
cmFwQ3J5cHRvS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6dW53cmFwQ3J5
cHRvS2V5IGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgT3B0aW9uYWwgcmV0dXJu
aW5nIGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpzYXZlKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgT3B0aW9uYWwgcmV0dXJu
aW5nIGJhc2U2NERlY29kZSgpLgorCiAyMDIxLTA1LTE1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIERlbGV0ZSBXZWJTUUwgY29kZSBmcm9tIFdlYktpdDIKSW5k
ZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTA2NiwyOCArMTA2NiwzNCBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdEZ1bGxT
Y3JlZW5Gb3JFCiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojp3cmFwQ3J5cHRvS2V5KGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYga2V5LCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXkpIGNvbnN0CiB7
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICAgICBTRUwgc2VsZWN0b3IgPSBAc2Vs
ZWN0b3Iod2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmlldzopOwogICAgIGlmIChbW21fd2ViVmll
dyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKSB7CiAgICAgICAgIE5T
RGF0YSAqa2V5RGF0YSA9IENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgc2VsZWN0b3IpOworICAg
ICAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogICAgICAgICBtYXN0ZXJLZXkuYXBwZW5k
KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihjb25zdF9jYXN0PHZvaWQqPihba2V5RGF0YSBieXRlc10p
KSwgW2tleURhdGEgbGVuZ3RoXSk7Ci0gICAgfSBlbHNlIGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleShtYXN0ZXJLZXkpKQorICAgICAgICByZXR1cm4gd3JhcFNlcmlhbGl6ZWRDcnlw
dG9LZXkobWFzdGVyS2V5LCBrZXksIHdyYXBwZWRLZXkpOworICAgIH0KKyAgICAKKyAgICBhdXRv
IG1hc3RlcktleSA9IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBpZiAoIW1hc3Rl
cktleSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHdyYXBTZXJpYWxpemVk
Q3J5cHRvS2V5KG1hc3RlcktleSwga2V5LCB3cmFwcGVkS2V5KTsKKyAgICByZXR1cm4gd3JhcFNl
cmlhbGl6ZWRDcnlwdG9LZXkoV1RGTW92ZSgqbWFzdGVyS2V5KSwga2V5LCB3cmFwcGVkS2V5KTsK
IH0KIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnVud3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8
dWludDhfdD4mIHdyYXBwZWRLZXksIFZlY3Rvcjx1aW50OF90PiYga2V5KSBjb25zdAogewotICAg
IFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAgICAgU0VMIHNlbGVjdG9yID0gQHNlbGVjdG9y
KHdlYkNyeXB0b01hc3RlcktleUZvcldlYlZpZXc6KTsKICAgICBpZiAoW1ttX3dlYlZpZXcgVUlE
ZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkgeworICAgICAgICBWZWN0b3I8
dWludDhfdD4gbWFzdGVyS2V5OwogICAgICAgICBOU0RhdGEgKmtleURhdGEgPSBDYWxsVUlEZWxl
Z2F0ZShtX3dlYlZpZXcsIHNlbGVjdG9yKTsKICAgICAgICAgbWFzdGVyS2V5LmFwcGVuZChzdGF0
aWNfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDx2b2lkKj4oW2tleURhdGEgYnl0ZXNdKSksIFtr
ZXlEYXRhIGxlbmd0aF0pOwotICAgIH0gZWxzZSBpZiAoIWdldERlZmF1bHRXZWJDcnlwdG9NYXN0
ZXJLZXkobWFzdGVyS2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
dW53cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIHdyYXBwZWRLZXksIGtleSk7Cisg
ICAgfQogCi0gICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCB3
cmFwcGVkS2V5LCBrZXkpOworICAgIGF1dG8gbWFzdGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleSgpOworICAgIGlmICghbWFzdGVyS2V5KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoV1RGTW92ZSgqbWFzdGVyS2V5KSwg
d3JhcHBlZEtleSwga2V5KTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50
Lm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwOCwxMCAr
NDA4LDEwIEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNhdmUoY28KICAgICAg
ICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFs
VVJMKTsKIAogICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICAgICAgVmVjdG9y
PGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBv
dXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICBhdXRvIGRlY29kZWREYXRh
ID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQsIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFk
ZGluZyk7CisgICAgICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHRO
UyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6
ZSgpXSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0
TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGVjb2RlZERhdGEtPmRhdGEoKSBsZW5n
dGg6ZGVjb2RlZERhdGEtPnNpemUoKV0pOwogICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRl
VG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5j
b2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc2OTcpCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAyMS0w
NS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEJh
c2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVu
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQ
U2VydmVyOjpzdGFydFNlY3VyZUNvbm5lY3Rpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VENQU2VydmVyOjp0ZXN0Q2VydGlmaWNhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQ
U2VydmVyOjp0ZXN0UHJpdmF0ZUtleSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0lTT0JveC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRDb2NvYS5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tOgorICAgICAgICAo
dGVzdElkZW50aXR5Mik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9FdmVudEF0dHJpYnV0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2Nv
Y29hL0hUVFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp3
ZWJTb2NrZXRIYW5kc2hha2UpOgorCiAyMDIxLTA1LTE4ICBBZGl0eWEgS2VlcnRoaSAgPGFrZWVy
dGhpQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1NdIFRpdGxlYmFyIHNlcGFyYXRvciBkb2Vz
bid0IHNob3cgd2hlbiBXS1dlYlZpZXcgaXMgc2Nyb2xsZWQKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVENQU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1RD
UFNlcnZlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQ
U2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDkgKzE1NSw4IEBAIHZvaWQgVENQU2Vy
dmVyOjpzdGFydFNlY3VyZUNvbm5lY3Rpb24oU28KICAgICAibGRZOWF2Y1RHU3did29pdUlxdjBq
VEwxZkhGbnp5M1JITUxEaCtMcHZvbGM1RFNyU0pIQ1A1V3VLMGVlSlhociIKICAgICAiVDVvUXBI
TDl6L2NDRExBS0NLUmE0dVYwZmhFZE9XQnF5UjlwOHk1akp0eWU3MnQ2Q3VGVVY1aXFjcEY0Qkg0
ZiIKICAgICAiajJWTkh3c1NySndrRDRRVUdsVXRIN3Z3blFteUNGeFpNbVdBSmc9PSIpOwotICAg
IFZlY3Rvcjx1aW50OF90PiBjZXJ0REVSOwotICAgIGJhc2U2NERlY29kZShjZXJ0UEVNLCBjZXJ0
REVSLCBXVEY6OkJhc2U2NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwotICAgIHNzbDo6
dW5pcXVlX3B0cjxDUllQVE9fQlVGRkVSPiBjZXJ0KENSWVBUT19CVUZGRVJfbmV3KGNlcnRERVIu
ZGF0YSgpLCBjZXJ0REVSLnNpemUoKSwgbnVsbHB0cikpOworICAgIGF1dG8gY2VydERFUiA9IGJh
c2U2NERlY29kZShjZXJ0UEVNKTsKKyAgICBzc2w6OnVuaXF1ZV9wdHI8Q1JZUFRPX0JVRkZFUj4g
Y2VydChDUllQVE9fQlVGRkVSX25ldyhjZXJ0REVSLT5kYXRhKCksIGNlcnRERVItPnNpemUoKSwg
bnVsbHB0cikpOwogICAgIEFTU0VSVChjZXJ0KTsKIAogICAgIC8vIFRoaXMgaXMgYSB0ZXN0IGtl
eSBmcm9tIEJvcmluZ1NTTC4KQEAgLTQxMiw5ICs0MTEsOCBAQCBWZWN0b3I8dWludDhfdD4gVENQ
U2VydmVyOjp0ZXN0Q2VydGlmaWNhCiAgICAgIkczUEZuWWJXOHVySDBOU0pHL1crLzlEQStZN0Fh
MGNzNFRQcHVCR1owTlUxVzk0T29DTW80bGtPNkgveTZMZXUiCiAgICAgIjN2alpEM3k5a1prN21y
ZTlYSHdrSThNZEs1cz0iKTsKICAgICAKLSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAg
IGJhc2U2NERlY29kZShwZW1FbmNvZGVkQ2VydGlmaWNhdGUsIHZlY3RvciwgV1RGOjpCYXNlNjRE
ZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsKLSAgICByZXR1cm4gdmVjdG9yOworICAgIGF1
dG8gZGVjb2RlZENlcnRpZmljYXRlID0gYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0
ZSk7CisgICAgcmV0dXJuIFdURk1vdmUoKmRlY29kZWRDZXJ0aWZpY2F0ZSk7CiB9CiAKIFZlY3Rv
cjx1aW50OF90PiBUQ1BTZXJ2ZXI6OnRlc3RQcml2YXRlS2V5KCkKQEAgLTQ3MSw5ICs0NjksOCBA
QCBWZWN0b3I8dWludDhfdD4gVENQU2VydmVyOjp0ZXN0UHJpdmF0ZUtlCiAgICAgImRFT2J2Y3BT
aFAyMkl0T1ZqU2FtcFJ1QXVSRzI2WmVtRWJHQ0kzSjZNcXgzeTZtKzZId3VsdHNndGR6RGdyRmUi
CiAgICAgInFKZlU4YmJkYnUycGk0N1k0RmRKSzBITGZmbDVSdz09Iik7CiAKLSAgICBWZWN0b3I8
dWludDhfdD4gdmVjdG9yOwotICAgIGJhc2U2NERlY29kZShwZW1FbmNvZGVkUHJpdmF0ZUtleSwg
dmVjdG9yLCBXVEY6OkJhc2U2NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwotICAgIHJl
dHVybiB2ZWN0b3I7CisgICAgYXV0byBkZWNvZGVkUHJpdmF0ZUtleSA9IGJhc2U2NERlY29kZShw
ZW1FbmNvZGVkUHJpdmF0ZUtleSk7CisgICAgcmV0dXJuIFdURk1vdmUoKmRlY29kZWRQcml2YXRl
S2V5KTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDExIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBiYXNlNjRF
bmNvZGVkU2luZldpdGgKIAogVEVTVChJU09Cb3gsIElTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94
KQogewotICAgIFZlY3Rvcjx1aW50OF90PiBzaW5mQXJyYXk7Ci0gICAgQVNTRVJUX1RSVUUoYmFz
ZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2RlZFNpbmZXaXRoS2V5SUQzKSwgc2luZkFy
cmF5KSk7Ci0gICAgQVNTRVJUX0VRKDk3VUwsIHNpbmZBcnJheS5zaXplKCkpOworICAgIGF1dG8g
c2luZkFycmF5ID0gYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2RlZFNpbmZXaXRo
S2V5SUQzKSk7CisgICAgQVNTRVJUX1RSVUUoc2luZkFycmF5KTsKKyAgICBBU1NFUlRfRVEoOTdV
TCwgc2luZkFycmF5LT5zaXplKCkpOwogCi0gICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6
Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUoc2luZkFycmF5LmRhdGEoKSwgc2luZkFycmF5LnNp
emUoKSksIDAsIHNpbmZBcnJheS5zaXplKCkpOworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZp
ZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKHNpbmZBcnJheS0+ZGF0YSgpLCBzaW5mQXJy
YXktPnNpemUoKSksIDAsIHNpbmZBcnJheS0+c2l6ZSgpKTsKIAogICAgIElTT1Byb3RlY3Rpb25T
Y2hlbWVJbmZvQm94IHNpbmZCb3g7CiAgICAgQVNTRVJUX1RSVUUoc2luZkJveC5yZWFkKHZpZXcp
KTsKQEAgLTc4LDExICs3OCwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciogYmFzZTY0RW5jb2RlZFBz
c2hXaXRoCiAKIFRFU1QoSVNPQm94LCBJU09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3gpCiB7Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IHBzc2hBcnJheTsKLSAgICBBU1NFUlRfVFJVRShiYXNlNjREZWNv
ZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNvZGVkUHNzaFdpdGhBc3NldElkKSwgcHNzaEFycmF5KSk7
Ci0gICAgQVNTRVJUX0VRKDE3NlVMLCBwc3NoQXJyYXkuc2l6ZSgpKTsKKyAgICBhdXRvIHBzc2hB
cnJheSA9IGJhc2U2NERlY29kZShTdHJpbmdWaWV3KGJhc2U2NEVuY29kZWRQc3NoV2l0aEFzc2V0
SWQpKTsKKyAgICBBU1NFUlRfVFJVRShwc3NoQXJyYXkpOworICAgIEFTU0VSVF9FUSgxNzZVTCwg
cHNzaEFycmF5LT5zaXplKCkpOwogCi0gICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3Jl
YXRlKEFycmF5QnVmZmVyOjpjcmVhdGUocHNzaEFycmF5LmRhdGEoKSwgcHNzaEFycmF5LnNpemUo
KSksIDAsIHBzc2hBcnJheS5zaXplKCkpOworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6
OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKHBzc2hBcnJheS0+ZGF0YSgpLCBwc3NoQXJyYXkt
PnNpemUoKSksIDAsIHBzc2hBcnJheS0+c2l6ZSgpKTsKIAogICAgIElTT0ZhaXJQbGF5U3RyZWFt
aW5nUHNzaEJveCBwc3NoQm94OwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRDb2NvYS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0JKHdv
cmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgVEVTVChQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dCwgVmFsaWRCbGluZAogICAgIGF1dG8gKm5zU3BraURhdGEgPSAoX19icmlkZ2UgTlNEYXRhICop
c3BraURhdGEuZ2V0KCk7CiAKICAgICAvLyBDb250aW51ZSB0aGUgdGVzdC4KLSAgICBFWFBFQ1Rf
VFJVRShwY20uY2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJsZVRva2VuKFdURjo6YmFz
ZTY0VVJMRW5jb2RlKG5zU3BraURhdGEuYnl0ZXMsIG5zU3BraURhdGEubGVuZ3RoKSkpOworICAg
IEVYUEVDVF9UUlVFKHBjbS5jYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VVbmxpbmthYmxlVG9rZW4o
bWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKG5zU3BraURhdGEuYnl0ZXMsIG5zU3BraURhdGEu
bGVuZ3RoKSkpKTsKICAgICBhdXRvIHNvdXJjZVNlY3JldFRva2VuID0gcGNtLnRva2VuU2lnbmF0
dXJlSlNPTigpOwogICAgIEVYUEVDVF9FUShzb3VyY2VTZWNyZXRUb2tlbi0+YXNPYmplY3QoKS0+
c2l6ZSgpLCA0dWwpOwogICAgIEVYUEVDVF9TVFJFUShzb3VyY2VTZWNyZXRUb2tlbi0+Z2V0U3Ry
aW5nKCJzb3VyY2VfZW5nYWdlbWVudF90eXBlIl9zKS51dGY4KCkuZGF0YSgpLCAiY2xpY2siKTsK
QEAgLTkwLDE0ICs5MCwxMyBAQCBURVNUKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCBWYWxpZEJs
aW5kCiAgICAgRVhQRUNUX0VRKHNvdXJjZVNlY3JldFRva2VuLT5nZXRJbnRlZ2VyKCJ2ZXJzaW9u
Il9zKSwgMik7CiAKICAgICAvLyBHZW5lcmF0ZSB0aGUgc2lnbmF0dXJlLgotICAgIFZlY3Rvcjx1
aW50OF90PiBibGluZGVkTWVzc2FnZTsKLSAgICBiYXNlNjRVUkxEZWNvZGUoc291cmNlU2VjcmV0
VG9rZW4tPmdldFN0cmluZygic291cmNlX3NlY3JldF90b2tlbiJfcyksIGJsaW5kZWRNZXNzYWdl
KTsKKyAgICBhdXRvIGJsaW5kZWRNZXNzYWdlID0gYmFzZTY0VVJMRGVjb2RlKHNvdXJjZVNlY3Jl
dFRva2VuLT5nZXRTdHJpbmcoInNvdXJjZV9zZWNyZXRfdG9rZW4iX3MpKTsKIAotICAgIGF1dG8g
YmxpbmRlZFNpZ25hdHVyZSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0
aExlbmd0aDogbW9kdWx1c05CeXRlc10pOwotICAgIGNjcnNhYnNzYV9zaWduX2JsaW5kZWRfbWVz
c2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJpdmF0ZUtleSwgYmxpbmRlZE1lc3NhZ2UuZGF0YSgpLCBi
bGluZGVkTWVzc2FnZS5zaXplKCksIHN0YXRpY19jYXN0PHVpbnQ4X3QgKj4oW2JsaW5kZWRTaWdu
YXR1cmUgbXV0YWJsZUJ5dGVzXSksIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0sIHJuZyk7Cisg
ICAgYXV0byBibGluZGVkU2lnbmF0dXJlID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2Nd
IGluaXRXaXRoTGVuZ3RoOm1vZHVsdXNOQnl0ZXNdKTsKKyAgICBjY3JzYWJzc2Ffc2lnbl9ibGlu
ZGVkX21lc3NhZ2UoY2lwaGVyc3VpdGUsIHJzYVByaXZhdGVLZXksIGJsaW5kZWRNZXNzYWdlLT5k
YXRhKCksIGJsaW5kZWRNZXNzYWdlLT5zaXplKCksIHN0YXRpY19jYXN0PHVpbnQ4X3QgKj4oW2Js
aW5kZWRTaWduYXR1cmUgbXV0YWJsZUJ5dGVzXSksIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0s
IHJuZyk7CiAKICAgICAvLyBDb250aW51ZSB0aGUgdGVzdC4KLSAgICBFWFBFQ1RfVFJVRShwY20u
Y2FsY3VsYXRlQW5kVXBkYXRlU291cmNlU2VjcmV0VG9rZW4oV1RGOjpiYXNlNjRVUkxFbmNvZGUo
W2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdKSkpOwor
ICAgIEVYUEVDVF9UUlVFKHBjbS5jYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VTZWNyZXRUb2tlbiht
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBbYmxp
bmRlZFNpZ25hdHVyZSBsZW5ndGhdKSkpKTsKICAgICBhdXRvJiBwZXJzaXN0ZW50VG9rZW4gPSBw
Y20uc291cmNlVW5saW5rYWJsZVRva2VuKCk7CiAgICAgRVhQRUNUX1RSVUUocGVyc2lzdGVudFRv
a2VuKTsKICAgICBFWFBFQ1RfRkFMU0UocGVyc2lzdGVudFRva2VuLT50b2tlbkJhc2U2NFVSTC5p
c0VtcHR5KCkpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29h
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5tbQkocmV2
aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29h
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NCwzNyArNDQs
MzcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLVRFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5V3Jh
cFRlc3QsIEdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpCitURVNUX0YoU2VyaWFsaXplZENy
eXB0b0tleVdyYXBUZXN0LCBEZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KQogewotICAgIFZlY3Rv
cjx1aW50OF90PiBtYXN0ZXJLZXkxOwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmdldERlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5MSkpOworICAgIGF1dG8gbWFzdGVyS2V5MSA9
IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJVRSht
YXN0ZXJLZXkxKTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXkyOwotICAgIEVYUEVD
VF9UUlVFKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5Mikp
OworICAgIGF1dG8gbWFzdGVyS2V5MiA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJL
ZXkoKTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkyKTsKIAogICAgIEVYUEVDVF9UUlVFKG1h
c3RlcktleTEgPT0gbWFzdGVyS2V5Mik7CiB9CiAKIFRFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5
V3JhcFRlc3QsIERlbGV0ZURlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpCiB7Ci0gICAgVmVjdG9y
PHVpbnQ4X3Q+IG1hc3RlcktleTE7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVs
dFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkxKSk7CisgICAgYXV0byBtYXN0ZXJLZXkxID0g
V2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIEVYUEVDVF9UUlVFKG1h
c3RlcktleTEpOwogICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmRlbGV0ZURlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkoKSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5MjsKLSAgICBF
WFBFQ1RfVFJVRShXZWJDb3JlOjpnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3Rlcktl
eTIpKTsKKyAgICBhdXRvIG1hc3RlcktleTIgPSBXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFz
dGVyS2V5KCk7CisgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5Mik7CiAKICAgICBFWFBFQ1RfVFJV
RShtYXN0ZXJLZXkxICE9IG1hc3RlcktleTIpOwogfQogCiBURVNUX0YoU2VyaWFsaXplZENyeXB0
b0tleVdyYXBUZXN0LCBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFVud3JhcCkKIHsKLSAgICBWZWN0
b3I8dWludDhfdD4gbWFzdGVyS2V5OwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmdldERlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSk7CisgICAgYXV0byBtYXN0ZXJLZXkgPSBX
ZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQRUNUX1RSVUUobWFz
dGVyS2V5KTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBjcnlwdG9LZXkoMTYsIDEpOwogICAgIFZl
Y3Rvcjx1aW50OF90PiB3cmFwcGVkS2V5OwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OndyYXBT
ZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwgY3J5cHRvS2V5LCB3cmFwcGVkS2V5KSk7Cisg
ICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6d3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoKm1hc3Rlcktl
eSwgY3J5cHRvS2V5LCB3cmFwcGVkS2V5KSk7CiAgICAgRVhQRUNUX1RSVUUoY3J5cHRvS2V5ICE9
IHdyYXBwZWRLZXkpOwogICAgIC8vIGVuc3VyZSB3cmFwcGVkS2V5IGRvZXNuJ3QgY29udGFpbiBj
cnlwdG9LZXkKICAgICBib29sIG5vdENvbnRhaW5lZCA9IHRydWU7CkBAIC05MCw3ICs5MCw3IEBA
IFRFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFRlc3QsIFNlcmkKICAgICBFWFBFQ1RfVFJV
RShub3RDb250YWluZWQpOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVud3JhcHBlZEtleTsKLSAg
ICBFWFBFQ1RfVFJVRShXZWJDb3JlOjp1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3Rlcktl
eSwgd3JhcHBlZEtleSwgdW53cmFwcGVkS2V5KSk7CisgICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6
dW53cmFwU2VyaWFsaXplZENyeXB0b0tleSgqbWFzdGVyS2V5LCB3cmFwcGVkS2V5LCB1bndyYXBw
ZWRLZXkpKTsKICAgICBFWFBFQ1RfVFJVRSh1bndyYXBwZWRLZXkgPT0gY3J5cHRvS2V5KTsKIH0K
IApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2Uu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9D
aGFsbGVuZ2UubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTMgKzE3
NiwxMCBAQCBSZXRhaW5QdHI8U2VjSWRlbnRpdHlSZWY+IHRlc3RJZGVudGl0eTIoCiAgICAgIkpB
SDJueEtHdXF0QUsyaFdiQUN1NjFSVDVnQXFBdi9oQjlKWW5jMk9pUTJWbWpZa09rMkdFZElqbjB4
U2dYN1ciCiAgICAgIm1JL2hIYnhLTUczUmt2OXExQ3grV0IvdjF0OD0iKTsKIAotICAgIFZlY3Rv
cjx1aW50OF90PiBwcml2YXRlS2V5Qnl0ZXM7Ci0gICAgYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRQ
cml2YXRlS2V5LCBwcml2YXRlS2V5Qnl0ZXMsIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6QmFz
ZTY0RGVmYXVsdCk7CisgICAgYXV0byBwcml2YXRlS2V5Qnl0ZXMgPSBiYXNlNjREZWNvZGUocGVt
RW5jb2RlZFByaXZhdGVLZXkpOworICAgIGF1dG8gY2VydGlmaWNhdGVCeXRlcyA9IGJhc2U2NERl
Y29kZShwZW1FbmNvZGVkQ2VydGlmaWNhdGUpOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGNlcnRp
ZmljYXRlQnl0ZXM7Ci0gICAgYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSwgY2Vy
dGlmaWNhdGVCeXRlcywgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsK
LQotICAgIHJldHVybiBjcmVhdGVUZXN0SWRlbnRpdHkocHJpdmF0ZUtleUJ5dGVzLCBjZXJ0aWZp
Y2F0ZUJ5dGVzKTsKKyAgICByZXR1cm4gY3JlYXRlVGVzdElkZW50aXR5KFdURk1vdmUoKnByaXZh
dGVLZXlCeXRlcyksIFdURk1vdmUoKmNlcnRpZmljYXRlQnl0ZXMpKTsKIH0KIAogc3RhdGljIFJl
dGFpblB0cjxOU1VSTENyZWRlbnRpYWw+IGNyZWRlbnRpYWxXaXRoSWRlbnRpdHkoKQpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJpYnV0aW9uLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRXZl
bnRBdHRyaWJ1dGlvbi5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJpYnV0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xODQsMTMgKzE4NCwxMiBAQCBURVNUKEV2ZW50QXR0cmlidXRpb24sIEZyYXVkUHJldmVudGlv
bikKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZW5kID0gcmVxdWVzdDJTdHJpbmcuZmlu
ZCgnIicsIHN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdG9rZW4gPSByZXF1
ZXN0MlN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsaW5kZWRNZXNzYWdlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZTY0VVJMRGVjb2RlKHRva2VuLCBibGluZGVkTWVzc2FnZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvIGJsaW5kZWRNZXNzYWdlID0gYmFzZTY0VVJMRGVjb2Rl
KHRva2VuKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNjcnNhYnNz
YV9jaXBoZXJzdWl0ZSAqY2lwaGVyc3VpdGUgPSAmY2Nyc2Fic3NhX2NpcGhlcnN1aXRlX3JzYTQw
OTZfc2hhMzg0OwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBibGluZGVkU2lnbmF0dXJl
ID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRXaXRoTGVuZ3RoOiBtb2R1bHVz
TkJ5dGVzXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjY3JzYWJzc2Ffc2lnbl9ibGluZGVk
X21lc3NhZ2UoY2lwaGVyc3VpdGUsIHJzYVByaXZhdGVLZXksIGJsaW5kZWRNZXNzYWdlLmRhdGEo
KSwgYmxpbmRlZE1lc3NhZ2Uuc2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50OF90ICo+KFtibGluZGVk
U2lnbmF0dXJlIG11dGFibGVCeXRlc10pLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdLCBybmcp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmxpbmthYmxlVG9rZW4gPSBXVEY6OmJh
c2U2NFVSTEVuY29kZShbYmxpbmRlZFNpZ25hdHVyZSBieXRlc10sIFtibGluZGVkU2lnbmF0dXJl
IGxlbmd0aF0pOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBibGluZGVkU2lnbmF0dXJl
ID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRXaXRoTGVuZ3RoOm1vZHVsdXNO
Qnl0ZXNdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNjcnNhYnNzYV9zaWduX2JsaW5kZWRf
bWVzc2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJpdmF0ZUtleSwgYmxpbmRlZE1lc3NhZ2UtPmRhdGEo
KSwgYmxpbmRlZE1lc3NhZ2UtPnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAqPihbYmxpbmRl
ZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSwgcm5n
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5saW5rYWJsZVRva2VuID0gbWFrZVN0
cmluZyhiYXNlNjRVUkxFbmNvZGVkKFtibGluZGVkU2lnbmF0dXJlIGJ5dGVzXSwgW2JsaW5kZWRT
aWduYXR1cmUgbGVuZ3RoXSkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeGFtcGxl
IHJlc3BvbnNlOiB7ICJ1bmxpbmthYmxlX3Rva2VuIjogIkFCQ0QiIH0uICJBQkNEIiBzaG91bGQg
YmUgQmFzZTY0VVJMIGVuY29kZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3Bv
bnNlID0gbWFrZVN0cmluZygiSFRUUC8xLjEgMjAwIE9LXHJcbiIKQEAgLTIyMiwxOCArMjIxLDE2
IEBAIFRFU1QoRXZlbnRBdHRyaWJ1dGlvbiwgRnJhdWRQcmV2ZW50aW9uKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICs9IGtleS5sZW5ndGgoKSArIDM7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBlbmQgPSByZXF1ZXN0
NFN0cmluZy5maW5kKCciJywgc3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gdG9rZW4gPSByZXF1ZXN0NFN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVu
ZCAtIHN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8dWludDhfdD4gdG9rZW5WZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmFzZTY0VVJMRGVjb2RlKHRva2VuLCB0b2tlblZlY3Rvcik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0b2tlbkRhdGEgPSBhZG9wdE5TKFtb
TlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnRva2VuVmVjdG9yLmRhdGEoKSBsZW5ndGg6dG9r
ZW5WZWN0b3Iuc2l6ZSgpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byB0b2tlblZlY3RvciA9IGJhc2U2NFVSTERlY29kZSh0b2tlbik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0b2tlbkRhdGEgPSBhZG9wdE5TKFtb
TlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnRva2VuVmVjdG9yLT5kYXRhKCkgbGVuZ3RoOnRv
a2VuVmVjdG9yLT5zaXplKCldKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtleSA9IFN0cmluZygic291cmNlX3NlY3JldF90b2tlbl9zaWduYXR1cmUiKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHJlcXVlc3Q0U3Ry
aW5nLmZpbmQoa2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGFydCArPSBrZXkubGVuZ3RoKCkgKyAzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZCA9IHJlcXVlc3Q0U3RyaW5nLmZpbmQoJyInLCBzdGFydCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzaWduYXR1cmUgPSByZXF1ZXN0
NFN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gc2lnbmF0dXJlVmVjdG9yOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NFVSTERlY29kZShz
aWduYXR1cmUsIHNpZ25hdHVyZVZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBzaWduYXR1cmVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdFdpdGhCeXRlczpzaWduYXR1cmVWZWN0b3IuZGF0YSgpIGxlbmd0aDpzaWduYXR1cmVWZWN0
b3Iuc2l6ZSgpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBzaWduYXR1cmVWZWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUoc2lnbmF0dXJlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHNpZ25hdHVyZURhdGEgPSBhZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNpZ25hdHVyZVZlY3Rvci0+ZGF0YSgp
IGxlbmd0aDpzaWduYXR1cmVWZWN0b3ItPnNpemUoKV0pOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoU2VjS2V5VmVyaWZ5U2lnbmF0dXJlKHNl
Y0tleS5nZXQoKSwga1NlY0tleUFsZ29yaXRobVJTQVNpZ25hdHVyZU1lc3NhZ2VQU1NTSEEzODQs
IChfX2JyaWRnZSBDRkRhdGFSZWYpdG9rZW5EYXRhLmdldCgpLCAoX19icmlkZ2UgQ0ZEYXRhUmVm
KXNpZ25hdHVyZURhdGEuZ2V0KCksIE5VTEwpKTsKIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdlbmVyYXRvci5tbQkocmV2aXNpb24gMjc3NTY5KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw4ICs5OCw4IEBAIFRFU1RfRihTU0xLZXlHZW5lcmF0b3JUZXN0LCBE
ZWZhdWx0VGVzdCkKICAgICBjaGFyIGNoYWxsZW5nZVtdID0gIjAxMjM0NTY3ODkiOwogICAgIGF1
dG8gcmF3UmVzdWx0ID0gV2ViQ29yZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5n
KDAsIGNoYWxsZW5nZSwgdXJsKTsKICAgICBBU1NFUlRfRkFMU0UocmF3UmVzdWx0LmlzRW1wdHko
KSk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRlclJlc3VsdDsKLSAgICBBU1NFUlRfVFJVRShiYXNl
NjREZWNvZGUocmF3UmVzdWx0LCBkZXJSZXN1bHQpKTsKKyAgICBhdXRvIGRlclJlc3VsdCA9IGJh
c2U2NERlY29kZShyYXdSZXN1bHQpOworICAgIEFTU0VSVF9UUlVFKGRlclJlc3VsdCk7CiAKICAg
ICBTZWNBc24xQ29kZXJSZWYgY29kZXIgPSBudWxscHRyOwogICAgIEFTU0VSVF9FUShlcnJTZWNT
dWNjZXNzLCBTZWNBc24xQ29kZXJDcmVhdGUoJmNvZGVyKSk7CkBAIC0xMDgsNyArMTA4LDcgQEAg
VEVTVF9GKFNTTEtleUdlbmVyYXRvclRlc3QsIERlZmF1bHRUZXN0KQogICAgIH0pOwogCiAgICAg
U2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlIGRlY29kZWRSZXN1bHQgeyB9OwotICAgIFNlY0Fz
bjFJdGVtIGRlclJlc3VsdEl0ZW0geyBkZXJSZXN1bHQuc2l6ZSgpLCBkZXJSZXN1bHQuZGF0YSgp
IH07CisgICAgU2VjQXNuMUl0ZW0gZGVyUmVzdWx0SXRlbSB7IGRlclJlc3VsdC0+c2l6ZSgpLCBk
ZXJSZXN1bHQtPmRhdGEoKSB9OwogICAgIEFTU0VSVF9FUShlcnJTZWNTdWNjZXNzLCBTZWNBc24x
RGVjb2RlRGF0YShjb2RlciwgJmRlclJlc3VsdEl0ZW0sIHNpZ25lZFB1YmxpY0tleUFuZENoYWxs
ZW5nZVRlbXBsYXRlLCAmZGVjb2RlZFJlc3VsdCkpOwogCiAgICAgLy8gQ2hlY2sgY2hhbGxlbmdl
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0JKHdvcmtp
bmcgY29weSkKQEAgLTM0NCw3ICszNDQsNyBAQCB2b2lkIENvbm5lY3Rpb246OndlYlNvY2tldEhh
bmRzaGFrZShDb21wCiAgICAgICAgICAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KHdlYlNvY2tldEtleUdVSUQpLCBzdHJsZW4od2ViU29ja2V0S2V5R1VJ
RCkpOwogICAgICAgICAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgICAgICAgICBzaGExLmNv
bXB1dGVIYXNoKGhhc2gpOwotICAgICAgICAgICAgcmV0dXJuIGJhc2U2NEVuY29kZShoYXNoLmRh
dGEoKSwgU0hBMTo6aGFzaFNpemUpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFz
ZTY0RW5jb2RlZChoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpKTsKICAgICAgICAgfTsKIAog
ICAgICAgICBjb25uZWN0aW9uLnNlbmQoSFRUUFJlc3BvbnNlKDEwMSwgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429026</attachid>
            <date>2021-05-18 19:54:27 -0700</date>
            <delta_ts>2021-05-18 21:33:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210518195425.patch</filename>
            <type>text/plain</type>
            <size>191369</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIHd0Zi90ZXh0
L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVybmFsKToKKyAgICAg
ICAgKFdURjo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRV
UkxEZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5oOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgor
ICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNv
ZGUpOgorICAgICAgICAoV1RGOjppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdURjo6Y2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNl
NjRFbmNvZGVkKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlZCk6CisgICAgICAgIChX
VEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpTdHJpbmdUeXBlQWRh
cHRlcik6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRp
b24+OjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNl
NjRTcGVjaWZpY2F0aW9uPjo6aXM4Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlw
ZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46OndyaXRlVG8gY29uc3QpOgorCiAyMDIxLTA1
LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXpl
IC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dURi93
dGYvdGV4dC9CYXNlNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAg
IENvcHlyaWdodCAoQykgMjAwMC0yMDAxIERhd2l0IEFsZW1heWVodSA8YWRhd2l0QGtkZS5vcmc+
CiAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9y
Zz4KLSAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5z
dGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMTMgKzI1
LDE2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbmNsdWRlIDxsaW1pdHMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNvbnN0IGNoYXIgbm9uQWxwaGFiZXQgPSAtMTsK
IAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RW5jTWFwWzY0XSA9IHsKK3N0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgZW5jb2RlTWFwU2l6ZSA9IDY0Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBkZWNvZGVNYXBTaXplID0gMTI4OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRFbmNNYXBb
ZW5jb2RlTWFwU2l6ZV0gPSB7CiAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0
NiwgMHg0NywgMHg0OCwKICAgICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAw
eDRGLCAweDUwLAogICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcs
IDB4NTgsCkBAIC00Miw3ICs0NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVuY01hcFs2
NF0gPSB7CiAgICAgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHgy
RgogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RGVjTWFwWzEyOF0gPSB7CitzdGF0aWMg
Y29uc3QgY2hhciBiYXNlNjREZWNNYXBbZGVjb2RlTWFwU2l6ZV0gPSB7CiAgICAgbm9uQWxwaGFi
ZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCkBAIC02MSw3ICs2NCw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyIGJhc2U2NERlY01hcFsxMjhdID0gewogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJl
dAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IHsKK3N0YXRp
YyBjb25zdCBjaGFyIGJhc2U2NFVSTEVuY01hcFtlbmNvZGVNYXBTaXplXSA9IHsKICAgICAweDQx
LCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAogICAgIDB4NDksIDB4
NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCiAgICAgMHg1MSwgMHg1Miwg
MHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKQEAgLTcyLDcgKzc1LDcgQEAgc3Rh
dGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IAogICAgIDB4MzQsIDB4MzUsIDB4
MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4MkQsIDB4NUYKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFy
IGJhc2U2NFVSTERlY01hcFsxMjhdID0geworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRGVj
TWFwW2RlY29kZU1hcFNpemVdID0gewogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9u
QWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsCiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LApAQCAtOTEsMjQzICs5NCwyMTggQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJM
RGVjTWFwWzEyOF0gPQogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0LCBub25BbHBo
YWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsKIAotc3RhdGlj
IGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3ksIGNvbnN0IGNoYXIgKCZlbmNvZGVNYXApWzY0XSkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVpbnQ4
X3QqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUq
IGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNs
ZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVzdGlu
YXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUo
aW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5ndGgpOwogCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSAib3V0TGVuZ3Ro
IiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkg
cHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0gICAgY29uc3QgdW5zaWduZWQg
bWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwotICAg
IGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRv
IGVuY29kZU1hcCA9IChtYXAgPT0gQmFzZTY0RW5jb2RlTWFwOjpVUkwpID8gYmFzZTY0VVJMRW5j
TWFwIDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9IDA7CiAgICAgdW5zaWdu
ZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0gICAgdW5zaWduZWQgb3V0
TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGluc2VydExGcyA9IChwb2xp
Y3kgPT0gQmFzZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnMgJiYgZGVzdGluYXRpb25MZW5ndGgg
PiBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOwogCi0gICAgLy8gRGVh
bCB3aXRoIHRoZSA3NiBjaGFyYWN0ZXIgcGVyIGxpbmUgbGltaXQgc3BlY2lmaWVkIGluIFJGQyAy
MDQ1LgotICAgIGJvb2wgaW5zZXJ0TEZzID0gKHBvbGljeSA9PSBCYXNlNjRJbnNlcnRMRnMgJiYg
b3V0TGVuZ3RoID4gNzYpOwotICAgIGlmIChpbnNlcnRMRnMpCi0gICAgICAgIG91dExlbmd0aCAr
PSAoKG91dExlbmd0aCAtIDEpIC8gNzYpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBvdXQu
Z3JvdyhvdXRMZW5ndGgpOwotCi0gICAgLy8gMy1ieXRlIHRvIDQtYnl0ZSBjb252ZXJzaW9uICsg
MC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgotICAgIGlmIChsZW4gPiAxKSB7Ci0g
ICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAgIGlmIChpbnB1dExlbmd0aCA+IDEp
IHsKKyAgICAgICAgd2hpbGUgKHNpZHggPCBpbnB1dExlbmd0aCAtIDIpIHsKICAgICAgICAgICAg
IGlmIChpbnNlcnRMRnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoY291bnQgJiYgIShjb3VudCAl
IDc2KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOworICAgICAgICAg
ICAgICAgIGlmIChjb3VudCAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVu
SW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHgrK10gPSAnXG4nOwogICAgICAgICAgICAgICAgIGNvdW50ICs9IDQ7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA+PiAy
KSAmIDA3N107Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lk
eCArIDFdID4+IDQpICYgMDE3KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3NyldOwotICAgICAg
ICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAyXSA+PiA2KSAmIDAw
MykgfCAoKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlk
eCsrXSA9IGVuY29kZU1hcFtkYXRhW3NpZHggKyAyXSAmIDA3N107CisKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXREYXRhQnVmZmVy
W3NpZHggICAgXSA+PiAyKSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZm
ZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPj4gNCkg
JiAwMTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3KV07CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0
RGF0YUJ1ZmZlcltzaWR4ICsgMl0gPj4gNikgJiAwMDMpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lk
eCArIDFdIDw8IDIpICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJb
ZGlkeCsrXSA9IGVuY29kZU1hcFsgIGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0gICAgICAgJiAw
NzddOwogICAgICAgICAgICAgc2lkeCArPSAzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KHNpZHggPCBsZW4pIHsKLSAgICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAh
KGNvdW50ICUgNzYpKQotICAgICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7Ci0KLSAgICAgICAg
b3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzddOwotICAgICAg
ICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2Rl
TWFwWygoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYg
MDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4ICsg
MV0gPDwgMikgJiAwNzddOworICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsKKyAgICAgICAg
aWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExp
bmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlcltkaWR4KytdID0gJ1xuJzsKKworICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlk
eCsrXSA9IGVuY29kZU1hcFsoaW5wdXREYXRhQnVmZmVyW3NpZHhdID4+IDIpICYgMDc3XTsKKyAg
ICAgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHgg
KyAxXSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA8PCA0KSAmIDA3Nyld
OworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBb
IChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA8PCA0KSAm
IDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29k
ZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzddOwogICAgIH0KIAot
ICAgIC8vIEFkZCBwYWRkaW5nCi0gICAgaWYgKHBvbGljeSA9PSBCYXNlNjRVUkxQb2xpY3kpCi0g
ICAgICAgIG91dC5yZXNpemUoZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdoaWxlIChkaWR4
IDwgb3V0LnNpemUoKSkgewotICAgICAgICAgICAgb3V0W2RpZHhdID0gJz0nOwotICAgICAgICAg
ICAgKytkaWR4OwotICAgICAgICB9CisgICAgQVNTRVJUKHBvbGljeSAhPSBCYXNlNjRFbmNvZGVQ
b2xpY3k6OlVSTCB8fCBkaWR4ID09IGRlc3RpbmF0aW9uTGVuZ3RoKTsKKworICAgIHdoaWxlIChk
aWR4IDwgZGVzdGluYXRpb25MZW5ndGgpIHsKKyAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHhdID0gJz0nOworICAgICAgICArK2RpZHg7CiAgICAgfQogfQogCi1TdHJpbmcgYmFzZTY0
RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSkKK3N0YXRpYyBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBWZWN0b3I8
Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5j
TWFwKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwor
ICAgIGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShp
bnB1dExlbmd0aCwgcG9saWN5KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGRlc3RpbmF0aW9uVmVjdG9yKGRlc3Rp
bmF0aW9uTGVuZ3RoKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChpbnB1dERhdGFCdWZmZXIs
IGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvblZlY3Rvci5kYXRhKCksIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uVmVjdG9yOwogfQogCi12b2lk
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFy
PiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQorVmVjdG9yPGNoYXI+IGJhc2U2NEVu
Y29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJh
c2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRh
KSwgbGVuLCBvdXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5j
b2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciks
IGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUo
Y29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBiYXNlNjRFbmNvZGUoY29u
c3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRl
c3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBCYXNlNjRVUkxQb2xpY3ksIGJh
c2U2NFVSTEVuY01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQu
c2l6ZSgpKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm47Cisg
ICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0
RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0
aW9uTGVuZ3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0
IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQpCit2b2lkIGJhc2U2
NEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3Ro
LCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0
aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
ZGF0YSksIGxlbiwgb3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7CisgICAg
aWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGJhc2U2NEVuY29k
ZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZmZXIpLCBp
bnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9s
aWN5LCBtYXApOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBib29s
IGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyJiBvdXQsIHVuc2lnbmVkIG9wdGlvbnMsIGNv
bnN0IGNoYXIgKCZkZWNvZGVNYXApWzEyOF0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBp
bnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICBvdXQuY2xl
YXIoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFp
bnB1dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIFZlY3Rvcjx1aW50OF90PiB7IH07CiAKLSAgICBv
dXQuZ3JvdyhsZW5ndGgpOworICAgIGF1dG8gZGVjb2RlTWFwID0gKG1hcCA9PSBCYXNlNjREZWNv
ZGVNYXA6OlVSTCkgPyBiYXNlNjRVUkxEZWNNYXAgOiBiYXNlNjREZWNNYXA7CisKKyAgICBWZWN0
b3I8dWludDhfdD4gZGVzdGluYXRpb24oaW5wdXRMZW5ndGgpOwogCiAgICAgdW5zaWduZWQgZXF1
YWxzU2lnbkNvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBvdXRMZW5ndGggPSAwOwotICAgIGJvb2wg
aGFkRXJyb3IgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbmd0
aDsgKytpZHgpIHsKLSAgICAgICAgdW5zaWduZWQgY2ggPSBkYXRhW2lkeF07CisgICAgdW5zaWdu
ZWQgZGVzdGluYXRpb25MZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4
IDwgaW5wdXRMZW5ndGg7ICsraWR4KSB7CisgICAgICAgIHVuc2lnbmVkIGNoID0gaW5wdXREYXRh
QnVmZmVyW2lkeF07CiAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKICAgICAgICAgICAgICsrZXF1
YWxzU2lnbkNvdW50OwogICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIG5ldmVyIGJlIG1vcmUg
dGhhbiAyIHBhZGRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChvcHRpb25zICYgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKLSAgICAgICAgICAg
ICAgICBoYWRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAob3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRp
bmcpICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y2hhciBkZWNvZGVkQ2hhcmFjdGVyID0gY2ggPCBXVEZfQVJSQVlfTEVOR1RIKGRlY29kZU1hcCkg
PyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFiZXQ7CisgICAgICAgICAgICBjaGFyIGRlY29kZWRD
aGFyYWN0ZXIgPSBjaCA8IGRlY29kZU1hcFNpemUgPyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFi
ZXQ7CiAgICAgICAgICAgICBpZiAoZGVjb2RlZENoYXJhY3RlciAhPSBub25BbHBoYWJldCkgewot
ICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaGFkRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3V0W291dExlbmd0aCsrXSA9IGRlY29kZWRDaGFy
YWN0ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucyAmIEJhc2U2NElnbm9yZVNw
YWNlc0FuZE5ld0xpbmVzKQotICAgICAgICAgICAgICAgIHx8ICghaXNMYXRpbjEoY2gpIHx8ICFp
c0FTQ0lJU3BhY2UoY2gpIHx8ICgob3B0aW9ucyAmIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikg
JiYgY2ggPT0gJ1x2JykpKSB7Ci0gICAgICAgICAgICAgICAgaGFkRXJyb3IgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAg
ICAgZGVzdGluYXRpb25bZGVzdGluYXRpb25MZW5ndGgrK10gPSBkZWNvZGVkQ2hhcmFjdGVyOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRp
b25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykgfHwgKCFpc0xhdGluMShjaCkgfHwgIWlzQVND
SUlTcGFjZShjaCkgfHwgKG9wdGlvbnMuY29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlz
Y2FyZFZlcnRpY2FsVGFiKSAmJiBjaCA9PSAnXHYnKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Ly8gTWFrZSBzdXJlIHdlIHNocmluayBiYWNrIHRoZSBWZWN0b3IgYmVmb3JlIHJldHVybmluZy4g
b3V0TGVuZ3RoIG1heSBiZSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQKKyAgICAvLyBNYWtlIHN1cmUg
d2Ugc2hyaW5rIGJhY2sgdGhlIFZlY3RvciBiZWZvcmUgcmV0dXJuaW5nLiBkZXN0aW5hdGlvbkxl
bmd0aCBtYXkgYmUgc2hvcnRlciB0aGFuIGV4cGVjdGVkCiAgICAgLy8gaW4gY2FzZSBvZiBlcnJv
ciBvciBpbiBjYXNlIG9mIGlnbm9yZWQgc3BhY2VzLgotICAgIGlmIChvdXRMZW5ndGggPCBvdXQu
c2l6ZSgpKQotICAgICAgICBvdXQuc2hyaW5rKG91dExlbmd0aCk7Ci0KLSAgICBpZiAoaGFkRXJy
b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGggPCBk
ZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNocmluayhkZXN0aW5hdGlv
bkxlbmd0aCk7CiAKLSAgICBpZiAoIW91dExlbmd0aCkKLSAgICAgICAgcmV0dXJuICFlcXVhbHNT
aWduQ291bnQ7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkgeworICAgICAgICBpZiAoIWVx
dWFsc1NpZ25Db3VudCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IHJldHVybiBWZWN0b3I8dWludDhfdD4geyB9OworICAgIH0KIAogICAgIC8vIFRoZSBzaG91bGQg
YmUgbm8gcGFkZGluZyBpZiBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiA0LgotICAgIC8vIFdlIHVz
ZSAob3V0TGVuZ3RoICsgZXF1YWxzU2lnbkNvdW50KSBpbnN0ZWFkIG9mIGxlbmd0aCBiZWNhdXNl
IHdlIGRvbid0IHdhbnQgdG8gYWNjb3VudCBmb3IgaWdub3JlZCBjaGFyYWN0ZXJzIChpLmUuIHNw
YWNlcykuCi0gICAgaWYgKG9wdGlvbnMgJiBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgJiYgZXF1YWxz
U2lnbkNvdW50ICYmIChvdXRMZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIC8vIFdlIHVzZSAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNT
aWduQ291bnQpIGluc3RlYWQgb2YgbGVuZ3RoIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhY2Nv
dW50IGZvciBpZ25vcmVkIGNoYXJhY3RlcnMgKGkuZS4gc3BhY2VzKS4KKyAgICBpZiAob3B0aW9u
cy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpICYmIGVxdWFs
c1NpZ25Db3VudCAmJiAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFZhbGlkIGRhdGEgaXMgKG4g
KiA0ICsgWzAsMiwzXSkgY2hhcmFjdGVycyBsb25nLgotICAgIGlmICgob3V0TGVuZ3RoICUgNCkg
PT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoZGVzdGluYXRpb25MZW5ndGgg
JSA0KSA9PSAxKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIC8vIDQt
Ynl0ZSB0byAzLWJ5dGUgY29udmVyc2lvbgotICAgIG91dExlbmd0aCAtPSAob3V0TGVuZ3RoICsg
MykgLyA0OwotICAgIGlmICghb3V0TGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVzdGluYXRpb25MZW5ndGggLT0gKGRlc3RpbmF0aW9uTGVuZ3RoICsgMykgLyA0OworICAgIGlm
ICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICB1bnNpZ25lZCBzaWR4ID0gMDsKICAgICB1bnNpZ25lZCBkaWR4ID0gMDsKLSAgICBpZiAob3V0
TGVuZ3RoID4gMSkgewotICAgICAgICB3aGlsZSAoZGlkeCA8IG91dExlbmd0aCAtIDIpIHsKLSAg
ICAgICAgICAgIG91dFtkaWR4XSA9ICgoKG91dFtzaWR4XSA8PCAyKSAmIDI1NSkgfCAoKG91dFtz
aWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsKLSAgICAgICAgICAgIG91dFtkaWR4ICsgMV0gPSAoKChv
dXRbc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgob3V0W3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OwotICAgICAgICAgICAgb3V0W2RpZHggKyAyXSA9ICgoKG91dFtzaWR4ICsgMl0gPDwgNikgJiAy
NTUpIHwgKG91dFtzaWR4ICsgM10gJiAwNzcpKTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGgg
PiAxKSB7CisgICAgICAgIHdoaWxlIChkaWR4IDwgZGVzdGluYXRpb25MZW5ndGggLSAyKSB7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbltkaWR4ICAgIF0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICAg
IF0gPDwgMikgJiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2RpZHggKyAxXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHgg
KyAxXSA8PCA0KSAmIDI1NSkgfCAoKGRlc3RpbmF0aW9uW3NpZHggKyAyXSA+PiAyKSAmIDAxNykp
OworICAgICAgICAgICAgZGVzdGluYXRpb25bZGlkeCArIDJdID0gKCgoZGVzdGluYXRpb25bc2lk
eCArIDJdIDw8IDYpICYgMjU1KSB8ICAoZGVzdGluYXRpb25bc2lkeCArIDNdICAgICAgICYgMDc3
KSk7CiAgICAgICAgICAgICBzaWR4ICs9IDQ7CiAgICAgICAgICAgICBkaWR4ICs9IDM7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2Rp
ZHhdID0gKCgob3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHggKyAxXSA+PiA0KSAm
IDAwMykpOwotCi0gICAgaWYgKCsrZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2RpZHhd
ID0gKCgob3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikg
JiAwMTcpKTsKKyAgICBpZiAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0
aW5hdGlvbltkaWR4XSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggICAgXSA8PCAyKSAmIDI1NSkgfCAo
KGRlc3RpbmF0aW9uW3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOwogCi0gICAgaWYgKG91dExlbmd0
aCA8IG91dC5zaXplKCkpCi0gICAgICAgIG91dC5zaHJpbmsob3V0TGVuZ3RoKTsKKyAgICBpZiAo
KytkaWR4IDwgZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0aW9uW2RpZHhdID0g
KCgoZGVzdGluYXRpb25bc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lk
eCArIDJdID4+IDIpICYgMDE3KSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGVzdGlu
YXRpb25MZW5ndGggPCBkZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNo
cmluayhkZXN0aW5hdGlvbkxlbmd0aCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwogfQogCi1i
b29sIGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZl
Y3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBs
ZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBvcHRpb25zLCBiYXNl
NjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlm
ICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2Rl
SW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3Ro
LCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29kZShTdHJpbmdWaWV3IGluLCBT
aWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQor
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwg
T3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBt
YXApCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5n
dGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChp
bi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwg
b3V0LCBvcHRpb25zLCBiYXNlNjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0
Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNl
NjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNsZWFy
KCk7Ci0KLSAgICAvLyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdl
LCBqdXN0IHJldHVybiBub3RoaW5nLgotICAgIGlmIChpbi5zaXplKCkgPiBVSU5UX01BWCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihpbi5kYXRhKCkpLCBpbi5zaXplKCksIG91dCwg
b3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKKyAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7CiB9
CiAKLWJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJh
c2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuLCBvdXQsIG9wdGlvbnMsIGJh
c2U2NERlY01hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1i
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxE
ZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbi5s
ZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0LCBCYXNl
NjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2
NFVSTERlY01hcCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAg
aWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBi
YXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0
cmluZ1ZpZXcgaW5wdXQpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0g
ICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwg
YmFzZTY0VVJMRGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hh
cmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXAp
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
KyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxl
bmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0KQogewotICAgIG91dC5jbGVhcigpOwotCi0gICAgLy8gSWYg
dGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90
aGluZy4KLSAgICBpZiAoaW4uc2l6ZSgpID4gVUlOVF9NQVgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oaW4uZGF0YSgpKSwgaW4uc2l6ZSgpLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJh
c2U2NFVSTERlY01hcCk7CisgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJM
KTsKIH0KIAotYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQogewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRV
UkxEZWNNYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDI1ICsyNywzNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdURiB7CiAKLWVudW0gQmFzZTY0RW5jb2RlUG9saWN5IHsKLSAgICBCYXNl
NjREb05vdEluc2VydExGcywKLSAgICBCYXNlNjRJbnNlcnRMRnMsCi0gICAgQmFzZTY0VVJMUG9s
aWN5IC8vIE5vIHBhZGRpbmcsIG5vIExGcy4KK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlUG9saWN5
IHsKKyAgICBEb05vdEluc2VydExGcywKKyAgICBJbnNlcnRMRnMsCisgICAgVVJMIC8vIE5vIHBh
ZGRpbmcsIG5vIExGcy4KIH07CiAKLWVudW0gQmFzZTY0RGVjb2RlT3B0aW9ucyB7Ci0gICAgQmFz
ZTY0RGVmYXVsdCA9IDAsCi0gICAgQmFzZTY0VmFsaWRhdGVQYWRkaW5nID0gMSA8PCAwLAotICAg
IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzID0gMSA8PCAxLAotICAgIEJhc2U2NERpc2Nh
cmRWZXJ0aWNhbFRhYiA9IDEgPDwgMiwKK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlTWFwIHsgRGVm
YXVsdCwgVVJMIH07CisKK2VudW0gY2xhc3MgQmFzZTY0RGVjb2RlT3B0aW9ucyA6IHVpbnQ4X3Qg
eworICAgIFZhbGlkYXRlUGFkZGluZyAgICAgICAgID0gMSA8PCAwLAorICAgIElnbm9yZVNwYWNl
c0FuZE5ld0xpbmVzID0gMSA8PCAxLAorICAgIERpc2NhcmRWZXJ0aWNhbFRhYiAgICAgID0gMSA8
PCAyLAogfTsKIAorZW51bSBjbGFzcyBCYXNlNjREZWNvZGVNYXAgeyBEZWZhdWx0LCBVUkwgfTsK
Kworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5J
bnNlcnRpbmdMRnMgPSA3NjsKKworLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2lj
YWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90aGluZy4KKy8vIFJhdGhlciB0aGFuIGJlaW5nIHBl
cmZlY3RseSBwcmVjaXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZhdGl2ZS4KK3N0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwor
CiBjbGFzcyBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgewogcHVibGljOgogICAg
IFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8Y2hhcj4mIHZlY3RvcikK
QEAgLTE0NCw5MCArMTU0LDE2MyBAQCBwcml2YXRlOgogICAgIH0gbV92ZWN0b3I7CiB9OwogCi1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExG
cyk7Ci12b2lkIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNl
cnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLVdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29k
ZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBD
U3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOworV1RG
X0VYUE9SVF9QUklWQVRFIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVu
c2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwg
VUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5
OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZh
dWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwg
dW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29k
ZU1hcDo6RGVmYXVsdCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JV
bnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOworVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9S
VF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0
cmluZyYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2Rl
TWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8
QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29k
ZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRl
ZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQp
OworCitpbmxpbmUgVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlciBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFz
ZTY0RW5jb2RlTWFwIG1hcCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7Cit9CisKK2lubGluZSBWZWN0b3I8Y2hhcj4g
YmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9s
aWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW5w
dXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOworfQorCisKKy8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBBbGwgdGhlIHNhbWUgZnVuY3Rpb25zIG1vZGlm
aWVkIGZvciBiYXNlNjR1cmwsIGFzIGRlZmluZWQgaW4gUkZDIDQ2NDguCisvLyBUaGlzIGZvcm1h
dCB1c2VzICctJyBhbmQgJ18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5Lgor
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9y
QWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOwotV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcsIFNpZ25lZE9yVW5zaWduZWRDaGFy
VmVjdG9yQWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOwotV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYsIFNpZ25l
ZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERl
ZmF1bHQpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIq
LCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBv
cHRpb25zID0gQmFzZTY0RGVmYXVsdCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNv
bnN0IHZvaWQqLCB1bnNpZ25lZCk7CitWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKENvbnN0
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKK1ZlY3RvcjxjaGFyPiBiYXNlNjRV
UkxFbmNvZGUoY29uc3QgQ1N0cmluZyYpOworCitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7CitXVEZfRVhQ
T1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoU3Ry
aW5nVmlldyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7CitXVEZfRVhQT1JUX1BSSVZBVEUg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciosIHVu
c2lnbmVkKTsKIAotaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25l
ZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91dCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZv
aWQqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRhdGEo
KSwgaW4uc2l6ZSgpLCBvdXQsIHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbnB1
dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwp
OwogfQogCi1pbmxpbmUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3Rv
cjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoraW5saW5lIFZlY3Rvcjxj
aGFyPiBiYXNlNjRVUkxFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgaW5wdXQpCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIG91
dCwgcG9saWN5KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQu
c2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFy
VmVjdG9yQWRhcHRlciBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0
b3I8Y2hhcj4gYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGlucHV0KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIHBvbGljeSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNv
ZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5n
IGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBp
c0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKLSAgICByZXR1
cm4gYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIHBvbGljeSk7CisgICAgcmV0
dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLycgfHwgYyA9
PSAnLScgfHwgYyA9PSAnXyc7CiB9CiAKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0vLyBBbGwgdGhlIHNhbWUgZnVuY3Rpb25zIG1vZGlmaWVkIGZvciBiYXNlNjR1cmwsIGFzIGRl
ZmluZWQgaW4gUkZDIDQ2NDguCi0vLyBUaGlzIGZvcm1hdCB1c2VzICctJyBhbmQgJ18nIGluc3Rl
YWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5LgotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KK2lubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZSh1bnNp
Z25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3sKKyAgICBpZiAo
IWlucHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgVmVjdG9yPGNoYXI+Jik7
Ci12b2lkIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgVmVjdG9yPGNoYXI+Jik7Ci12b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5n
JiwgVmVjdG9yPGNoYXI+Jik7CisgICAgaWYgKGlucHV0TGVuZ3RoID4gbWF4aW11bUJhc2U2NEVu
Y29kZXJJbnB1dEJ1ZmZlclNpemUpCisgICAgICAgIHJldHVybiAwOwogCi1XVEZfRVhQT1JUX1BS
SVZBVEUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
cik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmKTsKKyAgICBhdXRvIGJh
c2VQYWRkZWRFbmNvZGVkU2l6ZSA9IFsmXSB7CisgICAgICAgIHJldHVybiAoKGlucHV0TGVuZ3Ro
ICsgMikgLyAzKSAqIDQ7CisgICAgfTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0
VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
cik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldywg
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVdURl9FWFBPUlRfUFJJVkFURSBi
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBTaWduZWRPclVuc2lnbmVk
Q2hhclZlY3RvckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyKTsKKyAgICBhdXRvIGJhc2VVbnBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAgICAg
cmV0dXJuICgoaW5wdXRMZW5ndGggKiA0KSArIDIpIC8gMzsKKyAgICB9OworCisgICAgc3dpdGNo
IChwb2xpY3kpIHsKKyAgICBjYXNlIEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnM6
CisgICAgICAgIHJldHVybiBiYXNlUGFkZGVkRW5jb2RlZFNpemUoKTsKKworICAgIGNhc2UgQmFz
ZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnM6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBiYXNl
UGFkZGVkRW5jb2RlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0g
MSkgLyBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOworICAgIH0KIAot
aW5saW5lIHZvaWQgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91dCkKKyAgICBjYXNlIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMOgorICAgICAgICByZXR1cm4gYmFzZVVucGFkZGVkRW5jb2RlZFNpemUoKTsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3Ry
dWN0IEJhc2U2NFNwZWNpZmljYXRpb24geworICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKKyAg
ICB1bnNpZ25lZCBpbnB1dExlbmd0aDsKKyAgICBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5Owor
ICAgIEJhc2U2NEVuY29kZU1hcCBtYXA7Cit9OworCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KQogewotICAgIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLnNpemUoKSwgb3V0KTsKKyAg
ICByZXR1cm4geyBpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCB9OwogfQogCi1p
bmxpbmUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3RvcjxjaGFy
PiYgb3V0KQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChDb25zdFNp
Z25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCiB7Ci0gICAgYmFz
ZTY0VVJMRW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIG91dCk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSk7CiB9CiAKLWlu
bGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGluKQoraW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChj
b25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NFVSTEVuY29k
ZShpbi5kYXRhKCksIGluLnNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQu
ZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5KTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNl
NjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4pCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0
aCgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNCYXNlNjRP
ckJhc2U2NFVSTENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCitpbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIGlucHV0KQogewotICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMg
PT0gJysnIHx8IGMgPT0gJy8nIHx8IGMgPT0gJy0nIHx8IGMgPT0gJ18nOworICAgIHJldHVybiBi
YXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xp
Y3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworfQorCitpbmxpbmUgQmFzZTY0U3BlY2lm
aWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IENTdHJpbmcmIGlucHV0KQoreworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKK3RlbXBsYXRlPD4g
Y2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj4geworcHVibGljOgor
ICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IEJhc2U2NFNwZWNpZmljYXRpb24mIGJhc2U2NCkK
KyAgICAgICAgOiBtX2Jhc2U2NCB7IGJhc2U2NCB9CisgICAgICAgICwgbV9lbmNvZGVkTGVuZ3Ro
IHsgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoYmFzZTY0LmlucHV0TGVuZ3RoLCBiYXNlNjQu
cG9saWN5KSB9CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5jb2RlZExlbmd0aDsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3
cml0ZVRvKENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAg
YmFzZTY0RW5jb2RlKG1fYmFzZTY0LmlucHV0RGF0YSwgbV9iYXNlNjQuaW5wdXRMZW5ndGgsIGRl
c3RpbmF0aW9uLCBtX2VuY29kZWRMZW5ndGgsIG1fYmFzZTY0LnBvbGljeSwgbV9iYXNlNjQubWFw
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzZTY0U3BlY2lmaWNhdGlvbiBtX2Jhc2U2NDsK
KyAgICB1bnNpZ25lZCBtX2VuY29kZWRMZW5ndGg7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAordXNpbmcgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOwogdXNpbmcgV1RGOjpCYXNlNjRFbmNv
ZGVQb2xpY3k7Ci11c2luZyBXVEY6OkJhc2U2NERvTm90SW5zZXJ0TEZzOwotdXNpbmcgV1RGOjpC
YXNlNjRJbnNlcnRMRnM7Ci11c2luZyBXVEY6OkJhc2U2NFZhbGlkYXRlUGFkZGluZzsKLXVzaW5n
IFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXM7Ci11c2luZyBXVEY6OkJhc2U2NERp
c2NhcmRWZXJ0aWNhbFRhYjsKLXVzaW5nIFdURjo6YmFzZTY0RW5jb2RlOwordXNpbmcgV1RGOjpC
YXNlNjRTcGVjaWZpY2F0aW9uOwogdXNpbmcgV1RGOjpiYXNlNjREZWNvZGU7Cit1c2luZyBXVEY6
OmJhc2U2NEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0RW5jb2RlZDsKK3VzaW5nIFdURjo6YmFz
ZTY0VVJMRGVjb2RlOwogdXNpbmcgV1RGOjpiYXNlNjRVUkxEZWNvZGU7Cit1c2luZyBXVEY6OmJh
c2U2NFVSTEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0VVJMRW5jb2RlZDsKIHVzaW5nIFdURjo6
aXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3RlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3
NzY4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1NSBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1v
ZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L0luaXREYXRhUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleUlEc0tl
eWlkcyk6CisgICAgICAgIChXZWJDb3JlOjpzYW5pdGl6ZUtleWlkcyk6CisgICAgICAgICogTW9k
dWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKToKKyAgICAgICAg
KiBNb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW06CisgICAgICAg
IChXZWJDb3JlOjpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
anNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlbUluQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXV0aGVudGljYXRvckNvb3JkaW5hdG9ySW50ZXJuYWw6OnByb2R1Y2VDbGllbnREYXRhSnNvbik6
CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwp
OgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVTZWNXZWJTb2NrZXRLZXkpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNvY2tldEFjY2VwdCk6Cisg
ICAgICAgICogY3J5cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmg6CisgICAgICAgICogY3J5
cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKiBjcnlw
dG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5QUVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6aW1w
b3J0SndrKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6ZXhwb3J0SndrIGNvbnN0
KToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9LZXlFQzo6aW1wb3J0SndrKToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9Dcnlw
dG9LZXlITUFDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmltcG9ydEp3
ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjpleHBvcnRKd2sgY29uc3QpOgor
ICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXlSU0E6OmltcG9ydEp3ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlS
U0E6OmV4cG9ydEp3ayBjb25zdCk6CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01h
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVs
ZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmluZE1hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpkZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICAqIGNyeXB0by9vcGVuc3NsL1Nlcmlh
bGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRh
VVJMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
TmV0d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291
cmNlc0RhdGE6OlJlc291cmNlRGF0YTo6ZGVjb2RlRGF0YVRvQ29udGVudCk6CisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaCk6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yOjpidWlsZFdlYlNvY2tldE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0
aFJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50
ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCk6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUGFnZUFnZW50OjpkYXRhQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmFyY2hpdmUpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6
CisgICAgICAgICogbG9hZGVyL0xvYWRlclN0cmF0ZWd5Lmg6CisgICAgICAgICogbG9hZGVyL1By
aXZhdGVDbGlja01lYXN1cmVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50OjpFcGhlbWVyYWxTb3VyY2VOb25jZTo6aXNWYWxpZCBjb25zdCk6CisgICAg
ICAgICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OmRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAgICAqIGxv
YWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
SFRNTEFyY2hpdmU6OmdlbmVyYXRlTUhUTUxEYXRhKToKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSFRNTFBhcnNlcjo6
cGFyc2VOZXh0UGFydCk6CisgICAgICAgICogbG9hZGVyL2NvY29hL1ByaXZhdGVDbGlja01lYXN1
cmVtZW50Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dDo6Y2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJsZVRva2VuKToKKyAgICAgICAgKFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VT
ZWNyZXRUb2tlbik6CisgICAgICAgICogcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmFzZTY0VXRpbGl0aWVzOjpidG9hKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2U2NFV0aWxpdGllczo6YXRvYik6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vuc2VGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0
cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtl
eUlkRnJvbVdlYk1Jbml0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
OjpyZXF1ZXN0TGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25G
YWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUxpY2Vuc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjpkaWRQcm92aWRl
UmVxdWVzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVW5pcXVlRm9udE5hbWUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlVW5pcXVlRm9udE5hbWUpOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsb2FkQmxvYlJlc291cmNlU3lu
Y2hyb25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5k
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJj
ZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q3JlZGVudGlhbEJhc2U6OnNlcmlhbGl6YXRpb25Gb3JCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbEJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNv
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVCYXNlNjQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRlY29kZUVzY2FwZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRlY29kZVN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9T
eW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91
c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25v
dXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIb3N0VExTQ2VydGlmaWNhdGVTZXQ6OmNvbXB1dGVD
ZXJ0aWZpY2F0ZUhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2Vx
dWVuY2VzLmg6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoIGNvbnN0KToKKwogMjAyMS0wNS0x
OCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVUF0gUmVt
b3RlQXVkaW9TZXNzaW9uIGNhbGxzIGludG8gQVZBdWRpb1Nlc3Npb24gd2hlbiBHUFVQIGlzIGVu
YWJsZWQsIGNhdXNpbmcgaGFuZ3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlw
dGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0
YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTUgKzgwLDE0IEBAIHN0YXRpYyBP
cHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4KICAgICAgICAgaWYgKCFrZXlJRCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFZlY3RvcjxjaGFyPiBrZXlJRERhdGE7Ci0g
ICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pKQor
ICAgICAgICBhdXRvIGtleUlERGF0YSA9IGJhc2U2NFVSTERlY29kZShrZXlJRCk7CisgICAgICAg
IGlmICgha2V5SUREYXRhKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGtl
eUlERGF0YS5zaXplKCkgPCBrS2V5SWRzTWluS2V5SWRTaXplSW5CeXRlcyB8fCBrZXlJRERhdGEu
c2l6ZSgpID4ga0tleUlkc01heEtleUlkU2l6ZUluQnl0ZXMpCisgICAgICAgIGlmIChrZXlJRERh
dGEtPnNpemUoKSA8IGtLZXlJZHNNaW5LZXlJZFNpemVJbkJ5dGVzIHx8IGtleUlERGF0YS0+c2l6
ZSgpID4ga0tleUlkc01heEtleUlkU2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgICAgIFJlZjxTaGFyZWRCdWZmZXI+IGtleUlEQnVmZmVyID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlJRERhdGEpKTsKLSAgICAgICAga2V5SURzLmFw
cGVuZChXVEZNb3ZlKGtleUlEQnVmZmVyKSk7CisgICAgICAgIGtleUlEcy5hcHBlbmQoU2hhcmVk
QnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqa2V5SUREYXRhKSkpOwogICAgIH0KIAogICAgIHJldHVy
biBrZXlJRHM7CkBAIC0xMDUsNyArMTA0LDcgQEAgc3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IHNhbml0aXplS2V5aQogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBhdXRvIGtpZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1
dG8mIGJ1ZmZlciA6IGtleUlEQnVmZmVyLnZhbHVlKCkpCi0gICAgICAgIGtpZHNBcnJheS0+cHVz
aFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXpl
KCkpKTsKKyAgICAgICAga2lkc0FycmF5LT5wdXNoU3RyaW5nKG1ha2VTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlZChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpKSk7CiAgICAgb2JqZWN0LT5z
ZXRBcnJheSgia2lkcyIsIFdURk1vdmUoa2lkc0FycmF5KSk7CiAKICAgICBDU3RyaW5nIGpzb25E
YXRhID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
bGVnYWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNl
c3Npb25DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwxMyArMTY5LDEzIEBAIGJv
b2wgQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoVWludDhBcnIKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtl
eURhdGE7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShyYXdLZXlEYXRhLCBrZXlEYXRh
KSB8fCBrZXlEYXRhLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBrZXlEYXRhID0gYmFz
ZTY0RGVjb2RlKHJhd0tleURhdGEpOworICAgICAgICAgICAgaWYgKCFrZXlEYXRhIHx8IGtleURh
dGEtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25D
bGVhcktleTo6dXBkYXRlKCVwKSAtIGZhaWxlZDogdW5hYmxlIHRvIGJhc2U2NCBkZWNvZGUga2V5
IiwgdGhpcyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIG1fY2FjaGVkS2V5cy5zZXQoa2V5SWQsIFdURk1vdmUoa2V5RGF0YSkpOworICAg
ICAgICAgICAgbV9jYWNoZWRLZXlzLnNldChrZXlJZCwgV1RGTW92ZSgqa2V5RGF0YSkpOwogICAg
ICAgICAgICAgZm91bmRWYWxpZEtleSA9IHRydWU7CiAgICAgICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudC5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDMsMTQgKzI0MywxMiBAQCB2b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojpw
b3N0RXZlCiAKIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQoTlNEYXRh
ICpkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBKU0NvbnRleHQgKmNvbnRleHQpCiB7Ci0g
ICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKFtkYXRhIGJ5dGVz
XSwgW2RhdGEgbGVuZ3RoXSwgYmFzZTY0RGF0YSk7Ci0KKyAgICAvLyBGSVhNRTogQWRkIG1ha2VD
RlN0cmluZy9tYWtlTlNTdHJpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkgU3RyaW5nIGFsbG9jYXRp
b24uCiAgICAgU3RyaW5nIGRhdGE2NDsKICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAg
ICAgICAgZGF0YTY0ID0gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERh
dGE7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFz
ZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKSk7CiAgICAg
ZWxzZQotICAgICAgICBkYXRhNjQgPSAiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKKyAgICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2
NCwiLCBiYXNlNjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOwogCiAgICAg
cmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDooaWQpZGF0YTY0LmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQpAQCAtMzQyLDkgKzM0MCw3IEBAIHN0YXRp
YyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGUKICAgICAgICAgaWQgdmFsdWUgPSBp
dGVtLnZhbHVlOwogICAgICAgICBOU1N0cmluZyAqbWltZVR5cGUgPSBbW2l0ZW0gZXh0cmFBdHRy
aWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJNSU1FdHlwZSJdOwogICAgICAgICBpZiAoW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dICYmIG1pbWVUeXBlKSB7Ci0gICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICAgICAgICAgIGJhc2U2NEVuY29kZShbdmFsdWUg
Ynl0ZXNdLCBbdmFsdWUgbGVuZ3RoXSwgYmFzZTY0RGF0YSk7Ci0gICAgICAgICAgICBTdHJpbmcg
ZGF0YTY0ID0gImRhdGE6IiArIFN0cmluZyhtaW1lVHlwZSkgKyAiO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKKyAgICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToiLCBTdHJp
bmcobWltZVR5cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFt2YWx1ZSBieXRlc10sIFt2
YWx1ZSBsZW5ndGhdKSk7CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6KF9fYnJp
ZGdlIE5TU3RyaW5nICopZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5OkAidmFs
dWUiXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBz
dGF0aWMgUmVmPEFycmF5QnVmZmVyPiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9iamVjdC0+
c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIFdURjo6YmFzZTY0VVJM
RW5jb2RlKGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOworICAgIG9iamVj
dC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChj
aGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVuZ2UubGVuZ3RoKCkpKSk7CiAgICAgb2JqZWN0LT5zZXRT
dHJpbmcoIm9yaWdpbiJfcywgb3JpZ2luLnRvUmF3U3RyaW5nKCkpOwogCiAgICAgYXV0byB1dGY4
SlNPTlN0cmluZyA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRp
YWwuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3
IEBAIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgUHUKIH0KIAogUHVibGlj
S2V5Q3JlZGVudGlhbDo6UHVibGljS2V5Q3JlZGVudGlhbChSZWY8QXV0aGVudGljYXRvclJlc3Bv
bnNlPiYmIHJlc3BvbnNlKQotICAgIDogQmFzaWNDcmVkZW50aWFsKFdURjo6YmFzZTY0VVJMRW5j
b2RlKHJlc3BvbnNlLT5yYXdJZCgpLT5kYXRhKCksIHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlTGVu
Z3RoKCkpLCBUeXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQorICAgIDogQmFzaWND
cmVkZW50aWFsKG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyZXNwb25zZS0+cmF3SWQoKS0+
ZGF0YSgpLCByZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSksIFR5cGU6OlB1YmxpY0tl
eSwgRGlzY292ZXJ5OjpSZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2Up
KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dEhhbmRzaGFrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZWNXZWJT
b2NrZXRLZXkoKQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uY2VTaXplID0gMTY7CiAgICAg
dW5zaWduZWQgY2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRv
bVZhbHVlcyhrZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShrZXksIG5v
bmNlU2l6ZSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChrZXksIG5vbmNl
U2l6ZSkpOwogfQogCiBTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNv
Y2tldEFjY2VwdChjb25zdCBTdHJpbmcmIHNlY1dlYlNvY2tldEtleSkKQEAgLTExMCw3ICsxMTAs
NyBAQCBTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlCiAgICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlE
KSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAg
ICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaGFzaC5k
YXRhKCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNv
ZGVkKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSkpOwogfQogCiBXZWJTb2NrZXRIYW5kc2hh
a2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90
b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgY2xpZW50T3JpZ2lu
LCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TZXJpYWxp
emVkQ3J5cHRvS2V5V3JhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9T
ZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBvZiBwcm90ZWN0aW9uIGlzIG5v
dCByZXF1aXJlZCBieSB0aGUgc3BlYyBhcyBvZiAxMSBEZWNlbWJlciAyMDE0OgogLy8gaHR0cHM6
Ly93d3cudzMub3JnL1RSL1dlYkNyeXB0b0FQSS8jc2VjdXJpdHktZGV2ZWxvcGVycwogCi1XRUJD
T1JFX0VYUE9SVCBib29sIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4
X3Q+Jik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkoKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZGVsZXRlRGVmYXVsdFdl
YkNyeXB0b01hc3RlcktleSgpOwogCiBXRUJDT1JFX0VYUE9SVCBib29sIHdyYXBTZXJpYWxpemVk
Q3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5LCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNH
Q3J5cHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjMsMTEgKzUyMywxMSBAQCBib29sIENyeXB0
b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVuCiAgICAgICAgIGlmIChxICYmIHEtPnNpemUo
KSA9PSBjdXJ2ZVVuY29tcHJlc3NlZFBvaW50U2l6ZShtX2N1cnZlKSkgewogICAgICAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGE7CiAgICAgICAgICAgICBhLmFwcGVuZChxLT5kYXRhKCkgKyAxLCB1
bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplKTsKLSAgICAgICAgICAgIGp3ay54ID0gYmFzZTY0
VVJMRW5jb2RlKGEpOworICAgICAgICAgICAgandrLnggPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoYSkpOwogCiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYjsKICAgICAgICAgICAg
IGIuYXBwZW5kKHEtPmRhdGEoKSArIDEgKyB1bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplLCB1
bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplKTsKLSAgICAgICAgICAgIGp3ay55ID0gYmFzZTY0
VVJMRW5jb2RlKGIpOworICAgICAgICAgICAgandrLnkgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoYikpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NDMsNyArNTQzLDcgQEAgYm9vbCBD
cnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogICAgICAgICAgICAgICAgICAgICAq
ZCA9IFdURk1vdmUocGFkZGVkRGF0YSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgandrLmQgPSBiYXNlNjRVUkxFbmNvZGUoKmQpOworICAgICAgICAgICAgICAgIGp3ay5k
ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCpkKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1NlcmlhbGl6
ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcEdDcnlwdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE1ICsyOSwxNCBAQAogI2lm
IEVOQUJMRShXRUJfQ1JZUFRPKQogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGdldERl
ZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCitPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogLy8gSW5pdGlhbGx5
IHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgd2VyZSBpbnRlbmRlZCB0byBwZXJmb3JtIEtFSyB3cmFw
cGluZyBhbmQgdW53cmFwcGluZywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUFFUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5QUVTLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTAgKzg4LDEw
IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEuay5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG9jdGV0U2VxdWVuY2U7Ci0gICAgaWYgKCFi
YXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rLCBvY3RldFNlcXVlbmNlKSkKKyAgICBhdXRvIG9jdGV0
U2VxdWVuY2UgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rKTsKKyAgICBpZiAoIW9jdGV0U2Vx
dWVuY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghY2FsbGJhY2sob2N0ZXRT
ZXF1ZW5jZS5zaXplKCkgKiA4LCBrZXlEYXRhLmFsZykpCisgICAgaWYgKCFjYWxsYmFjayhvY3Rl
dFNlcXVlbmNlLT5zaXplKCkgKiA4LCBrZXlEYXRhLmFsZykpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGlmICh1c2FnZXMgJiYgIWtleURhdGEudXNlLmlzTnVsbCgpICYmIGtleURhdGEu
dXNlICE9ICJlbmMiKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMCwxNCArMTAwLDE0
IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICBpZiAoa2V5
RGF0YS5leHQgJiYgIWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFjdGFibGUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMo
YWxnb3JpdGhtLCBXVEZNb3ZlKG9jdGV0U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCBXVEZNb3Zl
KCpvY3RldFNlcXVlbmNlKSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwogfQogCiBKc29uV2ViS2V5
IENyeXB0b0tleUFFUzo6ZXhwb3J0SndrKCkgY29uc3QKIHsKICAgICBKc29uV2ViS2V5IHJlc3Vs
dDsKICAgICByZXN1bHQua3R5ID0gIm9jdCI7Ci0gICAgcmVzdWx0LmsgPSBiYXNlNjRVUkxFbmNv
ZGUobV9rZXkpOworICAgIHJlc3VsdC5rID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKG1f
a2V5KSk7CiAgICAgcmVzdWx0LmtleV9vcHMgPSB1c2FnZXMoKTsKICAgICByZXN1bHQuZXh0ID0g
ZXh0cmFjdGFibGUoKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OCwyMiArOTgsMjIgQEAgUmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6aW1wb3J0Sgog
CiAgICAgaWYgKGtleURhdGEueC5pc051bGwoKSB8fCBrZXlEYXRhLnkuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90PiB4OwotICAgIGlmICghV1RG
OjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS54LCB4KSkKKyAgICBhdXRvIHggPSBiYXNlNjRVUkxE
ZWNvZGUoa2V5RGF0YS54KTsKKyAgICBpZiAoIXgpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIFZlY3Rvcjx1aW50OF90PiB5OwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5
RGF0YS55LCB5KSkKKyAgICBhdXRvIHkgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS55KTsKKyAg
ICBpZiAoIXkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmQuaXNO
dWxsKCkpIHsKICAgICAgICAgLy8gaW1wb3J0IHB1YmxpYyBrZXkKLSAgICAgICAgcmV0dXJuIHBs
YXRmb3JtSW1wb3J0SldLUHVibGljKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKHgp
LCBXVEZNb3ZlKHkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmV0dXJuIHBsYXRm
b3JtSW1wb3J0SldLUHVibGljKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKCp4KSwg
V1RGTW92ZSgqeSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgIH0KIAotICAgIFZlY3Rvcjx1
aW50OF90PiBkOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kLCBkKSkK
KyAgICBhdXRvIGQgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBpZiAoIWQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIGltcG9ydCBwcml2YXRlIGtleQotICAgIHJl
dHVybiBwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3VydmUsIFdU
Rk1vdmUoeCksIFdURk1vdmUoeSksIFdURk1vdmUoZCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwor
ICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3Vy
dmUsIFdURk1vdmUoKngpLCBXVEZNb3ZlKCp5KSwgV1RGTW92ZSgqZCksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogfQogCiBSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjppbXBvcnRTcGtp
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBjdXJ2
ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5
VXNhZ2VCaXRtYXAgdXNhZ2VzKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5SE1BQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5SE1BQy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOCArMTAz
LDggQEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5rLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4gb2N0ZXRTZXF1ZW5jZTsKLSAgICBpZiAo
IWJhc2U2NFVSTERlY29kZShrZXlEYXRhLmssIG9jdGV0U2VxdWVuY2UpKQorICAgIGF1dG8gb2N0
ZXRTZXF1ZW5jZSA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmspOworICAgIGlmICghb2N0ZXRT
ZXF1ZW5jZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFjYWxsYmFjayhoYXNo
LCBrZXlEYXRhLmFsZykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTE1LDE0ICsxMTUs
MTQgQEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgIGlmIChr
ZXlEYXRhLmV4dCAmJiAha2V5RGF0YS5leHQudmFsdWUoKSAmJiBleHRyYWN0YWJsZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3
KGxlbmd0aEJpdHMsIGhhc2gsIFdURk1vdmUob2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOworICAgIHJldHVybiBDcnlwdG9LZXlITUFDOjppbXBvcnRSYXcobGVuZ3RoQml0cywg
aGFzaCwgV1RGTW92ZSgqb2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQog
CiBKc29uV2ViS2V5IENyeXB0b0tleUhNQUM6OmV4cG9ydEp3aygpIGNvbnN0CiB7CiAgICAgSnNv
bldlYktleSByZXN1bHQ7CiAgICAgcmVzdWx0Lmt0eSA9ICJvY3QiOwotICAgIHJlc3VsdC5rID0g
YmFzZTY0VVJMRW5jb2RlKG1fa2V5KTsKKyAgICByZXN1bHQuayA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChtX2tleSkpOwogICAgIHJlc3VsdC5rZXlfb3BzID0gdXNhZ2VzKCk7CiAgICAg
cmVzdWx0LmV4dCA9IGV4dHJhY3RhYmxlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNjUgKzQ1LDg3IEBAIFJlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0
b0tleVJTQTo6aW1wb3IKIAogICAgIGlmIChrZXlEYXRhLm4uaXNOdWxsKCkgfHwga2V5RGF0YS5l
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4g
bW9kdWx1czsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEubiwgbW9kdWx1
cykpCisgICAgYXV0byBtb2R1bHVzID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEubik7CisgICAg
aWYgKCFtb2R1bHVzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBQZXIgUkZDIDc1
MTggU2VjdGlvbiA2LjMuMS4xOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUxOCNz
ZWN0aW9uLTYuMy4xLjEKLSAgICBpZiAoIW1vZHVsdXMuaXNFbXB0eSgpICYmICFtb2R1bHVzWzBd
KQotICAgICAgICBtb2R1bHVzLnJlbW92ZSgwKTsKLSAgICBWZWN0b3I8dWludDhfdD4gZXhwb25l
bnQ7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLmUsIGV4cG9uZW50KSkK
KyAgICBpZiAoIW1vZHVsdXMtPmlzRW1wdHkoKSAmJiAhbW9kdWx1cy0+YXQoMCkpCisgICAgICAg
IG1vZHVsdXMtPnJlbW92ZSgwKTsKKyAgICBhdXRvIGV4cG9uZW50ID0gYmFzZTY0VVJMRGVjb2Rl
KGtleURhdGEuZSk7CisgICAgaWYgKCFleHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgaWYgKGtleURhdGEuZC5pc051bGwoKSkgewogICAgICAgICAvLyBpbXBvcnQgcHVibGlj
IGtleQotICAgICAgICBhdXRvIHB1YmxpY0tleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21w
b25lbnRzOjpjcmVhdGVQdWJsaWMoV1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCkp
OworICAgICAgICBhdXRvIHB1YmxpY0tleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25l
bnRzOjpjcmVhdGVQdWJsaWMoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50KSk7
CiAgICAgICAgIC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEgaXMg
anVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBpZiBoYXNo
IGlzIFdURjo6bnVsbG9wdC4KICAgICAgICAgcmV0dXJuIENyeXB0b0tleVJTQTo6Y3JlYXRlKGFs
Z29yaXRobSwgaGFzaC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xKSwg
ISFoYXNoLCAqcHVibGljS2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAg
fQogCiAgICAgLy8gaW1wb3J0IHByaXZhdGUga2V5Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZh
dGVFeHBvbmVudDsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZCwgcHJp
dmF0ZUV4cG9uZW50KSkKKyAgICBhdXRvIHByaXZhdGVFeHBvbmVudCA9IGJhc2U2NFVSTERlY29k
ZShrZXlEYXRhLmQpOworICAgIGlmICghcHJpdmF0ZUV4cG9uZW50KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5wLmlzTnVsbCgpICYmIGtleURhdGEucS5pc051bGwo
KSAmJiBrZXlEYXRhLmRwLmlzTnVsbCgpICYmIGtleURhdGEuZHAuaXNOdWxsKCkgJiYga2V5RGF0
YS5xaS5pc051bGwoKSkgewotICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5
cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZN
b3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpKTsKKyAgICAgICAgYXV0byBw
cml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZh
dGUoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50KSwgV1RGTW92ZSgqcHJpdmF0
ZUV4cG9uZW50KSk7CiAgICAgICAgIC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cjo6U0hBXzEgaXMganVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVm
ZmVjdCBpZiBoYXNoIGlzIFdURjo6bnVsbG9wdC4KICAgICAgICAgcmV0dXJuIENyeXB0b0tleVJT
QTo6Y3JlYXRlKGFsZ29yaXRobSwgaGFzaC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OlNIQV8xKSwgISFoYXNoLCAqcHJpdmF0ZUtleUNvbXBvbmVudHMsIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogICAgIH0KIAogICAgIGlmIChrZXlEYXRhLnAuaXNOdWxsKCkgfHwga2V5RGF0YS5x
LmlzTnVsbCgpIHx8IGtleURhdGEuZHAuaXNOdWxsKCkgfHwga2V5RGF0YS5kcS5pc051bGwoKSB8
fCBrZXlEYXRhLnFpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBDcnlw
dG9LZXlSU0FDb21wb25lbnRzOjpQcmltZUluZm8gZmlyc3RQcmltZUluZm87Ci0gICAgQ3J5cHRv
S2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mbzsKLSAgICBpZiAoIVdU
Rjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEucCwgZmlyc3RQcmltZUluZm8ucHJpbWVGYWN0b3Ip
KQorICAgIAorICAgIGF1dG8gZmlyc3RQcmltZUZhY3RvciA9IGJhc2U2NFVSTERlY29kZShrZXlE
YXRhLnApOworICAgIGlmICghZmlyc3RQcmltZUZhY3RvcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRwLCBmaXJzdFByaW1l
SW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisgICAgYXV0byBmaXJzdEZhY3RvckNSVEV4cG9uZW50
ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZHApOworICAgIGlmICghZmlyc3RGYWN0b3JDUlRF
eHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVS
TERlY29kZShrZXlEYXRhLnEsIHNlY29uZFByaW1lSW5mby5wcmltZUZhY3RvcikpCisgICAgYXV0
byBzZWNvbmRQcmltZUZhY3RvciA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLnEpOworICAgIGlm
ICghc2Vjb25kUHJpbWVGYWN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICgh
V1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kcSwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNS
VEV4cG9uZW50KSkKKyAgICBhdXRvIHNlY29uZEZhY3RvckNSVEV4cG9uZW50ID0gYmFzZTY0VVJM
RGVjb2RlKGtleURhdGEuZHEpOworICAgIGlmICghc2Vjb25kRmFjdG9yQ1JURXhwb25lbnQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5
RGF0YS5xaSwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KSkKKyAgICBhdXRv
IHNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEucWkp
OworICAgIGlmICghc2Vjb25kRmFjdG9yQ1JUQ29lZmZpY2llbnQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGZpcnN0UHJp
bWVJbmZvOworICAgIGZpcnN0UHJpbWVJbmZvLnByaW1lRmFjdG9yID0gV1RGTW92ZSgqZmlyc3RQ
cmltZUZhY3Rvcik7CisgICAgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZN
b3ZlKCpmaXJzdEZhY3RvckNSVEV4cG9uZW50KTsKKyAgICAKKyAgICBDcnlwdG9LZXlSU0FDb21w
b25lbnRzOjpQcmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOworICAgIHNlY29uZFByaW1lSW5mby5w
cmltZUZhY3RvciA9IFdURk1vdmUoKnNlY29uZFByaW1lRmFjdG9yKTsKKyAgICBzZWNvbmRQcmlt
ZUluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZNb3ZlKCpzZWNvbmRGYWN0b3JDUlRFeHBvbmVu
dCk7CisgICAgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50ID0gV1RGTW92ZSgq
c2Vjb25kRmFjdG9yQ1JUQ29lZmZpY2llbnQpOworCiAgICAgaWYgKCFrZXlEYXRhLm90aCkgewot
ICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50
czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZN
b3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJp
bWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCB7IH0pOworICAgICAgICBhdXRvIHBy
aXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0
ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKCptb2R1bHVzKSwgV1RGTW92ZSgqZXhwb25lbnQp
LCBXVEZNb3ZlKCpwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RG
TW92ZShzZWNvbmRQcmltZUluZm8pLCB7IH0pOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxk
IG5vdCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJl
dHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRz
LCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAKICAgICBWZWN0b3I8Q3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclByaW1lSW5mb3M7CiAgICAgZm9yIChjb25zdCBh
dXRvJiB2YWx1ZSA6IGtleURhdGEub3RoLnZhbHVlKCkpIHsKLSAgICAgICAgQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87Ci0gICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxE
ZWNvZGUodmFsdWUuciwgaW5mby5wcmltZUZhY3RvcikpCisgICAgICAgIGF1dG8gcHJpbWVGYWN0
b3IgPSBiYXNlNjRVUkxEZWNvZGUodmFsdWUucik7CisgICAgICAgIGlmICghcHJpbWVGYWN0b3Ip
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVS
TERlY29kZSh2YWx1ZS5kLCBpbmZvLmZhY3RvckNSVEV4cG9uZW50KSkKKyAgICAgICAgYXV0byBm
YWN0b3JDUlRFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZSh2YWx1ZS5kKTsKKyAgICAgICAgaWYg
KCFmYWN0b3JDUlRFeHBvbmVudCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKHZhbHVlLnQsIGluZm8uZmFjdG9yQ1JUQ29lZmZp
Y2llbnQpKQorICAgICAgICBhdXRvIGZhY3RvckNSVENvZWZmaWNpZW50ID0gYmFzZTY0VVJMRGVj
b2RlKHZhbHVlLnQpOworICAgICAgICBpZiAoIWZhY3RvckNSVENvZWZmaWNpZW50KQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG90aGVyUHJpbWVJbmZvcy5hcHBlbmQoaW5m
byk7CisKKyAgICAgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87Cisg
ICAgICAgIGluZm8ucHJpbWVGYWN0b3IgPSBXVEZNb3ZlKCpwcmltZUZhY3Rvcik7CisgICAgICAg
IGluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZNb3ZlKCpmYWN0b3JDUlRFeHBvbmVudCk7Cisg
ICAgICAgIGluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQgPSBXVEZNb3ZlKCpmYWN0b3JDUlRDb2Vm
ZmljaWVudCk7CisKKyAgICAgICAgb3RoZXJQcmltZUluZm9zLmFwcGVuZChXVEZNb3ZlKGluZm8p
KTsKICAgICB9CiAKLSAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKG1vZHVs
dXMpLCBXVEZNb3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQpLCBXVEZNb3Zl
KGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCBXVEZNb3ZlKG90aGVy
UHJpbWVJbmZvcykpOworICAgIGF1dG8gcHJpdmF0ZUtleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlS
U0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKFdURk1vdmUoKm1v
ZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVudCksIFdURk1vdmUoKnByaXZhdGVFeHBvbmVudCksIFdU
Rk1vdmUoZmlyc3RQcmltZUluZm8pLCBXVEZNb3ZlKHNlY29uZFByaW1lSW5mbyksIFdURk1vdmUo
b3RoZXJQcmltZUluZm9zKSk7CiAgICAgLy8gTm90aWNlOiBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpTSEFfMSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkg
ZWZmZWN0IGlmIGhhc2ggaXMgV1RGOjpudWxsb3B0LgogICAgIHJldHVybiBDcnlwdG9LZXlSU0E6
OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRzLCBleHRyYWN0YWJsZSwgdXNh
Z2VzKTsKIH0KQEAgLTExOCwzMCArMTQwLDMwIEBAIEpzb25XZWJLZXkgQ3J5cHRvS2V5UlNBOjpl
eHBvcnRKd2soKSBjb24KICAgICBhdXRvIHJzYUNvbXBvbmVudHMgPSBleHBvcnREYXRhKCk7CiAK
ICAgICAvLyBwdWJsaWMga2V5Ci0gICAgcmVzdWx0Lm4gPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29t
cG9uZW50cy0+bW9kdWx1cygpKTsKLSAgICByZXN1bHQuZSA9IGJhc2U2NFVSTEVuY29kZShyc2FD
b21wb25lbnRzLT5leHBvbmVudCgpKTsKKyAgICByZXN1bHQubiA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5tb2R1bHVzKCkpKTsKKyAgICByZXN1bHQuZSA9IG1h
a2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5leHBvbmVudCgpKSk7CiAg
ICAgaWYgKHJzYUNvbXBvbmVudHMtPnR5cGUoKSA9PSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpU
eXBlOjpQdWJsaWMpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvLyBwcml2YXRlIGtl
eQotICAgIHJlc3VsdC5kID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnByaXZhdGVF
eHBvbmVudCgpKTsKKyAgICByZXN1bHQuZCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChy
c2FDb21wb25lbnRzLT5wcml2YXRlRXhwb25lbnQoKSkpOwogICAgIGlmICghcnNhQ29tcG9uZW50
cy0+aGFzQWRkaXRpb25hbFByaXZhdGVLZXlQYXJhbWV0ZXJzKCkpCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAKLSAgICByZXN1bHQucCA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5m
aXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9yKTsKLSAgICByZXN1bHQucSA9IGJhc2U2NFVSTEVu
Y29kZShyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5wcmltZUZhY3Rvcik7Ci0gICAg
cmVzdWx0LmRwID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPmZpcnN0UHJpbWVJbmZv
KCkuZmFjdG9yQ1JURXhwb25lbnQpOwotICAgIHJlc3VsdC5kcSA9IGJhc2U2NFVSTEVuY29kZShy
c2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBvbmVudCk7Ci0gICAg
cmVzdWx0LnFpID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5m
bygpLmZhY3RvckNSVENvZWZmaWNpZW50KTsKKyAgICByZXN1bHQucCA9IG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5maXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9y
KSk7CisgICAgcmVzdWx0LnEgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9u
ZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkucHJpbWVGYWN0b3IpKTsKKyAgICByZXN1bHQuZHAgPSBt
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8o
KS5mYWN0b3JDUlRFeHBvbmVudCkpOworICAgIHJlc3VsdC5kcSA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBv
bmVudCkpOworICAgIHJlc3VsdC5xaSA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FD
b21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRDb2VmZmljaWVudCkpOwogICAg
IGlmIChyc2FDb21wb25lbnRzLT5vdGhlclByaW1lSW5mb3MoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAKICAgICBWZWN0b3I8UnNhT3RoZXJQcmltZXNJbmZvPiBvdGg7CiAg
ICAgZm9yIChjb25zdCBhdXRvJiBpbmZvIDogcnNhQ29tcG9uZW50cy0+b3RoZXJQcmltZUluZm9z
KCkpIHsKICAgICAgICAgUnNhT3RoZXJQcmltZXNJbmZvIG90aGVySW5mbzsKLSAgICAgICAgb3Ro
ZXJJbmZvLnIgPSBiYXNlNjRVUkxFbmNvZGUoaW5mby5wcmltZUZhY3Rvcik7Ci0gICAgICAgIG90
aGVySW5mby5kID0gYmFzZTY0VVJMRW5jb2RlKGluZm8uZmFjdG9yQ1JURXhwb25lbnQpOwotICAg
ICAgICBvdGhlckluZm8udCA9IGJhc2U2NFVSTEVuY29kZShpbmZvLmZhY3RvckNSVENvZWZmaWNp
ZW50KTsKKyAgICAgICAgb3RoZXJJbmZvLnIgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQo
aW5mby5wcmltZUZhY3RvcikpOworICAgICAgICBvdGhlckluZm8uZCA9IG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChpbmZvLmZhY3RvckNSVEV4cG9uZW50KSk7CisgICAgICAgIG90aGVySW5m
by50ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKGluZm8uZmFjdG9yQ1JUQ29lZmZpY2ll
bnQpKTsKICAgICAgICAgb3RoLmFwcGVuZChXVEZNb3ZlKG90aGVySW5mbykpOwogICAgIH0KICAg
ICByZXN1bHQub3RoID0gV1RGTW92ZShvdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRv
L21hYy9DcnlwdG9LZXlFQ01hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcsMTAgKzE5NywxMCBAQCBib29sIENyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVu
CiAKICAgICBpZiAoVU5MSUtFTFkoKHNpemUgIT0gcHVibGljS2V5U2l6ZSkgJiYgKHNpemUgIT0g
cHJpdmF0ZUtleVNpemUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGp3ay54ID0gV1RG
OjpiYXNlNjRVUkxFbmNvZGUocmVzdWx0LmRhdGEoKSArIDEsIGtleVNpemVJbkJ5dGVzKTsKLSAg
ICBqd2sueSA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHJlc3VsdC5kYXRhKCkgKyBrZXlTaXplSW5C
eXRlcyArIDEsIGtleVNpemVJbkJ5dGVzKTsKKyAgICBqd2sueCA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsgMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2su
eSA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUlu
Qnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRlcykpOwogICAgIGlmIChzaXplID4gcHVibGljS2V5U2l6
ZSkKLSAgICAgICAgandrLmQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShyZXN1bHQuZGF0YSgpICsg
cHVibGljS2V5U2l6ZSwga2V5U2l6ZUluQnl0ZXMpOworICAgICAgICBqd2suZCA9IG1ha2VTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6
ZUluQnl0ZXMpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1w
b3J0IDxDb21tb25DcnlwdG8vQ29tbW9uU3ltbWV0cmljS2V5d3JhcC5oPgogI2ltcG9ydCA8Y3J0
X2V4dGVybnMuaD4KICNpbXBvcnQgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CisjaW1w
b3J0IDx3dGYvT3B0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5
U1BJLmg+CkBAIC04MCwxMSArODEsMTEgQEAgc3RhdGljIE5TU3RyaW5nKiBtYXN0ZXJLZXlBY2Nv
dW50TmFtZUZvcgogICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImNvbS5h
cHBsZS5XZWJLaXQuV2ViQ3J5cHRvLm1hc3RlcislQCIsIGJ1bmRsZUlkZW50aWZpZXJdOwogfQog
Ci1zdGF0aWMgYm9vbCBjcmVhdGVBbmRTdG9yZU1hc3RlcktleShWZWN0b3I8dWludDhfdD4mIG1h
c3RlcktleURhdGEpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBjcmVhdGVBbmRT
dG9yZU1hc3RlcktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVn
ZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFscykpOwogCi0gICAgbWFzdGVy
S2V5RGF0YS5yZXNpemUobWFzdGVyS2V5U2l6ZUluQnl0ZXMpOworICAgIFZlY3Rvcjx1aW50OF90
PiBtYXN0ZXJLZXlEYXRhKG1hc3RlcktleVNpemVJbkJ5dGVzKTsKICAgICBhdXRvIHJjID0gQ0NS
YW5kb21HZW5lcmF0ZUJ5dGVzKG1hc3RlcktleURhdGEuZGF0YSgpLCBtYXN0ZXJLZXlEYXRhLnNp
emUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmMgPT0ga0NDU3VjY2Vzcyk7CiAKQEAgLTEwNyw3
ICsxMDgsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVBbmRTdG9yZU1hc3RlcktleShWZWN0CiAgICAg
c3RhdHVzID0gU2VjQWNjZXNzQ3JlYXRlKChfX2JyaWRnZSBDRlN0cmluZ1JlZilsb2NhbGl6ZWRJ
dGVtTmFtZSwgbnVsbHB0ciwgJmFjY2Vzc1JlZik7CiAgICAgaWYgKHN0YXR1cykgewogICAgICAg
ICBXVEZMb2dBbHdheXMoIkNhbm5vdCBjcmVhdGUgYSBzZWN1cml0eSBhY2Nlc3Mgb2JqZWN0IGZv
ciBzdG9yaW5nIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IH0KICAgICBSZXRhaW5QdHI8U2VjQWNjZXNzUmVmPiBhY2Nlc3MgPSBhZG9wdENGKGFjY2Vzc1Jl
Zik7CiAKQEAgLTEyMCwxOSArMTIxLDE4IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICBpZiAoc3RhdHVz
KSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IGNyZWF0ZSBhIHRydXN0ZWQgYXBwbGlj
YXRpb24gb2JqZWN0IGZvciBzdG9yaW5nIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIs
IChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIH0KICAgICBSZXRhaW5QdHI8U2VjVHJ1c3RlZEFwcGxpY2F0aW9uUmVm
PiB0cnVzdGVkQXBwID0gYWRvcHRDRih0cnVzdGVkQXBwUmVmKTsKIAogICAgIHN0YXR1cyA9IFNl
Y0FDTFNldENvbnRlbnRzKGFjbCwgKF9fYnJpZGdlIENGQXJyYXlSZWYpQFsgKF9fYnJpZGdlIGlk
KXRydXN0ZWRBcHAuZ2V0KCkgXSwgKF9fYnJpZGdlIENGU3RyaW5nUmVmKWxvY2FsaXplZEl0ZW1O
YW1lLCBrU2VjS2V5Y2hhaW5Qcm9tcHRSZXF1aXJlUGFzc3BoYXNlKTsKICAgICBpZiAoc3RhdHVz
KSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IHNldCBBQ0wgZm9yIFdlYkNyeXB0byBt
YXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KICNlbmRpZgogCi0gICAgVmVj
dG9yPGNoYXI+IGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhOwotICAgIGJhc2U2NEVuY29kZSht
YXN0ZXJLZXlEYXRhLCBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YSk7CisgICAgYXV0byBiYXNl
NjRFbmNvZGVkTWFzdGVyS2V5RGF0YSA9IGJhc2U2NEVuY29kZShtYXN0ZXJLZXlEYXRhKTsKIAog
ICAgIC8vIENhbm5vdCB1c2Uga1NlY0NsYXNzS2V5IGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVt
LzE2MDY4MjA3Pi4KICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBAewpAQCAtMTUwLDEy
ICsxNTAsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgc3RhdHVz
ID0gU2VjSXRlbUFkZCgoQ0ZEaWN0aW9uYXJ5UmVmKWF0dHJpYnV0ZXMsIG51bGxwdHIpOwogICAg
IGlmIChzdGF0dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3Qgc3RvcmUgV2ViQ3J5
cHRvIG1hc3RlciBrZXksIGVycm9yICVkIiwgKGludClzdGF0dXMpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiB0
cnVlOworCisgICAgcmV0dXJuIG1hc3RlcktleURhdGE7CiB9CiAKLXN0YXRpYyBib29sIGZpbmRN
YXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXlEYXRhKQorc3RhdGljIE9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gZmluZE1hc3RlcktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
aGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFs
cykpOwogCkBAIC0xNzAsMjAgKzE3MSwyNSBAQCBzdGF0aWMgYm9vbCBmaW5kTWFzdGVyS2V5KFZl
Y3Rvcjx1aW50OF90CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBpZiAoc3RhdHVzICE9IGVy
clNlY0l0ZW1Ob3RGb3VuZCAmJiBzdGF0dXMgIT0gZXJyU2VjVXNlckNhbmNlbGVkKQogICAgICAg
ICAgICAgV1RGTG9nQWx3YXlzKCJDb3VsZCBub3QgZmluZCBXZWJDcnlwdG8gbWFzdGVyIGtleSBp
biBLZXljaGFpbiwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPENG
RGF0YVJlZj4ga2V5RGF0YSA9IGFkb3B0Q0Yoa2V5RGF0YVJlZik7Ci0KLSAgICBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEgPSB2ZWN0b3JGcm9tTlNEYXRhKChfX2Jy
aWRnZSBOU0RhdGEgKilrZXlEYXRhLmdldCgpKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlKChj
b25zdCBjaGFyKiliYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YS5kYXRhKCksIGJhc2U2NEVuY29k
ZWRNYXN0ZXJLZXlEYXRhLnNpemUoKSwgbWFzdGVyS2V5RGF0YSk7CisgICAgcmV0dXJuIGJhc2U2
NERlY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKGtl
eURhdGEuZ2V0KCkpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGtleURhdGEuZ2V0KCkpKTsKIH0KIAotYm9v
bCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5
KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkK
IHsKLSAgICBpZiAoIWZpbmRNYXN0ZXJLZXkobWFzdGVyS2V5KSAmJiAhY3JlYXRlQW5kU3RvcmVN
YXN0ZXJLZXkobWFzdGVyS2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJFTEVBU0Vf
QVNTRVJUKG1hc3RlcktleS5zaXplKCkgPT0gbWFzdGVyS2V5U2l6ZUluQnl0ZXMpOwotICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChhdXRvIG1hc3RlcktleSA9IGZpbmRNYXN0ZXJLZXkoKSkgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtYXN0ZXJLZXktPnNpemUoKSA9PSBtYXN0ZXJLZXlTaXpl
SW5CeXRlcyk7CisgICAgICAgIHJldHVybiBtYXN0ZXJLZXk7CisgICAgfQorCisgICAgaWYgKGF1
dG8gbWFzdGVyS2V5ID0gY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoKSkgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtYXN0ZXJLZXktPnNpemUoKSA9PSBtYXN0ZXJLZXlTaXplSW5CeXRlcyk7Cisg
ICAgICAgIHJldHVybiBtYXN0ZXJLZXk7CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIH0KIAogYm9vbCBkZWxldGVEZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNT
TC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2VyaWFs
aXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2VyaWFsaXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDE0IEBACiAjaWYgRU5BQkxFKFdFQl9DUllQ
VE8pCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleShWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICBVTlVTRURfUEFSQU0obWFzdGVyS2V5KTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiAvLyBJbml0aWFsbHkgdGhlc2UgaGVscGVyIGZ1
bmN0aW9ucyB3ZXJlIGludGVuZGVkIHRvIHBlcmZvcm0gS0VLIHdyYXBwaW5nIGFuZCB1bndyYXBw
aW5nLApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsMjYgKzMzMywxMiBAQCB2b2lkIEZpbGVS
ZWFkZXJMb2FkZXI6OmNvbnZlcnRUb1RleHQoKQogCiB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNv
bnZlcnRUb0RhdGFVUkwoKQogewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoImRhdGE6Iik7Ci0KICAgICBpZiAoIW1fYnl0ZXNMb2FkZWQpIHsK
LSAgICAgICAgbV9zdHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIG1f
c3RyaW5nUmVzdWx0ID0gImRhdGE6Il9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKG1fZGF0YVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtIik7Ci0gICAgZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVuZCht
X2RhdGFUeXBlKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjtiYXNlNjQsIik7Ci0KLSAg
ICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgIGJhc2U2NEVuY29kZShtX3Jhd0RhdGEtPmRhdGEoKSwg
bV9ieXRlc0xvYWRlZCwgb3V0KTsKLSAgICBvdXQuYXBwZW5kKCdcMCcpOwotICAgIGJ1aWxkZXIu
YXBwZW5kKG91dC5kYXRhKCkpOwotCi0gICAgbV9zdHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3Ry
aW5nKCk7CisgICAgbV9zdHJpbmdSZXN1bHQgPSBtYWtlU3RyaW5nKCJkYXRhOjtiYXNlNjQsIiwg
bV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0
YVR5cGUsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQpLCAn
XDAnKTsKIH0KIAogYm9vbCBGaWxlUmVhZGVyTG9hZGVyOjppc0NvbXBsZXRlZCgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOSwxNCArNDI5LDE0IEBAIHN0ZDo6dW5pcXVlX3B0
cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNI
QTE6OkRpZ2VzdCBhdHRyc0hhc2g7CiAgICAgICAgICAgICBhdHRyc1NIQTEuY29tcHV0ZUhhc2go
YXR0cnNIYXNoKTsKLSAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0gYmFzZTY0RW5jb2Rl
KGF0dHJzSGFzaC5kYXRhKCksIDEwKTsKKyAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0g
bWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGF0dHJzSGFzaC5kYXRhKCksIDEwKSk7CiAgICAgICAg
ICAgICBhZGRTdHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaCho
YXNoKTsKLSAgICBkaWdlc3QtPnNoYTEgPSBiYXNlNjRFbmNvZGUoaGFzaC5kYXRhKCksIDEwKTsK
KyAgICBkaWdlc3QtPnNoYTEgPSBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoaGFzaC5kYXRhKCks
IDEwKSk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAgICB1bnVzZWROb2Rlc01hcC0+
YWRkKGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsMTEgKzU5OCwxMSBAQCBib29sIEluc3BlY3RvckZy
b250ZW5kSG9zdDo6c2hvd0NlcnRpZmljCiAgICAgaWYgKCFtX2NsaWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYgKCFiYXNlNjRE
ZWNvZGUoc2VyaWFsaXplZENlcnRpZmljYXRlLCBkYXRhKSkKKyAgICBhdXRvIGRhdGEgPSBiYXNl
NjREZWNvZGUoc2VyaWFsaXplZENlcnRpZmljYXRlKTsKKyAgICBpZiAoIWRhdGEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2Rlcihk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CiAgICAgT3B0aW9uYWw8Q2VydGlm
aWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUlu
Zm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB1bnNpZ25lZCBOZXR3b3JrUmVzb3VyY2Vz
RGF0YTo6UmVzb3VyY2VECiAgICAgICAgIG1fY29udGVudCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5k
Rmx1c2gobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIG1fYmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0gICAgICAgIG1fY29udGVudCA9IGJhc2U2
NEVuY29kZShtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCk7CisgICAgICAgIG1fY29u
dGVudCA9IG1ha2VTdHJpbmcoV1RGOjpiYXNlNjRFbmNvZGVkKG1fZGF0YUJ1ZmZlci0+ZGF0YSgp
LCBkYXRhTGVuZ3RoKSk7CiAgICAgfQogCiAgICAgbV9kYXRhQnVmZmVyID0gbnVsbHB0cjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwOSw3
ICsxNzA5LDcgQEAgc3RhdGljIFN0cmluZyBjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saQogICAg
IGF1dG8gY3J5cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0
b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVz
KGNvbnRlbnQuZGF0YSgpLCBjb250ZW50LnNpemUoKSk7CiAgICAgYXV0byBkaWdlc3QgPSBjcnlw
dG9EaWdlc3QtPmNvbXB1dGVIYXNoKCk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1Ni0i
LCBiYXNlNjRFbmNvZGUoZGlnZXN0LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOworICAgIHJldHVy
biBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChkaWdlc3QuZGF0YSgpLCBkaWdl
c3Quc2l6ZSgpKSk7CiB9CiAKIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01B
Z2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwgTm9kZVRvSWRN
YXAqIG5vZGVzTWFwKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAgUmVmPFByb3RvY29sOjpOZXR3
b3JrOjpXZWJTb2NrZXRGcmFtZT4gYgogICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6V2Vi
U29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQog
ICAgICAgICAuc2V0TWFzayhmcmFtZS5tYXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShm
cmFtZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJh
bWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNlNjRFbmNvZGUoZnJhbWUucGF5
bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpCisgICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFt
ZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUu
cGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQo
ZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpKQogICAgICAgICAuc2V0UGF5bG9h
ZExlbmd0aChmcmFtZS5wYXlsb2FkTGVuZ3RoKQogICAgICAgICAucmVsZWFzZSgpOwogfQpAQCAt
NTg2LDcgKzU4Niw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGEK
ICAgICAgICAgLy8gT2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBhIGRl
Y29kZXIsIGJ1dCBmb3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAgICAg
IC8vIFN5bmMgWEhScyBtYXkgbm90IGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5vbi1z
eW5jIFhIUnMgdXN1YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAgICAg
ICAgaWYgKG1fbG9hZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFyZXNv
dXJjZURhdGEtPmhhc0J1ZmZlcmVkRGF0YSgpICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291
cmNlKCkpCi0gICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChy
ZXF1ZXN0SWQsIGJhc2U2NEVuY29kZShkYXRhLCBkYXRhTGVuZ3RoKSwgdHJ1ZSk7CisgICAgICAg
ICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIG1ha2VT
dHJpbmcoYmFzZTY0RW5jb2RlZChkYXRhLCBkYXRhTGVuZ3RoKSksIHRydWUpOwogICAgIH0KIAog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kYXRhUmVjZWl2ZWQocmVxdWVzdElkLCB0aW1lc3Rh
bXAoKSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGFMZW5ndGgpOwpAQCAtMTAwNCw3ICsxMDA0LDcg
QEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0bwogCiAgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIFdURjo6UGVyc2lzdGVuY2U6OkNvZGVy
PFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZShlbmNvZGVyLCBjZXJ0aWZpY2F0ZS52
YWx1ZSgpKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGVu
Y29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKSk7CiB9CiAKIFdlYlNvY2tldCog
SW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9j
b2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQpAQCAtMTIwMiwxMSArMTIwMiwxMSBA
QCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOCiAgICAgICAgIHJlcXVl
c3Quc2V0SFRUUEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0SGVhZGVycykpOwogICAgIH0K
ICAgICBpZiAoISFwb3N0RGF0YSkgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwot
ICAgICAgICBpZiAoIWJhc2U2NERlY29kZShwb3N0RGF0YSwgYnVmZmVyKSkKKyAgICAgICAgYXV0
byBidWZmZXIgPSBiYXNlNjREZWNvZGUocG9zdERhdGEpOworICAgICAgICBpZiAoIWJ1ZmZlcikK
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZl
biBwb3N0RGF0YSJfcyk7CiAKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShGb3JtRGF0YTo6
Y3JlYXRlKGJ1ZmZlcikpOworICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KEZvcm1EYXRhOjpj
cmVhdGUoV1RGTW92ZSgqYnVmZmVyKSkpOwogICAgIH0KICAgICAvLyBGSVhNRTogZmlndXJlIG91
dCBob3cgdG8gaWRlbnRpZnkgd2hlbiBhIHJlcXVlc3QgaGFzIGJlZW4gb3ZlcnJpZGRlbiB3aGVu
IHdlIGFkZCB0aGlzIHRvIHRoZSBmcm9udGVuZC4KICAgICBwZW5kaW5nUmVxdWVzdC0+Y29udGlu
dWVXaXRoUmVxdWVzdChyZXF1ZXN0KTsKQEAgLTEyNDIsMTEgKzEyNDIsMTEgQEAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gb3ZlcnJpZGVEYXRhOwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1
ZmZlcikpCisgICAgICAgIGF1dG8gYnVmZmVyID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQpOworICAg
ICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5h
YmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zKTsKIAotICAgICAgICBvdmVycmlkZURhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICBvdmVycmlk
ZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVs
c2UKICAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC51
dGY4KCkuZGF0YSgpLCBjb250ZW50LnV0ZjgoKS5sZW5ndGgoKSk7CiAKQEAgLTEyNjgsMTEgKzEy
NjgsMTEgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgogCiAgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAg
ICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShj
b250ZW50LCBidWZmZXIpKQorICAgICAgICBhdXRvIGJ1ZmZlciA9IGJhc2U2NERlY29kZShjb250
ZW50KTsKKyAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfcyk7CiAKLSAgICAgICAgZGF0
YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIGRhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVsc2UKICAg
ICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwg
Y29udGVudC51dGY4KCkubGVuZ3RoKCkpOwogCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCBib29sIElu
c3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3VyCiAgICAgICAgIH0KIAogICAgICAgICAq
YmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGUoYnVm
ZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgKnJlc3VsdCA9IG1ha2VTdHJp
bmcoV1RGOjpiYXNlNjRFbmNvZGVkKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBib29sIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29uCiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZGF0YUNvbnRlbnQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaW5n
JiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0
KQogewogICAgIGlmICh3aXRoQmFzZTY0RW5jb2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNl
NjRFbmNvZGUoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1bHQgPSBtYWtlU3RyaW5nKGJhc2U2
NEVuY29kZWQoZGF0YSwgc2l6ZSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTExMDIsNyArMTEwMiw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG8KICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBh
cmNoaXZlIGZvciBtYWluIGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1
ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgIHJldHVybiBiYXNl
NjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgo
YnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChDRkRh
dGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkp
KSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTE4LDcgKzMxMTgsNyBAQCB1bnNpZ25lZCBsb25nIEZy
YW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTCiAgICAgICAgIEFTU0VSVCghbmV3UmVxdWVzdC5pc051
bGwoKSk7CiAKICAgICAgICAgaWYgKCFkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLm1heWJlTG9hZFN5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNl
LCBkYXRhKSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAgICAgICAg
IFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CiAgICAgICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSgqdGhpcywgaWRl
bnRpZmllciwgbmV3UmVxdWVzdCwgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgb3B0aW9ucywgb3Jp
Z2luYWxSZXF1ZXN0SGVhZGVycywgZXJyb3IsIHJlc3BvbnNlLCBidWZmZXIpOwogICAgICAgICAg
ICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CiAgICAgICAg
ICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLm1heWJlTG9hZEZh
bGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBGZXRjaE9wdGlvbnM7CiBjbGFzcyBXRUJDT1JF
X0VYUE9SVCBMb2FkZXJTdHJhdGVneSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZShGcmFtZSYsIENhY2hlZFJlc291cmNlJiwgUmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0
IFJlc291cmNlTG9hZGVyT3B0aW9ucyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiYmKT4mJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBGZXRj
aE9wdGlvbnMmLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29u
c3QgRmV0Y2hPcHRpb25zJiwgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHBhZ2VMb2FkQ29tcGxldGVkKFBhZ2UmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGJy
b3dzaW5nQ29udGV4dFJlbW92ZWQoRnJhbWUmKSA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL1ByaXZhdGVDbGlja01lYXN1cmVtZW50LmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1ByaXZhdGVDbGlja01lYXN1cmVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDEwICsxODksMTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudDo6RXBoZW1lcmFsUwogewogICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBpZiB3
ZSBjYW4gZG8gd2l0aCBhIHNpbXBsZSBsZW5ndGggY2hlY2sgaW5zdGVhZCBvZiBkZWNvZGluZy4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxOTQ1Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKLSAgICBpZiAoIWJhc2U2NFVSTERlY29kZShub25j
ZSwgZGlnZXN0KSkKKyAgICBhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShub25jZSk7Cisg
ICAgaWYgKCFkaWdlc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZGlnZXN0
LnNpemUoKSA9PSBFcGhlbWVyYWxTb3VyY2VOb25jZVJlcXVpcmVkTnVtYmVyT2ZCeXRlczsKKyAg
ICByZXR1cm4gZGlnZXN0LT5zaXplKCkgPT0gRXBoZW1lcmFsU291cmNlTm9uY2VSZXF1aXJlZE51
bWJlck9mQnl0ZXM7CiB9CiAKIHZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OnNldEVwaGVt
ZXJhbFNvdXJjZU5vbmNlKEVwaGVtZXJhbFNvdXJjZU5vbmNlJiYgbm9uY2UpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDE0ICs2OSwxNSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgCiAgICAgaWYgKGJ1ZmZl
ci5wb3NpdGlvbigpID09IGJlZ2luSGFzaFZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKICAgICBTdHJpbmdWaWV3IGhhc2hW
YWx1ZShiZWdpbkhhc2hWYWx1ZSwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbkhhc2hWYWx1ZSk7
Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoaGFzaFZhbHVlLCBkaWdlc3QsIEJhc2U2NFZhbGlkYXRl
UGFkZGluZykpIHsKLSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoaGFzaFZhbHVlLCBkaWdl
c3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CiAKLSAgICByZXR1
cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgV1RGTW92ZShkaWdl
c3QpIH07CisgICAgaWYgKGF1dG8gZGlnZXN0ID0gYmFzZTY0RGVjb2RlKGhhc2hWYWx1ZSwgQmFz
ZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsK
KworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShoYXNoVmFsdWUpKQorICAg
ICAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgV1RG
TW92ZSgqZGlnZXN0KSB9OworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogT3B0aW9u
YWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3Qo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIGJ1ZmZlcikKQEAgLTEyNCwxMyArMTI1LDEzIEBA
IE9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWcKIAogT3B0aW9uYWw8UmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0KGNvbnN0IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QmIGVuY29k
ZWREaWdlc3QpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKLSAgICBpZiAoIWJhc2U2
NERlY29kZShlbmNvZGVkRGlnZXN0LmRpZ2VzdCwgZGlnZXN0LCBCYXNlNjRWYWxpZGF0ZVBhZGRp
bmcpKSB7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGVuY29kZWREaWdlc3QuZGlnZXN0
LCBkaWdlc3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CisgICAg
aWYgKGF1dG8gZGlnZXN0ID0gYmFzZTY0RGVjb2RlKGVuY29kZWREaWdlc3QuZGlnZXN0LCBCYXNl
NjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICByZXR1cm4gUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERpZ2VzdC5hbGdvcml0aG0sIFdURk1vdmUo
KmRpZ2VzdCkgfTsKKworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShlbmNv
ZGVkRGlnZXN0LmRpZ2VzdCkpCisgICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QgeyBlbmNvZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZSgqZGlnZXN0KSB9OwogCi0g
ICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGVuY29kZWREaWdlc3QuYWxn
b3JpdGhtLCBXVEZNb3ZlKGRpZ2VzdCkgfTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
CiBzdGF0aWMgUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobSB0b0NyeXB0b0RpZ2VzdEFsZ29y
aXRobShSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG0pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1M
QXJjaGl2ZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw5ICsx
NjcsNyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlCiAKICAgICBm
b3IgKGF1dG8mIHJlc291cmNlIDogcmVzb3VyY2VzKSB7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
Y2xlYXIoKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNvdXJjZUJvdW5k
YXJ5KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQtVHlwZTogIik7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291cmNlLm1pbWVUeXBlKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNvdXJjZUJvdW5kYXJ5LCAiQ29udGVudC1UeXBl
OiAiLCByZXNvdXJjZS5taW1lVHlwZSk7CiAKICAgICAgICAgY29uc3QgY2hhciogY29udGVudEVu
Y29kaW5nID0gbnVsbHB0cjsKICAgICAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSmF2YVNjcmlwdE1JTUVUeXBlKHJlc291cmNlLm1pbWVUeXBlKSB8fCBNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUocmVzb3VyY2UubWltZVR5cGUpKQpAQCAt
MTc3LDExICsxNzUsNyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRl
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZyA9IGJhc2U2NDsKIAot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rp
bmc6ICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjb250ZW50RW5jb2RpbmcpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtTG9jYXRpb246ICIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyZXNvdXJjZS51cmwuc3RyaW5nKCkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcblxyXG4iKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIlxyXG5Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAiLCBjb250ZW50RW5j
b2RpbmcsICJcclxuQ29udGVudC1Mb2NhdGlvbjogIiwgcmVzb3VyY2UudXJsLnN0cmluZygpLCAi
XHJcblxyXG4iKTsKIAogICAgICAgICBhc2NpaVN0cmluZyA9IHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKS51dGY4KCk7CiAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEo
KSwgYXNjaWlTdHJpbmcubGVuZ3RoKCkpOwpAQCAtMTg5LDE1ICsxODMsMTQgQEAgUmVmPFNoYXJl
ZEJ1ZmZlcj4gTUhUTUxBcmNoaXZlOjpnZW5lcmF0ZQogICAgICAgICAvLyBGSVhNRTogaWRlYWxs
eSB3ZSB3b3VsZCBlbmNvZGUgdGhlIGNvbnRlbnQgYXMgYSBzdHJlYW0gd2l0aG91dCBoYXZpbmcg
dG8gZmV0Y2ggaXQgYWxsLgogICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gcmVzb3VyY2UuZGF0
YS0+ZGF0YSgpOwogICAgICAgICBzaXplX3QgZGF0YUxlbmd0aCA9IHJlc291cmNlLmRhdGEtPnNp
emUoKTsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOwogICAgICAgICBpZiAoIXN0
cmNtcChjb250ZW50RW5jb2RpbmcsIHF1b3RlZFByaW50YWJsZSkpIHsKLSAgICAgICAgICAgIHF1
b3RlZFByaW50YWJsZUVuY29kZShkYXRhLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YSk7CisgICAg
ICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBkYXRhTGVuZ3RoKTsKICAgICAgICAgICAg
IG1odG1sRGF0YS0+YXBwZW5kKGVuY29kZWREYXRhLmRhdGEoKSwgZW5jb2RlZERhdGEuc2l6ZSgp
KTsKICAgICAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKCJcclxuIiwgMik7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoIXN0cmNtcChjb250ZW50RW5jb2RpbmcsIGJhc2U2
NCkpOwogICAgICAgICAgICAgLy8gV2UgYXJlIG5vdCBzcGVjaWZ5aW5nIGluc2VydExGcyA9IHRy
dWUgYmVsb3cgYXMgaXQgd291bGQgY3V0IHRoZSBsaW5lcyB3aXRoIExGcyBhbmQgTUhUTUwgcmVx
dWlyZXMgQ1JMRnMuCi0gICAgICAgICAgICBiYXNlNjRFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCwg
ZW5jb2RlZERhdGEpOworICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGJhc2U2NEVuY29k
ZShkYXRhLCBkYXRhTGVuZ3RoKTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhpbXVtTGlu
ZUxlbmd0aCA9IDc2OwogICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKICAgICAgICAgICAg
IHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21o
dG1sL01IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDE2ICsxOTIsMTkgQEAg
UmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gTUhUTUxQYXJzZXI6OnBhcgogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKICAgICBzd2l0Y2ggKG1pbWVIZWFkZXIuY29udGVudFRyYW5zZmVyRW5jb2Rp
bmcoKSkgewotICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OgotICAgICAgICBpZiAoIWJhc2U2
NERlY29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSwgZGF0YSkpIHsKKyAgICBj
YXNlIE1JTUVIZWFkZXI6OkJhc2U2NDogeworICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFz
ZTY0RGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+c2l6ZSgpKTsKKyAgICAgICAgaWYg
KCFkZWNvZGVkRGF0YSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIGJhc2U2NCBj
b250ZW50IGZvciBNSFRNTCBwYXJ0LiIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIH0KKyAgICAgICAgZGF0YSA9IFdURk1vdmUoKmRlY29kZWREYXRhKTsKICAgICAgICAg
YnJlYWs7CisgICAgfQogICAgIGNhc2UgTUlNRUhlYWRlcjo6UXVvdGVkUHJpbnRhYmxlOgotICAg
ICAgICBxdW90ZWRQcmludGFibGVEZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXpl
KCksIGRhdGEpOworICAgICAgICBkYXRhID0gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNvbnRlbnQtPmRhdGEoKSksIGNvbnRlbnQtPnNpemUo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTUlNRUhlYWRlcjo6U2V2ZW5CaXQ6CiAgICAg
Y2FzZSBNSU1FSGVhZGVyOjpCaW5hcnk6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY29j
b2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NvY29hL1ByaXZhdGVDbGlj
a01lYXN1cmVtZW50Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwxMCBAQCBi
b29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBCiB7CiAjaWYgSEFWRShSU0Ff
QlNTQSkKICAgICB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBzZXJ2ZXJQdWJsaWNLZXlEYXRh
OwotICAgICAgICBpZiAoIWJhc2U2NFVSTERlY29kZShzZXJ2ZXJQdWJsaWNLZXlCYXNlNjRVUkws
IHNlcnZlclB1YmxpY0tleURhdGEpKQorICAgICAgICBhdXRvIHNlcnZlclB1YmxpY0tleURhdGEg
PSBiYXNlNjRVUkxEZWNvZGUoc2VydmVyUHVibGljS2V5QmFzZTY0VVJMKTsKKyAgICAgICAgaWYg
KCFzZXJ2ZXJQdWJsaWNLZXlEYXRhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBhdXRvIHNlcnZlclB1YmxpY0tleSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRo
Qnl0ZXM6c2VydmVyUHVibGljS2V5RGF0YS5kYXRhKCkgbGVuZ3RoOnNlcnZlclB1YmxpY0tleURh
dGEuc2l6ZSgpXSk7CisgICAgICAgIGF1dG8gc2VydmVyUHVibGljS2V5ID0gYWRvcHROUyhbW05T
RGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzZXJ2ZXJQdWJsaWNLZXlEYXRhLT5kYXRhKCkgbGVu
Z3RoOnNlcnZlclB1YmxpY0tleURhdGEtPnNpemUoKV0pOwogCiAgICAgICAgIC8vIEZJWE1FKDIy
MjAxOCk6IENoZWNrIGVycm9yLgogICAgICAgICBtX3NvdXJjZVVubGlua2FibGVUb2tlbi5ibGlu
ZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1JTQUJTU0FUb2tlbkJsaW5kZXJJbnN0YW5jZSgpIGlu
aXRXaXRoUHVibGljS2V5OnNlcnZlclB1YmxpY0tleS5nZXQoKSBlcnJvcjpudWxscHRyXSk7CkBA
IC01MCw3ICs1MCw3IEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUEK
ICAgICBpZiAoIW1fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4udmFsdWVCYXNlNjRV
UkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGlu
Z1Rva2VuIGJsaW5kZWRNZXNzYWdlXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLndh
aXRpbmdUb2tlbiBibGluZGVkTWVzc2FnZV0ubGVuZ3RoKTsKKyAgICBtX3NvdXJjZVVubGlua2Fi
bGVUb2tlbi52YWx1ZUJhc2U2NFVSTCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChbbV9z
b3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuIGJsaW5kZWRNZXNzYWdlXS5ieXRlcywg
W21fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBibGluZGVkTWVzc2FnZV0ubGVu
Z3RoKSk7CiAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZXJ2ZXJQ
dWJsaWNLZXlCYXNlNjRVUkwpOwpAQCAtNjUsMTAgKzY1LDEwIEBAIGJvb2wgUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUEKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgewot
ICAgICAgICBWZWN0b3I8dWludDhfdD4gc2VydmVyUmVzcG9uc2VEYXRhOwotICAgICAgICBpZiAo
IWJhc2U2NFVSTERlY29kZShzZXJ2ZXJSZXNwb25zZUJhc2U2NFVSTCwgc2VydmVyUmVzcG9uc2VE
YXRhKSkKKyAgICAgICAgYXV0byBzZXJ2ZXJSZXNwb25zZURhdGEgPSBiYXNlNjRVUkxEZWNvZGUo
c2VydmVyUmVzcG9uc2VCYXNlNjRVUkwpOworICAgICAgICBpZiAoIXNlcnZlclJlc3BvbnNlRGF0
YSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byBzZXJ2ZXJSZXNwb25z
ZSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2VydmVyUmVzcG9uc2VE
YXRhLmRhdGEoKSBsZW5ndGg6c2VydmVyUmVzcG9uc2VEYXRhLnNpemUoKV0pOworICAgICAgICBh
dXRvIHNlcnZlclJlc3BvbnNlID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRl
czpzZXJ2ZXJSZXNwb25zZURhdGEtPmRhdGEoKSBsZW5ndGg6c2VydmVyUmVzcG9uc2VEYXRhLT5z
aXplKCldKTsKIAogICAgICAgICAvLyBGSVhNRSgyMjIwMTgpOiBDaGVjayBlcnJvci4KICAgICAg
ICAgbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiA9IFttX3NvdXJjZVVubGlua2Fi
bGVUb2tlbi53YWl0aW5nVG9rZW4gYWN0aXZhdGVUb2tlbldpdGhTZXJ2ZXJSZXNwb25zZTpzZXJ2
ZXJSZXNwb25zZS5nZXQoKSBlcnJvcjpudWxscHRyXTsKQEAgLTc3LDkgKzc3LDkgQEAgYm9vbCBQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogICAgIH0KIAogICAgIFNvdXJjZVNl
Y3JldFRva2VuIHRva2VuOwotICAgIHRva2VuLnRva2VuQmFzZTY0VVJMID0gV1RGOjpiYXNlNjRV
UkxFbmNvZGUoW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50
XS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50
XS5sZW5ndGgpOwotICAgIHRva2VuLmtleUlEQmFzZTY0VVJMID0gV1RGOjpiYXNlNjRVUkxFbmNv
ZGUoW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRdLmJ5dGVzLCBbbV9z
b3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBrZXlJZF0ubGVuZ3RoKTsKLSAgICB0b2tl
bi5zaWduYXR1cmVCYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxp
bmthYmxlVG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1cmVdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmth
YmxlVG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1cmVdLmxlbmd0aCk7CisgICAgdG9rZW4udG9rZW5C
YXNlNjRVUkwgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW21fc291cmNlVW5saW5rYWJs
ZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50XS5ieXRlcywgW21fc291cmNlVW5saW5rYWJs
ZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50XS5sZW5ndGgpKTsKKyAgICB0b2tlbi5rZXlJ
REJhc2U2NFVSTCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChbbV9zb3VyY2VVbmxpbmth
YmxlVG9rZW4ucmVhZHlUb2tlbiBrZXlJZF0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tl
bi5yZWFkeVRva2VuIGtleUlkXS5sZW5ndGgpKTsKKyAgICB0b2tlbi5zaWduYXR1cmVCYXNlNjRV
UkwgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoW21fc291cmNlVW5saW5rYWJsZVRva2Vu
LnJlYWR5VG9rZW4gc2lnbmF0dXJlXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJl
YWR5VG9rZW4gc2lnbmF0dXJlXS5sZW5ndGgpKTsKIAogICAgIG1fc291cmNlU2VjcmV0VG9rZW4g
PSBXVEZNb3ZlKHRva2VuKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YnRvCiAgICAgaWYgKCFz
dHJpbmdUb0VuY29kZS5pc0FsbExhdGluMSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKHN0cmlu
Z1RvRW5jb2RlLmxhdGluMSgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVk
KHN0cmluZ1RvRW5jb2RlLmxhdGluMSgpKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPFN0cmluZz4gQmFz
ZTY0VXRpbGl0aWVzOjphdG9iKGNvbnN0IFN0cmluZyYgZW5jb2RlZFN0cmluZykKQEAgLTQ2LDEx
ICs0NiwxMSBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YXRvCiAgICAg
aWYgKGVuY29kZWRTdHJpbmcuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAot
ICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoZW5jb2RlZFN0cmlu
Zywgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgfCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdM
aW5lcyB8IEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikpCisgICAgYXV0byBkZWNvZGVkRGF0YSA9
IGJhc2U2NERlY29kZShlbmNvZGVkU3RyaW5nLCB7IEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlk
YXRlUGFkZGluZywgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMs
IEJhc2U2NERlY29kZU9wdGlvbnM6OkRpc2NhcmRWZXJ0aWNhbFRhYiB9KTsKKyAgICBpZiAoIWRl
Y29kZWREYXRhKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVy
cm9yIH07CiAKLSAgICByZXR1cm4gU3RyaW5nKG91dC5kYXRhKCksIG91dC5zaXplKCkpOworICAg
IHJldHVybiBTdHJpbmcoZGVjb2RlZERhdGEtPmRhdGEoKSwgZGVjb2RlZERhdGEtPnNpemUoKSk7
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0OCw5ICsxODQ4
LDggQEAgdm9pZCBQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZAogICAgIGlmICh1
cmwucHJvdG9jb2xJc0RhdGEoKSAmJiB1cmwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiZGF0YTp0ZXh0
L2NzcztjaGFyc2V0PXV0Zi04O2Jhc2U2NCwiKSkgewogICAgICAgICBtX2RpZExvYWRVc2VyU3R5
bGVTaGVldCA9IHRydWU7CiAKLSAgICAgICAgVmVjdG9yPGNoYXI+IHN0eWxlU2hlZXRBc1VURjg7
Ci0gICAgICAgIGlmIChiYXNlNjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5z
dHJpbmcoKS5zdWJzdHJpbmcoMzUpKSwgc3R5bGVTaGVldEFzVVRGOCwgQmFzZTY0SWdub3JlU3Bh
Y2VzQW5kTmV3TGluZXMpKQotICAgICAgICAgICAgbV91c2VyU3R5bGVTaGVldCA9IFN0cmluZzo6
ZnJvbVVURjgoc3R5bGVTaGVldEFzVVRGOC5kYXRhKCksIHN0eWxlU2hlZXRBc1VURjguc2l6ZSgp
KTsKKyAgICAgICAgaWYgKGF1dG8gc3R5bGVTaGVldEFzVVRGOCA9IGJhc2U2NERlY29kZShkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnN0cmluZygpLnN1YnN0cmluZygzNSkpLCBCYXNlNjRE
ZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykpCisgICAgICAgICAgICBtX3Vz
ZXJTdHlsZVNoZWV0ID0gU3RyaW5nOjpmcm9tVVRGOChzdHlsZVNoZWV0QXNVVEY4LT5kYXRhKCks
IHN0eWxlU2hlZXRBc1VURjgtPnNpemUoKSk7CiAgICAgfQogCiAgICAgZm9yRWFjaERvY3VtZW50
KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCwxMSBA
QCB2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IGNoYXIqIGRhCiAgICAgQVNTRVJUKGlu
dGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCit2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXBwZW5kKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBsZW5ndGgpOworfQorCiB2b2lkIFNoYXJlZEJ1
ZmZlcjo6YXBwZW5kKFZlY3RvcjxjaGFyPiYmIGRhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0Jl
ZW5Db21iaW5lZEludG9PbmVTZWdtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1No
YXJlZEJ1ZmZlci5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwogICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IGNoYXIqLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QpOwogICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxjaGFyPiYmKTsKIAogICAgIHZvaWQg
Y2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2Ns
ZWFya2V5L0NETUNsZWFyS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5
L0NETUNsZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTIgKzc5LDE1IEBAIHN0YXRp
YyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4KICAgICAgICAgICAgIGlmICgha2V5
VmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBLZXlJ
RFR5cGUga2V5SUREYXRhOwotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUhhbmRsZVZh
bHVlRGF0YTsKLSAgICAgICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsg
a2V5SUREYXRhIH0pIHx8ICFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlWYWx1ZSwgeyBrZXlIYW5k
bGVWYWx1ZURhdGEgfSkpCisgICAgICAgICAgICBhdXRvIGtleUlERGF0YSA9IGJhc2U2NFVSTERl
Y29kZShrZXlJRCk7CisgICAgICAgICAgICBpZiAoIWtleUlERGF0YSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAgICAgYXV0byBrZXlIYW5kbGVWYWx1
ZURhdGEgPSBiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUpOworICAgICAgICAgICAgaWYgKCFrZXlI
YW5kbGVWYWx1ZURhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
ICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5SGFuZGxlOjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNz
aW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3ZlKGtleUhh
bmRsZVZhbHVlRGF0YSkpKTsKKyAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZChLZXlIYW5k
bGU6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlLCBXVEZNb3Zl
KCprZXlJRERhdGEpLCBXVEZNb3ZlKCprZXlIYW5kbGVWYWx1ZURhdGEpKSk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSk7CiAgICAgaWYgKCF2YWxpZEZvcm1hdCkKQEAgLTIx
NSw4ICsyMTgsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiAg
ICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9m
IHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5j
ZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGtleUlkQ291bnQ7IGkrKykgewotICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2
NFVSTEVuY29kZSgmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKTsKLSAg
ICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOworICAgICAgICBrZXlJZHNBcnJh
eS0+cHVzaFN0cmluZyhtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoJmRhdGFbaW5kZXhdLCBD
bGVhcktleTo6S2V5SURTaXplSW5CeXRlcykpKTsKICAgICAgICAgaW5kZXggKz0gQ2xlYXJLZXk6
OktleUlEU2l6ZUluQnl0ZXM7CiAgICAgfQogCkBAIC0yNDMsOCArMjQ1LDcgQEAgc3RhdGljIFJl
ZjxTaGFyZWRCdWZmZXI+IGV4dHJhY3RLZXlJZEZybwogICAgIC8vIFRoZSBmb3JtYXQgaXMgYSBK
U09OIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKICAgICAvLyAia2lk
cyIKICAgICAvLyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5
IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5p
bmcgdGhlIGtleSBJRCB2YWx1ZS4KLSAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVu
Y29kZShpbml0RGF0YS5kYXRhKCksIGluaXREYXRhLnNpemUoKSk7Ci0gICAga2V5SWRzQXJyYXkt
PnB1c2hTdHJpbmcoa2V5SWQpOworICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKG1ha2VTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlZChpbml0RGF0YS5kYXRhKCksIGluaXREYXRhLnNpemUoKSkpKTsK
IAogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtleUlkc0FycmF5KSk7CiAg
ICAgQ1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpAQCAt
NTg3LDcgKzU4OCw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVMK
ICAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsKICAgICAgICAgICAgICAg
ICBBU1NFUlQoa2V5LT5pZCgpLnNpemUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpOwotICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKFdURjo6YmFzZTY0
VVJMRW5jb2RlKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5zaXplKCkpKTsKKyAgICAgICAg
ICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoa2V5
LT5pZCgpLmRhdGEoKSwga2V5LT5pZCgpLnNpemUoKSkpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJvb3RPYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShhcnJheSkpOwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MywxMSArMTEzLDExIEBAIHN0YXRpYyBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+IGV4dHJhY3QK
ICAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFZl
Y3RvcjxjaGFyPiBzaW5mRGF0YTsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NERlY29kZShrZXlJ
RCwgeyBzaW5mRGF0YSB9LCBXVEY6OkJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSkKKyAg
ICAgICAgYXV0byBzaW5mRGF0YSA9IGJhc2U2NERlY29kZShrZXlJRCwgQmFzZTY0RGVjb2RlT3B0
aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpOworICAgICAgICBpZiAoIXNpbmZEYXRhKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc2luZnMudW5jaGVja2VkQXBwZW5kKFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoc2luZkRhdGEpKSk7CisgICAgICAgIHNpbmZzLnVu
Y2hlY2tlZEFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpzaW5mRGF0YSkpKTsK
ICAgICB9CiAKICAgICByZXR1cm4gc2luZnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5t
bQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTcxNSw3ICs3MTUsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lv
bkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgIGlkZW50aWZpZXIgPSBhZG9wdE5TKFtbTlNTdHJp
bmcgYWxsb2NdIGluaXRXaXRoRGF0YTppbml0RGF0YS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZW5j
b2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKICNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5H
X0NFTkNfSU5JVERBVEEpCiAgICAgZWxzZSBpZiAoaW5pdERhdGFUeXBlID09IEluaXREYXRhUmVn
aXN0cnk6OmNlbmNOYW1lKCkpIHsKLSAgICAgICAgU3RyaW5nIHBzc2hTdHJpbmcgPSBiYXNlNjRF
bmNvZGUoaW5pdERhdGEtPmRhdGEoKSwgaW5pdERhdGEtPnNpemUoKSk7CisgICAgICAgIGF1dG8g
cHNzaFN0cmluZyA9IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChpbml0RGF0YS0+ZGF0YSgpLCBp
bml0RGF0YS0+c2l6ZSgpKSk7CiAgICAgICAgIGluaXRpYWxpemF0aW9uRGF0YSA9IFtOU0pTT05T
ZXJpYWxpemF0aW9uIGRhdGFXaXRoSlNPTk9iamVjdDpAeyBAInBzc2giOiAoTlNTdHJpbmcqKXBz
c2hTdHJpbmcgfSBvcHRpb25zOk5TSlNPTldyaXRpbmdQcmV0dHlQcmludGVkIGVycm9yOm5pbF07
CiAgICAgfQogI2VuZGlmCkBAIC04NTAsMTEgKzg1MCwxMSBAQCB2b2lkIENETUluc3RhbmNlU2Vz
c2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgICAgICBpZiAoIWtleUlEU3RyaW5nKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGtleUlEVmVjdG9yOwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoa2V5SURTdHJpbmcs
IGtleUlEVmVjdG9yKSkKKyAgICAgICAgICAgIGF1dG8ga2V5SURWZWN0b3IgPSBiYXNlNjREZWNv
ZGUoa2V5SURTdHJpbmcpOworICAgICAgICAgICAgaWYgKGtleUlEVmVjdG9yKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgYXV0byBrZXlJRCA9IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5SURWZWN0b3IpKTsKKyAgICAgICAgICAgIGF1dG8ga2V5
SUQgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCprZXlJRFZlY3RvcikpOwogICAgICAg
ICAgICAgYXV0byBmb3VuZEluZGV4ID0gbV9jdXJyZW50UmVxdWVzdC52YWx1ZSgpLnJlcXVlc3Rz
LmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIHJlcXVlc3QpIHsKICAgICAgICAgICAgICAgICBhdXRv
IGtleUlEcyA9IGtleUlEc0ZvclJlcXVlc3QocmVxdWVzdC5nZXQoKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGtleUlEcy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IFJlZjxTaGFyZWRCdWZmZXI+
JiBpZCkgewpAQCAtODg1LDEwICs4ODUsMTAgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWly
UGxheVN0cmVhbWluZwogICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZFN0cmluZyA9IHBheWxv
YWRGaW5kUmVzdWx0cy0+dmFsdWUtPmFzU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFw
YXlsb2FkU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHBheWxvYWRWZWN0b3I7Ci0gICAgICAgICAgICAgICAg
aWYgKCFiYXNlNjREZWNvZGUocGF5bG9hZFN0cmluZywgcGF5bG9hZFZlY3RvcikpCisgICAgICAg
ICAgICAgICAgYXV0byBwYXlsb2FkVmVjdG9yID0gYmFzZTY0RGVjb2RlKHBheWxvYWRTdHJpbmcp
OworICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZFZlY3RvcikKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZERhdGEgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKHBheWxvYWRWZWN0b3IpKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHBheWxvYWREYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqcGF5bG9h
ZFZlY3RvcikpOwogICAgICAgICAgICAgICAgIFtyZXF1ZXN0IHByb2Nlc3NDb250ZW50S2V5UmVz
cG9uc2U6W1BBTDo6Z2V0QVZDb250ZW50S2V5UmVzcG9uc2VDbGFzcygpIGNvbnRlbnRLZXlSZXNw
b25zZVdpdGhGYWlyUGxheVN0cmVhbWluZ0tleVJlc3BvbnNlRGF0YTpwYXlsb2FkRGF0YS0+Y3Jl
YXRlTlNEYXRhKCkuZ2V0KCldXTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMTE5NSw4ICsxMTk1LDggQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxh
eVN0cmVhbWluZwogICAgICAgICAgICAgYXV0byBlbnRyeSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICBhdXRvJiBrZXlJRCA9IHJlcXVlc3REYXRhLmZpcnN0OwogICAgICAg
ICAgICAgYXV0byYgcGF5bG9hZCA9IHJlcXVlc3REYXRhLnNlY29uZDsKLSAgICAgICAgICAgIGVu
dHJ5LT5zZXRTdHJpbmcoImtleUlEIiwgYmFzZTY0RW5jb2RlKGtleUlELT5kYXRhKCksIGtleUlE
LT5zaXplKCkpKTsKLSAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoInBheWxvYWQiLCBiYXNl
NjRFbmNvZGUocGF5bG9hZC5nZXQoKS5ieXRlcywgcGF5bG9hZC5nZXQoKS5sZW5ndGgpKTsKKyAg
ICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImtleUlEIiwgbWFrZVN0cmluZyhiYXNlNjRFbmNv
ZGVkKGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKSk7CisgICAgICAgICAgICBlbnRyeS0+
c2V0U3RyaW5nKCJwYXlsb2FkIiwgbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHBheWxvYWQuZ2V0
KCkuYnl0ZXMsIHBheWxvYWQuZ2V0KCkubGVuZ3RoKSkpOwogICAgICAgICAgICAgcmVxdWVzdEpT
T04tPnB1c2hPYmplY3QoV1RGTW92ZShlbnRyeSkpOwogICAgICAgICB9CiAgICAgICAgIGF1dG8g
cmVxdWVzdEJ1ZmZlciA9IHV0ZjhCdWZmZXIocmVxdWVzdEpTT04tPnRvSlNPTlN0cmluZygpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDEwICsxMzAsNyBAQCBTdHJp
bmcgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSCiAgICAgaWYgKGVuY29kZWRJbWFn
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAotICAgIFZlY3RvcjxjaGFy
PiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNv
ZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWlt
ZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygi
ZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChlbmNvZGVkSW1hZ2Uu
ZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpKSk7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
Y3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEw
ICsxNzQsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0CiAKIFN0
cmluZyBkYXRhVVJMKENGRGF0YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewot
ICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRC
eXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEpOwotCi0gICAg
cmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAg
IHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRF
bmNvZGVkKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSkpOwog
fQogCiBTdHJpbmcgZGF0YVVSTChjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnRO
YW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQpOwog
Ci0gICAgU3RyaW5nIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBt
YWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlk
KSwgc2l6ZW9mKGZvbnRVdWlkKSkpOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExG
X0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVV
bmlxdWVGb250TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZv
bnRVdWlkKTsKIAotICAgIFN0cmluZyBmb250TmFtZSA9IGJhc2U2NEVuY29kZShyZWludGVycHJl
dF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZv
bnROYW1lID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpKTsKICAgICBBU1NFUlQoZm9udE5hbWUubGVu
Z3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2Vu
ZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIFN0
cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlmIChTZWNBc24xRW5jb2RlSXRl
bShjb2RlciwgJnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwgc2lnbmVkUHVibGljS2V5QW5k
Q2hhbGxlbmdlVGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlKSAh
PSBub0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGJhc2U2NEVu
Y29kZShlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkRhdGEsIGVuY29kZWRTaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuTGVuZ3RoKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhi
YXNlNjRFbmNvZGVkKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwgZW5j
b2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpKTsKIH0KIAogQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIFJlZjxSZXNvdXJjZUhhbmRs
ZT4gY3JlYXRlQmxvYlJlcwogICAgIHJldHVybiBibG9iUmVnaXN0cnkoKS5ibG9iUmVnaXN0cnlJ
bXBsKCktPmNyZWF0ZVJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCk7CiB9CiAKLXN0YXRp
YyB2b2lkIGxvYWRCbG9iUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0Kiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwg
UmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8
Y2hhcj4mIGRhdGEpCitzdGF0aWMgdm9pZCBsb2FkQmxvYlJlc291cmNlU3luY2hyb25vdXNseShO
ZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIGF1dG8qIGJsb2JEYXRh
ID0gYmxvYlJlZ2lzdHJ5KCkuYmxvYlJlZ2lzdHJ5SW1wbCgpLT5nZXRCbG9iRGF0YUZyb21VUkwo
cmVxdWVzdC51cmwoKSk7CiAgICAgQmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KGJsb2JEYXRhLCByZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291
cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3
ICs3Myw3IEBAIG5hbWVzcGFjZSB7CiAKIGNsYXNzIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9h
ZGVyIDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBCbG9iUmVz
b3VyY2VTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYs
IFZlY3RvcjxjaGFyPiYpOworICAgIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291
cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+Jik7CiAKICAgICB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXNw
b25zZSYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwogICAgIHZvaWQgZGlk
RmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKSBmaW5hbDsKQEAgLTg1
LDEwICs4NSwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlc291cmNlRXJyb3ImIG1fZXJy
b3I7CiAgICAgUmVzb3VyY2VSZXNwb25zZSYgbV9yZXNwb25zZTsKLSAgICBWZWN0b3I8Y2hhcj4m
IG1fZGF0YTsKKyAgICBWZWN0b3I8dWludDhfdD4mIG1fZGF0YTsKIH07CiAKLUJsb2JSZXNvdXJj
ZVN5bmNocm9ub3VzTG9hZGVyOjpCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYg
ZGF0YSkKK0Jsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyOjpCbG9iUmVzb3VyY2VTeW5jaHJv
bm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKICAgICA6IG1fZXJyb3IoZXJyb3IpCiAgICAgLCBt
X3Jlc3BvbnNlKHJlc3BvbnNlKQogICAgICwgbV9kYXRhKGRhdGEpCkBAIC0xMjIsNyArMTIyLDcg
QEAgdm9pZCBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUgogCiAgICAgLy8gUmVh
ZCBhbGwgdGhlIGRhdGEuCiAgICAgbV9kYXRhLnJlc2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+KHJl
c3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpKSk7Ci0gICAgc3RhdGljX2Nhc3Q8QmxvYlJl
c291cmNlSGFuZGxlKj4oaGFuZGxlKS0+cmVhZFN5bmMobV9kYXRhLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8aW50PihtX2RhdGEuc2l6ZSgpKSk7CisgICAgc3RhdGljX2Nhc3Q8QmxvYlJlc291cmNlSGFu
ZGxlKj4oaGFuZGxlKS0+cmVhZFN5bmMocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9kYXRhLmRh
dGEoKSksIHN0YXRpY19jYXN0PGludD4obV9kYXRhLnNpemUoKSkpOwogICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CiB9CiAKQEAgLTE0MSw3ICsxNDEsNyBAQCBSZWY8QmxvYlJlc291cmNlSGFuZGxl
PiBCbG9iUmVzb3VyY2VIYW5kCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmxvYlJlc291cmNl
SGFuZGxlKGJsb2JEYXRhLCByZXF1ZXN0LCBjbGllbnQsIHRydWUpKTsKIH0KIAotdm9pZCBCbG9i
UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQmxvYkRhdGEqIGJsb2JE
YXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9y
LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBC
bG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQmxvYkRhdGEqIGJs
b2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVy
cm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQog
ewogICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocmVxdWVzdC5odHRwTWV0
aG9kKCksICJnZXQiKSkgewogICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3Iod2ViS2l0Qmxv
YlJlc291cmNlRG9tYWluLCBzdGF0aWNfY2FzdDxpbnQ+KEVycm9yOjpNZXRob2ROb3RBbGxvd2Vk
KSwgcmVzcG9uc2UudXJsKCksICJSZXF1ZXN0IG1ldGhvZCBtdXN0IGJlIEdFVCIpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhh
bmRsZS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBA
IGNsYXNzIEJsb2JSZXNvdXJjZUhhbmRsZSBmaW5hbCA6IHB1YmxpYyAKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPEJsb2JSZXNvdXJjZUhhbmRsZT4gY3JlYXRlQXN5bmMoQmxvYkRhdGEqLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCopOwogCi0gICAgc3RhdGlj
IHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSosIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+
JiBkYXRhKTsKKyAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEJsb2JE
YXRhKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVz
cG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgdm9pZCBzdGFydCgpOwogICAg
IGludCByZWFkU3luYyhjaGFyKiwgaW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNyZWRlbnRpYWxCYXNlLmgi
CiAKICNpbmNsdWRlICJDcmVkZW50aWFsLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTQsNCArOTUsMTAgQEAgYm9vbCBDcmVkZW50
aWFsQmFzZTo6Y29tcGFyZShjb25zdCBDcmVkZQogICAgIHJldHVybiBDcmVkZW50aWFsOjpwbGF0
Zm9ybUNvbXBhcmUoYSwgYik7CiB9CiAKK1N0cmluZyBDcmVkZW50aWFsQmFzZTo6c2VyaWFsaXph
dGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0Cit7CisgICAgYXV0byBjcmVk
ZW50aWFsU3RyaW5nRGF0YSA9IG1ha2VTdHJpbmcobV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0
ZjgoKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVk
ZW50aWFsU3RyaW5nRGF0YSkpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDYgQEAgZW51bSBDcmVkZW50aWFsUGVyc2lzdGVuY2UgewogfTsK
IAogY2xhc3MgQ3JlZGVudGlhbEJhc2UgewotCiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICAgCkBAIC01Miw2ICs1MSw4IEBAIHB1YmxpYzoKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgQ3JlZGVudGlhbCYs
IGNvbnN0IENyZWRlbnRpYWwmKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxp
emF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkgY29uc3Q7CisKIHByb3RlY3RlZDoK
ICAgICBXRUJDT1JFX0VYUE9SVCBDcmVkZW50aWFsQmFzZSgpOwogICAgIFdFQkNPUkVfRVhQT1JU
IENyZWRlbnRpYWxCYXNlKGNvbnN0IFN0cmluZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNzd29y
ZCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ4LDM2ICsxNDgsMjYgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxE
ZWNvZGVUYXNrPiBjcmVhdAogICAgICk7CiB9CiAKLXN0YXRpYyBib29sIGRlY29kZUJhc2U2NChE
ZWNvZGVUYXNrJiB0YXNrLCBNb2RlIG1vZGUpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBkZWNvZGVCYXNlNjQoY29uc3QgRGVjb2RlVGFzayYgdGFzaywgTW9kZSBtb2RlKQogewot
ICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7Ci0gICAgaWYgKG1vZGUgPT0gTW9kZTo6Rm9yZ2l2aW5n
QmFzZTY0KSB7Ci0gICAgICAgIGF1dG8gdW5lc2NhcGVkU3RyaW5nID0gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKHRhc2suZW5jb2RlZERhdGEudG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKLSAg
ICAgICAgaWYgKCFiYXNlNjREZWNvZGUodW5lc2NhcGVkU3RyaW5nLCBidWZmZXIsIEJhc2U2NFZh
bGlkYXRlUGFkZGluZyB8IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzIHwgQmFzZTY0RGlz
Y2FyZFZlcnRpY2FsVGFiKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2Ug
eworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTW9kZTo6Rm9yZ2l2aW5nQmFzZTY0Ogor
ICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0YXNr
LmVuY29kZWREYXRhKSwgeyBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcsIEJh
c2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzLCBCYXNlNjREZWNvZGVP
cHRpb25zOjpEaXNjYXJkVmVydGljYWxUYWJ9KTsKKworICAgIGNhc2UgTW9kZTo6TGVnYWN5Ogog
ICAgICAgICAvLyBGaXJzdCB0cnkgYmFzZTY0dXJsLgotICAgICAgICBpZiAoIWJhc2U2NFVSTERl
Y29kZSh0YXNrLmVuY29kZWREYXRhLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgYnVmZmVyKSkg
ewotICAgICAgICAgICAgLy8gRGlkbid0IHdvcmssIHRyeSB1bmVzY2FwaW5nIGFuZCBkZWNvZGlu
ZyBhcyBiYXNlNjQuCi0gICAgICAgICAgICBhdXRvIHVuZXNjYXBlZFN0cmluZyA9IGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyh0YXNrLmVuY29kZWREYXRhLnRvU3RyaW5nV2l0aG91dENvcHlpbmco
KSk7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZSh1bmVzY2FwZWRTdHJpbmcsIGJ1ZmZl
ciwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgfCBCYXNlNjREaXNjYXJkVmVydGljYWxU
YWIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAoYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NFVSTERlY29kZSh0YXNrLmVuY29kZWREYXRhKSkK
KyAgICAgICAgICAgIHJldHVybiBkZWNvZGVkRGF0YTsKKyAgICAgICAgLy8gRGlkbid0IHdvcmss
IHRyeSB1bmVzY2FwaW5nIGFuZCBkZWNvZGluZyBhcyBiYXNlNjQuCisgICAgICAgIHJldHVybiBi
YXNlNjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRhc2suZW5jb2RlZERhdGEpLCB7
IEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzLCBCYXNlNjREZWNv
ZGVPcHRpb25zOjpEaXNjYXJkVmVydGljYWxUYWIgfSk7CiAgICAgfQotICAgIGJ1ZmZlci5zaHJp
bmtUb0ZpdCgpOwotICAgIHRhc2sucmVzdWx0LmRhdGEgPSBXVEZNb3ZlKGJ1ZmZlcik7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgZGVjb2RlRXNjYXBlZChEZWNvZGVUYXNr
JiB0YXNrKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBkZWNvZGVFc2NhcGVkKGNvbnN0IERlY29k
ZVRhc2smIHRhc2spCiB7CiAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nRnJvbUNoYXJzZXQodGFz
ay5yZXN1bHQuY2hhcnNldCk7CiAgICAgYXV0byYgZW5jb2RpbmcgPSBlbmNvZGluZ0Zyb21DaGFy
c2V0LmlzVmFsaWQoKSA/IGVuY29kaW5nRnJvbUNoYXJzZXQgOiBVVEY4RW5jb2RpbmcoKTsKLSAg
ICBhdXRvIGJ1ZmZlciA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0YSh0YXNrLmVuY29k
ZWREYXRhLCBlbmNvZGluZyk7Ci0KLSAgICBidWZmZXIuc2hyaW5rVG9GaXQoKTsKLSAgICB0YXNr
LnJlc3VsdC5kYXRhID0gV1RGTW92ZShidWZmZXIpOworICAgIHJldHVybiBkZWNvZGVVUkxFc2Nh
cGVTZXF1ZW5jZXNBc0RhdGEodGFzay5lbmNvZGVkRGF0YSwgZW5jb2RpbmcpOwogfQogCiBzdGF0
aWMgT3B0aW9uYWw8UmVzdWx0PiBkZWNvZGVTeW5jaHJvbm91c2x5KERlY29kZVRhc2smIHRhc2ss
IE1vZGUgbW9kZSkKQEAgLTE4NiwxMSArMTc2LDE0IEBAIHN0YXRpYyBPcHRpb25hbDxSZXN1bHQ+
IGRlY29kZVN5bmNocm9ub3UKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlm
ICh0YXNrLmlzQmFzZTY0KSB7Ci0gICAgICAgIGlmICghZGVjb2RlQmFzZTY0KHRhc2ssIG1vZGUp
KQorICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gZGVjb2RlQmFzZTY0KHRhc2ssIG1vZGUpOwor
ICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgdGFzay5yZXN1bHQuZGF0YSA9IFdURk1vdmUoKmRlY29kZWREYXRhKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgZGVjb2RlRXNjYXBlZCh0YXNrKTsKKyAgICAgICAgdGFzay5yZXN1
bHQuZGF0YSA9IGRlY29kZUVzY2FwZWQodGFzayk7CiAKKyAgICB0YXNrLnJlc3VsdC5kYXRhLnNo
cmlua1RvRml0KCk7CiAgICAgcmV0dXJuIFdURk1vdmUodGFzay5yZXN1bHQpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5o
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Rh
dGFVUkxEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgc3RydWN0IFJl
c3VsdCB7CiAgICAgU3RyaW5nIG1pbWVUeXBlOwogICAgIFN0cmluZyBjaGFyc2V0OwogICAgIFN0
cmluZyBjb250ZW50VHlwZTsKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKIH07CiAKIHVzaW5nIERlY29kZUNvbXBsZXRpb25IYW5kbGVyID0gV1RGOjpG
dW5jdGlvbjx2b2lkIChPcHRpb25hbDxSZXN1bHQ+KT47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxl
OjpmYWlsdXJlVGltZXJGaXJlZCgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZv
aWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVy
cm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9p
ZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJy
b3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7
CiAgICAgaWYgKGF1dG8gY29uc3RydWN0b3IgPSBidWlsdGluUmVzb3VyY2VIYW5kbGVTeW5jaHJv
bm91c0xvYWRlck1hcCgpLmdldChyZXF1ZXN0LnVybCgpLnByb3RvY29sKCkudG9TdHJpbmdXaXRo
b3V0Q29weWluZygpKSkgewogICAgICAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCByZXF1ZXN0LCBz
dG9yZWRDcmVkZW50aWFsc1BvbGljeSwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBjbGFzcyBDdXJsUmVz
b3VyY2VIYW5kbGVEZWxlZ2F0ZTsKIGNsYXNzIFJlc291cmNlSGFuZGxlIDogcHVibGljIFJlZkNv
dW50ZWQ8UmVzb3VyY2VIYW5kbGU+LCBwdWJsaWMgQXV0aGVudGljYXRpb25DbGllbnQgewogcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNy
ZWF0ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNl
SGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlm
ZiwgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCos
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJj
ZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3Jr
aW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVzb3VyY2VIYW5kbGUoKTsKIAog
I2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQ0ZVUkxDT05ORUNUSU9OKQpAQCAtMTkzLDcgKzE5
Myw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFJlZjxSZXNvdXJjZUhhbmRsZT4gKCpCdWlsdGlu
Q29uc3RydWN0b3IpKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5k
bGVDbGllbnQqIGNsaWVudCk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCdWlsdGluQ29uc3Ry
dWN0b3IoY29uc3QgQXRvbVN0cmluZyYgcHJvdG9jb2wsIEJ1aWx0aW5Db25zdHJ1Y3Rvcik7CiAK
LSAgICB0eXBlZGVmIHZvaWQgKCpCdWlsdGluU3luY2hyb25vdXNMb2FkZXIpKE5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ks
IFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsK
KyAgICB0eXBlZGVmIHZvaWQgKCpCdWlsdGluU3luY2hyb25vdXNMb2FkZXIpKE5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ks
IFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRh
KTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlcihjb25z
dCBBdG9tU3RyaW5nJiBwcm90b2NvbCwgQnVpbHRpblN5bmNocm9ub3VzTG9hZGVyKTsKIAogcHJv
dGVjdGVkOgpAQCAtMjEzLDcgKzIxMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY2hlZHVsZUZh
aWx1cmUoRmFpbHVyZVR5cGUpOwogCiAgICAgYm9vbCBzdGFydCgpOwotICAgIHN0YXRpYyB2b2lk
IHBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVy
cm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisgICAgc3RhdGlj
IHZvaWQgcGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0
KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291
cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKIAog
ICAgIHZvaWQgcmVmQXV0aGVudGljYXRpb25DbGllbnQoKSBvdmVycmlkZSB7IHJlZigpOyB9CiAg
ICAgdm9pZCBkZXJlZkF1dGhlbnRpY2F0aW9uQ2xpZW50KCkgb3ZlcnJpZGUgeyBkZXJlZigpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVy
Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVu
dDo6ZGlkUmVjZWl2ZQogCiB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZl
RGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwg
aW50IC8qZW5jb2RlZERhdGFMZW5ndGgqLykKIHsKLSAgICBtX2RhdGEuYXBwZW5kKGRhdGEsIGxl
bmd0aCk7CisgICAgbV9kYXRhLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhKSwgbGVuZ3RoKTsKIH0KIAogdm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlk
RmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGll
bnQuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0QWxsb3dTdG9yZWRDcmVkZW50aWFscyhib29sIGFs
bG93KSB7IG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IGFsbG93OyB9CiAgICAgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9Ci0g
ICAgVmVjdG9yPGNoYXI+JiBtdXRhYmxlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIFZl
Y3Rvcjx1aW50OF90PiYgbXV0YWJsZURhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KICAgICBjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KICAgICBT
eW5jaHJvbm91c0xvYWRlck1lc3NhZ2VRdWV1ZSYgbWVzc2FnZVF1ZXVlKCkgeyByZXR1cm4gbV9t
ZXNzYWdlUXVldWUuZ2V0KCk7IH0KIApAQCAtNzUsNyArNzUsNyBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwogICAgIFJlc291cmNlUmVz
cG9uc2UgbV9yZXNwb25zZTsKLSAgICBWZWN0b3I8Y2hhcj4gbV9kYXRhOworICAgIFZlY3Rvcjx1
aW50OF90PiBtX2RhdGE7CiAgICAgUmVzb3VyY2VFcnJvciBtX2Vycm9yOwogICAgIFJlZjxTeW5j
aHJvbm91c0xvYWRlck1lc3NhZ2VRdWV1ZT4gbV9tZXNzYWdlUXVldWU7CiB9OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNl
SGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NSw5ICs4NSw3IEBAIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPENGRGF0YVIK
IAogc3RhdGljIHZvaWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogewotICAgIFN0cmlu
ZyBhdXRoZW50aWNhdGlvbkhlYWRlciA9ICJCYXNpYyAiICsgYmFzZTY0RW5jb2RlKFN0cmluZyhj
cmVkZW50aWFsLnVzZXIoKSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKSkudXRmOCgpKTsK
LQotICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpBdXRob3Jp
emF0aW9uLCBhdXRoZW50aWNhdGlvbkhlYWRlcik7CisgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGNyZWRlbnRpYWwuc2VyaWFsaXph
dGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpKTsKIH0KIAogUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQpAQCAtNTI0LDcgKzUyMiw3IEBAIHN0
YXRpYyB2b2lkIGVtcHR5UGVyZm9ybSh2b2lkKikKIHsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxz
UG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJy
b3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7
CiAgICAgTE9HKE5ldHdvcmssICJSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5OiVzIHNzdG9yZWRDcmVkZW50aWFsc1BvbGljeToldSIsIHJlcXVlc3QudXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3Vy
Y2VIYW5kbGVDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OnJlc3RhcnRSZXF1ZXN0V2l0aEMKICAgICBkLT5tX2N1cmxSZXF1ZXN0
LT5zdGFydCgpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIEFTU0VSVCghcmVxdWVzdC5pc0VtcHR5KCkpOwpAQCAtNTYyLDkgKzU2Miw5
IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwoKQogCiAgICAgICAgIC8vIGRp
ZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYXVzZSB0aGUgY2xpZW50IHRvIGJlIGRlbGV0ZWQuCiAg
ICAgICAgIGlmIChjbGllbnQoKSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAg
ICAgICAgICAgIGlmIChiYXNlNjREZWNvZGUoZGF0YSwgb3V0LCBCYXNlNjRJZ25vcmVTcGFjZXNB
bmROZXdMaW5lcykgJiYgb3V0LnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgY2xpZW50KCkt
PmRpZFJlY2VpdmVCdWZmZXIodGhpcywgU2hhcmVkQnVmZmVyOjpjcmVhdGUob3V0LmRhdGEoKSwg
b3V0LnNpemUoKSksIG9yaWdpbmFsU2l6ZSk7CisgICAgICAgICAgICBhdXRvIGRlY29kZWREYXRh
ID0gYmFzZTY0RGVjb2RlKGRhdGEsIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0Fu
ZE5ld0xpbmVzKTsKKyAgICAgICAgICAgIGlmIChkZWNvZGVkRGF0YSAmJiBkZWNvZGVkRGF0YS0+
c2l6ZSgpID4gMCkKKyAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcih0
aGlzLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkZWNvZGVkRGF0YS0+ZGF0YSgpLCBkZWNvZGVkRGF0
YS0+c2l6ZSgpKSwgb3JpZ2luYWxTaXplKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAg
ICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyhjaGFyc2V0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1t
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjcsOSArNjcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBzdGF0aWMgdm9pZCBhcHBseUJhc2ljQXV0aG9yaXph
dGlvbkhlYWRlcihSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENyZWRlbnRpYWwmIGNy
ZWRlbnRpYWwpCiB7Ci0gICAgU3RyaW5nIGF1dGhlbnRpY2F0aW9uSGVhZGVyID0gIkJhc2ljICIg
KyBiYXNlNjRFbmNvZGUoU3RyaW5nKGNyZWRlbnRpYWwudXNlcigpICsgIjoiICsgY3JlZGVudGlh
bC5wYXNzd29yZCgpKS51dGY4KCkpOwotCi0gICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGF1dGhlbnRpY2F0aW9uSGVhZGVyKTsKKyAg
ICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlv
biwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkp
OwogfQogCiBzdGF0aWMgTlNPcGVyYXRpb25RdWV1ZSAqb3BlcmF0aW9uUXVldWVGb3JBc3luY0Ns
aWVudHMoKQpAQCAtMzUyLDcgKzM1MCw3IEBAIENGU3RyaW5nUmVmIFJlc291cmNlSGFuZGxlOjpz
eW5jaHJvbm91c0wKICAgICByZXR1cm4gQ0ZTVFIoIldlYkNvcmVTeW5jaHJvbm91c0xvYWRlclJ1
bkxvb3BNb2RlIik7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291
cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50
aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIExPRyhOZXR3b3JrLCAi
UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseTolQCBzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeToldSIsIHJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBk
YXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VIYW5kbGVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG8KICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3Bv
bnNlJiwgVmVjdG9yPGNoYXI+JikKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJl
c291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VS
ZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdv
cmtTZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZGlnZXN0
LT5hZGRCeXRlcyhjZXJ0aWZpY2F0ZURhdGEtPmRhdGEsIGNlcnRpZmljYXRlRGF0YS0+bGVuKTsK
IAogICAgICAgICBhdXRvIGhhc2ggPSBkaWdlc3QtPmNvbXB1dGVIYXNoKCk7Ci0gICAgICAgIHJl
dHVybiBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaGFzaC5kYXRh
KCkpLCBoYXNoLnNpemUoKSk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29k
ZWQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaGFzaC5kYXRhKCkpLCBoYXNoLnNpemUo
KSkpOwogICAgIH0KIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2NlcnRpZmljYXRlczsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1
ZW5jZXMuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDExICsxNTQs
MTEgQEAgU3RyaW5nIGRlY29kZUVzY2FwZVNlcXVlbmNlcyhTdHJpbmdWaWV3IAogICAgIHJldHVy
biByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotaW5saW5lIFZlY3RvcjxjaGFyPiBkZWNvZGVVUkxF
c2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGlu
ZyYgZW5jb2RpbmcpCitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGlu
ZykKIHsKICAgICBBU1NFUlQoZW5jb2RpbmcuaXNWYWxpZCgpKTsKIAotICAgIFZlY3RvcjxjaGFy
PiByZXN1bHQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKICAgICBzaXplX3QgZGVjb2Rl
ZFBvc2l0aW9uID0gMDsKICAgICBzaXplX3Qgc2VhcmNoUG9zaXRpb24gPSAwOwogICAgIHdoaWxl
ICh0cnVlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90
ZWRQcmludGFibGUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhpbXVtTGluZUxlbmd0aCA9IAogCiBzdGF0aWMg
Y29uc3QgY2hhciBjcmxmTGluZUVuZGluZ1tdID0gIlxyXG4iOwogCi1zdGF0aWMgc2l6ZV90IGxl
bmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoY29uc3QgY2hhciogaW5wdXQsIHNpemVfdCBpbnB1dExl
bmd0aCwgc2l6ZV90IGluZGV4KQorc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRpbmdBdElu
ZGV4KGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgsIHNpemVfdCBpbmRl
eCkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGlucHV0
TGVuZ3RoKTsKICAgICBpZiAoaW5wdXRbaW5kZXhdID09ICdcbicpCkBAIC01NSwxOSArNTUsMTkg
QEAgc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4KAogICAgIHJldHVybiAw
OwogfQogCi12b2lkIHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGlu
LCBWZWN0b3I8Y2hhcj4mIG91dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNv
ZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKIHsKLSAgICBxdW90ZWRQcmludGFibGVF
bmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIG91dCk7CisgICAgcmV0dXJuIHF1b3RlZFByaW50
YWJsZUVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7CiB9CiAKLXZvaWQgcXVvdGVk
UHJpbnRhYmxlRW5jb2RlKGNvbnN0IGNoYXIqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgsIFZl
Y3RvcjxjaGFyPiYgb3V0KQorVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShj
b25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQogewotICAgIG91dC5jbGVh
cigpOwotICAgIG91dC5yZXNlcnZlQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOworICAgIFZlY3Rvcjx1
aW50OF90PiBvdXQ7CisgICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5wdXRMZW5ndGgp
OwogICAgIHNpemVfdCBjdXJyZW50TGluZUxlbmd0aCA9IDA7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbnB1dExlbmd0aDsgKytpKSB7CiAgICAgICAgIGJvb2wgaXNMYXN0Q2hhcmFjdGVy
ID0gKGkgPT0gaW5wdXRMZW5ndGggLSAxKTsKLSAgICAgICAgY2hhciBjdXJyZW50Q2hhcmFjdGVy
ID0gaW5wdXRbaV07CisgICAgICAgIHVpbnQ4X3QgY3VycmVudENoYXJhY3RlciA9IGlucHV0W2ld
OwogICAgICAgICBib29sIHJlcXVpcmVzRW5jb2RpbmcgPSBmYWxzZTsKICAgICAgICAgLy8gQWxs
IG5vbi1wcmludGFibGUgQVNDSUkgY2hhcmFjdGVycyBhbmQgPSByZXF1aXJlIGVuY29kaW5nLgog
ICAgICAgICBpZiAoKGN1cnJlbnRDaGFyYWN0ZXIgPCAnICcgfHwgY3VycmVudENoYXJhY3RlciA+
ICd+JyB8fCBjdXJyZW50Q2hhcmFjdGVyID09ICc9JykgJiYgY3VycmVudENoYXJhY3RlciAhPSAn
XHQnKQpAQCAtMTEyLDE4ICsxMTIsMjAgQEAgdm9pZCBxdW90ZWRQcmludGFibGVFbmNvZGUoY29u
c3QgY2hhciogaQogICAgICAgICAgICAgY3VycmVudExpbmVMZW5ndGgrKzsKICAgICAgICAgfQog
ICAgIH0KKworICAgIHJldHVybiBvdXQ7CiB9CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRGVjb2Rl
KGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0KQorVmVjdG9yPHVpbnQ4
X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQog
ewotICAgIHF1b3RlZFByaW50YWJsZURlY29kZShpbi5kYXRhKCksIGluLnNpemUoKSwgb3V0KTsK
KyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6
ZSgpKTsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IGRhdGFMZW5ndGgsIFZlY3RvcjxjaGFyPiYgb3V0KQorVmVjdG9yPHVpbnQ4X3Q+IHF1
b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0
aCkKIHsKLSAgICBvdXQuY2xlYXIoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0OwogICAgIGlm
ICghZGF0YUxlbmd0aCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gb3V0OwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHsKICAgICAgICAgY2hh
ciBjdXJyZW50Q2hhcmFjdGVyID0gZGF0YVtpXTsKQEAgLTE0OSw4ICsxNTEsOSBAQCB2b2lkIHF1
b3RlZFByaW50YWJsZURlY29kZShjb25zdCBjaGFyKiBkCiAgICAgICAgICAgICBvdXQuYXBwZW5k
KGxvd2VyQ2hhcmFjdGVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAg
ICAgIG91dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4odG9BU0NJSUhleFZhbHVlKHVwcGVyQ2hh
cmFjdGVyLCBsb3dlckNoYXJhY3RlcikpKTsKKyAgICAgICAgb3V0LmFwcGVuZCh0b0FTQ0lJSGV4
VmFsdWUodXBwZXJDaGFyYWN0ZXIsIGxvd2VyQ2hhcmFjdGVyKSk7CiAgICAgfQorICAgIHJldHVy
biBvdXQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVk
UHJpbnRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9R
dW90ZWRQcmludGFibGUuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTkgKzI4
LDE2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgUXVvdGVkUHJpbnRhYmxlX2gK
LSNkZWZpbmUgUXVvdGVkUHJpbnRhYmxlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHF1b3RlZFByaW50YWJs
ZUVuY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBWZWN0b3I8Y2hhcj4mKTsKLXZvaWQgcXVvdGVk
UHJpbnRhYmxlRW5jb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QsIFZlY3RvcjxjaGFyPiYpOworVmVj
dG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4m
KTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgdWludDhfdCos
IHNpemVfdCk7CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFy
PiYsIFZlY3RvcjxjaGFyPiYpOwotdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgY2hh
ciosIHNpemVfdCwgVmVjdG9yPGNoYXI+Jik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRh
YmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworVmVjdG9yPHVpbnQ4X3Q+IHF1b3Rl
ZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUXVvdGVkUHJpbnRhYmxlX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJh
dG9yV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBTdHJpbmcgc2lnbmVk
UHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nCiAgICAgICAgIGlmICghQ3J5cHRTaWduQW5kRW5j
b2RlQ2VydGlmaWNhdGUoaENvbnRleHQsIEFUX0tFWUVYQ0hBTkdFLCBYNTA5X0FTTl9FTkNPRElO
RywgWDUwOV9LRVlHRU5fUkVRVUVTVF9UT19CRV9TSUdORUQsICZyZXF1ZXN0SW5mbywgJnNpZ25B
bGdvLCAwLCByZWludGVycHJldF9jYXN0PExQQllURT4oYmluYXJ5LmRhdGEoKSksICZkd0VuY29k
ZWRMZW5ndGgpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAga2V5U3RyaW5nID0gYmFz
ZTY0RW5jb2RlKGJpbmFyeSk7CisgICAgICAgIGtleVN0cmluZyA9IG1ha2VTdHJpbmcoYmFzZTY0
RW5jb2RlZChiaW5hcnkpKTsKICAgICB9IHdoaWxlKDApOwogCiAgICAgaWYgKHBQdWJJbmZvKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3Jh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2
ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNv
bnN0IFMKICAgICBhdXRvIGlucHV0VXRmOCA9IGlucHV0LnV0ZjgoKTsKICAgICBjcnlwdG8tPmFk
ZEJ5dGVzKGlucHV0VXRmOC5kYXRhKCksIGlucHV0VXRmOC5sZW5ndGgoKSk7CiAgICAgYXV0byBo
YXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBXVEY6OmJhc2U2NFVSTEVu
Y29kZShoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJh
c2U2NFVSTEVuY29kZWQoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKSk7CiB9CiAKIFN0cmluZyBT
V1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNvbnN0IFVSTCYgaW5wdXQpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkocmV2aXNpb24gMjc3NjU0KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw2NCBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5p
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0
byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpzZW5kUmVwbHlUb1N5bmNocm9ub3VzUmVxdWVzdCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpmaXJlQ29udmVyc2lvblJlcXVl
c3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29h
Lm1tOgorICAgICAgICAoV2ViS2l0OjphcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcik6Cisg
ICAgICAgICogU2hhcmVkL0FQSS9BUElEYXRhLmg6CisgICAgICAgIChBUEk6OkRhdGE6OmNyZWF0
ZSk6CisgICAgICAgIChBUEk6OkRhdGE6OmZyZWVWZWN0b3JCeXRlcyk6CisgICAgICAgICogU2hh
cmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpzYW5kYm94
RmlsZVBhdGgpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAg
ICAoV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbToKKyAgICAgICAgKHByb2R1Y2VD
bGllbnREYXRhSnNvbik6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2Vi
QXV0b21hdGlvblNlc3Npb25DYWlyby5jcHA6CisgICAgICAgIChXZWJLaXQ6OmJhc2U2NEVuY29k
ZWRQTkdEYXRhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1t
OgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6Ondl
YkNyeXB0b01hc3RlcktleSk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1Jl
bW90ZUluc3BlY3RvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNh
dmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJv
eHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
U2F2ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpz
ZXRCYWNrZW5kQ29tbWFuZHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW06CisgICAgICAgIChXZWJLaXQ6OkxvY2FsQXV0
aGVudGljYXRvckludGVybmFsOjpwcm9kdWNlSGFzaFNldCk6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwpOgorICAgICAgICAoV2ViS2l0OjpMb2Nh
bEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0
OjpNb2NrSGlkQ29ubmVjdGlvbjo6ZmVlZFJlcG9ydHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW06CisgICAgICAgIChX
ZWJLaXQ6Ok1vY2tMb2NhbENvbm5lY3Rpb246OmZpbHRlclJlc3BvbnNlcyBjb25zdCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVUkxT
Y2hlbWVUYXNrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMU2NoZW1lVGFzazo6ZGlkQ29t
cGxldGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViTG9hZGVyU3RyYXRlZ3k6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OmxvYWRTeW5jaHJvbm91c2x5KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5Lmg6
CisKIDIwMjEtMDUtMTggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlc3VycmVjdCBXS1dlYlZpZXcgbWVkaWEgY29udHJvbHMgQVBJIHJlbW92ZWQgaW4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTkyOQpJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiBtZXNzYWdl
cyAtPiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAKICAg
ICBTY2hlZHVsZVJlc291cmNlTG9hZChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzIHJlc291cmNlTG9hZFBhcmFtZXRlcnMpCi0gICAgUGVyZm9ybVN5bmNocm9ub3VzTG9hZChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIHJlc291cmNlTG9hZFBhcmFtZXRl
cnMpIC0+IChXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4gZGF0YSkgU3luY2hyb25vdXMKKyAgICBQZXJm
b3JtU3luY2hyb25vdXNMb2FkKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMg
cmVzb3VyY2VMb2FkUGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3Is
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiBkYXRh
KSBTeW5jaHJvbm91cwogICAgIFRlc3RQcm9jZXNzSW5jb21pbmdTeW5jTWVzc2FnZXNXaGVuV2Fp
dGluZ0ZvclN5bmNSZXBseShXZWJLaXQ6OldlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlEKSAt
PiAoYm9vbCBoYW5kbGVkKSBTeW5jaHJvbm91cwogICAgIExvYWRQaW5nKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykKICAgICBSZW1v
dmVMb2FkSWRlbnRpZmllcih1aW50NjRfdCByZXNvdXJjZUxvYWRJZGVudGlmaWVyKQpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5
MSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRSZXBseVRvU3luY2hyb25vdXNSZXF1ZXMKICAgICBBU1NF
UlQoZGF0YS5kZWxheWVkUmVwbHkpOwogICAgIEFTU0VSVCghZGF0YS5yZXNwb25zZS5pc051bGwo
KSB8fCAhZGF0YS5lcnJvci5pc051bGwoKSk7CiAKLSAgICBWZWN0b3I8Y2hhcj4gcmVzcG9uc2VC
dWZmZXI7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3BvbnNlQnVmZmVyOwogICAgIGlmIChidWZm
ZXIgJiYgYnVmZmVyLT5zaXplKCkpCiAgICAgICAgIHJlc3BvbnNlQnVmZmVyLmFwcGVuZChidWZm
ZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1h
bmFnZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxNSwxNCArMzE1LDE1IEBAIHZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpm
aXIKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBWZWN0b3I8dWludDhfdD4gcHVibGljS2V5RGF0YTsKLSAgICAgICAgV1RGOjpiYXNlNjRVUkxE
ZWNvZGUocHVibGljS2V5QmFzZTY0VVJMLCBwdWJsaWNLZXlEYXRhKTsKKyAgICAgICAgYXV0byBw
dWJsaWNLZXlEYXRhID0gYmFzZTY0VVJMRGVjb2RlKHB1YmxpY0tleUJhc2U2NFVSTCk7CisgICAg
ICAgIGlmICghcHVibGljS2V5RGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBh
dXRvIGNyeXB0byA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdlc3Q6
OkFsZ29yaXRobTo6U0hBXzI1Nik7Ci0gICAgICAgIGNyeXB0by0+YWRkQnl0ZXMocHVibGljS2V5
RGF0YS5kYXRhKCksIHB1YmxpY0tleURhdGEuc2l6ZSgpKTsKKyAgICAgICAgY3J5cHRvLT5hZGRC
eXRlcyhwdWJsaWNLZXlEYXRhLT5kYXRhKCksIHB1YmxpY0tleURhdGEtPnNpemUoKSk7CiAgICAg
ICAgIGF1dG8gcHVibGljS2V5RGF0YUhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAg
ICAgICAgYXV0byBrZXlJRCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHB1YmxpY0tleURhdGFIYXNo
LmRhdGEoKSwgcHVibGljS2V5RGF0YUhhc2guc2l6ZSgpKTsKKyAgICAgICAgYXV0byBrZXlJRCA9
IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChwdWJsaWNLZXlEYXRhSGFzaC5kYXRhKCksIHB1
YmxpY0tleURhdGFIYXNoLnNpemUoKSkpOwogICAgICAgICBpZiAoa2V5SUQgIT0gYXR0cmlidXRp
b24uc291cmNlVW5saW5rYWJsZVRva2VuKCktPmtleUlEQmFzZTY0VVJMKQogICAgICAgICAgICAg
cmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtEYXRhVGFza0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAj
aWYgVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05FVFdPUktfU0VTU0lPTikKIHN0YXRpYyB2
b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKLSAg
ICBTdHJpbmcgYXV0aGVudGljYXRpb25IZWFkZXIgPSAiQmFzaWMgIiArIGJhc2U2NEVuY29kZShT
dHJpbmcoY3JlZGVudGlhbC51c2VyKCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3b3JkKCkpLnV0
ZjgoKSk7Ci0gICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRl
ck5hbWU6OkF1dGhvcml6YXRpb24sIGF1dGhlbnRpY2F0aW9uSGVhZGVyKTsKKyAgICByZXF1ZXN0
LnNldEhUVFBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlv
biwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkp
OwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURhdGEuaAkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNyArNjAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgbWVtY3B5KGNv
cGllZEJ5dGVzLCBieXRlcywgc2l6ZSk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gY3Jl
YXRlV2l0aG91dENvcHlpbmcoY29waWVkQnl0ZXMsIHNpemUsIGZhc3RGcmVlQnl0ZXMsIG51bGxw
dHIpOworICAgICAgICByZXR1cm4gY3JlYXRlV2l0aG91dENvcHlpbmcoY29waWVkQnl0ZXMsIHNp
emUsIFtdICh1bnNpZ25lZCBjaGFyKiBieXRlcywgY29uc3Qgdm9pZCopIHsKKyAgICAgICAgICAg
IGlmIChieXRlcykKKyAgICAgICAgICAgICAgICBmYXN0RnJlZShzdGF0aWNfY2FzdDx2b2lkKj4o
Ynl0ZXMpKTsKKyAgICAgICAgfSwgbnVsbHB0cik7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBS
ZWY8RGF0YT4gY3JlYXRlKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYgYnVmZmVyKQpAQCAt
NjgsNiArNzEsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlci5kYXRh
KCksIGJ1ZmZlci5zaXplKCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBSZWY8RGF0YT4gY3JlYXRl
KFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmIGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGF1dG8gYnVm
ZmVyU2l6ZSA9IGJ1ZmZlci5zaXplKCk7CisgICAgICAgIGF1dG8gYnVmZmVyUG9pbnRlciA9IGJ1
ZmZlci5yZWxlYXNlQnVmZmVyKCkubGVha1B0cigpOworICAgICAgICByZXR1cm4gY3JlYXRlV2l0
aG91dENvcHlpbmcoYnVmZmVyUG9pbnRlciwgYnVmZmVyU2l6ZSwgW10gKHVuc2lnbmVkIGNoYXIq
IGJ5dGVzLCBjb25zdCB2b2lkKikgeworICAgICAgICAgICAgaWYgKGJ5dGVzKQorICAgICAgICAg
ICAgICAgIFdURjo6VmVjdG9yTWFsbG9jOjpmcmVlKGJ5dGVzKTsKKyAgICAgICAgfSwgbnVsbHB0
cik7CisgICAgfQorCiAgICAgc3RhdGljIFJlZlB0cjxEYXRhPiBjcmVhdGUoY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlJik7CiAgICAgCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC05NiwxMiArMTA5
LDYgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZmFzdEZyZWVC
eXRlcyh1bnNpZ25lZCBjaGFyKiBieXRlcywgY29uc3Qgdm9pZCopCi0gICAgewotICAgICAgICBp
ZiAoYnl0ZXMpCi0gICAgICAgICAgICBmYXN0RnJlZShzdGF0aWNfY2FzdDx2b2lkKj4oYnl0ZXMp
KTsKLSAgICB9Ci0KICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBtX2J5dGVzIHsgbnVsbHB0ciB9
OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzE1LDE4ICszMTUsMTMgQEAgc3RhdGljIFN0cmluZyBzYW5kYm94RGlyZWN0b3J5
KFdlYkNvcmU6OgogCiBzdGF0aWMgU3RyaW5nIHNhbmRib3hGaWxlUGF0aChjb25zdCBTdHJpbmcm
IGRpcmVjdG9yeVBhdGgsIGNvbnN0IENTdHJpbmcmIGhlYWRlcikKIHsKLSAgICBTdHJpbmdCdWls
ZGVyIHNhbmRib3hGaWxlOwotICAgIHNhbmRib3hGaWxlLmFwcGVuZChkaXJlY3RvcnlQYXRoKTsK
LSAgICBzYW5kYm94RmlsZS5hcHBlbmQoIi9Db21waWxlZFNhbmRib3grIik7Ci0KICAgICAvLyBN
YWtlIHRoZSBmaWxlbmFtZSBzZW1pLXVuaXF1ZSBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhl
IGhlYWRlci4KKwogICAgIGF1dG8gY3J5cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQ
QUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBjcnlwdG8tPmFkZEJ5
dGVzKGhlYWRlci5kYXRhKCksIGhlYWRlci5sZW5ndGgoKSk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+
IGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7Ci0gICAgU3RyaW5nIHJlYWRhYmxlSGFzaCA9
IFdURjo6YmFzZTY0VVJMRW5jb2RlKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSk7CisgICAgYXV0
byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgc2FuZGJveEZpbGUuYXBwZW5k
KHJlYWRhYmxlSGFzaCk7Ci0gICAgcmV0dXJuIHNhbmRib3hGaWxlLnRvU3RyaW5nKCk7CisgICAg
cmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0aCwgIi9Db21waWxlZFNhbmRib3grIiwgYmFz
ZTY0VVJMRW5jb2RlZChoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpKTsKIH0KIAogc3RhdGljIGJv
b2wgZW5zdXJlU2FuZGJveENhY2hlRGlyZWN0b3J5KGNvbnN0IFNhbmRib3hJbmZvJiBpbmZvKQpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsNyArNTIwLDcgQEAgbWVz
c2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAogICAgIFN0YXJ0VVJMU2NoZW1lVGFzayhzdHJ1Y3Qg
V2ViS2l0OjpVUkxTY2hlbWVUYXNrUGFyYW1ldGVycyBwYXJhbWV0ZXJzKQogICAgIFN0b3BVUkxT
Y2hlbWVUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRp
ZmllcikKLSAgICBMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrKHN0cnVjdCBXZWJLaXQ6OlVS
TFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpIC0+IChXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlIHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBWZWN0b3I8Y2hh
cj4gZGF0YSkgU3luY2hyb25vdXMKKyAgICBMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrKHN0
cnVjdCBXZWJLaXQ6OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpIC0+IChXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVy
cm9yLCBWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKIAogI2lmIEVOQUJMRShERVZJ
Q0VfT1JJRU5UQVRJT04pCiAgICAgU2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlv
bkFjY2VzcyhXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgc3RydWN0IFdlYktpdDo6
RnJhbWVJbmZvRGF0YSBmcmFtZUluZm8sIGJvb2wgbWF5UHJvbXB0KSAtPiAoZW51bTp1aW50OF90
IFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9uU3RhdGUgcGVybWlz
c2lvblN0YXRlKSBBc3luYwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2No
ZW1lSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVS
TFNjaGVtZUhhbmRsZXIuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBAIHN0cnVjdCBVUkxTY2hlbWVUYXNrUGFyYW1ldGVyczsKIGNsYXNzIFdlYlBhZ2VQcm94eTsK
IGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKIAotdXNpbmcgU3luY0xvYWRDb21wbGV0aW9uSGFuZGxl
ciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBWZWN0b3I8Y2hhcj4mKT47
Cit1c2luZyBTeW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpPjsKIAogY2xhc3MgV2ViVVJMU2NoZW1l
SGFuZGxlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlVSTFNjaGVtZUhhbmRsZXI+IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxTY2hlbWVIYW5kbGVyKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEyLDEwICsyMTIsMTAgQEAgYXV0byBXZWJVUkxTY2hlbWVUYXNrOjpkaWRD
b21wbGV0ZShjb25zdAogICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKICAgICAKICAgICBpZiAoaXNT
eW5jKCkpIHsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAgIFZlY3Rvcjx1aW50
OF90PiBkYXRhOwogICAgICAgICBpZiAobV9zeW5jRGF0YSkgewogICAgICAgICAgICAgZGF0YS5y
ZXNpemUobV9zeW5jRGF0YS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIG1lbWNweShkYXRhLmRhdGEo
KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obV9zeW5jRGF0YS0+ZGF0YSgpKSwgbV9z
eW5jRGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9zeW5jRGF0YS0+ZGF0YSgpKSwgbV9zeW5jRGF0
YS0+c2l6ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fc3luY0NvbXBsZXRpb25IYW5kbGVy
KG1fc3luY1Jlc3BvbnNlLCBlcnJvciwgV1RGTW92ZShkYXRhKSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDcgQEAgc3RydWN0IFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzOwogY2xhc3Mg
V2ViVVJMU2NoZW1lSGFuZGxlcjsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIAotdXNpbmcgU3luY0xv
YWRDb21wbGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25z
dCBWZWN0b3I8Y2hhcj4mKT47Cit1c2luZyBTeW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0gQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpPjsKIAog
Y2xhc3MgV2ViVVJMU2NoZW1lVGFzayA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmpl
Y3Q6OlR5cGU6OlVSTFNjaGVtZVRhc2s+LCBwdWJsaWMgSW5zdGFuY2VDb3VudGVkPFdlYlVSTFNj
aGVtZVRhc2s+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxTY2hlbWVUYXNrKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMzOCwxMyArMjMzOCwxNCBAQCB2b2lkIFdLUGFnZVNldFBhZ2VOYXZp
Z2F0aW9uQ2xpZW50KFdLUGFnCiAgICAgICAgICAgICBpZiAobV9jbGllbnQuY29weVdlYkNyeXB0
b01hc3RlcktleSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYodG9JbXBsKG1fY2xp
ZW50LmNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pKSk7CiAKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAj
aWYgRU5BQkxFKFdFQl9DUllQVE8pCi0gICAgICAgICAgICBpZiAoIWdldERlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKKyAgICAgICAgICAgIGF1dG8gbWFzdGVyS2V5ID0gZGVm
YXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgICAgICAgICAgaWYgKCFtYXN0ZXJLZXkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gQVBJOjpE
YXRhOjpjcmVhdGUoV1RGTW92ZSgqbWFzdGVyS2V5KSk7CisjZWxzZQorICAgICAgICAgICAgcmV0
dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKG51bGxwdHIsIDApOwogI2VuZGlmCi0KLSAgICAgICAgICAg
IHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0YSgpLCBtYXN0ZXJLZXkuc2l6
ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIFJlZlB0cjxBUEk6OlN0cmluZz4gc2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKFdlYlBhZ2VQcm94eSYgcGFnZSwgdW5zaWduZWQga2V5
U2l6ZUluZGV4LCBjb25zdCBSZWZQdHI8QVBJOjpTdHJpbmc+JiBjaGFsbGVuZ2VTdHJpbmcsIGNv
bnN0IFVSTCYgdXJsKSBvdmVycmlkZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0J
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3
IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNEYXRhPiBwcm9kdWNlQ2xpZW50RGEKICAgICAgICAgW2Rp
Y3Rpb25hcnkgc2V0T2JqZWN0OkAid2ViYXV0aG4uZ2V0IiBmb3JLZXk6QCJ0eXBlIl07CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6V1RGOjpiYXNlNjRV
UkxFbmNvZGUoY2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2UubGVuZ3RoKSBmb3JLZXk6QCJjaGFs
bGVuZ2UiXTsKKyAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bWFrZVN0cmluZyhiYXNlNjRVUkxF
bmNvZGVkKGNoYWxsZW5nZS5ieXRlcywgY2hhbGxlbmdlLmxlbmd0aCkpIGZvcktleTpAImNoYWxs
ZW5nZSJdOwogICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpvcmlnaW4gZm9yS2V5OkAib3JpZ2lu
Il07CiAKICAgICByZXR1cm4gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0
OmRpY3Rpb25hcnkuZ2V0KCkgb3B0aW9uczpOU0pTT05Xcml0aW5nU29ydGVkS2V5cyBlcnJvcjpu
aWxdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9jYWlyby9XZWJB
dXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL2Nh
aXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIHN0YXRpYyBPcHRpb25hbDxTdHJpbmc+IGJhc2U2NEVuY29kZWRQTkcKICAgICBp
ZiAocG5nRGF0YS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlKHBuZ0RhdGEpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJh
c2U2NEVuY29kZWQocG5nRGF0YSkpOwogfQogCiBPcHRpb25hbDxTdHJpbmc+IFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpwbGF0Zm9ybUdldEJhc2U2NEVuY29kZWRQTkdEYXRhKGNvbnN0IFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTExMzUsMTEgKzExMzUsMTEgQEAgUmVmUHRyPEFQSTo6RGF0YT4gTmF2aWdhdGlvblN0
YXRlOjpOYXZpZwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghbV9uYXZpZ2F0
aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJDcnlwdG9NYXN0ZXJLZXlG
b3JXZWJWaWV3KSB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7Ci0gICAgICAg
IGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQorICAgICAgICBh
dXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICAgICAgaWYg
KCFtYXN0ZXJLZXkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICByZXR1
cm4gQVBJOjpEYXRhOjpjcmVhdGUobWFzdGVyS2V5LmRhdGEoKSwgbWFzdGVyS2V5LnNpemUoKSk7
CisgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShXVEZNb3ZlKCptYXN0ZXJLZXkpKTsK
ICAgICB9CiAKICAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRl
LT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9y
Q2xpZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk0LDEzICsxOTQsMTEgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldHVwQ29u
bmVjdAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcyhjb25z
dCBjaGFyKiBiYWNrZW5kQ29tbWFuZHMpCiB7CiAgICAgaWYgKCFiYWNrZW5kQ29tbWFuZHMgfHwg
IWJhY2tlbmRDb21tYW5kc1swXSkgewotICAgICAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IFN0
cmluZygpOworICAgICAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IHsgfTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVu
Y29kZShiYWNrZW5kQ29tbWFuZHMsIHN0cmxlbihiYWNrZW5kQ29tbWFuZHMpLCBiYXNlNjREYXRh
KTsKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9ICJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBtYWtlU3RyaW5n
KCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChiYWNrZW5kQ29t
bWFuZHMsIHN0cmxlbihiYWNrZW5kQ29tbWFuZHMpKSk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50Ojpjb25uZWN0aW9uRGlkQ2xvc2UoKQpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHlHdGsuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMTYgKzEzOSwxOCBAQCB2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclVJUHJveHk6OnBsYXRmb3JtCiAgICAgaWYgKGd0a19uYXRpdmVfZGlhbG9nX3J1bihH
VEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAhPSBHVEtfUkVTUE9OU0VfQUNDRVBUKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKKyAgICBWZWN0
b3I8dWludDhfdD4gZGF0YVZlY3RvcjsKICAgICBDU3RyaW5nIGRhdGFTdHJpbmc7CiAgICAgaWYg
KGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0
YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0
YSA9IGJhc2U2NERlY29kZShjb250ZW50LCBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBh
ZGRpbmcpOworICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBkYXRhVmVjdG9yLnNocmlua1RvRml0KCk7CisgICAgICAgIGRlY29kZWREYXRhLT5z
aHJpbmtUb0ZpdCgpOworICAgICAgICBkYXRhVmVjdG9yID0gV1RGTW92ZSgqZGVjb2RlZERhdGEp
OwogICAgIH0gZWxzZQogICAgICAgICBkYXRhU3RyaW5nID0gY29udGVudC51dGY4KCk7CiAKLSAg
ICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRh
dGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSAhZGF0YVN0
cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcuZGF0YSgpIDogcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oZGF0YVZlY3Rvci5kYXRhKCkpOwogICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gIWRhdGFTdHJp
bmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgpIDogZGF0YVZlY3Rvci5zaXplKCk7CiAg
ICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX2dldF9m
aWxlKGNob29zZXIpKTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRo
KGZpbGUuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9n
dGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9X
ZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDE2ICs1Mzgs
MTggQEAgdm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUoYwogICAgIGlmIChn
dGtfbmF0aXZlX2RpYWxvZ19ydW4oR1RLX05BVElWRV9ESUFMT0coZGlhbG9nLmdldCgpKSkgIT0g
R1RLX1JFU1BPTlNFX0FDQ0VQVCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPGNoYXI+
IGRhdGFWZWN0b3I7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3I7CiAgICAgQ1N0cmlu
ZyBkYXRhU3RyaW5nOwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIGlmICghYmFz
ZTY0RGVjb2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisg
ICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudCwgQmFzZTY0RGVj
b2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKTsKKyAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICBkZWNvZGVkRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgZGF0YVZlY3RvciA9
IFdURk1vdmUoKmRlY29kZWREYXRhKTsKICAgICB9IGVsc2UKICAgICAgICAgZGF0YVN0cmluZyA9
IGNvbnRlbnQudXRmOCgpOwogCi0gICAgY29uc3QgY2hhciogZGF0YSA9ICFkYXRhU3RyaW5nLmlz
TnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiBkYXRhVmVjdG9yLmRhdGEoKTsKKyAgICBjb25z
dCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGFWZWN0b3IuZGF0YSgpKTsKICAgICBzaXplX3Qg
ZGF0YUxlbmd0aCA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5sZW5ndGgoKSA6
IGRhdGFWZWN0b3Iuc2l6ZSgpOwogICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYo
Z3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZShjaG9vc2VyKSk7CiAgICAgR1VuaXF1ZVB0cjxjaGFy
PiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMCArMTc0LDEwIEBAIHZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm0KICAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVS
TE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKIAogICAgICAgICBpZiAoYmFz
ZTY0RW5jb2RlZCkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAg
IGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGlu
ZykpCisgICAgICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnRD
b3B5LCBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICAgICAg
aWYgKCFkZWNvZGVkRGF0YSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBS
ZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGlu
aXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0LnNpemUoKV0pOworICAgICAgICAgICAg
YXV0byBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6
ZGVjb2RlZERhdGEtPmRhdGEoKSBsZW5ndGg6ZGVjb2RlZERhdGEtPnNpemUoKV0pOwogICAgICAg
ICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1
YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6
TlVMTF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYklu
c3BlY3RvclVJUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3Rv
clVJUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwOSwxMCArNTA5LDEwIEBAIHZvaWQg
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKGMKICAgICAgICAgbV9zdWdnZXN0ZWRU
b0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKIAogICAgICAg
ICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAg
ICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlk
YXRlUGFkZGluZykpCisgICAgICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2Rl
KGNvbnRlbnRDb3B5LCBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEg
YWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0LnNpemUoKV0pOworICAg
ICAgICAgICAgYXV0byBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRX
aXRoQnl0ZXM6ZGVjb2RlZERhdGEtPmRhdGEoKSBsZW5ndGg6ZGVjb2RlZERhdGEtPnNpemUoKV0p
OwogICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2Fs
bHk6WUVTXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVU
b1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmcgZXJyb3I6TlVMTF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
c29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
c29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3
ICsyMDYsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvCiAgICAg
aWYgKCFldmVudC5tZXNzYWdlIHx8IGV2ZW50Lm1lc3NhZ2UtPmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBtYWtlU3RyaW5nKCJkYXRhOnRl
eHQvamF2YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlKGV2ZW50Lm1lc3NhZ2UtPnV0Zjgo
KSkpOworICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L2ph
dmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoZXZlbnQubWVzc2FnZS0+dXRmOCgpKSk7
CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KGNvbnN0IEV2
ZW50JiBldmVudCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3Iu
bW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAt
ODIsMTAgKzgyLDggQEAgc3RhdGljIGlubGluZSBIYXNoU2V0PFN0cmluZz4gcHJvZHVjZUhhcwog
ewogICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CiAgICAgZm9yIChhdXRvJiBjcmVkZW50aWFs
RGVzY3JpcHRvciA6IGNyZWRlbnRpYWxEZXNjcmlwdG9ycykgewotICAgICAgICBpZiAoZW1wdHlU
cmFuc3BvcnRzT3JDb250YWluKGNyZWRlbnRpYWxEZXNjcmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhl
bnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKQotICAgICAgICAgICAgJiYgY3JlZGVudGlhbERl
c2NyaXB0b3IudHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5Ci0gICAg
ICAgICAgICAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkgPT0gY3JlZGVu
dGlhbElkTGVuZ3RoKQotICAgICAgICAgICAgcmVzdWx0LmFkZChiYXNlNjRFbmNvZGUoY3JlZGVu
dGlhbERlc2NyaXB0b3IuaWRWZWN0b3IuZGF0YSgpLCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZl
Y3Rvci5zaXplKCkpKTsKKyAgICAgICAgaWYgKGVtcHR5VHJhbnNwb3J0c09yQ29udGFpbihjcmVk
ZW50aWFsRGVzY3JpcHRvci50cmFuc3BvcnRzLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRl
cm5hbCkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IudHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFs
VHlwZTo6UHVibGljS2V5ICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9
PSBjcmVkZW50aWFsSWRMZW5ndGgpCisgICAgICAgICAgICByZXN1bHQuYWRkKG1ha2VTdHJpbmco
YmFzZTY0RW5jb2RlZChjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5kYXRhKCksIGNyZWRl
bnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSkpKTsKICAgICB9CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KQEAgLTI0MSw3ICsyMzksNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFr
ZUNyZWRlbnRpYWwoCiAgICAgICAgIGlmIChub3RGb3VuZCAhPSBtX2V4aXN0aW5nQ3JlZGVudGlh
bHMuZmluZE1hdGNoaW5nKFsmZXhjbHVkZUNyZWRlbnRpYWxJZHNdIChhdXRvJiBjcmVkZW50aWFs
KSB7CiAgICAgICAgICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7CiAgICAg
ICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50
aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZShyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxl
bmd0aCgpKSk7CisgICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFp
bnMobWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVu
Z3RoKCkpKSk7CiAgICAgICAgIH0pKSB7CiAgICAgICAgICAgICByZWNlaXZlRXhjZXB0aW9uKHsg
Tm90QWxsb3dlZEVycm9yLCAiQXQgbGVhc3Qgb25lIGNyZWRlbnRpYWwgbWF0Y2hlcyBhbiBlbnRy
eSBvZiB0aGUgZXhjbHVkZUNyZWRlbnRpYWxzIGxpc3QgaW4gdGhlIHBsYXRmb3JtIGF0dGFjaGVk
IGF1dGhlbnRpY2F0b3IuIl9zIH0sIFdlYkF1dGhlbnRpY2F0aW9uU3RhdHVzOjpMQUV4Y2x1ZGVD
cmVkZW50aWFsc01hdGNoZWQpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTE4LDcgKzUxNiw3
IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjpnZXRBc3NlcnRpb24oKQogICAgICAgICB9CiAK
ICAgICAgICAgYXV0byogcmF3SWQgPSBjcmVkZW50aWFsLT5yYXdJZCgpOwotICAgICAgICBpZiAo
YWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZShyYXdJZC0+ZGF0YSgpLCBy
YXdJZC0+Ynl0ZUxlbmd0aCgpKSkpCisgICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29u
dGFpbnMobWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRl
TGVuZ3RoKCkpKSkpCiAgICAgICAgICAgICBhc3NlcnRpb25SZXNwb25zZXMudW5jaGVja2VkQXBw
ZW5kKGNyZWRlbnRpYWwuY29weVJlZigpKTsKICAgICB9CiAgICAgaWYgKGFzc2VydGlvblJlc3Bv
bnNlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rp
b24uY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9Nb2NrL01vY2tIaWRDb25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYxLDE1ICsyNjEsMTMgQEAgdm9pZCBNb2NrSGlkQ29ubmVjdGlvbjo6ZmVlZFJlcG9ydHMo
KQogICAgICAgICBpZiAoc3RhZ2VzTWF0Y2goKSAmJiBtX2NvbmZpZ3VyYXRpb24uaGlkLT5lcnJv
ciA9PSBNb2NrOjpIaWRFcnJvcjo6VW5zdXBwb3J0ZWRPcHRpb25zICYmIChtX3JlcXVpcmVSZXNp
ZGVudEtleSB8fCBtX3JlcXVpcmVVc2VyVmVyaWZpY2F0aW9uKSkKICAgICAgICAgICAgIG1lc3Nh
Z2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZp
Y2VDb21tYW5kOjprQ2JvciwgeyBzdGF0aWNfY2FzdDx1aW50OF90PihDdGFwRGV2aWNlUmVzcG9u
c2VDb2RlOjprQ3RhcDJFcnJVbnN1cHBvcnRlZE9wdGlvbikgfSk7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHBheWxvYWQ7CiAgICAgICAgICAgICBBU1NFUlQo
IW1fY29uZmlndXJhdGlvbi5oaWQtPnBheWxvYWRCYXNlNjQuaXNFbXB0eSgpKTsKLSAgICAgICAg
ICAgIGF1dG8gc3RhdHVzID0gYmFzZTY0RGVjb2RlKG1fY29uZmlndXJhdGlvbi5oaWQtPnBheWxv
YWRCYXNlNjRbMF0sIHBheWxvYWQpOworICAgICAgICAgICAgYXV0byBwYXlsb2FkID0gYmFzZTY0
RGVjb2RlKG1fY29uZmlndXJhdGlvbi5oaWQtPnBheWxvYWRCYXNlNjRbMF0pOwogICAgICAgICAg
ICAgbV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NC5yZW1vdmUoMCk7Ci0gICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKHN0YXR1cywgc3RhdHVzKTsKICAgICAgICAgICAgIGlmICghbV9j
b25maWd1cmF0aW9uLmhpZC0+aXNVMmYpCi0gICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZpZG9I
aWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNvbW1hbmQ6
OmtDYm9yLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3Nh
Z2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a0Nib3Is
IFdURk1vdmUoKnBheWxvYWQpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBt
ZXNzYWdlID0gRmlkb0hpZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlk
RGV2aWNlQ29tbWFuZDo6a01zZywgcGF5bG9hZCk7CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9
IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNv
bW1hbmQ6OmtNc2csIFdURk1vdmUoKnBheWxvYWQpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9j
YWxDb25uZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9N
b2NrTG9jYWxDb25uZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAg
dm9pZCBNb2NrTG9jYWxDb25uZWN0aW9uOjpmaWx0ZXJSZXNwb25zZQogICAgIGZvciAoOyBpdHIg
IT0gcmVzcG9uc2VzLmVuZCgpOyArK2l0cikgewogICAgICAgICBhdXRvKiByYXdJZCA9IGl0ci0+
Z2V0KCkucmF3SWQoKTsKICAgICAgICAgQVNTRVJUKHJhd0lkKTsKLSAgICAgICAgYXV0byByYXdJ
ZEJhc2U2NCA9IGJhc2U2NEVuY29kZShyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgp
KTsKKyAgICAgICAgYXV0byByYXdJZEJhc2U2NCA9IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChy
YXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7CiAgICAgICAgIGlmIChyYXdJZEJh
c2U2NCA9PSBwcmVmZXJyZWRDcmVkZW50aWFsSWRCYXNlNjQpCiAgICAgICAgICAgICBicmVhazsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJT
dHJhdGVneS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3OCw3ICs1NzgsNyBAQCBPcHRpb25hbDxXZWJMb2FkZXJTdHJhdGVneTo6U3luY0xv
YWRSZXN1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2ln
bmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBDbGllbnRDcmVkZW50aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksICBj
b25zdCBGZXRjaE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9yaWdpbmFs
UmVxdWVzdEhlYWRlcnMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVk
IGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBDbGllbnRDcmVkZW50aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksICBjb25z
dCBGZXRjaE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9yaWdpbmFsUmVx
dWVzdEhlYWRlcnMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIGF1dG8qIHdlYkZyYW1lTG9hZGVy
Q2xpZW50ID0gdG9XZWJGcmFtZUxvYWRlckNsaWVudChmcmFtZUxvYWRlci5jbGllbnQoKSk7CiAg
ICAgYXV0byogd2ViRnJhbWUgPSB3ZWJGcmFtZUxvYWRlckNsaWVudCA/ICZ3ZWJGcmFtZUxvYWRl
ckNsaWVudC0+d2ViRnJhbWUoKSA6IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0
ZWd5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH5XZWJM
b2FkZXJTdHJhdGVneSgpIGZpbmFsOwogICAgIAogICAgIHZvaWQgbG9hZFJlc291cmNlKFdlYkNv
cmU6OkZyYW1lJiwgV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2UmLCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChSZWZQdHI8V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI+JiYpPiYmKSBm
aW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6RnJhbWVM
b2FkZXImLCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNv
bnN0IFdlYkNvcmU6OkZldGNoT3B0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAm
LCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZl
Y3RvcjxjaGFyPiYgZGF0YSkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KFdlYkNvcmU6OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDbGllbnRD
cmVkZW50aWFsUG9saWN5LCBjb25zdCBXZWJDb3JlOjpGZXRjaE9wdGlvbnMmLCBjb25zdCBXZWJD
b3JlOjpIVFRQSGVhZGVyTWFwJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpIGZpbmFsOwogICAgIHZvaWQg
cGFnZUxvYWRDb21wbGV0ZWQoV2ViQ29yZTo6UGFnZSYpIGZpbmFsOwogICAgIHZvaWQgYnJvd3Np
bmdDb250ZXh0UmVtb3ZlZChXZWJDb3JlOjpGcmFtZSYpIGZpbmFsOwogCkBAIC0xMDEsNyArMTAx
LDcgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgU3luY0xvYWRSZXN1bHQgewogICAgICAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yIGVycm9yOwotICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGRhdGE7CiAgICAgfTsKICAgICBPcHRpb25hbDxTeW5jTG9hZFJlc3VsdD4gdHJ5
TG9hZGluZ1N5bmNocm9ub3VzbHlVc2luZ1VSTFNjaGVtZUhhbmRsZXIoV2ViQ29yZTo6RnJhbWVM
b2FkZXImLCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmKTsKICAgICBTeW5jTG9hZFJlc3VsdCBsb2FkRGF0YVVSTFN5bmNocm9ub3VzbHkoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94
eS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcg
KzYzLDcgQEAgdm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OnN0YXJ0TmV3VAogICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUtPnN0YXJ0TG9hZGluZygpOwogfQogCi12b2lkIFdlYlVSTFNj
aGVtZUhhbmRsZXJQcm94eTo6bG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmll
ciBsb2FkSWRlbnRpZmllciwgV2ViRnJhbWUmIHdlYkZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6
OmxvYWRTeW5jaHJvbm91c2x5KFJlc291cmNlTG9hZElkZW50aWZpZXIgbG9hZElkZW50aWZpZXIs
IFdlYkZyYW1lJiB3ZWJGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFZlY3Rvcjx1aW50
OF90PiYgZGF0YSkKIHsKICAgICBkYXRhLnNocmluaygwKTsKICAgICBpZiAoIW1fd2ViUGFnZS5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVU
YXNrKFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHsgbV9pZGVudGlmaWVyLCBsb2FkSWRlbnRpZmll
ciwgcmVxdWVzdCwgd2ViRnJhbWUuaW5mbygpIH0pLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpM
b2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrOjpSZXBseShyZXNwb25zZSwgZXJyb3IsIGRhdGEp
KSkgewpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1l
SGFuZGxlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0
TmV3VGFzayhXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciYsIFdlYkZyYW1lJik7CiAgICAgdm9pZCBz
dG9wQWxsVGFza3MoKTsKIAotICAgIHZvaWQgbG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2Fk
SWRlbnRpZmllciwgV2ViRnJhbWUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFZlY3Rv
cjxjaGFyPiYpOworICAgIHZvaWQgbG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRp
ZmllciwgV2ViRnJhbWUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFZlY3Rvcjx1aW50
OF90PiYpOwogCiAgICAgdWludDY0X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRl
bnRpZmllcjsgfQogICAgIFdlYlBhZ2UmIHBhZ2UoKSB7IHJldHVybiBtX3dlYlBhZ2U7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0
TGVnYWN5L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA1
LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFz
ZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAgICAg
VXBkYXRlIHRvIG1hdGNoIG5ldyBzaWduYXR1cmUuIGNoYXIgLT4gdWludDhfdC4KKwogMjAyMS0w
NS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBG
aWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSgpIHRvIEZpbGVTeXN0ZW06OmZpbGVTaXplKCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0
L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpsb2FkUmVzb3UKICAgICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImIGZyYW1lTG9h
ZGVyLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVu
dENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRU
UEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyLCB1bnNp
Z25lZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVudENyZWRlbnRp
YWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1h
cCYsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVj
dG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KGZyYW1lTG9hZGVyLm5ldHdvcmtpbmdDb250ZXh0KCksIHJlcXVlc3QsIG9w
dGlvbnMuY3JlZGVudGlhbHMgPT0gRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFsczo6T21pdCA/IFN0
b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZSA6IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5
OjpVc2UsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVn
YWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29y
ZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCiAg
ICAgdm9pZCBsb2FkUmVzb3VyY2UoV2ViQ29yZTo6RnJhbWUmLCBXZWJDb3JlOjpDYWNoZWRSZXNv
dXJjZSYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRlck9wdGlvbnMmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlcj4mJik+JiYpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShXZWJDb3JlOjpGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ks
IGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJN
YXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYs
IFZlY3RvcjxjaGFyPiYpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShXZWJDb3JlOjpGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdl
YkNvcmU6OkZldGNoT3B0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1
aW50OF90PiYpIGZpbmFsOwogICAgIHZvaWQgcGFnZUxvYWRDb21wbGV0ZWQoV2ViQ29yZTo6UGFn
ZSYpIGZpbmFsOwogICAgIHZvaWQgYnJvd3NpbmdDb250ZXh0UmVtb3ZlZChXZWJDb3JlOjpGcmFt
ZSYpIGZpbmFsOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOSBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRj
aCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50Ojp3cmFwQ3J5cHRvS2V5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNocm9tZUNsaWVudDo6dW53cmFwQ3J5cHRvS2V5IGNvbnN0KToKKyAgICAgICAg
VXBkYXRlIHRvIHVzZSBuZXcgT3B0aW9uYWwgcmV0dXJuaW5nIGRlZmF1bHRXZWJDcnlwdG9NYXN0
ZXJLZXkoKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5t
bToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzYXZlKToKKyAgICAgICAg
VXBkYXRlIHRvIHVzZSBuZXcgT3B0aW9uYWwgcmV0dXJuaW5nIGJhc2U2NERlY29kZSgpLgorCiAy
MDIxLTA1LTE1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIERl
bGV0ZSBXZWJTUUwgY29kZSBmcm9tIFdlYktpdDIKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA2NiwyOCArMTA2NiwzNCBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdEZ1bGxTY3JlZW5Gb3JFCiAKIGJvb2wgV2ViQ2hy
b21lQ2xpZW50Ojp3cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBWZWN0
b3I8dWludDhfdD4mIHdyYXBwZWRLZXkpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1h
c3RlcktleTsKICAgICBTRUwgc2VsZWN0b3IgPSBAc2VsZWN0b3Iod2ViQ3J5cHRvTWFzdGVyS2V5
Rm9yV2ViVmlldzopOwogICAgIGlmIChbW21fd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1Rv
U2VsZWN0b3I6c2VsZWN0b3JdKSB7CiAgICAgICAgIE5TRGF0YSAqa2V5RGF0YSA9IENhbGxVSURl
bGVnYXRlKG1fd2ViVmlldywgc2VsZWN0b3IpOworICAgICAgICBWZWN0b3I8dWludDhfdD4gbWFz
dGVyS2V5OwogICAgICAgICBtYXN0ZXJLZXkuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihj
b25zdF9jYXN0PHZvaWQqPihba2V5RGF0YSBieXRlc10pKSwgW2tleURhdGEgbGVuZ3RoXSk7Ci0g
ICAgfSBlbHNlIGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQor
ICAgICAgICByZXR1cm4gd3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCBrZXksIHdy
YXBwZWRLZXkpOworICAgIH0KKyAgICAKKyAgICBhdXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBpZiAoIW1hc3RlcktleSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIHdyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwga2V5
LCB3cmFwcGVkS2V5KTsKKyAgICByZXR1cm4gd3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoV1RGTW92
ZSgqbWFzdGVyS2V5KSwga2V5LCB3cmFwcGVkS2V5KTsKIH0KIAogYm9vbCBXZWJDaHJvbWVDbGll
bnQ6OnVud3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXksIFZl
Y3Rvcjx1aW50OF90PiYga2V5KSBjb25zdAogewotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJL
ZXk7CiAgICAgU0VMIHNlbGVjdG9yID0gQHNlbGVjdG9yKHdlYkNyeXB0b01hc3RlcktleUZvcldl
YlZpZXc6KTsKICAgICBpZiAoW1ttX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVj
dG9yOnNlbGVjdG9yXSkgeworICAgICAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogICAg
ICAgICBOU0RhdGEgKmtleURhdGEgPSBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIHNlbGVjdG9y
KTsKICAgICAgICAgbWFzdGVyS2V5LmFwcGVuZChzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29uc3Rf
Y2FzdDx2b2lkKj4oW2tleURhdGEgYnl0ZXNdKSksIFtrZXlEYXRhIGxlbmd0aF0pOwotICAgIH0g
ZWxzZSBpZiAoIWdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdW53cmFwU2VyaWFsaXplZENyeXB0b0tl
eShtYXN0ZXJLZXksIHdyYXBwZWRLZXksIGtleSk7CisgICAgfQogCi0gICAgcmV0dXJuIHVud3Jh
cFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCB3cmFwcGVkS2V5LCBrZXkpOworICAgIGF1
dG8gbWFzdGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIGlmICghbWFz
dGVyS2V5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6
ZWRDcnlwdG9LZXkoV1RGTW92ZSgqbWFzdGVyS2V5KSwgd3JhcHBlZEtleSwga2V5KTsKIH0KIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJ
bnNwZWN0b3JDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGll
bnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwOCwxMCArNDA4LDEwIEBAIHZvaWQgV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OnNhdmUoY28KICAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVS
TE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKIAogICAgICAgICBpZiAoYmFz
ZTY0RW5jb2RlZCkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAg
IGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGlu
ZykpCisgICAgICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQs
IEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgICAgICBpZiAo
IWRlY29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFp
blB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdp
dGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAgICBSZXRh
aW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRX
aXRoQnl0ZXM6ZGVjb2RlZERhdGEtPmRhdGEoKSBsZW5ndGg6ZGVjb2RlZERhdGEtPnNpemUoKV0p
OwogICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2Fs
bHk6WUVTXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVU
b1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmcgZXJyb3I6TlVMTF07CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc2OTcpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5p
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0
byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIu
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjpzdGFydFNlY3VyZUNvbm5l
Y3Rpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjp0ZXN0Q2VydGlmaWNh
dGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjp0ZXN0UHJpdmF0ZUtleSk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvQ2hhbGxlbmdlLm1tOgorICAgICAgICAodGVzdElkZW50aXR5Mik6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJpYnV0aW9uLm1tOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVT
VF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW06CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hha2UpOgorCiAy
MDIxLTA1LTE4ICBBZGl0eWEgS2VlcnRoaSAgPGFrZWVydGhpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbbWFjT1NdIFRpdGxlYmFyIHNlcGFyYXRvciBkb2Vzbid0IHNob3cgd2hlbiBXS1dlYlZpZXcg
aXMgc2Nyb2xsZWQKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU1LDkgKzE1NSw4IEBAIHZvaWQgVENQU2VydmVyOjpzdGFydFNlY3VyZUNvbm5lY3Rp
b24oU28KICAgICAibGRZOWF2Y1RHU3did29pdUlxdjBqVEwxZkhGbnp5M1JITUxEaCtMcHZvbGM1
RFNyU0pIQ1A1V3VLMGVlSlhociIKICAgICAiVDVvUXBITDl6L2NDRExBS0NLUmE0dVYwZmhFZE9X
QnF5UjlwOHk1akp0eWU3MnQ2Q3VGVVY1aXFjcEY0Qkg0ZiIKICAgICAiajJWTkh3c1NySndrRDRR
VUdsVXRIN3Z3blFteUNGeFpNbVdBSmc9PSIpOwotICAgIFZlY3Rvcjx1aW50OF90PiBjZXJ0REVS
OwotICAgIGJhc2U2NERlY29kZShjZXJ0UEVNLCBjZXJ0REVSLCBXVEY6OkJhc2U2NERlY29kZU9w
dGlvbnM6OkJhc2U2NERlZmF1bHQpOwotICAgIHNzbDo6dW5pcXVlX3B0cjxDUllQVE9fQlVGRkVS
PiBjZXJ0KENSWVBUT19CVUZGRVJfbmV3KGNlcnRERVIuZGF0YSgpLCBjZXJ0REVSLnNpemUoKSwg
bnVsbHB0cikpOworICAgIGF1dG8gY2VydERFUiA9IGJhc2U2NERlY29kZShjZXJ0UEVNKTsKKyAg
ICBzc2w6OnVuaXF1ZV9wdHI8Q1JZUFRPX0JVRkZFUj4gY2VydChDUllQVE9fQlVGRkVSX25ldyhj
ZXJ0REVSLT5kYXRhKCksIGNlcnRERVItPnNpemUoKSwgbnVsbHB0cikpOwogICAgIEFTU0VSVChj
ZXJ0KTsKIAogICAgIC8vIFRoaXMgaXMgYSB0ZXN0IGtleSBmcm9tIEJvcmluZ1NTTC4KQEAgLTQx
Miw5ICs0MTEsOCBAQCBWZWN0b3I8dWludDhfdD4gVENQU2VydmVyOjp0ZXN0Q2VydGlmaWNhCiAg
ICAgIkczUEZuWWJXOHVySDBOU0pHL1crLzlEQStZN0FhMGNzNFRQcHVCR1owTlUxVzk0T29DTW80
bGtPNkgveTZMZXUiCiAgICAgIjN2alpEM3k5a1prN21yZTlYSHdrSThNZEs1cz0iKTsKICAgICAK
LSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIGJhc2U2NERlY29kZShwZW1FbmNvZGVk
Q2VydGlmaWNhdGUsIHZlY3RvciwgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZh
dWx0KTsKLSAgICByZXR1cm4gdmVjdG9yOworICAgIGF1dG8gZGVjb2RlZENlcnRpZmljYXRlID0g
YmFzZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSk7CisgICAgcmV0dXJuIFdURk1vdmUo
KmRlY29kZWRDZXJ0aWZpY2F0ZSk7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBUQ1BTZXJ2ZXI6OnRl
c3RQcml2YXRlS2V5KCkKQEAgLTQ3MSw5ICs0NjksOCBAQCBWZWN0b3I8dWludDhfdD4gVENQU2Vy
dmVyOjp0ZXN0UHJpdmF0ZUtlCiAgICAgImRFT2J2Y3BTaFAyMkl0T1ZqU2FtcFJ1QXVSRzI2WmVt
RWJHQ0kzSjZNcXgzeTZtKzZId3VsdHNndGR6RGdyRmUiCiAgICAgInFKZlU4YmJkYnUycGk0N1k0
RmRKSzBITGZmbDVSdz09Iik7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIGJh
c2U2NERlY29kZShwZW1FbmNvZGVkUHJpdmF0ZUtleSwgdmVjdG9yLCBXVEY6OkJhc2U2NERlY29k
ZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwotICAgIHJldHVybiB2ZWN0b3I7CisgICAgYXV0byBk
ZWNvZGVkUHJpdmF0ZUtleSA9IGJhc2U2NERlY29kZShwZW1FbmNvZGVkUHJpdmF0ZUtleSk7Cisg
ICAgcmV0dXJuIFdURk1vdmUoKmRlY29kZWRQcml2YXRlS2V5KTsKIH0KICAgICAKIH0gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9JU09Cb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9JU09Cb3guY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQy
LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBiYXNlNjRFbmNvZGVkU2luZldpdGgKIAogVEVTVChJ
U09Cb3gsIElTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94KQogewotICAgIFZlY3Rvcjx1aW50OF90
PiBzaW5mQXJyYXk7Ci0gICAgQVNTRVJUX1RSVUUoYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFz
ZTY0RW5jb2RlZFNpbmZXaXRoS2V5SUQzKSwgc2luZkFycmF5KSk7Ci0gICAgQVNTRVJUX0VRKDk3
VUwsIHNpbmZBcnJheS5zaXplKCkpOworICAgIGF1dG8gc2luZkFycmF5ID0gYmFzZTY0RGVjb2Rl
KFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2RlZFNpbmZXaXRoS2V5SUQzKSk7CisgICAgQVNTRVJUX1RS
VUUoc2luZkFycmF5KTsKKyAgICBBU1NFUlRfRVEoOTdVTCwgc2luZkFycmF5LT5zaXplKCkpOwog
Ci0gICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVh
dGUoc2luZkFycmF5LmRhdGEoKSwgc2luZkFycmF5LnNpemUoKSksIDAsIHNpbmZBcnJheS5zaXpl
KCkpOworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6
Y3JlYXRlKHNpbmZBcnJheS0+ZGF0YSgpLCBzaW5mQXJyYXktPnNpemUoKSksIDAsIHNpbmZBcnJh
eS0+c2l6ZSgpKTsKIAogICAgIElTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94IHNpbmZCb3g7CiAg
ICAgQVNTRVJUX1RSVUUoc2luZkJveC5yZWFkKHZpZXcpKTsKQEAgLTc4LDExICs3OCwxMSBAQCBz
dGF0aWMgY29uc3QgY2hhciogYmFzZTY0RW5jb2RlZFBzc2hXaXRoCiAKIFRFU1QoSVNPQm94LCBJ
U09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3gpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHBzc2hB
cnJheTsKLSAgICBBU1NFUlRfVFJVRShiYXNlNjREZWNvZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNv
ZGVkUHNzaFdpdGhBc3NldElkKSwgcHNzaEFycmF5KSk7Ci0gICAgQVNTRVJUX0VRKDE3NlVMLCBw
c3NoQXJyYXkuc2l6ZSgpKTsKKyAgICBhdXRvIHBzc2hBcnJheSA9IGJhc2U2NERlY29kZShTdHJp
bmdWaWV3KGJhc2U2NEVuY29kZWRQc3NoV2l0aEFzc2V0SWQpKTsKKyAgICBBU1NFUlRfVFJVRShw
c3NoQXJyYXkpOworICAgIEFTU0VSVF9FUSgxNzZVTCwgcHNzaEFycmF5LT5zaXplKCkpOwogCi0g
ICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUo
cHNzaEFycmF5LmRhdGEoKSwgcHNzaEFycmF5LnNpemUoKSksIDAsIHBzc2hBcnJheS5zaXplKCkp
OworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3Jl
YXRlKHBzc2hBcnJheS0+ZGF0YSgpLCBwc3NoQXJyYXktPnNpemUoKSksIDAsIHBzc2hBcnJheS0+
c2l6ZSgpKTsKIAogICAgIElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveCBwc3NoQm94OwogCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQkocmV2aXNp
b24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1By
aXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgx
LDcgQEAgVEVTVChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgVmFsaWRCbGluZAogICAgIGF1dG8g
Km5zU3BraURhdGEgPSAoX19icmlkZ2UgTlNEYXRhICopc3BraURhdGEuZ2V0KCk7CiAKICAgICAv
LyBDb250aW51ZSB0aGUgdGVzdC4KLSAgICBFWFBFQ1RfVFJVRShwY20uY2FsY3VsYXRlQW5kVXBk
YXRlU291cmNlVW5saW5rYWJsZVRva2VuKFdURjo6YmFzZTY0VVJMRW5jb2RlKG5zU3BraURhdGEu
Ynl0ZXMsIG5zU3BraURhdGEubGVuZ3RoKSkpOworICAgIEVYUEVDVF9UUlVFKHBjbS5jYWxjdWxh
dGVBbmRVcGRhdGVTb3VyY2VVbmxpbmthYmxlVG9rZW4obWFrZVN0cmluZyhiYXNlNjRVUkxFbmNv
ZGVkKG5zU3BraURhdGEuYnl0ZXMsIG5zU3BraURhdGEubGVuZ3RoKSkpKTsKICAgICBhdXRvIHNv
dXJjZVNlY3JldFRva2VuID0gcGNtLnRva2VuU2lnbmF0dXJlSlNPTigpOwogICAgIEVYUEVDVF9F
UShzb3VyY2VTZWNyZXRUb2tlbi0+YXNPYmplY3QoKS0+c2l6ZSgpLCA0dWwpOwogICAgIEVYUEVD
VF9TVFJFUShzb3VyY2VTZWNyZXRUb2tlbi0+Z2V0U3RyaW5nKCJzb3VyY2VfZW5nYWdlbWVudF90
eXBlIl9zKS51dGY4KCkuZGF0YSgpLCAiY2xpY2siKTsKQEAgLTkwLDE0ICs5MCwxMyBAQCBURVNU
KFByaXZhdGVDbGlja01lYXN1cmVtZW50LCBWYWxpZEJsaW5kCiAgICAgRVhQRUNUX0VRKHNvdXJj
ZVNlY3JldFRva2VuLT5nZXRJbnRlZ2VyKCJ2ZXJzaW9uIl9zKSwgMik7CiAKICAgICAvLyBHZW5l
cmF0ZSB0aGUgc2lnbmF0dXJlLgotICAgIFZlY3Rvcjx1aW50OF90PiBibGluZGVkTWVzc2FnZTsK
LSAgICBiYXNlNjRVUkxEZWNvZGUoc291cmNlU2VjcmV0VG9rZW4tPmdldFN0cmluZygic291cmNl
X3NlY3JldF90b2tlbiJfcyksIGJsaW5kZWRNZXNzYWdlKTsKKyAgICBhdXRvIGJsaW5kZWRNZXNz
YWdlID0gYmFzZTY0VVJMRGVjb2RlKHNvdXJjZVNlY3JldFRva2VuLT5nZXRTdHJpbmcoInNvdXJj
ZV9zZWNyZXRfdG9rZW4iX3MpKTsKIAotICAgIGF1dG8gYmxpbmRlZFNpZ25hdHVyZSA9IGFkb3B0
TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0aExlbmd0aDogbW9kdWx1c05CeXRlc10p
OwotICAgIGNjcnNhYnNzYV9zaWduX2JsaW5kZWRfbWVzc2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJp
dmF0ZUtleSwgYmxpbmRlZE1lc3NhZ2UuZGF0YSgpLCBibGluZGVkTWVzc2FnZS5zaXplKCksIHN0
YXRpY19jYXN0PHVpbnQ4X3QgKj4oW2JsaW5kZWRTaWduYXR1cmUgbXV0YWJsZUJ5dGVzXSksIFti
bGluZGVkU2lnbmF0dXJlIGxlbmd0aF0sIHJuZyk7CisgICAgYXV0byBibGluZGVkU2lnbmF0dXJl
ID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRXaXRoTGVuZ3RoOm1vZHVsdXNO
Qnl0ZXNdKTsKKyAgICBjY3JzYWJzc2Ffc2lnbl9ibGluZGVkX21lc3NhZ2UoY2lwaGVyc3VpdGUs
IHJzYVByaXZhdGVLZXksIGJsaW5kZWRNZXNzYWdlLT5kYXRhKCksIGJsaW5kZWRNZXNzYWdlLT5z
aXplKCksIHN0YXRpY19jYXN0PHVpbnQ4X3QgKj4oW2JsaW5kZWRTaWduYXR1cmUgbXV0YWJsZUJ5
dGVzXSksIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0sIHJuZyk7CiAKICAgICAvLyBDb250aW51
ZSB0aGUgdGVzdC4KLSAgICBFWFBFQ1RfVFJVRShwY20uY2FsY3VsYXRlQW5kVXBkYXRlU291cmNl
U2VjcmV0VG9rZW4oV1RGOjpiYXNlNjRVUkxFbmNvZGUoW2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNd
LCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdKSkpOworICAgIEVYUEVDVF9UUlVFKHBjbS5jYWxj
dWxhdGVBbmRVcGRhdGVTb3VyY2VTZWNyZXRUb2tlbihtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29k
ZWQoW2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdKSkp
KTsKICAgICBhdXRvJiBwZXJzaXN0ZW50VG9rZW4gPSBwY20uc291cmNlVW5saW5rYWJsZVRva2Vu
KCk7CiAgICAgRVhQRUNUX1RSVUUocGVyc2lzdGVudFRva2VuKTsKICAgICBFWFBFQ1RfRkFMU0Uo
cGVyc2lzdGVudFRva2VuLT50b2tlbkJhc2U2NFVSTC5pc0VtcHR5KCkpOwpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFw
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2Nv
YS9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFw
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NCwzNyArNDQsMzcgQEAgcHVibGljOgogICAgIH0KIH07
CiAKLVRFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFRlc3QsIEdldERlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkpCitURVNUX0YoU2VyaWFsaXplZENyeXB0b0tleVdyYXBUZXN0LCBEZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KQogewotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXkxOwot
ICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFz
dGVyS2V5MSkpOworICAgIGF1dG8gbWFzdGVyS2V5MSA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkxKTsKIAotICAgIFZlY3Rv
cjx1aW50OF90PiBtYXN0ZXJLZXkyOwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmdldERlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5MikpOworICAgIGF1dG8gbWFzdGVyS2V5MiA9
IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJVRSht
YXN0ZXJLZXkyKTsKIAogICAgIEVYUEVDVF9UUlVFKG1hc3RlcktleTEgPT0gbWFzdGVyS2V5Mik7
CiB9CiAKIFRFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFRlc3QsIERlbGV0ZURlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTE7Ci0g
ICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0
ZXJLZXkxKSk7CisgICAgYXV0byBtYXN0ZXJLZXkxID0gV2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSgpOworICAgIEVYUEVDVF9UUlVFKG1hc3RlcktleTEpOwogICAgIEVYUEVDVF9U
UlVFKFdlYkNvcmU6OmRlbGV0ZURlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKSk7CiAKLSAgICBW
ZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5MjsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpnZXRE
ZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleTIpKTsKKyAgICBhdXRvIG1hc3Rlcktl
eTIgPSBXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQRUNUX1RS
VUUobWFzdGVyS2V5Mik7CiAKICAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkxICE9IG1hc3Rlcktl
eTIpOwogfQogCiBURVNUX0YoU2VyaWFsaXplZENyeXB0b0tleVdyYXBUZXN0LCBTZXJpYWxpemVk
Q3J5cHRvS2V5V3JhcFVud3JhcCkKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5Owot
ICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFz
dGVyS2V5KSk7CisgICAgYXV0byBtYXN0ZXJLZXkgPSBXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRv
TWFzdGVyS2V5KCk7CisgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5KTsKIAogICAgIFZlY3Rvcjx1
aW50OF90PiBjcnlwdG9LZXkoMTYsIDEpOwogICAgIFZlY3Rvcjx1aW50OF90PiB3cmFwcGVkS2V5
OwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3Rl
cktleSwgY3J5cHRvS2V5LCB3cmFwcGVkS2V5KSk7CisgICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6
d3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoKm1hc3RlcktleSwgY3J5cHRvS2V5LCB3cmFwcGVkS2V5
KSk7CiAgICAgRVhQRUNUX1RSVUUoY3J5cHRvS2V5ICE9IHdyYXBwZWRLZXkpOwogICAgIC8vIGVu
c3VyZSB3cmFwcGVkS2V5IGRvZXNuJ3QgY29udGFpbiBjcnlwdG9LZXkKICAgICBib29sIG5vdENv
bnRhaW5lZCA9IHRydWU7CkBAIC05MCw3ICs5MCw3IEBAIFRFU1RfRihTZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcFRlc3QsIFNlcmkKICAgICBFWFBFQ1RfVFJVRShub3RDb250YWluZWQpOwogCiAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHVud3JhcHBlZEtleTsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjp1
bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwgd3JhcHBlZEtleSwgdW53cmFwcGVk
S2V5KSk7CisgICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6dW53cmFwU2VyaWFsaXplZENyeXB0b0tl
eSgqbWFzdGVyS2V5LCB3cmFwcGVkS2V5LCB1bndyYXBwZWRLZXkpKTsKICAgICBFWFBFQ1RfVFJV
RSh1bndyYXBwZWRLZXkgPT0gY3J5cHRvS2V5KTsKIH0KIApJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW0JKHJldmlzaW9uIDI3
NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdl
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTMgKzE3NiwxMCBAQCBSZXRhaW5QdHI8U2VjSWRl
bnRpdHlSZWY+IHRlc3RJZGVudGl0eTIoCiAgICAgIkpBSDJueEtHdXF0QUsyaFdiQUN1NjFSVDVn
QXFBdi9oQjlKWW5jMk9pUTJWbWpZa09rMkdFZElqbjB4U2dYN1ciCiAgICAgIm1JL2hIYnhLTUcz
Umt2OXExQ3grV0IvdjF0OD0iKTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBwcml2YXRlS2V5Qnl0
ZXM7Ci0gICAgYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRQcml2YXRlS2V5LCBwcml2YXRlS2V5Qnl0
ZXMsIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6QmFzZTY0RGVmYXVsdCk7CisgICAgYXV0byBw
cml2YXRlS2V5Qnl0ZXMgPSBiYXNlNjREZWNvZGUocGVtRW5jb2RlZFByaXZhdGVLZXkpOworICAg
IGF1dG8gY2VydGlmaWNhdGVCeXRlcyA9IGJhc2U2NERlY29kZShwZW1FbmNvZGVkQ2VydGlmaWNh
dGUpOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGNlcnRpZmljYXRlQnl0ZXM7Ci0gICAgYmFzZTY0
RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSwgY2VydGlmaWNhdGVCeXRlcywgV1RGOjpCYXNl
NjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsKLQotICAgIHJldHVybiBjcmVhdGVUZXN0
SWRlbnRpdHkocHJpdmF0ZUtleUJ5dGVzLCBjZXJ0aWZpY2F0ZUJ5dGVzKTsKKyAgICByZXR1cm4g
Y3JlYXRlVGVzdElkZW50aXR5KFdURk1vdmUoKnByaXZhdGVLZXlCeXRlcyksIFdURk1vdmUoKmNl
cnRpZmljYXRlQnl0ZXMpKTsKIH0KIAogc3RhdGljIFJldGFpblB0cjxOU1VSTENyZWRlbnRpYWw+
IGNyZWRlbnRpYWxXaXRoSWRlbnRpdHkoKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJpYnV0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRXZlbnRBdHRyaWJ1dGlvbi5tbQkocmV2aXNp
b24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVu
dEF0dHJpYnV0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsMTMgKzE4NCwxMiBAQCBURVNU
KEV2ZW50QXR0cmlidXRpb24sIEZyYXVkUHJldmVudGlvbikKICAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gZW5kID0gcmVxdWVzdDJTdHJpbmcuZmluZCgnIicsIHN0YXJ0KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdG9rZW4gPSByZXF1ZXN0MlN0cmluZy5zdWJzdHJpbmcoc3Rh
cnQsIGVuZCAtIHN0YXJ0KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGJsaW5kZWRNZXNzYWdlOwotICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0VVJMRGVj
b2RlKHRva2VuLCBibGluZGVkTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IGJsaW5kZWRNZXNzYWdlID0gYmFzZTY0VVJMRGVjb2RlKHRva2VuKTsKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNjcnNhYnNzYV9jaXBoZXJzdWl0ZSAqY2lwaGVyc3Vp
dGUgPSAmY2Nyc2Fic3NhX2NpcGhlcnN1aXRlX3JzYTQwOTZfc2hhMzg0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBibGluZGVkU2lnbmF0dXJlID0gYWRvcHROUyhbW05TTXV0YWJsZURh
dGEgYWxsb2NdIGluaXRXaXRoTGVuZ3RoOiBtb2R1bHVzTkJ5dGVzXSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjY3JzYWJzc2Ffc2lnbl9ibGluZGVkX21lc3NhZ2UoY2lwaGVyc3VpdGUsIHJz
YVByaXZhdGVLZXksIGJsaW5kZWRNZXNzYWdlLmRhdGEoKSwgYmxpbmRlZE1lc3NhZ2Uuc2l6ZSgp
LCBzdGF0aWNfY2FzdDx1aW50OF90ICo+KFtibGluZGVkU2lnbmF0dXJlIG11dGFibGVCeXRlc10p
LCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdLCBybmcpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byB1bmxpbmthYmxlVG9rZW4gPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbYmxpbmRlZFNp
Z25hdHVyZSBieXRlc10sIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBibGluZGVkU2lnbmF0dXJlID0gYWRvcHROUyhbW05TTXV0YWJsZURh
dGEgYWxsb2NdIGluaXRXaXRoTGVuZ3RoOm1vZHVsdXNOQnl0ZXNdKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNjcnNhYnNzYV9zaWduX2JsaW5kZWRfbWVzc2FnZShjaXBoZXJzdWl0ZSwgcnNh
UHJpdmF0ZUtleSwgYmxpbmRlZE1lc3NhZ2UtPmRhdGEoKSwgYmxpbmRlZE1lc3NhZ2UtPnNpemUo
KSwgc3RhdGljX2Nhc3Q8dWludDhfdCAqPihbYmxpbmRlZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNd
KSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSwgcm5nKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gdW5saW5rYWJsZVRva2VuID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKFti
bGluZGVkU2lnbmF0dXJlIGJ5dGVzXSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSkpOwogCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBFeGFtcGxlIHJlc3BvbnNlOiB7ICJ1bmxpbmthYmxl
X3Rva2VuIjogIkFCQ0QiIH0uICJBQkNEIiBzaG91bGQgYmUgQmFzZTY0VVJMIGVuY29kZWQuCiAg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3BvbnNlID0gbWFrZVN0cmluZygiSFRUUC8x
LjEgMjAwIE9LXHJcbiIKQEAgLTIyMiwxOCArMjIxLDE2IEBAIFRFU1QoRXZlbnRBdHRyaWJ1dGlv
biwgRnJhdWRQcmV2ZW50aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0ICs9IGtleS5sZW5ndGgoKSArIDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBlbmQgPSByZXF1ZXN0NFN0cmluZy5maW5kKCciJywgc3RhcnQp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdG9rZW4gPSBy
ZXF1ZXN0NFN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gdG9rZW5WZWN0b3I7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0VVJMRGVjb2Rl
KHRva2VuLCB0b2tlblZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byB0b2tlbkRhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5
dGVzOnRva2VuVmVjdG9yLmRhdGEoKSBsZW5ndGg6dG9rZW5WZWN0b3Iuc2l6ZSgpXSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0b2tlblZlY3RvciA9IGJh
c2U2NFVSTERlY29kZSh0b2tlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byB0b2tlbkRhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5
dGVzOnRva2VuVmVjdG9yLT5kYXRhKCkgbGVuZ3RoOnRva2VuVmVjdG9yLT5zaXplKCldKTsKIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IFN0cmluZygic291
cmNlX3NlY3JldF90b2tlbl9zaWduYXR1cmUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGFydCA9IHJlcXVlc3Q0U3RyaW5nLmZpbmQoa2V5KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArPSBrZXkubGVuZ3RoKCkgKyAz
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHJlcXVlc3Q0
U3RyaW5nLmZpbmQoJyInLCBzdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byBzaWduYXR1cmUgPSByZXF1ZXN0NFN0cmluZy5zdWJzdHJpbmcoc3RhcnQs
IGVuZCAtIHN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8dWludDhfdD4gc2lnbmF0dXJlVmVjdG9yOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJhc2U2NFVSTERlY29kZShzaWduYXR1cmUsIHNpZ25hdHVyZVZlY3Rv
cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzaWduYXR1
cmVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzaWduYXR1cmVW
ZWN0b3IuZGF0YSgpIGxlbmd0aDpzaWduYXR1cmVWZWN0b3Iuc2l6ZSgpXSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzaWduYXR1cmVWZWN0b3IgPSBiYXNl
NjRVUkxEZWNvZGUoc2lnbmF0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIHNpZ25hdHVyZURhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0
V2l0aEJ5dGVzOnNpZ25hdHVyZVZlY3Rvci0+ZGF0YSgpIGxlbmd0aDpzaWduYXR1cmVWZWN0b3It
PnNpemUoKV0pOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhQ
RUNUX1RSVUUoU2VjS2V5VmVyaWZ5U2lnbmF0dXJlKHNlY0tleS5nZXQoKSwga1NlY0tleUFsZ29y
aXRobVJTQVNpZ25hdHVyZU1lc3NhZ2VQU1NTSEEzODQsIChfX2JyaWRnZSBDRkRhdGFSZWYpdG9r
ZW5EYXRhLmdldCgpLCAoX19icmlkZ2UgQ0ZEYXRhUmVmKXNpZ25hdHVyZURhdGEuZ2V0KCksIE5V
TEwpKTsKIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJh
dG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtl
eUdlbmVyYXRvci5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OCw4ICs5OCw4
IEBAIFRFU1RfRihTU0xLZXlHZW5lcmF0b3JUZXN0LCBEZWZhdWx0VGVzdCkKICAgICBjaGFyIGNo
YWxsZW5nZVtdID0gIjAxMjM0NTY3ODkiOwogICAgIGF1dG8gcmF3UmVzdWx0ID0gV2ViQ29yZTo6
c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKDAsIGNoYWxsZW5nZSwgdXJsKTsKICAg
ICBBU1NFUlRfRkFMU0UocmF3UmVzdWx0LmlzRW1wdHkoKSk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+
IGRlclJlc3VsdDsKLSAgICBBU1NFUlRfVFJVRShiYXNlNjREZWNvZGUocmF3UmVzdWx0LCBkZXJS
ZXN1bHQpKTsKKyAgICBhdXRvIGRlclJlc3VsdCA9IGJhc2U2NERlY29kZShyYXdSZXN1bHQpOwor
ICAgIEFTU0VSVF9UUlVFKGRlclJlc3VsdCk7CiAKICAgICBTZWNBc24xQ29kZXJSZWYgY29kZXIg
PSBudWxscHRyOwogICAgIEFTU0VSVF9FUShlcnJTZWNTdWNjZXNzLCBTZWNBc24xQ29kZXJDcmVh
dGUoJmNvZGVyKSk7CkBAIC0xMDgsNyArMTA4LDcgQEAgVEVTVF9GKFNTTEtleUdlbmVyYXRvclRl
c3QsIERlZmF1bHRUZXN0KQogICAgIH0pOwogCiAgICAgU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlIGRlY29kZWRSZXN1bHQgeyB9OwotICAgIFNlY0FzbjFJdGVtIGRlclJlc3VsdEl0ZW0geyBk
ZXJSZXN1bHQuc2l6ZSgpLCBkZXJSZXN1bHQuZGF0YSgpIH07CisgICAgU2VjQXNuMUl0ZW0gZGVy
UmVzdWx0SXRlbSB7IGRlclJlc3VsdC0+c2l6ZSgpLCBkZXJSZXN1bHQtPmRhdGEoKSB9OwogICAg
IEFTU0VSVF9FUShlcnJTZWNTdWNjZXNzLCBTZWNBc24xRGVjb2RlRGF0YShjb2RlciwgJmRlclJl
c3VsdEl0ZW0sIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVRlbXBsYXRlLCAmZGVjb2RlZFJl
c3VsdCkpOwogCiAgICAgLy8gQ2hlY2sgY2hhbGxlbmdlCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9jb2NvYS9IVFRQU2VydmVyLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0NCw3ICszNDQs
NyBAQCB2b2lkIENvbm5lY3Rpb246OndlYlNvY2tldEhhbmRzaGFrZShDb21wCiAgICAgICAgICAg
ICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHdlYlNvY2tl
dEtleUdVSUQpLCBzdHJsZW4od2ViU29ja2V0S2V5R1VJRCkpOwogICAgICAgICAgICAgU0hBMTo6
RGlnZXN0IGhhc2g7CiAgICAgICAgICAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgICAg
ICAgICAgcmV0dXJuIGJhc2U2NEVuY29kZShoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpOwor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChoYXNoLmRhdGEoKSwg
U0hBMTo6aGFzaFNpemUpKTsKICAgICAgICAgfTsKIAogICAgICAgICBjb25uZWN0aW9uLnNlbmQo
SFRUUFJlc3BvbnNlKDEwMSwgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429029</attachid>
            <date>2021-05-18 21:33:16 -0700</date>
            <delta_ts>2021-05-19 07:12:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210518213315.patch</filename>
            <type>text/plain</type>
            <size>203191</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnJpbmcgYmFzZTY0IGVuY29kaW5nL2RlY29k
aW5nIHVwIHRvIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZXRpb25zIGJ5OgorICAgICAgICAtIFJl
cGxhY2UgdXNlIG9mICJvdXQgcGFyYW1ldGVyICsgYm9vbCIgd2l0aCBPcHRpb25hbCByZXR1cm4g
dmFsdWVzLgorICAgICAgICAtIFVzaW5nIGVudW0gY2xhc3MgZm9yIGVudW1lcmF0aW9ucy4KKyAg
ICAgICAgLSBSZXBsYWNpbmcgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyL0NvbnN0
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyCisgICAgICAgICAgd2l0aCBhcHByb3By
aWF0ZSBmdW5jdGlvbiBvdmVybG9hZHMuCisKKyAgICAgICAgQWxzbyBhZGRzIGEgbmV3IFN0cmlu
Z1R5cGVBZGFwdGVyIGZvciBpbmxpbmUgYmFzZTY0IGVuY29kaW5nIGRhdGEgaW4gZWl0aGVyIG1h
a2VTdHJpbmcoKQorICAgICAgICBvciBTdHJpbmdCdWlsZGVyLiBUbyBtYWtlIHRoaXMgd29yaywg
YSBmZXcgbW9kaWZpY2F0aW9ucyB3ZXJlIG5lZWQgdG8gdGhlIGJhc2U2NEVuY29kZSgpCisgICAg
ICAgIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBmaXhlZCBzaXplIHdyaXRlVG8oKSBmdW5jdGlv
bi4KKworICAgICAgICBGaXJzdCwgdGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBkYXRhIGlzIG5v
dyBjb21wdXRlZCB1cCBmcm9udCBkZXBlbmRpbmcgb24gdGhlIHBvbGljeS4KKyAgICAgICAgVGhp
cyBoYXMgYmVlbiBleHRyYWN0ZWQgaW50byBhIG5ldyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6
ZSgpIGZ1bmN0aW9uIHVzZWQgYnkgYm90aAorICAgICAgICB0aGUgYWRhcHRvciBhbmQgYnkgYmFz
ZTY0RW5jb2RlIHdoZW4gcGFzc2VkIGEgVmVjdG9yLiBQcmV2aW91c2x5LCB3aGVuIGVuY29kaW5n
IHVzaW5nCisgICAgICAgIHNvbWUgcG9saWNpZXMsIHRoZSBzaXplIHdhcyBhbiBvdmVyZXN0aW1h
dGUgYW5kIHRoZSByZXN1bHRpbmcgVmVjdG9yIHdvdWxkIGJlIHJlc2l6ZWQKKyAgICAgICAgZG93
biBhZnRlciBlbmNvZGluZy4KKworICAgICAgICBTZWNvbmQsIGJhc2U2NEVuY29kZUludGVybmFs
IHdhcyBtYWRlIGludG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbiB0byBhbGxvdyBmb3IgdHdvIG5ldyAK
KyAgICAgICAgYmFzZTY0RW5jb2RlIGZ1bmN0aW9ucywgb25lIG9mIHdoaWNoIGhhcyBhIFVDaGFy
KiBkZXN0aW5hdGlvbi4gVGhlc2UgYXJlIHVzZWQgYnkgdGhlCisgICAgICAgIGFkYXB0b3IgdG8g
d3JpdGUgdGhlIGVuY29kZWQgZGF0YS4KKworICAgICAgICBPbmUgYWRkaXRpb25hbCBzbWFsbCBj
aGFuZ2UgaXMgdGhhdCBub3cgYSBvcHRpb25hbCBtYXAgdHlwZSBwYXJhbWV0ZXIgaGFzIGJlZW4g
YWRkZWQKKyAgICAgICAgdG8gYWxsIHRoZSBlbmNvZGVycyB0byBhbGxvdyB1c2luZyBlaXRoZXIg
dGhlIGRlZmF1bHQgbWFwIG9yIHRoZSBVUkwgb25lIGFzIGRlZmluZWQgCisgICAgICAgIGluIFJG
QyA0NjQ4LiBUaGlzIHNpbXBsaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJpbmdU
eXBlQWRhcHRlciBhbmQgbWFrZXMgdGhlCisgICAgICAgIGJhc2U2NFVSTEVuY29kZS9iYXNlNjRV
UkxEZWNvZGUgZnVuY3Rpb25zIGludG8gc2ltcGxlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0
IHVzZQorICAgICAgICB0aGUgcmlnaHQgZGVmYXVsdHMgZm9yIHRoZSBnZW5lcmljIGVuY29kZS9k
ZWNvZGUgZnVuY3Rpb25zLiAKKworICAgICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5jcHA6CisgICAg
ICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVybmFsKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5j
b2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlSW50ZXJuYWwpOgorICAgICAgICAoV1RG
OjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxEZWNvZGUpOgorICAgICAg
ICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L0Jh
c2U2NC5oOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNl
NjRFbmNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOgorICAgICAgICAoV1RG
Ojppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKToKKyAgICAgICAgKFdURjo6Y2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGVkKToKKyAgICAg
ICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlZCk6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFw
dGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpTdHJpbmdUeXBlQWRhcHRlcik6CisgICAgICAgIChX
VEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpsZW5ndGggY29uc3Qp
OgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6
aXM4Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3Bl
Y2lmaWNhdGlvbj46OndyaXRlVG8gY29uc3QpOgorCiAyMDIxLTA1LTE2ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRl
U3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9CYXNlNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAgIENvcHlyaWdodCAoQykgMjAw
MC0yMDAxIERhd2l0IEFsZW1heWVodSA8YWRhd2l0QGtkZS5vcmc+CiAgICBDb3B5cmlnaHQgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KLSAgIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJv
Z2EuY29tPgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMTMgKzI1LDE2IEBACiAjaW5jbHVkZSA8
d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKIGNvbnN0IGNoYXIgbm9uQWxwaGFiZXQgPSAtMTsKIAotc3RhdGljIGNvbnN0IGNo
YXIgYmFzZTY0RW5jTWFwWzY0XSA9IHsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZW5jb2Rl
TWFwU2l6ZSA9IDY0Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBkZWNvZGVNYXBTaXplID0g
MTI4OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRFbmNNYXBbZW5jb2RlTWFwU2l6ZV0gPSB7
CiAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwKICAg
ICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAweDRGLCAweDUwLAogICAgIDB4
NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCkBAIC00Miw3ICs0
NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVuY01hcFs2NF0gPSB7CiAgICAgMHgzNCwg
MHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHgyRgogfTsKIAotc3RhdGljIGNv
bnN0IGNoYXIgYmFzZTY0RGVjTWFwWzEyOF0gPSB7CitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRE
ZWNNYXBbZGVjb2RlTWFwU2l6ZV0gPSB7CiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9u
QWxwaGFiZXQsCkBAIC02MSw3ICs2NCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NERlY01h
cFsxMjhdID0gewogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0LCBub25BbHBoYWJl
dCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsKIAotc3RhdGljIGNv
bnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyIGJhc2U2
NFVSTEVuY01hcFtlbmNvZGVNYXBTaXplXSA9IHsKICAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0
LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAogICAgIDB4NDksIDB4NEEsIDB4NEIsIDB4NEMsIDB4
NEQsIDB4NEUsIDB4NEYsIDB4NTAsCiAgICAgMHg1MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1NSwg
MHg1NiwgMHg1NywgMHg1OCwKQEAgLTcyLDcgKzc1LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFz
ZTY0VVJMRW5jTWFwWzY0XSA9IAogICAgIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4
MzksIDB4MkQsIDB4NUYKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NFVSTERlY01hcFsx
MjhdID0geworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRGVjTWFwW2RlY29kZU1hcFNpemVd
ID0gewogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwK
ICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCiAgICAg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LApAQCAtOTEsMjQz
ICs5NCwyNDIgQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRGVjTWFwWzEyOF0gPQogICAg
IDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQs
IG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIGJhc2U2
NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwg
VmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIGNvbnN0IGNoYXIg
KCZlbmNvZGVNYXApWzY0XSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRp
YyB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVpbnQ4X3QqIGlucHV0RGF0YUJ1ZmZl
ciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNsZWFyKCk7Ci0gICAgaWYgKCFs
ZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVzdGluYXRpb25MZW5ndGggPiAwKTsK
KyAgICBBU1NFUlQoY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoaW5wdXRMZW5ndGgsIHBvbGlj
eSkgPT0gZGVzdGluYXRpb25MZW5ndGgpOwogCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmluZyBp
cyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90aGluZy4KLSAgICAvLyBOb3Rl
OiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSAib3V0TGVuZ3RoIiBjb21wdXRhdGlvbiBiZWxv
dy4KLSAgICAvLyBSYXRoZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBh
IGJpdCBjb25zZXJ2YXRpdmUuCi0gICAgY29uc3QgdW5zaWduZWQgbWF4SW5wdXRCdWZmZXJTaXpl
ID0gVUlOVF9NQVggLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwotICAgIGlmIChsZW4gPiBtYXhJbnB1
dEJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGVuY29kZU1hcCA9IChtYXAg
PT0gQmFzZTY0RW5jb2RlTWFwOjpVUkwpID8gYmFzZTY0VVJMRW5jTWFwIDogYmFzZTY0RW5jTWFw
OwogCiAgICAgdW5zaWduZWQgc2lkeCA9IDA7CiAgICAgdW5zaWduZWQgZGlkeCA9IDA7CisgICAg
dW5zaWduZWQgY291bnQgPSAwOwogCi0gICAgdW5zaWduZWQgb3V0TGVuZ3RoID0gKChsZW4gKyAy
KSAvIDMpICogNDsKKyAgICBib29sIGluc2VydExGcyA9IChwb2xpY3kgPT0gQmFzZTY0RW5jb2Rl
UG9saWN5OjpJbnNlcnRMRnMgJiYgZGVzdGluYXRpb25MZW5ndGggPiBtYXhpbXVtQmFzZTY0TGlu
ZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOwogCi0gICAgLy8gRGVhbCB3aXRoIHRoZSA3NiBjaGFy
YWN0ZXIgcGVyIGxpbmUgbGltaXQgc3BlY2lmaWVkIGluIFJGQyAyMDQ1LgotICAgIGJvb2wgaW5z
ZXJ0TEZzID0gKHBvbGljeSA9PSBCYXNlNjRJbnNlcnRMRnMgJiYgb3V0TGVuZ3RoID4gNzYpOwot
ICAgIGlmIChpbnNlcnRMRnMpCi0gICAgICAgIG91dExlbmd0aCArPSAoKG91dExlbmd0aCAtIDEp
IC8gNzYpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBvdXQuZ3JvdyhvdXRMZW5ndGgpOwot
Ci0gICAgLy8gMy1ieXRlIHRvIDQtYnl0ZSBjb252ZXJzaW9uICsgMC02MyB0byBhc2NpaSBwcmlu
dGFibGUgY29udmVyc2lvbgotICAgIGlmIChsZW4gPiAxKSB7Ci0gICAgICAgIHdoaWxlIChzaWR4
IDwgbGVuIC0gMikgeworICAgIGlmIChpbnB1dExlbmd0aCA+IDEpIHsKKyAgICAgICAgd2hpbGUg
KHNpZHggPCBpbnB1dExlbmd0aCAtIDIpIHsKICAgICAgICAgICAgIGlmIChpbnNlcnRMRnMpIHsK
LSAgICAgICAgICAgICAgICBpZiAoY291bnQgJiYgIShjb3VudCAlIDc2KSkKLSAgICAgICAgICAg
ICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOworICAgICAgICAgICAgICAgIGlmIChjb3VudCAm
JiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAg
ICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAnXG4nOwog
ICAgICAgICAgICAgICAgIGNvdW50ICs9IDQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBv
dXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA+PiAyKSAmIDA3N107Ci0gICAgICAg
ICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lkeCArIDFdID4+IDQpICYgMDE3
KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3NyldOwotICAgICAgICAgICAgb3V0W2RpZHgrK10g
PSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAyXSA+PiA2KSAmIDAwMykgfCAoKGRhdGFbc2lkeCAr
IDFdIDw8IDIpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFtk
YXRhW3NpZHggKyAyXSAmIDA3N107CisKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZl
cltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXREYXRhQnVmZmVyW3NpZHggICAgXSA+PiAyKSAm
IDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29k
ZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChpbnB1dERh
dGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlv
bkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsg
Ml0gPj4gNikgJiAwMDMpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3
KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1h
cFsgIGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0gICAgICAgJiAwNzddOwogICAgICAgICAgICAg
c2lkeCArPSAzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHNpZHggPCBsZW4pIHsKLSAg
ICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgNzYpKQotICAg
ICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7Ci0KLSAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNv
ZGVNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzddOwotICAgICAgICBpZiAoc2lkeCA8IGxlbiAt
IDEpIHsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWygoZGF0YVtzaWR4ICsg
MV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYgMDc3KV07Ci0gICAgICAgICAg
ICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4ICsgMV0gPDwgMikgJiAwNzddOwor
ICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsKKyAgICAgICAgaWYgKGluc2VydExGcyAmJiAo
Y291bnQgPiAwKSAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVuSW5zZXJ0
aW5nTEZzKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gJ1xu
JzsKKworICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFso
aW5wdXREYXRhQnVmZmVyW3NpZHhdID4+IDIpICYgMDc3XTsKKyAgICAgICAgaWYgKHNpZHggPCBp
bnB1dExlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4
KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHggKyAxXSA+PiA0KSAmIDAxNykg
fCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA8PCA0KSAmIDA3NyldOworICAgICAgICAgICAgZGVz
dGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBbIChpbnB1dERhdGFCdWZmZXJb
c2lkeCArIDFdIDw8IDIpICYgMDc3XTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBvdXRb
ZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA8PCA0KSAmIDA3N107CisgICAgICAgICAg
ICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsgKGlucHV0RGF0YUJ1
ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzddOwogICAgIH0KIAotICAgIC8vIEFkZCBwYWRkaW5n
Ci0gICAgaWYgKHBvbGljeSA9PSBCYXNlNjRVUkxQb2xpY3kpCi0gICAgICAgIG91dC5yZXNpemUo
ZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdoaWxlIChkaWR4IDwgb3V0LnNpemUoKSkgewot
ICAgICAgICAgICAgb3V0W2RpZHhdID0gJz0nOwotICAgICAgICAgICAgKytkaWR4OwotICAgICAg
ICB9CisgICAgQVNTRVJUKHBvbGljeSAhPSBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCB8fCBkaWR4
ID09IGRlc3RpbmF0aW9uTGVuZ3RoKTsKKworICAgIHdoaWxlIChkaWR4IDwgZGVzdGluYXRpb25M
ZW5ndGgpIHsKKyAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHhdID0gJz0nOworICAg
ICAgICArK2RpZHg7CiAgICAgfQogfQogCi1TdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3N0YXRp
YyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29uc3QgdWludDhfdCogaW5w
dXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBv
bGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0Owot
ICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKLSAgICByZXR1
cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOworICAgIGF1dG8gZGVzdGlu
YXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dExlbmd0aCwgcG9s
aWN5KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRlc3RpbmF0aW9uVmVjdG9yKGRlc3RpbmF0aW9uTGVuZ3Ro
KTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChpbnB1dERhdGFCdWZmZXIsIGlucHV0TGVuZ3Ro
LCBkZXN0aW5hdGlvblZlY3Rvci5kYXRhKCksIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1h
cCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uVmVjdG9yOwogfQogCi12b2lkIGJhc2U2NEVuY29k
ZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5KQorVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZShjb25z
dCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJhc2U2NEVuY29k
ZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuLCBv
dXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlSW50ZXJu
YWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVu
Z3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9p
ZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCog
aW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRlc3RpbmF0aW9u
RGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGlj
eSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3Vs
dDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVu
Y01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsK
KyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm47CisgICAgYmFzZTY0
RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZl
ciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqIGRh
dGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQpCit2b2lkIGJhc2U2NEVuY29kZShj
b25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBMQ2hhciog
ZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBiYXNlNjRF
bmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxl
biwgb3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7CisgICAgaWYgKCFkZXN0
aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGJhc2U2NEVuY29kZUludGVybmFs
KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZmZXIpLCBpbnB1dExlbmd0
aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5LCBtYXAp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBib29sIGJhc2U2NERl
Y29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgU2lnbmVkT3JVbnNp
Z25lZENoYXJWZWN0b3JBZGFwdGVyJiBvdXQsIHVuc2lnbmVkIG9wdGlvbnMsIGNvbnN0IGNoYXIg
KCZkZWNvZGVNYXApWzEyOF0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgT3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBpbnB1dERhdGFC
dWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICBvdXQuY2xlYXIoKTsKLSAg
ICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFpbnB1dExlbmd0
aCkKKyAgICAgICAgcmV0dXJuIFZlY3Rvcjx1aW50OF90PiB7IH07CiAKLSAgICBvdXQuZ3Jvdyhs
ZW5ndGgpOworICAgIGF1dG8gZGVjb2RlTWFwID0gKG1hcCA9PSBCYXNlNjREZWNvZGVNYXA6OlVS
TCkgPyBiYXNlNjRVUkxEZWNNYXAgOiBiYXNlNjREZWNNYXA7CisKKyAgICBWZWN0b3I8dWludDhf
dD4gZGVzdGluYXRpb24oaW5wdXRMZW5ndGgpOwogCiAgICAgdW5zaWduZWQgZXF1YWxzU2lnbkNv
dW50ID0gMDsKLSAgICB1bnNpZ25lZCBvdXRMZW5ndGggPSAwOwotICAgIGJvb2wgaGFkRXJyb3Ig
PSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgKytpZHgp
IHsKLSAgICAgICAgdW5zaWduZWQgY2ggPSBkYXRhW2lkeF07CisgICAgdW5zaWduZWQgZGVzdGlu
YXRpb25MZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4IDwgaW5wdXRM
ZW5ndGg7ICsraWR4KSB7CisgICAgICAgIHVuc2lnbmVkIGNoID0gaW5wdXREYXRhQnVmZmVyW2lk
eF07CiAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKICAgICAgICAgICAgICsrZXF1YWxzU2lnbkNv
dW50OwogICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIG5ldmVyIGJlIG1vcmUgdGhhbiAyIHBh
ZGRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChvcHRpb25zICYgQmFzZTY0VmFsaWRh
dGVQYWRkaW5nICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKLSAgICAgICAgICAgICAgICBoYWRF
cnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAob3B0
aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpICYmIGVx
dWFsc1NpZ25Db3VudCA+IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2hhciBkZWNv
ZGVkQ2hhcmFjdGVyID0gY2ggPCBXVEZfQVJSQVlfTEVOR1RIKGRlY29kZU1hcCkgPyBkZWNvZGVN
YXBbY2hdIDogbm9uQWxwaGFiZXQ7CisgICAgICAgICAgICBjaGFyIGRlY29kZWRDaGFyYWN0ZXIg
PSBjaCA8IGRlY29kZU1hcFNpemUgPyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFiZXQ7CiAgICAg
ICAgICAgICBpZiAoZGVjb2RlZENoYXJhY3RlciAhPSBub25BbHBoYWJldCkgewotICAgICAgICAg
ICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFkRXJy
b3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgb3V0W291dExlbmd0aCsrXSA9IGRlY29kZWRDaGFyYWN0ZXI7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucyAmIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5l
d0xpbmVzKQotICAgICAgICAgICAgICAgIHx8ICghaXNMYXRpbjEoY2gpIHx8ICFpc0FTQ0lJU3Bh
Y2UoY2gpIHx8ICgob3B0aW9ucyAmIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikgJiYgY2ggPT0g
J1x2JykpKSB7Ci0gICAgICAgICAgICAgICAgaGFkRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25bZGVzdGluYXRpb25MZW5ndGgrK10gPSBkZWNvZGVkQ2hhcmFjdGVyOworICAgICAgICAg
ICAgfSBlbHNlIGlmICghb3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25v
cmVTcGFjZXNBbmROZXdMaW5lcykgfHwgKCFpc0xhdGluMShjaCkgfHwgIWlzQVNDSUlTcGFjZShj
aCkgfHwgKG9wdGlvbnMuY29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlzY2FyZFZlcnRp
Y2FsVGFiKSAmJiBjaCA9PSAnXHYnKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gTWFrZSBz
dXJlIHdlIHNocmluayBiYWNrIHRoZSBWZWN0b3IgYmVmb3JlIHJldHVybmluZy4gb3V0TGVuZ3Ro
IG1heSBiZSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQKKyAgICAvLyBNYWtlIHN1cmUgd2Ugc2hyaW5r
IGJhY2sgdGhlIFZlY3RvciBiZWZvcmUgcmV0dXJuaW5nLiBkZXN0aW5hdGlvbkxlbmd0aCBtYXkg
YmUgc2hvcnRlciB0aGFuIGV4cGVjdGVkCiAgICAgLy8gaW4gY2FzZSBvZiBlcnJvciBvciBpbiBj
YXNlIG9mIGlnbm9yZWQgc3BhY2VzLgotICAgIGlmIChvdXRMZW5ndGggPCBvdXQuc2l6ZSgpKQot
ICAgICAgICBvdXQuc2hyaW5rKG91dExlbmd0aCk7Ci0KLSAgICBpZiAoaGFkRXJyb3IpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGggPCBkZXN0aW5hdGlv
bi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNocmluayhkZXN0aW5hdGlvbkxlbmd0aCk7
CiAKLSAgICBpZiAoIW91dExlbmd0aCkKLSAgICAgICAgcmV0dXJuICFlcXVhbHNTaWduQ291bnQ7
CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkgeworICAgICAgICBpZiAoIWVxdWFsc1NpZ25D
b3VudCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBW
ZWN0b3I8dWludDhfdD4geyB9OworICAgIH0KIAogICAgIC8vIFRoZSBzaG91bGQgYmUgbm8gcGFk
ZGluZyBpZiBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiA0LgotICAgIC8vIFdlIHVzZSAob3V0TGVu
Z3RoICsgZXF1YWxzU2lnbkNvdW50KSBpbnN0ZWFkIG9mIGxlbmd0aCBiZWNhdXNlIHdlIGRvbid0
IHdhbnQgdG8gYWNjb3VudCBmb3IgaWdub3JlZCBjaGFyYWN0ZXJzIChpLmUuIHNwYWNlcykuCi0g
ICAgaWYgKG9wdGlvbnMgJiBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgJiYgZXF1YWxzU2lnbkNvdW50
ICYmIChvdXRMZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIC8vIFdlIHVzZSAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNTaWduQ291bnQp
IGluc3RlYWQgb2YgbGVuZ3RoIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhY2NvdW50IGZvciBp
Z25vcmVkIGNoYXJhY3RlcnMgKGkuZS4gc3BhY2VzKS4KKyAgICBpZiAob3B0aW9ucy5jb250YWlu
cyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpICYmIGVxdWFsc1NpZ25Db3Vu
dCAmJiAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFZhbGlkIGRhdGEgaXMgKG4gKiA0ICsgWzAs
MiwzXSkgY2hhcmFjdGVycyBsb25nLgotICAgIGlmICgob3V0TGVuZ3RoICUgNCkgPT0gMSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoZGVzdGluYXRpb25MZW5ndGggJSA0KSA9PSAx
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIC8vIDQtYnl0ZSB0byAz
LWJ5dGUgY29udmVyc2lvbgotICAgIG91dExlbmd0aCAtPSAob3V0TGVuZ3RoICsgMykgLyA0Owot
ICAgIGlmICghb3V0TGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVzdGluYXRp
b25MZW5ndGggLT0gKGRlc3RpbmF0aW9uTGVuZ3RoICsgMykgLyA0OworICAgIGlmICghZGVzdGlu
YXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICB1bnNpZ25l
ZCBzaWR4ID0gMDsKICAgICB1bnNpZ25lZCBkaWR4ID0gMDsKLSAgICBpZiAob3V0TGVuZ3RoID4g
MSkgewotICAgICAgICB3aGlsZSAoZGlkeCA8IG91dExlbmd0aCAtIDIpIHsKLSAgICAgICAgICAg
IG91dFtkaWR4XSA9ICgoKG91dFtzaWR4XSA8PCAyKSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMV0g
Pj4gNCkgJiAwMDMpKTsKLSAgICAgICAgICAgIG91dFtkaWR4ICsgMV0gPSAoKChvdXRbc2lkeCAr
IDFdIDw8IDQpICYgMjU1KSB8ICgob3V0W3NpZHggKyAyXSA+PiAyKSAmIDAxNykpOwotICAgICAg
ICAgICAgb3V0W2RpZHggKyAyXSA9ICgoKG91dFtzaWR4ICsgMl0gPDwgNikgJiAyNTUpIHwgKG91
dFtzaWR4ICsgM10gJiAwNzcpKTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGggPiAxKSB7Cisg
ICAgICAgIHdoaWxlIChkaWR4IDwgZGVzdGluYXRpb25MZW5ndGggLSAyKSB7CisgICAgICAgICAg
ICBkZXN0aW5hdGlvbltkaWR4ICAgIF0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICAgIF0gPDwgMikg
JiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uW2RpZHggKyAxXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggKyAxXSA8PCA0
KSAmIDI1NSkgfCAoKGRlc3RpbmF0aW9uW3NpZHggKyAyXSA+PiAyKSAmIDAxNykpOworICAgICAg
ICAgICAgZGVzdGluYXRpb25bZGlkeCArIDJdID0gKCgoZGVzdGluYXRpb25bc2lkeCArIDJdIDw8
IDYpICYgMjU1KSB8ICAoZGVzdGluYXRpb25bc2lkeCArIDNdICAgICAgICYgMDc3KSk7CiAgICAg
ICAgICAgICBzaWR4ICs9IDQ7CiAgICAgICAgICAgICBkaWR4ICs9IDM7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAoZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2RpZHhdID0gKCgo
b3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOwot
Ci0gICAgaWYgKCsrZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2RpZHhdID0gKCgob3V0
W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikgJiAwMTcpKTsK
KyAgICBpZiAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0aW5hdGlvbltk
aWR4XSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggICAgXSA8PCAyKSAmIDI1NSkgfCAoKGRlc3RpbmF0
aW9uW3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOwogCi0gICAgaWYgKG91dExlbmd0aCA8IG91dC5z
aXplKCkpCi0gICAgICAgIG91dC5zaHJpbmsob3V0TGVuZ3RoKTsKKyAgICBpZiAoKytkaWR4IDwg
ZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0aW9uW2RpZHhdID0gKCgoZGVzdGlu
YXRpb25bc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lkeCArIDJdID4+
IDIpICYgMDE3KSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5n
dGggPCBkZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNocmluayhkZXN0
aW5hdGlvbkxlbmd0aCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwogfQogCi1ib29sIGJhc2U2
NERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNl
NjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlv
bnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91
dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJu
YWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBvcHRpb25zLCBiYXNlNjREZWNNYXAp
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJldHVybiBi
YXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25z
LCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29kZShTdHJpbmdWaWV3IGluLCBTaWduZWRPclVu
c2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwgT3B0aW9uU2V0
PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW4u
aXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0
ZXJzOCgpLCBsZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAgICByZXR1cm4g
YmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBvcHRp
b25zLCBiYXNlNjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgp
OworICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFz
ZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBt
YXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYo
KSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29kZShjb25zdCBW
ZWN0b3I8Y2hhcj4mIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCB1
bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlv
bnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNsZWFyKCk7Cisg
ICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2Rl
SW50ZXJuYWwoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7Cit9CiAK
LSAgICAvLyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdlLCBqdXN0
IHJldHVybiBub3RoaW5nLgotICAgIGlmIChpbi5zaXplKCkgPiBVSU5UX01BWCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29u
c3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9w
dGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCit7CisgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBt
YXApOworfQogCi0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPihpbi5kYXRhKCkpLCBpbi5zaXplKCksIG91dCwgb3B0aW9ucywgYmFz
ZTY0RGVjTWFwKTsKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9w
dGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCit7CisgICAgcmV0dXJuIGJhc2U2
NERlY29kZUludGVybmFsKGRhdGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKIH0KIAotYm9vbCBi
YXNlNjREZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuLCBTaWduZWRPclVuc2ln
bmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVu
Z3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2Rl
TWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KGRhdGEpLCBsZW4sIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFw
KTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KGRhdGEpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKLWJvb2wgYmFzZTY0
VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25z
dCBTdHJpbmcmIGlucHV0KQogewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGluLmxlbmd0aCgpOwot
ICAgIGlmICghbGVuZ3RoIHx8IGluLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFzZTY0RGVj
b2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQs
IGJhc2U2NFVSTERlY01hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGluLmNo
YXJhY3RlcnMxNigpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwgYmFzZTY0VVJMRGVjTWFw
KTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0
aCB8fCBpbnB1dC5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7
CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBs
ZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwogfQogCi1ib29sIGJhc2U2NFVSTERl
Y29kZShTdHJpbmdWaWV3IGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0
KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyBp
bnB1dCkKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbi5sZW5ndGgoKTsKLSAgICBpZiAoIWxl
bmd0aCB8fCBpbi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGluLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxE
ZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzMTYo
KSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2NFVSTERlY01hcCk7CisgICAgdW5z
aWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAgaWYgKCFsZW5ndGggfHwgaW5wdXQu
aXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFy
YWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOworICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCB7IH0s
IEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3Qg
VmVjdG9yPGNoYXI+JiBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCkK
K09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgaW5wdXQpCiB7Ci0gICAgb3V0LmNsZWFyKCk7CisgICAgaWYgKGlucHV0LnNpemUo
KSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuZGF0
YSgpLCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOworfQogCi0gICAg
Ly8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1
cm4gbm90aGluZy4KLSAgICBpZiAoaW4uc2l6ZSgpID4gVUlOVF9NQVgpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IFZlY3RvcjxjaGFyPiYgaW5wdXQpCit7CisgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29k
ZU1hcDo6VVJMKTsKK30KIAotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oaW4uZGF0YSgpKSwgaW4uc2l6ZSgpLCBvdXQsIEJhc2U2
NERlZmF1bHQsIGJhc2U2NFVSTERlY01hcCk7CitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJh
c2U2NFVSTERlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGRhdGEsIGxlbmd0aCwgeyB9LCBCYXNlNjRE
ZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCkK
K09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGRhdGEpLCBsZW4sIG91dCwgQmFzZTY0RGVm
YXVsdCwgYmFzZTY0VVJMRGVjTWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCwgeyB9LCBCYXNl
NjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNl
L1dURi93dGYvdGV4dC9CYXNlNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0Jhc2U2NC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2
NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxOTEgKzI3LDEwMCBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLWVudW0gQmFzZTY0RW5jb2RlUG9s
aWN5IHsKLSAgICBCYXNlNjREb05vdEluc2VydExGcywKLSAgICBCYXNlNjRJbnNlcnRMRnMsCi0g
ICAgQmFzZTY0VVJMUG9saWN5IC8vIE5vIHBhZGRpbmcsIG5vIExGcy4KK2VudW0gY2xhc3MgQmFz
ZTY0RW5jb2RlUG9saWN5IHsKKyAgICBEb05vdEluc2VydExGcywKKyAgICBJbnNlcnRMRnMsCisg
ICAgVVJMIC8vIE5vIHBhZGRpbmcsIG5vIExGcy4KIH07CiAKLWVudW0gQmFzZTY0RGVjb2RlT3B0
aW9ucyB7Ci0gICAgQmFzZTY0RGVmYXVsdCA9IDAsCi0gICAgQmFzZTY0VmFsaWRhdGVQYWRkaW5n
ID0gMSA8PCAwLAotICAgIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzID0gMSA8PCAxLAot
ICAgIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYiA9IDEgPDwgMiwKLX07Ci0KLWNsYXNzIFNpZ25l
ZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciB7Ci1wdWJsaWM6Ci0gICAgU2lnbmVkT3JVbnNp
Z25lZENoYXJWZWN0b3JBZGFwdGVyKFZlY3RvcjxjaGFyPiYgdmVjdG9yKQotICAgICAgICA6IG1f
aXNTaWduZWQodHJ1ZSkKLSAgICB7Ci0gICAgICAgIG1fdmVjdG9yLmMgPSAmdmVjdG9yOwotICAg
IH0KLSAgICBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIoVmVjdG9yPHVpbnQ4X3Q+
JiB2ZWN0b3IpCi0gICAgICAgIDogbV9pc1NpZ25lZChmYWxzZSkKLSAgICB7Ci0gICAgICAgIG1f
dmVjdG9yLnUgPSAmdmVjdG9yOwotICAgIH0KLQotICAgIHVpbnQ4X3QqIGRhdGEoKQotICAgIHsK
LSAgICAgICAgaWYgKG1faXNTaWduZWQpCi0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4obV92ZWN0b3IuYy0+ZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIG1fdmVj
dG9yLnUtPmRhdGEoKTsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IHNpemUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgaWYgKG1faXNTaWduZWQpCi0gICAgICAgICAgICByZXR1cm4gbV92ZWN0b3Iu
Yy0+c2l6ZSgpOwotICAgICAgICByZXR1cm4gbV92ZWN0b3IudS0+c2l6ZSgpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzU2lnbmVkKSB7Ci0g
ICAgICAgICAgICBtX3ZlY3Rvci5jLT5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIG1fdmVjdG9yLnUtPmNsZWFyKCk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgZ3JvdyhzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzU2lnbmVkKSB7Ci0g
ICAgICAgICAgICBtX3ZlY3Rvci5jLT5ncm93KHNpemUpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIG1fdmVjdG9yLnUtPmdyb3coc2l6ZSk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgc2hyaW5rKHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgaWYgKG1faXNTaWdu
ZWQpIHsKLSAgICAgICAgICAgIG1fdmVjdG9yLmMtPnNocmluayhzaXplKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX3ZlY3Rvci51LT5zaHJpbmsoc2l6ZSk7Ci0g
ICAgfQotICAgIAotICAgIHVpbnQ4X3QmIG9wZXJhdG9yW10oc2l6ZV90IHBvc2l0aW9uKSB7IHJl
dHVybiBkYXRhKClbcG9zaXRpb25dOyB9CitlbnVtIGNsYXNzIEJhc2U2NEVuY29kZU1hcCB7IERl
ZmF1bHQsIFVSTCB9OwogCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc1NpZ25lZDsKLSAgICB1bmlv
biB7Ci0gICAgICAgIFZlY3RvcjxjaGFyPiogYzsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+KiB1
OwotICAgIH0gbV92ZWN0b3I7CitlbnVtIGNsYXNzIEJhc2U2NERlY29kZU9wdGlvbnMgOiB1aW50
OF90IHsKKyAgICBWYWxpZGF0ZVBhZGRpbmcgICAgICAgICA9IDEgPDwgMCwKKyAgICBJZ25vcmVT
cGFjZXNBbmROZXdMaW5lcyA9IDEgPDwgMSwKKyAgICBEaXNjYXJkVmVydGljYWxUYWIgICAgICA9
IDEgPDwgMiwKIH07CiAKLWNsYXNzIENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyIHsKLXB1YmxpYzoKLSAgICBDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
cihjb25zdCBWZWN0b3I8Y2hhcj4mIHZlY3RvcikKLSAgICAgICAgOiBtX2lzU2lnbmVkKGZhbHNl
KQotICAgIHsKLSAgICAgICAgbV92ZWN0b3IuYyA9ICZ2ZWN0b3I7Ci0gICAgfQotICAgIENvbnN0
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
dmVjdG9yKQotICAgICAgICA6IG1faXNTaWduZWQodHJ1ZSkKLSAgICB7Ci0gICAgICAgIG1fdmVj
dG9yLnUgPSAmdmVjdG9yOwotICAgIH0KK2VudW0gY2xhc3MgQmFzZTY0RGVjb2RlTWFwIHsgRGVm
YXVsdCwgVVJMIH07CiAKLSAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGlmIChtX2lzU2lnbmVkKQotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KG1fdmVjdG9yLmMtPmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBt
X3ZlY3Rvci51LT5kYXRhKCk7Ci0gICAgfQotICAgIHNpemVfdCBzaXplKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmIChtX2lzU2lnbmVkKQotICAgICAgICAgICAgcmV0dXJuIG1fdmVjdG9yLmMt
PnNpemUoKTsKLSAgICAgICAgcmV0dXJuIG1fdmVjdG9yLnUtPnNpemUoKTsKLSAgICB9CitzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRMaW5lTGVuZ3RoV2hlbkluc2VydGlu
Z0xGcyA9IDc2OwogCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc1NpZ25lZDsKLSAgICB1bmlvbiB7
Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxjaGFyPiogYzsKLSAgICAgICAgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+KiB1OwotICAgIH0gbV92ZWN0b3I7Ci19OworLy8gSWYgdGhlIGlucHV0IHN0cmluZyBp
cyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90aGluZy4KKy8vIFJhdGhlciB0
aGFuIGJlaW5nIHBlcmZlY3RseSBwcmVjaXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZhdGl2ZS4K
K3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZl
clNpemUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyA3NyAqIDc2IC8g
NCAqIDMgLSAyOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qg
dm9pZCosIHVuc2lnbmVkLCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjREb05vdEluc2VydExGcyk7Ci12b2lkIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlciwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0g
QmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYs
IFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZz
KTsKLVdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1
bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3Ry
aW5nIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2
NEVuY29kZShjb25zdCBDU3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJ
bnNlcnRMRnMpOworV1RGX0VYUE9SVF9QUklWQVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNv
ZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVN
YXA6OkRlZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0
IHZvaWQqLCB1bnNpZ25lZCwgVUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0g
QmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFz
ZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVu
Y29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29k
ZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitWZWN0b3I8dWludDhfdD4gYmFzZTY0
RW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2
NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVu
Y29kZU1hcDo6RGVmYXVsdCk7CitWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlKGNvbnN0IFZl
Y3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7
CitWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNv
ZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNv
ZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoU3RyaW5nVmlldywgU2lnbmVkT3JVbnNpZ25lZENo
YXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7Ci1XVEZf
RVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRpb25zID0gQmFzZTY0
RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoY29uc3QgY2hh
ciosIHVuc2lnbmVkLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIsIHVuc2lnbmVk
IG9wdGlvbnMgPSBCYXNlNjREZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8QmFz
ZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1h
cDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldywgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+
ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOworV1RG
X0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsg
fSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBP
UlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBW
ZWN0b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2
NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZB
VEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgdWludDhfdCos
IHVuc2lnbmVkLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERl
Y29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgY2hhciosIHVuc2ln
bmVkLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1h
cCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiAKLWlubGluZSB2b2lkIGJhc2U2NEVuY29k
ZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbiwgVmVjdG9yPGNoYXI+
JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NEVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQ
b2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJhc2U2NEVuY29kZShp
bi5kYXRhKCksIGluLnNpemUoKSwgb3V0LCBwb2xpY3kpOworICAgIHJldHVybiBiYXNlNjRFbmNv
ZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5l
IHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcmIGluLCBWZWN0b3I8Y2hhcj4mIG91dCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0
RW5jb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwg
aW4ubGVuZ3RoKCksIG91dCwgcG9saWN5KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0
LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlubGluZSBTdHJpbmcg
YmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoraW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRF
bmNvZGUoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJh
c2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbi5kYXRhKCks
IGluLnNpemUoKSwgcG9saWN5KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0LmRhdGEo
KSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNl
NjRFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCi17
Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0aCgpLCBwb2xpY3kp
OwotfQogCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gQWxsIHRoZSBzYW1l
IGZ1bmN0aW9ucyBtb2RpZmllZCBmb3IgYmFzZTY0dXJsLCBhcyBkZWZpbmVkIGluIFJGQyA0NjQ4
LgogLy8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBhbmQgJy8n
IHJlc3BlY3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQs
IFZlY3RvcjxjaGFyPiYpOwotdm9pZCBiYXNlNjRVUkxFbmNvZGUoQ29uc3RTaWduZWRPclVuc2ln
bmVkQ2hhclZlY3RvckFkYXB0ZXIsIFZlY3RvcjxjaGFyPiYpOwotdm9pZCBiYXNlNjRVUkxFbmNv
ZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotU3RyaW5nIGJh
c2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcik7Ci1T
dHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmKTsKK1ZlY3Rvcjx1aW50OF90PiBi
YXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkKTsKK1ZlY3Rvcjx1aW50OF90PiBi
YXNlNjRVUkxFbmNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CitWZWN0b3I8dWludDhfdD4g
YmFzZTY0VVJMRW5jb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOworVmVjdG9yPHVpbnQ4X3Q+IGJh
c2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5nJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBib29s
IGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3Rv
ckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJMRGVjb2RlKFN0cmlu
Z1ZpZXcsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcik7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgU2lnbmVkT3JV
bnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2
NFVSTERlY29kZShjb25zdCBjaGFyKiwgdW5zaWduZWQsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVj
dG9yQWRhcHRlcik7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmlldyk7CitXVEZf
RVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7CitXVEZf
RVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUo
Y29uc3QgdWludDhfdCosIHVuc2lnbmVkKTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBjaGFyKiwgdW5zaWduZWQpOwog
Ci1pbmxpbmUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZl
Y3RvckFkYXB0ZXIgaW4sIFZlY3RvcjxjaGFyPiYgb3V0KQoraW5saW5lIFZlY3Rvcjx1aW50OF90
PiBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsK
LSAgICBiYXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIG91dCk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZShpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwg
QmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgdm9pZCBiYXNlNjRVUkxFbmNvZGUo
Y29uc3QgQ1N0cmluZyYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0KQoraW5saW5lIFZlY3Rvcjx1aW50
OF90PiBiYXNlNjRVUkxFbmNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKIHsKLSAg
ICBiYXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgpLCBpbi5sZW5ndGgoKSwgb3V0KTsKKyAgICByZXR1
cm4gYmFzZTY0RW5jb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQ
b2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJh
c2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbikK
K2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlKGNvbnN0IFZlY3RvcjxjaGFy
PiYgaW5wdXQpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLnNp
emUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUo
KSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAot
aW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4pCitpbmxpbmUg
VmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5nJiBpbnB1dCkKIHsK
LSAgICByZXR1cm4gYmFzZTY0VVJMRW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCkpOworICAg
IHJldHVybiBiYXNlNjRFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgQmFzZTY0
RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBib29sIGlzQmFzZTY0T3JCYXNl
NjRVUkxDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQpAQCAtMjE5LDE1ICsxMjgsMTE3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyAKICAgICByZXR1cm4gaXNBU0NJ
SUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICcrJyB8fCBjID09ICcvJyB8fCBjID09ICctJyB8fCBj
ID09ICdfJzsKIH0KIAoraW5saW5lIHVuc2lnbmVkIGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaXpl
KHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoreworICAg
IGlmICghaW5wdXRMZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGlucHV0TGVu
Z3RoID4gbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUpCisgICAgICAgIHJldHVy
biAwOworCisgICAgYXV0byBiYXNlUGFkZGVkRW5jb2RlZFNpemUgPSBbJl0geworICAgICAgICBy
ZXR1cm4gKChpbnB1dExlbmd0aCArIDIpIC8gMykgKiA0OworICAgIH07CisKKyAgICBhdXRvIGJh
c2VVbnBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAgICAgcmV0dXJuICgoaW5wdXRMZW5n
dGggKiA0KSArIDIpIC8gMzsKKyAgICB9OworCisgICAgc3dpdGNoIChwb2xpY3kpIHsKKyAgICBj
YXNlIEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnM6CisgICAgICAgIHJldHVybiBi
YXNlUGFkZGVkRW5jb2RlZFNpemUoKTsKKworICAgIGNhc2UgQmFzZTY0RW5jb2RlUG9saWN5OjpJ
bnNlcnRMRnM6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBiYXNlUGFkZGVkRW5jb2RlZFNpemUo
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0gMSkgLyBtYXhpbXVtQmFzZTY0
TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOworICAgIH0KKworICAgIGNhc2UgQmFzZTY0RW5j
b2RlUG9saWN5OjpVUkw6CisgICAgICAgIHJldHVybiBiYXNlVW5wYWRkZWRFbmNvZGVkU2l6ZSgp
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQor
CitzdHJ1Y3QgQmFzZTY0U3BlY2lmaWNhdGlvbiB7CisgICAgY29uc3Qgdm9pZCogaW5wdXREYXRh
OworICAgIHVuc2lnbmVkIGlucHV0TGVuZ3RoOworICAgIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3k7CisgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKK307CisKK2lubGluZSBCYXNlNjRTcGVjaWZp
Y2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5wdXREYXRhLCB1bnNpZ25lZCBpbnB1
dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6
RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpCit7CisgICAgcmV0dXJuIHsgaW5wdXREYXRhLCBpbnB1dExlbmd0aCwgcG9saWN5LCBt
YXAgfTsKK30KKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25z
dCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5j
b2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKK30KKworaW5saW5lIEJh
c2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdElu
c2VydExGcykKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0
LnNpemUoKSwgcG9saWN5KTsKK30KKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0
RW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCit7CisgICAgcmV0dXJuIGJhc2U2
NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5KTsKK30KKworaW5s
aW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCB2b2lkKiBpbnB1
dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGVk
KGlucHV0RGF0YSwgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRF
bmNvZGVNYXA6OlVSTCk7Cit9CisKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVS
TEVuY29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3sKKyAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5
OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKK30KKworaW5saW5lIEJhc2U2NFNwZWNpZmlj
YXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoreworICAg
IHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRF
bmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworfQorCitpbmxpbmUgQmFz
ZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IENTdHJpbmcmIGlucHV0KQor
eworICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCks
IEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7Cit9CisKK3Rl
bXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj4gewor
cHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IEJhc2U2NFNwZWNpZmljYXRpb24m
IGJhc2U2NCkKKyAgICAgICAgOiBtX2Jhc2U2NCB7IGJhc2U2NCB9CisgICAgICAgICwgbV9lbmNv
ZGVkTGVuZ3RoIHsgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoYmFzZTY0LmlucHV0TGVuZ3Ro
LCBiYXNlNjQucG9saWN5KSB9CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZExlbmd0aDsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gdm9pZCB3cml0ZVRvKENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsK
KyAgICAgICAgYmFzZTY0RW5jb2RlKG1fYmFzZTY0LmlucHV0RGF0YSwgbV9iYXNlNjQuaW5wdXRM
ZW5ndGgsIGRlc3RpbmF0aW9uLCBtX2VuY29kZWRMZW5ndGgsIG1fYmFzZTY0LnBvbGljeSwgbV9i
YXNlNjQubWFwKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzZTY0U3BlY2lmaWNhdGlvbiBt
X2Jhc2U2NDsKKyAgICB1bnNpZ25lZCBtX2VuY29kZWRMZW5ndGg7Cit9OworCiB9IC8vIG5hbWVz
cGFjZSBXVEYKIAordXNpbmcgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOwogdXNpbmcgV1RGOjpC
YXNlNjRFbmNvZGVQb2xpY3k7Ci11c2luZyBXVEY6OkJhc2U2NERvTm90SW5zZXJ0TEZzOwotdXNp
bmcgV1RGOjpCYXNlNjRJbnNlcnRMRnM7Ci11c2luZyBXVEY6OkJhc2U2NFZhbGlkYXRlUGFkZGlu
ZzsKLXVzaW5nIFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXM7Ci11c2luZyBXVEY6
OkJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYjsKLXVzaW5nIFdURjo6YmFzZTY0RW5jb2RlOwordXNp
bmcgV1RGOjpCYXNlNjRTcGVjaWZpY2F0aW9uOwogdXNpbmcgV1RGOjpiYXNlNjREZWNvZGU7Cit1
c2luZyBXVEY6OmJhc2U2NEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0RW5jb2RlZDsKK3VzaW5n
IFdURjo6YmFzZTY0VVJMRGVjb2RlOwogdXNpbmcgV1RGOjpiYXNlNjRVUkxEZWNvZGU7Cit1c2lu
ZyBXVEY6OmJhc2U2NFVSTEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0VVJMRW5jb2RlZDsKIHVz
aW5nIFdURjo6aXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3RlcjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3NzcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDI5NCBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRj
aCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gVXBkYXRlcyB0byB1c2UgbmV3IHNpZ25hdHVyZXMg
Zm9yIGJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyBpbmNsdWRpbmcKKyAgICAgICAgICB1dGlsaXpp
bmcgdGhlIHN0cmluZyB0eXBlIGFkYXB0b3IgYW5kIG1ha2VTdHJpbmcuCisgICAgICAgIC0gUmVw
bGFjZSBvdXQgcGFyYW1ldGVyIGJhc2VkIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKSB3
aXRoIAorICAgICAgICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSgpLgorICAgICAgICAtIFVwZGF0ZSBzeW5jaHJvbm91cyBsb2FkaW5nIGNvZGUg
cGF0aCB0byB1c2UgdWludDhfdCogY29uc2lzdGVudGx5IGZvcgorICAgICAgICAgIGRhdGEgYnVm
ZmVyIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAtIFJlcGxhY2Ugb3V0IHBhcmFtZXRlcnMgaW4g
cXVvdGVkUHJpbnRhYmxlRW5jb2RlL3F1b3RlZFByaW50YWJsZURlY29kZQorICAgICAgICAgIHdp
dGggT3B0aW9uYWwuCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRh
UmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleUlEc0tleWlkcyk6Cisg
ICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZS4KKworICAgICAgICAoV2Vi
Q29yZTo6c2FuaXRpemVLZXlpZHMpOiAKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0
cmluZyhiYXNlNjRVUkxFbmNvZGVkKCkpCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1l
ZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUpOiAKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBu
ZXcgYmFzZTY0RGVjb2RlKCkuCisKKyAgICAgICAgKiBNb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQubW06CisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aERhdGFJ
bkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6anNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlbUlu
Q29udGV4dCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0RW5j
b2RlZCgpKS4gUmVwbGFjZSBzdHJpbmcgY29uY2F0ZW50YXRpb24KKyAgICAgICAgdXNpbmcgb3Bl
cmF0b3IrIHdpdGggbWFrZVN0cmluZygpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9B
dXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGlj
YXRvckNvb3JkaW5hdG9ySW50ZXJuYWw6OnByb2R1Y2VDbGllbnREYXRhSnNvbik6CisgICAgICAg
IFVwZGF0ZSB0byB1c2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgpKS4KKworICAg
ICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsOjpQdWJsaWNLZXlDcmVkZW50aWFsKToKKyAg
ICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCkpLgor
CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpnZW5lcmF0ZVNlY1dlYlNvY2tldEtleSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNjZXB0KToKKyAg
ICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCkpLgor
CisgICAgICAgICogY3J5cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmg6CisgICAgICAgIENo
YW5nZSBmcm9tIG91dHBhcmFtZXRlciBiYXNlZCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5
KCkgdG8gbmV3CisgICAgICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNy
eXB0b01hc3RlcktleSgpLgorCisgICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dD
cnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVs
ZEVsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhi
YXNlNjRVUkxFbmNvZGVkKCkpLgorCisgICAgICAgICogY3J5cHRvL2djcnlwdC9TZXJpYWxpemVk
Q3J5cHRvS2V5V3JhcEdDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5
cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0
ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBkZWZhdWx0V2ViQ3J5cHRv
TWFzdGVyS2V5KCkgc2lnbmF0dXJlLgorCisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5
QUVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6aW1wb3J0SndrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6ZXhwb3J0SndrIGNvbnN0KToKKyAgICAgICAg
VXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlIC8gbWFrZVN0cmluZyhiYXNlNjRVUkxF
bmNvZGVkKCkpLgorICAgICAgICAKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlFQzo6aW1wb3J0SndrKToKKyAgICAgICAg
VXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlLgorCisgICAgICAgICogY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5SE1BQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjpp
bXBvcnRKd2spOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5SE1BQzo6ZXhwb3J0SndrIGNv
bnN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlIC8gbWFrZVN0
cmluZyhiYXNlNjRVUkxFbmNvZGVkKCkpLgorCisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRv
S2V5UlNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleVJTQTo6aW1wb3J0SndrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleVJTQTo6ZXhwb3J0SndrIGNvbnN0KToKKyAgICAg
ICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlIC8gbWFrZVN0cmluZyhiYXNlNjRV
UkxFbmNvZGVkKCkpLgorCisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbnRz
IGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRVUkxF
bmNvZGVkKCkpLgorCisgICAgICAgICogY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3Jh
cE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFuZFN0b3JlTWFzdGVyS2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmRNYXN0ZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVs
dFdlYkNyeXB0b01hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpnZXREZWZhdWx0V2ViQ3J5
cHRvTWFzdGVyS2V5KTogRGVsZXRlZC4KKyAgICAgICAgVXBkYXRlIGZvciBuZXcgZGVmYXVsdFdl
YkNyeXB0b01hc3RlcktleSgpIHNpZ25hdHVyZS4KKworICAgICAgICAqIGNyeXB0by9vcGVuc3Ns
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpk
ZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBkZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkgc2lnbmF0dXJlLgorCisgICAgICAgICogZmlsZWFwaS9G
aWxlUmVhZGVyTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXJMb2FkZXI6
OmNvbnZlcnRUb0RhdGFVUkwpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5n
KGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToK
KyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgor
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAg
ICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZSAvIG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZCgpKS4KKworICAgICAgICAqIGluc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VE
YXRhOjpkZWNvZGVEYXRhVG9Db250ZW50KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ29udGVudFNl
Y3VyaXR5UG9saWN5U0hBMjU2SGFzaCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2
NERlY29kZSAvIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvcjo6YnVpbGRXZWJTb2NrZXRNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhS
ZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVy
Y2VwdFJlcXVlc3RXaXRoUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0
d29ya0FnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQpOgorICAgICAgICBVcGRhdGUgdG8gdXNl
IG5ldyBiYXNlNjREZWNvZGUgLyBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRhdGFDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6YXJjaGl2ZSk6CisgICAgICAgIFVwZGF0ZSB0byB1c2Ug
bmV3IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNl
U3luY2hyb25vdXNseSk6CisgICAgICAgIFN3aXRjaCB0byB1c2luZyBWZWN0b3I8dWludDhfdD4g
YnVmZmVyIHRvIG1hdGNoIG5ldyBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5CisgICAgICAgIHNp
Z25hdHVyZS4KKworICAgICAgICAqIGxvYWRlci9Mb2FkZXJTdHJhdGVneS5oOgorICAgICAgICBT
d2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGZvciB0aGUgZGF0YSBidWZmZXIuCisKKyAg
ICAgICAgKiBsb2FkZXIvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkVwaGVtZXJhbFNvdXJjZU5vbmNlOjppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlLgor
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OmRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAg
ICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjREZWNvZGUuCisKKyAgICAgICAgKiBsb2FkZXIvYXJj
aGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUhUTUxBcmNo
aXZlOjpnZW5lcmF0ZU1IVE1MRGF0YSk6CisgICAgICAgIFN3aXRjaCB0byB1c2luZyBuZXcgYmFz
ZTY0RW5jb2RlIGFuZCBuZXcgcXVvdGVkUHJpbnRhYmxlRW5jb2RlLgorCisgICAgICAgICogbG9h
ZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUhU
TUxQYXJzZXI6OnBhcnNlTmV4dFBhcnQpOgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgbmV3IGJh
c2U2NERlY29kZSBhbmQgbmV3IHF1b3RlZFByaW50YWJsZURlY29kZS4KKworICAgICAgICAqIGxv
YWRlci9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVVu
bGlua2FibGVUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dDo6Y2FsY3VsYXRlQW5kVXBkYXRlU291cmNlU2VjcmV0VG9rZW4pOgorICAgICAgICBVcGRhdGUg
dG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQo
KSkuCisKKyAgICAgICAgKiBwYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpCYXNlNjRVdGlsaXRpZXM6OmJ0b2EpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZTY0VXRp
bGl0aWVzOjphdG9iKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlIC8g
bWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorICAgIAorICAgICAgICAqIHBhZ2UvUGFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdl
ZCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NERlY29kZS4KKworICAgICAgICAq
IHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OmFwcGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisgICAgICAg
IEFkZCBvdmVybG9hZCBmb3IgYXBwZW5kIHdoaWNoIGFsbG93cyBwYXNzaW5nIGluIGEgdWludDhf
dCouCisKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVh
cktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vuc2VGb3JtYXQpOgorICAgICAg
ICAoV2ViQ29yZTo6ZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6ZXh0cmFjdEtleUlkRnJvbVdlYk1Jbml0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOgorICAgICAgICBV
cGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoKSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RN
RmFpclBsYXlTdHJlYW1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdFNpbmZEYXRh
KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0
cmVhbWluZ0FWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25G
YWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnJlcXVlc3RMaWNlbnNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGlj
ZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVh
bWluZ0FWRk9iakM6OmRpZFByb3ZpZGVSZXF1ZXN0cyk6CisgICAgICAgIFVwZGF0ZSB0byB1c2Ug
bmV3IGJhc2U2NERlY29kZSAvIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwgY29u
c3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQo
KSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFVUkwpOgorICAgICAgICBVcGRhdGUgdG8g
dXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVVbmlxdWVGb250TmFtZSk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IG1h
a2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlVW5pcXVlRm9udE5hbWUpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3Ry
aW5nKGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU1NMS2V5R2Vu
ZXJhdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlU3RyaW5nKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRF
bmNvZGVkKCkpLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvYWRCbG9iUmVzb3VyY2VTeW5jaHJvbm91c2x5KToK
KyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90PiBidWZmZXIgdG8gbWF0Y2gg
bmV3IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkKKyAgICAgICAgc2lnbmF0dXJlLgorCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAg
ICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlciB0byBtYXRjaCBuZXcgbG9h
ZFJlc291cmNlU3luY2hyb25vdXNseQorICAgICAgICBzaWduYXR1cmUuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsQmFz
ZTo6c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlciBjb25zdCk6CisgICAg
ICAgIEFkZCBoZWxwZXIgdG8gY29uc3RydWN0IEJhc2ljIGF1dGggaGVhZGVyIHRvIHJlcGxhY2Ug
ZHVwbGljYXRlZCBsb2dpYyBpbgorICAgICAgICBjYWxsIHNpdGVzLgorCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
VVJMRGVjb2Rlcjo6ZGVjb2RlQmFzZTY0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNv
ZGVyOjpkZWNvZGVFc2NhcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpk
ZWNvZGVTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxE
ZWNvZGVyLmg6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NERlY29kZS4KKworICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5n
IFZlY3Rvcjx1aW50OF90PiBmb3IgdGhlIGRhdGEgYnVmZmVyIGluIHRoZSBzeW5jaHJvbm91cyBs
b2FkLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVj
ZWl2ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJD
bGllbnQuaDoKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90PiBidWZmZXIg
dG8gbWF0Y2ggbmV3IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkKKyAgICAgICAgc2lnbmF0dXJl
LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAg
ICAgICAgVXNlIG5ldyBzZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkg
aGVscGVyLgorCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1
aW50OF90PiBmb3IgdGhlIGRhdGEgYnVmZmVyIGluIHRoZSBzeW5jaHJvbm91cyBsb2FkLgorCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRh
VVJMKToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90PiBmb3IgdGhlIGRh
dGEgYnVmZmVyIGluIHRoZSBzeW5jaHJvbm91cyBsb2FkLgorCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjphcHBs
eUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcik6CisgICAgICAgIFVzZSBuZXcgc2VyaWFsaXphdGlv
bkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGhlbHBlci4KKworICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6Cisg
ICAgICAgIFN3aXRjaCB0byB1c2luZyBWZWN0b3I8dWludDhfdD4gZm9yIHRoZSBkYXRhIGJ1ZmZl
ciBpbiB0aGUgc3luY2hyb25vdXMgbG9hZC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
c291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIFN3aXRj
aCB0byB1c2luZyBWZWN0b3I8dWludDhfdD4gZm9yIHRoZSBkYXRhIGJ1ZmZlciBpbiB0aGUgc3lu
Y2hyb25vdXMgbG9hZC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0
d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SG9zdFRMU0NlcnRpZmljYXRlU2V0
Ojpjb21wdXRlQ2VydGlmaWNhdGVIYXNoKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9EZWNv
ZGVFc2NhcGVTZXF1ZW5jZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlc0FzRGF0YSk6CisgICAgICAgIFN3aXRjaCB0byByZXR1cm5pbmcgVmVjdG9yPHVpbnQ4
X3Q+LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OnF1b3RlZFBy
aW50YWJsZUVuY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpxdW90ZWRQcmludGFibGVEZWNvZGUp
OgorICAgICAgICBSZXBsYWNlIHVzZXMgb2YgVmVjdG9yPGNoYXI+IHdpdGggVmVjdG9yPHVpbnQ4
X3Q+IGFuZCB0aGUgb3V0IHBhcmFtZXRlcnMKKyAgICAgICAgd2l0aCBPcHRpb25hbCByZXR1cm4g
dmFsdWVzLgorCisgICAgICAgICogcGxhdGZvcm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOgor
ICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisK
KyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoIGNvbnN0KToKKyAgICAg
ICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCkpLgorCiAy
MDIxLTA1LTE4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNl
IFdURjo6TG9ja2VyIGZvciBsb2NraW5nIEJhc2VBdWRpb0NvbnRleHQncyBncmFwaCBsb2NrCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVk
aWEvSW5pdERhdGFSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDE1ICs4MCwxNCBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZjxTaGFy
ZWRCdWZmZXI+CiAgICAgICAgIGlmICgha2V5SUQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5SUREYXRhOwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0
VVJMRGVjb2RlKGtleUlELCB7IGtleUlERGF0YSB9KSkKKyAgICAgICAgYXV0byBrZXlJRERhdGEg
PSBiYXNlNjRVUkxEZWNvZGUoa2V5SUQpOworICAgICAgICBpZiAoIWtleUlERGF0YSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChrZXlJRERhdGEuc2l6ZSgpIDwga0tleUlk
c01pbktleUlkU2l6ZUluQnl0ZXMgfHwga2V5SUREYXRhLnNpemUoKSA+IGtLZXlJZHNNYXhLZXlJ
ZFNpemVJbkJ5dGVzKQorICAgICAgICBpZiAoa2V5SUREYXRhLT5zaXplKCkgPCBrS2V5SWRzTWlu
S2V5SWRTaXplSW5CeXRlcyB8fCBrZXlJRERhdGEtPnNpemUoKSA+IGtLZXlJZHNNYXhLZXlJZFNp
emVJbkJ5dGVzKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBS
ZWY8U2hhcmVkQnVmZmVyPiBrZXlJREJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1v
dmUoa2V5SUREYXRhKSk7Ci0gICAgICAgIGtleUlEcy5hcHBlbmQoV1RGTW92ZShrZXlJREJ1ZmZl
cikpOworICAgICAgICBrZXlJRHMuYXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUo
KmtleUlERGF0YSkpKTsKICAgICB9CiAKICAgICByZXR1cm4ga2V5SURzOwpAQCAtMTA1LDcgKzEw
NCw3IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZUtleWkKICAgICBhdXRv
IG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgYXV0byBraWRzQXJyYXkgPSBK
U09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBrZXlJREJ1ZmZl
ci52YWx1ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxF
bmNvZGUoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSk7CisgICAgICAgIGtpZHNBcnJh
eS0+cHVzaFN0cmluZyhtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoYnVmZmVyLT5kYXRhKCks
IGJ1ZmZlci0+c2l6ZSgpKSkpOwogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3Zl
KGtpZHNBcnJheSkpOwogCiAgICAgQ1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09OU3Ry
aW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9sZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9u
Q2xlYXJLZXkuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjksMTMgKzE2OSwxMyBAQCBib29sIENETVNlc3Npb25DbGVhcktleTo6
dXBkYXRlKFVpbnQ4QXJyCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlEYXRhOwotICAgICAgICAgICAgaWYg
KCFiYXNlNjREZWNvZGUocmF3S2V5RGF0YSwga2V5RGF0YSkgfHwga2V5RGF0YS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIGF1dG8ga2V5RGF0YSA9IGJhc2U2NERlY29kZShyYXdLZXlEYXRhKTsK
KyAgICAgICAgICAgIGlmICgha2V5RGF0YSB8fCBrZXlEYXRhLT5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZSglcCkgLSBm
YWlsZWQ6IHVuYWJsZSB0byBiYXNlNjQgZGVjb2RlIGtleSIsIHRoaXMpOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX2NhY2hlZEtleXMu
c2V0KGtleUlkLCBXVEZNb3ZlKGtleURhdGEpKTsKKyAgICAgICAgICAgIG1fY2FjaGVkS2V5cy5z
ZXQoa2V5SWQsIFdURk1vdmUoKmtleURhdGEpKTsKICAgICAgICAgICAgIGZvdW5kVmFsaWRLZXkg
PSB0cnVlOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lu
cy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQzLDE0ICsyNDMsMTIgQEAg
dm9pZCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6cG9zdEV2ZQogCiBzdGF0aWMgSlNWYWx1
ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0KE5TRGF0YSAqZGF0YSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgSlNDb250ZXh0ICpjb250ZXh0KQogewotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjRE
YXRhOwotICAgIGJhc2U2NEVuY29kZShbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0sIGJhc2U2
NERhdGEpOwotCisgICAgLy8gRklYTUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRv
IGF2b2lkIHVubmVjZXNzYXJ5IFN0cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7
CiAgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9ICJkYXRhOiIg
KyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAgICAgICBkYXRhNjQgPSBt
YWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFtk
YXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOwogICAgIGVsc2UKLSAgICAgICAgZGF0YTY0ID0g
ImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgICAgIGRhdGE2NCA9
IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbZGF0
YSBieXRlc10sIFtkYXRhIGxlbmd0aF0pKTsKIAogICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdp
dGhPYmplY3Q6KGlkKWRhdGE2NC5jcmVhdGVDRlN0cmluZygpLmdldCgpIGluQ29udGV4dDpjb250
ZXh0XTsKIH0KQEAgLTM0Miw5ICszNDAsNyBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhB
Vk1ldGFkYXRhSXRlCiAgICAgICAgIGlkIHZhbHVlID0gaXRlbS52YWx1ZTsKICAgICAgICAgTlNT
dHJpbmcgKm1pbWVUeXBlID0gW1tpdGVtIGV4dHJhQXR0cmlidXRlc10gb2JqZWN0Rm9yS2V5OkAi
TUlNRXR5cGUiXTsKICAgICAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xh
c3NdXSAmJiBtaW1lVHlwZSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7
Ci0gICAgICAgICAgICBiYXNlNjRFbmNvZGUoW3ZhbHVlIGJ5dGVzXSwgW3ZhbHVlIGxlbmd0aF0s
IGJhc2U2NERhdGEpOwotICAgICAgICAgICAgU3RyaW5nIGRhdGE2NCA9ICJkYXRhOiIgKyBTdHJp
bmcobWltZVR5cGUpICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgICAgICAgICBhdXRv
IGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgU3RyaW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQs
IiwgYmFzZTY0RW5jb2RlZChbdmFsdWUgYnl0ZXNdLCBbdmFsdWUgbGVuZ3RoXSkpOwogICAgICAg
ICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OihfX2JyaWRnZSBOU1N0cmluZyAqKWRhdGE2NC5j
cmVhdGVDRlN0cmluZygpLmdldCgpIGZvcktleTpAInZhbHVlIl07CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OnZhbHVlIGZvcktleTpAInZhbHVlIl07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29y
ZGluYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgc3RhdGljIFJlZjxBcnJheUJ1ZmZlcj4g
cHJvZHVjZUNsaWVudERhdAogICAgICAgICBvYmplY3QtPnNldFN0cmluZygidHlwZSJfcywgIndl
YmF1dGhuLmdldCJfcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBvYmplY3QtPnNldFN0
cmluZygiY2hhbGxlbmdlIl9zLCBXVEY6OmJhc2U2NFVSTEVuY29kZShjaGFsbGVuZ2UuZGF0YSgp
LCBjaGFsbGVuZ2UubGVuZ3RoKCkpKTsKKyAgICBvYmplY3QtPnNldFN0cmluZygiY2hhbGxlbmdl
Il9zLCBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoY2hhbGxlbmdlLmRhdGEoKSwgY2hhbGxl
bmdlLmxlbmd0aCgpKSkpOwogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJvcmlnaW4iX3MsIG9yaWdp
bi50b1Jhd1N0cmluZygpKTsKIAogICAgIGF1dG8gdXRmOEpTT05TdHJpbmcgPSBvYmplY3QtPnRv
SlNPTlN0cmluZygpLnV0ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0
aG4vUHVibGljS2V5Q3JlZGVudGlhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkocmV2aXNpb24gMjc3NTY5
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBBdXRoZW50aWNhdGlvbkV4dGVu
c2lvbnNDbGllbnRPdXRwdXRzIFB1CiB9CiAKIFB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tl
eUNyZWRlbnRpYWwoUmVmPEF1dGhlbnRpY2F0b3JSZXNwb25zZT4mJiByZXNwb25zZSkKLSAgICA6
IEJhc2ljQ3JlZGVudGlhbChXVEY6OmJhc2U2NFVSTEVuY29kZShyZXNwb25zZS0+cmF3SWQoKS0+
ZGF0YSgpLCByZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSwgVHlwZTo6UHVibGljS2V5
LCBEaXNjb3Zlcnk6OlJlbW90ZSkKKyAgICA6IEJhc2ljQ3JlZGVudGlhbChtYWtlU3RyaW5nKGJh
c2U2NFVSTEVuY29kZWQocmVzcG9uc2UtPnJhd0lkKCktPmRhdGEoKSwgcmVzcG9uc2UtPnJhd0lk
KCktPmJ5dGVMZW5ndGgoKSkpLCBUeXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQog
ICAgICwgbV9yZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hh
a2UuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgs
NyBAQCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU2VjV2ViU29ja2V0S2V5KCkKICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IG5vbmNlU2l6ZSA9IDE2OwogICAgIHVuc2lnbmVkIGNoYXIga2V5W25vbmNl
U2l6ZV07CiAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoa2V5LCBub25jZVNpemUp
OwotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoa2V5LCBub25jZVNpemUpOworICAgIHJldHVybiBt
YWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoa2V5LCBub25jZVNpemUpKTsKIH0KIAogU3RyaW5nIFdl
YlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQoY29uc3QgU3RyaW5n
JiBzZWNXZWJTb2NrZXRLZXkpCkBAIC0xMTAsNyArMTEwLDcgQEAgU3RyaW5nIFdlYlNvY2tldEhh
bmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZQogICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4od2ViU29ja2V0S2V5R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlH
VUlEKSk7CiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNo
KTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7
CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChoYXNoLmRhdGEoKSwgU0hBMTo6
aGFzaFNpemUpKTsKIH0KIAogV2ViU29ja2V0SGFuZHNoYWtlOjpXZWJTb2NrZXRIYW5kc2hha2Uo
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmluZyYgdXNl
ckFnZW50LCBjb25zdCBTdHJpbmcmIGNsaWVudE9yaWdpbiwgYm9vbCBhbGxvd0Nvb2tpZXMpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAu
aAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogLy8gb2YgcHJvdGVjdGlvbiBpcyBub3QgcmVxdWlyZWQgYnkgdGhlIHNwZWMg
YXMgb2YgMTEgRGVjZW1iZXIgMjAxNDoKIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XZWJDcnlw
dG9BUEkvI3NlY3VyaXR5LWRldmVsb3BlcnMKIAotV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXREZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYpOworV0VCQ09SRV9FWFBPUlQg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CiBX
RUJDT1JFX0VYUE9SVCBib29sIGRlbGV0ZURlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKIAog
V0VCQ09SRV9FWFBPUlQgYm9vbCB3cmFwU2VyaWFsaXplZENyeXB0b0tleShjb25zdCBWZWN0b3I8
dWludDhfdD4mIG1hc3RlcktleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1
aW50OF90PiYgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5
cHRvS2V5RUNHQ3J5cHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9n
Y3J5cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tleUVDR0NyeXB0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIzLDExICs1MjMsMTEgQEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVs
ZEVsZW1lbgogICAgICAgICBpZiAocSAmJiBxLT5zaXplKCkgPT0gY3VydmVVbmNvbXByZXNzZWRQ
b2ludFNpemUobV9jdXJ2ZSkpIHsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBhOwogICAg
ICAgICAgICAgYS5hcHBlbmQocS0+ZGF0YSgpICsgMSwgdW5jb21wcmVzc2VkRmllbGRFbGVtZW50
U2l6ZSk7Ci0gICAgICAgICAgICBqd2sueCA9IGJhc2U2NFVSTEVuY29kZShhKTsKKyAgICAgICAg
ICAgIGp3ay54ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKGEpKTsKIAogICAgICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGI7CiAgICAgICAgICAgICBiLmFwcGVuZChxLT5kYXRhKCkgKyAx
ICsgdW5jb21wcmVzc2VkRmllbGRFbGVtZW50U2l6ZSwgdW5jb21wcmVzc2VkRmllbGRFbGVtZW50
U2l6ZSk7Ci0gICAgICAgICAgICBqd2sueSA9IGJhc2U2NFVSTEVuY29kZShiKTsKKyAgICAgICAg
ICAgIGp3ay55ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKGIpKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtNTQzLDcgKzU0Myw3IEBAIGJvb2wgQ3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRk
RmllbGRFbGVtZW4KICAgICAgICAgICAgICAgICAgICAgKmQgPSBXVEZNb3ZlKHBhZGRlZERhdGEp
OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGp3ay5kID0gYmFzZTY0VVJM
RW5jb2RlKCpkKTsKKyAgICAgICAgICAgICAgICBqd2suZCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlZCgqZCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVk
Q3J5cHRvS2V5V3JhcEdDcnlwdC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvU2VyaWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxNSArMjksMTQgQEAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKIAog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5
KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBk
ZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IFVOVVNFRF9QQVJBTShtYXN0ZXJLZXkpOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CiAKIC8vIEluaXRpYWxseSB0aGVzZSBoZWxwZXIgZnVuY3Rpb25z
IHdlcmUgaW50ZW5kZWQgdG8gcGVyZm9ybSBLRUsgd3JhcHBpbmcgYW5kIHVud3JhcHBpbmcsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDEwICs4OCwxMCBAQCBSZWZQdHI8Q3J5cHRvS2V5QUVT
PiBDcnlwdG9LZXlBRVM6OmltcG9yCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChr
ZXlEYXRhLmsuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1
aW50OF90PiBvY3RldFNlcXVlbmNlOwotICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGtleURhdGEu
aywgb2N0ZXRTZXF1ZW5jZSkpCisgICAgYXV0byBvY3RldFNlcXVlbmNlID0gYmFzZTY0VVJMRGVj
b2RlKGtleURhdGEuayk7CisgICAgaWYgKCFvY3RldFNlcXVlbmNlKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBpZiAoIWNhbGxiYWNrKG9jdGV0U2VxdWVuY2Uuc2l6ZSgpICogOCwga2V5
RGF0YS5hbGcpKQorICAgIGlmICghY2FsbGJhY2sob2N0ZXRTZXF1ZW5jZS0+c2l6ZSgpICogOCwg
a2V5RGF0YS5hbGcpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAodXNhZ2VzICYm
ICFrZXlEYXRhLnVzZS5pc051bGwoKSAmJiBrZXlEYXRhLnVzZSAhPSAiZW5jIikKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0xMDAsMTQgKzEwMCwxNCBAQCBSZWZQdHI8Q3J5cHRvS2V5QUVT
PiBDcnlwdG9LZXlBRVM6OmltcG9yCiAgICAgaWYgKGtleURhdGEuZXh0ICYmICFrZXlEYXRhLmV4
dC52YWx1ZSgpICYmIGV4dHJhY3RhYmxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5QUVTKGFsZ29yaXRobSwgV1RGTW92ZShvY3Rl
dFNlcXVlbmNlKSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ3J5cHRvS2V5QUVTKGFsZ29yaXRobSwgV1RGTW92ZSgqb2N0ZXRTZXF1ZW5jZSksIGV4dHJh
Y3RhYmxlLCB1c2FnZXMpKTsKIH0KIAogSnNvbldlYktleSBDcnlwdG9LZXlBRVM6OmV4cG9ydEp3
aygpIGNvbnN0CiB7CiAgICAgSnNvbldlYktleSByZXN1bHQ7CiAgICAgcmVzdWx0Lmt0eSA9ICJv
Y3QiOwotICAgIHJlc3VsdC5rID0gYmFzZTY0VVJMRW5jb2RlKG1fa2V5KTsKKyAgICByZXN1bHQu
ayA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChtX2tleSkpOwogICAgIHJlc3VsdC5rZXlf
b3BzID0gdXNhZ2VzKCk7CiAgICAgcmVzdWx0LmV4dCA9IGV4dHJhY3RhYmxlKCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVD
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlF
Qy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUVDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsMjIgKzk4LDIyIEBAIFJlZlB0cjxD
cnlwdG9LZXlFQz4gQ3J5cHRvS2V5RUM6OmltcG9ydEoKIAogICAgIGlmIChrZXlEYXRhLnguaXNO
dWxsKCkgfHwga2V5RGF0YS55LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBWZWN0b3I8dWludDhfdD4geDsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURh
dGEueCwgeCkpCisgICAgYXV0byB4ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEueCk7CisgICAg
aWYgKCF4KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4geTsK
LSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEueSwgeSkpCisgICAgYXV0byB5
ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEueSk7CisgICAgaWYgKCF5KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5kLmlzTnVsbCgpKSB7CiAgICAgICAgIC8vIGlt
cG9ydCBwdWJsaWMga2V5Ci0gICAgICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1B1YmxpYyhp
ZGVudGlmaWVyLCAqbmFtZWRDdXJ2ZSwgV1RGTW92ZSh4KSwgV1RGTW92ZSh5KSwgZXh0cmFjdGFi
bGUsIHVzYWdlcyk7CisgICAgICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1B1YmxpYyhpZGVu
dGlmaWVyLCAqbmFtZWRDdXJ2ZSwgV1RGTW92ZSgqeCksIFdURk1vdmUoKnkpLCBleHRyYWN0YWJs
ZSwgdXNhZ2VzKTsKICAgICB9CiAKLSAgICBWZWN0b3I8dWludDhfdD4gZDsKLSAgICBpZiAoIVdU
Rjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZCwgZCkpCisgICAgYXV0byBkID0gYmFzZTY0VVJM
RGVjb2RlKGtleURhdGEuZCk7CisgICAgaWYgKCFkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAvLyBpbXBvcnQgcHJpdmF0ZSBrZXkKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBvcnRKV0tQ
cml2YXRlKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKHgpLCBXVEZNb3ZlKHkpLCBX
VEZNb3ZlKGQpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICByZXR1cm4gcGxhdGZvcm1JbXBv
cnRKV0tQcml2YXRlKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKCp4KSwgV1RGTW92
ZSgqeSksIFdURk1vdmUoKmQpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKIH0KIAogUmVmUHRyPENy
eXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6aW1wb3J0U3BraShDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgY3VydmUsIFZlY3Rvcjx1aW50OF90PiYmIGtl
eURhdGEsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFD
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDggKzEwMyw4IEBAIFJlZlB0cjxDcnlwdG9LZXlI
TUFDPiBDcnlwdG9LZXlITUFDOjppbXAKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYg
KGtleURhdGEuay5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgVmVjdG9y
PHVpbnQ4X3Q+IG9jdGV0U2VxdWVuY2U7Ci0gICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoa2V5RGF0
YS5rLCBvY3RldFNlcXVlbmNlKSkKKyAgICBhdXRvIG9jdGV0U2VxdWVuY2UgPSBiYXNlNjRVUkxE
ZWNvZGUoa2V5RGF0YS5rKTsKKyAgICBpZiAoIW9jdGV0U2VxdWVuY2UpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIGlmICghY2FsbGJhY2soaGFzaCwga2V5RGF0YS5hbGcpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTExNSwxNCArMTE1LDE0IEBAIFJlZlB0cjxDcnlwdG9LZXlI
TUFDPiBDcnlwdG9LZXlITUFDOjppbXAKICAgICBpZiAoa2V5RGF0YS5leHQgJiYgIWtleURhdGEu
ZXh0LnZhbHVlKCkgJiYgZXh0cmFjdGFibGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIENyeXB0b0tleUhNQUM6OmltcG9ydFJhdyhsZW5ndGhCaXRzLCBoYXNoLCBXVEZN
b3ZlKG9jdGV0U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICByZXR1cm4gQ3J5
cHRvS2V5SE1BQzo6aW1wb3J0UmF3KGxlbmd0aEJpdHMsIGhhc2gsIFdURk1vdmUoKm9jdGV0U2Vx
dWVuY2UpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKIH0KIAogSnNvbldlYktleSBDcnlwdG9LZXlI
TUFDOjpleHBvcnRKd2soKSBjb25zdAogewogICAgIEpzb25XZWJLZXkgcmVzdWx0OwogICAgIHJl
c3VsdC5rdHkgPSAib2N0IjsKLSAgICByZXN1bHQuayA9IGJhc2U2NFVSTEVuY29kZShtX2tleSk7
CisgICAgcmVzdWx0LmsgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQobV9rZXkpKTsKICAg
ICByZXN1bHQua2V5X29wcyA9IHVzYWdlcygpOwogICAgIHJlc3VsdC5leHQgPSBleHRyYWN0YWJs
ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5
cy9DcnlwdG9LZXlSU0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleVJTQS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDY1ICs0
NSw4NyBAQCBSZWZQdHI8Q3J5cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6OmltcG9yCiAKICAgICBp
ZiAoa2V5RGF0YS5uLmlzTnVsbCgpIHx8IGtleURhdGEuZS5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1vZHVsdXM7Ci0gICAgaWYgKCFXVEY6
OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLm4sIG1vZHVsdXMpKQorICAgIGF1dG8gbW9kdWx1cyA9
IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLm4pOworICAgIGlmICghbW9kdWx1cykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgLy8gUGVyIFJGQyA3NTE4IFNlY3Rpb24gNi4zLjEuMTogaHR0
cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MTgjc2VjdGlvbi02LjMuMS4xCi0gICAgaWYg
KCFtb2R1bHVzLmlzRW1wdHkoKSAmJiAhbW9kdWx1c1swXSkKLSAgICAgICAgbW9kdWx1cy5yZW1v
dmUoMCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGV4cG9uZW50OwotICAgIGlmICghV1RGOjpiYXNl
NjRVUkxEZWNvZGUoa2V5RGF0YS5lLCBleHBvbmVudCkpCisgICAgaWYgKCFtb2R1bHVzLT5pc0Vt
cHR5KCkgJiYgIW1vZHVsdXMtPmF0KDApKQorICAgICAgICBtb2R1bHVzLT5yZW1vdmUoMCk7Cisg
ICAgYXV0byBleHBvbmVudCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmUpOworICAgIGlmICgh
ZXhwb25lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmQuaXNO
dWxsKCkpIHsKICAgICAgICAgLy8gaW1wb3J0IHB1YmxpYyBrZXkKLSAgICAgICAgYXV0byBwdWJs
aWNLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKFdU
Rk1vdmUobW9kdWx1cyksIFdURk1vdmUoZXhwb25lbnQpKTsKKyAgICAgICAgYXV0byBwdWJsaWNL
ZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKFdURk1v
dmUoKm1vZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVudCkpOwogICAgICAgICAvLyBOb3RpY2U6IENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQg
c2hvdWxkIG5vdCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAg
ICAgIHJldHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnB1YmxpY0tleUNvbXBv
bmVudHMsIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgIH0KIAogICAgIC8vIGltcG9ydCBwcml2
YXRlIGtleQotICAgIFZlY3Rvcjx1aW50OF90PiBwcml2YXRlRXhwb25lbnQ7Ci0gICAgaWYgKCFX
VEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLmQsIHByaXZhdGVFeHBvbmVudCkpCisgICAgYXV0
byBwcml2YXRlRXhwb25lbnQgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBpZiAo
IXByaXZhdGVFeHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURh
dGEucC5pc051bGwoKSAmJiBrZXlEYXRhLnEuaXNOdWxsKCkgJiYga2V5RGF0YS5kcC5pc051bGwo
KSAmJiBrZXlEYXRhLmRwLmlzTnVsbCgpICYmIGtleURhdGEucWkuaXNOdWxsKCkpIHsKLSAgICAg
ICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNy
ZWF0ZVByaXZhdGUoV1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUo
cHJpdmF0ZUV4cG9uZW50KSk7CisgICAgICAgIGF1dG8gcHJpdmF0ZUtleUNvbXBvbmVudHMgPSBD
cnlwdG9LZXlSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlKFdURk1vdmUoKm1vZHVsdXMpLCBX
VEZNb3ZlKCpleHBvbmVudCksIFdURk1vdmUoKnByaXZhdGVFeHBvbmVudCkpOwogICAgICAgICAv
LyBOb3RpY2U6IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFj
ZWhvbGRlci4gSXQgc2hvdWxkIG5vdCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51
bGxvcHQuCiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhh
c2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnBy
aXZhdGVLZXlDb21wb25lbnRzLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAKICAgICBp
ZiAoa2V5RGF0YS5wLmlzTnVsbCgpIHx8IGtleURhdGEucS5pc051bGwoKSB8fCBrZXlEYXRhLmRw
LmlzTnVsbCgpIHx8IGtleURhdGEuZHEuaXNOdWxsKCkgfHwga2V5RGF0YS5xaS5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJp
bWVJbmZvIGZpcnN0UHJpbWVJbmZvOwotICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1l
SW5mbyBzZWNvbmRQcmltZUluZm87Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlE
YXRhLnAsIGZpcnN0UHJpbWVJbmZvLnByaW1lRmFjdG9yKSkKKyAgICAKKyAgICBhdXRvIGZpcnN0
UHJpbWVGYWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5wKTsKKyAgICBpZiAoIWZpcnN0
UHJpbWVGYWN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNl
NjRVUkxEZWNvZGUoa2V5RGF0YS5kcCwgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQp
KQorICAgIGF1dG8gZmlyc3RGYWN0b3JDUlRFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZShrZXlE
YXRhLmRwKTsKKyAgICBpZiAoIWZpcnN0RmFjdG9yQ1JURXhwb25lbnQpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5xLCBzZWNv
bmRQcmltZUluZm8ucHJpbWVGYWN0b3IpKQorICAgIGF1dG8gc2Vjb25kUHJpbWVGYWN0b3IgPSBi
YXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5xKTsKKyAgICBpZiAoIXNlY29uZFByaW1lRmFjdG9yKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtl
eURhdGEuZHEsIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisgICAgYXV0byBz
ZWNvbmRGYWN0b3JDUlRFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRxKTsKKyAg
ICBpZiAoIXNlY29uZEZhY3RvckNSVEV4cG9uZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEucWksIHNlY29uZFByaW1lSW5m
by5mYWN0b3JDUlRDb2VmZmljaWVudCkpCisgICAgYXV0byBzZWNvbmRGYWN0b3JDUlRDb2VmZmlj
aWVudCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLnFpKTsKKyAgICBpZiAoIXNlY29uZEZhY3Rv
ckNSVENvZWZmaWNpZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENyeXB0b0tl
eVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBmaXJzdFByaW1lSW5mbzsKKyAgICBmaXJzdFByaW1l
SW5mby5wcmltZUZhY3RvciA9IFdURk1vdmUoKmZpcnN0UHJpbWVGYWN0b3IpOworICAgIGZpcnN0
UHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50ID0gV1RGTW92ZSgqZmlyc3RGYWN0b3JDUlRFeHBv
bmVudCk7CisgICAgCisgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29u
ZFByaW1lSW5mbzsKKyAgICBzZWNvbmRQcmltZUluZm8ucHJpbWVGYWN0b3IgPSBXVEZNb3ZlKCpz
ZWNvbmRQcmltZUZhY3Rvcik7CisgICAgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50
ID0gV1RGTW92ZSgqc2Vjb25kRmFjdG9yQ1JURXhwb25lbnQpOworICAgIHNlY29uZFByaW1lSW5m
by5mYWN0b3JDUlRDb2VmZmljaWVudCA9IFdURk1vdmUoKnNlY29uZEZhY3RvckNSVENvZWZmaWNp
ZW50KTsKKwogICAgIGlmICgha2V5RGF0YS5vdGgpIHsKLSAgICAgICAgYXV0byBwcml2YXRlS2V5
Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRk
aXRpb25hbERhdGEoV1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUo
cHJpdmF0ZUV4cG9uZW50KSwgV1RGTW92ZShmaXJzdFByaW1lSW5mbyksIFdURk1vdmUoc2Vjb25k
UHJpbWVJbmZvKSwgeyB9KTsKKyAgICAgICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENy
eXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEoV1RG
TW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50KSwgV1RGTW92ZSgqcHJpdmF0ZUV4cG9u
ZW50KSwgV1RGTW92ZShmaXJzdFByaW1lSW5mbyksIFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwg
eyB9KTsKICAgICAgICAgLy8gTm90aWNlOiBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFf
MSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkgZWZmZWN0IGlm
IGhhc2ggaXMgV1RGOjpudWxsb3B0LgogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5UlNBOjpjcmVh
dGUoYWxnb3JpdGhtLCBoYXNoLnZhbHVlT3IoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hB
XzEpLCAhIWhhc2gsICpwcml2YXRlS2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7
CiAgICAgfQogCiAgICAgVmVjdG9yPENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbz4g
b3RoZXJQcmltZUluZm9zOwogICAgIGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiBrZXlEYXRhLm90
aC52YWx1ZSgpKSB7Ci0gICAgICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBp
bmZvOwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKHZhbHVlLnIsIGluZm8ucHJp
bWVGYWN0b3IpKQorICAgICAgICBhdXRvIHByaW1lRmFjdG9yID0gYmFzZTY0VVJMRGVjb2RlKHZh
bHVlLnIpOworICAgICAgICBpZiAoIXByaW1lRmFjdG9yKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUodmFsdWUuZCwgaW5mby5m
YWN0b3JDUlRFeHBvbmVudCkpCisgICAgICAgIGF1dG8gZmFjdG9yQ1JURXhwb25lbnQgPSBiYXNl
NjRVUkxEZWNvZGUodmFsdWUuZCk7CisgICAgICAgIGlmICghZmFjdG9yQ1JURXhwb25lbnQpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERl
Y29kZSh2YWx1ZS50LCBpbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KSkKKyAgICAgICAgYXV0byBm
YWN0b3JDUlRDb2VmZmljaWVudCA9IGJhc2U2NFVSTERlY29kZSh2YWx1ZS50KTsKKyAgICAgICAg
aWYgKCFmYWN0b3JDUlRDb2VmZmljaWVudCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICBvdGhlclByaW1lSW5mb3MuYXBwZW5kKGluZm8pOworCisgICAgICAgIENyeXB0b0tl
eVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBpbmZvOworICAgICAgICBpbmZvLnByaW1lRmFjdG9y
ID0gV1RGTW92ZSgqcHJpbWVGYWN0b3IpOworICAgICAgICBpbmZvLmZhY3RvckNSVEV4cG9uZW50
ID0gV1RGTW92ZSgqZmFjdG9yQ1JURXhwb25lbnQpOworICAgICAgICBpbmZvLmZhY3RvckNSVENv
ZWZmaWNpZW50ID0gV1RGTW92ZSgqZmFjdG9yQ1JUQ29lZmZpY2llbnQpOworCisgICAgICAgIG90
aGVyUHJpbWVJbmZvcy5hcHBlbmQoV1RGTW92ZShpbmZvKSk7CiAgICAgfQogCi0gICAgYXV0byBw
cml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZh
dGVXaXRoQWRkaXRpb25hbERhdGEoV1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCks
IFdURk1vdmUocHJpdmF0ZUV4cG9uZW50KSwgV1RGTW92ZShmaXJzdFByaW1lSW5mbyksIFdURk1v
dmUoc2Vjb25kUHJpbWVJbmZvKSwgV1RGTW92ZShvdGhlclByaW1lSW5mb3MpKTsKKyAgICBhdXRv
IHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJp
dmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKCptb2R1bHVzKSwgV1RGTW92ZSgqZXhwb25l
bnQpLCBXVEZNb3ZlKCpwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwg
V1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCBXVEZNb3ZlKG90aGVyUHJpbWVJbmZvcykpOwogICAg
IC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEgaXMganVzdCBhIHBs
YWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBpZiBoYXNoIGlzIFdURjo6
bnVsbG9wdC4KICAgICByZXR1cm4gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBoYXNo
LnZhbHVlT3IoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsICpwcml2
YXRlS2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiB9CkBAIC0xMTgsMzAgKzE0
MCwzMCBAQCBKc29uV2ViS2V5IENyeXB0b0tleVJTQTo6ZXhwb3J0SndrKCkgY29uCiAgICAgYXV0
byByc2FDb21wb25lbnRzID0gZXhwb3J0RGF0YSgpOwogCiAgICAgLy8gcHVibGljIGtleQotICAg
IHJlc3VsdC5uID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPm1vZHVsdXMoKSk7Ci0g
ICAgcmVzdWx0LmUgPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+ZXhwb25lbnQoKSk7
CisgICAgcmVzdWx0Lm4gPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50
cy0+bW9kdWx1cygpKSk7CisgICAgcmVzdWx0LmUgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29k
ZWQocnNhQ29tcG9uZW50cy0+ZXhwb25lbnQoKSkpOwogICAgIGlmIChyc2FDb21wb25lbnRzLT50
eXBlKCkgPT0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6VHlwZTo6UHVibGljKQogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogCiAgICAgLy8gcHJpdmF0ZSBrZXkKLSAgICByZXN1bHQuZCA9IGJhc2U2
NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5wcml2YXRlRXhwb25lbnQoKSk7CisgICAgcmVzdWx0
LmQgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+cHJpdmF0ZUV4
cG9uZW50KCkpKTsKICAgICBpZiAoIXJzYUNvbXBvbmVudHMtPmhhc0FkZGl0aW9uYWxQcml2YXRl
S2V5UGFyYW1ldGVycygpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmVzdWx0LnAg
PSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8oKS5wcmltZUZh
Y3Rvcik7Ci0gICAgcmVzdWx0LnEgPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+c2Vj
b25kUHJpbWVJbmZvKCkucHJpbWVGYWN0b3IpOwotICAgIHJlc3VsdC5kcCA9IGJhc2U2NFVSTEVu
Y29kZShyc2FDb21wb25lbnRzLT5maXJzdFByaW1lSW5mbygpLmZhY3RvckNSVEV4cG9uZW50KTsK
LSAgICByZXN1bHQuZHEgPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJp
bWVJbmZvKCkuZmFjdG9yQ1JURXhwb25lbnQpOwotICAgIHJlc3VsdC5xaSA9IGJhc2U2NFVSTEVu
Y29kZShyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRDb2VmZmljaWVu
dCk7CisgICAgcmVzdWx0LnAgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9u
ZW50cy0+Zmlyc3RQcmltZUluZm8oKS5wcmltZUZhY3RvcikpOworICAgIHJlc3VsdC5xID0gbWFr
ZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5mbygp
LnByaW1lRmFjdG9yKSk7CisgICAgcmVzdWx0LmRwID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNv
ZGVkKHJzYUNvbXBvbmVudHMtPmZpcnN0UHJpbWVJbmZvKCkuZmFjdG9yQ1JURXhwb25lbnQpKTsK
KyAgICByZXN1bHQuZHEgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50
cy0+c2Vjb25kUHJpbWVJbmZvKCkuZmFjdG9yQ1JURXhwb25lbnQpKTsKKyAgICByZXN1bHQucWkg
PSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJ
bmZvKCkuZmFjdG9yQ1JUQ29lZmZpY2llbnQpKTsKICAgICBpZiAocnNhQ29tcG9uZW50cy0+b3Ro
ZXJQcmltZUluZm9zKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAg
VmVjdG9yPFJzYU90aGVyUHJpbWVzSW5mbz4gb3RoOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5m
byA6IHJzYUNvbXBvbmVudHMtPm90aGVyUHJpbWVJbmZvcygpKSB7CiAgICAgICAgIFJzYU90aGVy
UHJpbWVzSW5mbyBvdGhlckluZm87Ci0gICAgICAgIG90aGVySW5mby5yID0gYmFzZTY0VVJMRW5j
b2RlKGluZm8ucHJpbWVGYWN0b3IpOwotICAgICAgICBvdGhlckluZm8uZCA9IGJhc2U2NFVSTEVu
Y29kZShpbmZvLmZhY3RvckNSVEV4cG9uZW50KTsKLSAgICAgICAgb3RoZXJJbmZvLnQgPSBiYXNl
NjRVUkxFbmNvZGUoaW5mby5mYWN0b3JDUlRDb2VmZmljaWVudCk7CisgICAgICAgIG90aGVySW5m
by5yID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKGluZm8ucHJpbWVGYWN0b3IpKTsKKyAg
ICAgICAgb3RoZXJJbmZvLmQgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoaW5mby5mYWN0
b3JDUlRFeHBvbmVudCkpOworICAgICAgICBvdGhlckluZm8udCA9IG1ha2VTdHJpbmcoYmFzZTY0
VVJMRW5jb2RlZChpbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KSk7CiAgICAgICAgIG90aC5hcHBl
bmQoV1RGTW92ZShvdGhlckluZm8pKTsKICAgICB9CiAgICAgcmVzdWx0Lm90aCA9IFdURk1vdmUo
b3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMu
Y3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0
b0tleUVDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBD
cnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogCiAgICAgaWYgKFVOTElLRUxZKChz
aXplICE9IHB1YmxpY0tleVNpemUpICYmIChzaXplICE9IHByaXZhdGVLZXlTaXplKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBqd2sueCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHJlc3Vs
dC5kYXRhKCkgKyAxLCBrZXlTaXplSW5CeXRlcyk7Ci0gICAgandrLnkgPSBXVEY6OmJhc2U2NFVS
TEVuY29kZShyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUluQnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRl
cyk7CisgICAgandrLnggPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVzdWx0LmRhdGEo
KSArIDEsIGtleVNpemVJbkJ5dGVzKSk7CisgICAgandrLnkgPSBtYWtlU3RyaW5nKGJhc2U2NFVS
TEVuY29kZWQocmVzdWx0LmRhdGEoKSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6ZUluQnl0
ZXMpKTsKICAgICBpZiAoc2l6ZSA+IHB1YmxpY0tleVNpemUpCi0gICAgICAgIGp3ay5kID0gV1RG
OjpiYXNlNjRVUkxFbmNvZGUocmVzdWx0LmRhdGEoKSArIHB1YmxpY0tleVNpemUsIGtleVNpemVJ
bkJ5dGVzKTsKKyAgICAgICAgandrLmQgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocmVz
dWx0LmRhdGEoKSArIHB1YmxpY0tleVNpemUsIGtleVNpemVJbkJ5dGVzKSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENy
eXB0b0tleVdyYXBNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCA8Q29tbW9uQ3J5cHRvL0NvbW1v
blN5bW1ldHJpY0tleXdyYXAuaD4KICNpbXBvcnQgPGNydF9leHRlcm5zLmg+CiAjaW1wb3J0IDx3
dGYvQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oPgorI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAj
aW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgogI2ltcG9ydCA8d3RmL3NwaS9jb2NvYS9TZWN1cml0eVNQSS5oPgpAQCAtODAsMTEgKzgxLDEx
IEBAIHN0YXRpYyBOU1N0cmluZyogbWFzdGVyS2V5QWNjb3VudE5hbWVGb3IKICAgICByZXR1cm4g
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJjb20uYXBwbGUuV2ViS2l0LldlYkNyeXB0by5t
YXN0ZXIrJUAiLCBidW5kbGVJZGVudGlmaWVyXTsKIH0KIAotc3RhdGljIGJvb2wgY3JlYXRlQW5k
U3RvcmVNYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXlEYXRhKQorc3RhdGljIE9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2Fu
QWNjZXNzQ3JlZGVudGlhbHMpKTsKIAotICAgIG1hc3RlcktleURhdGEucmVzaXplKG1hc3Rlcktl
eVNpemVJbkJ5dGVzKTsKKyAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5RGF0YShtYXN0ZXJL
ZXlTaXplSW5CeXRlcyk7CiAgICAgYXV0byByYyA9IENDUmFuZG9tR2VuZXJhdGVCeXRlcyhtYXN0
ZXJLZXlEYXRhLmRhdGEoKSwgbWFzdGVyS2V5RGF0YS5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNT
RVJUKHJjID09IGtDQ1N1Y2Nlc3MpOwogCkBAIC0xMDcsNyArMTA4LDcgQEAgc3RhdGljIGJvb2wg
Y3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoVmVjdAogICAgIHN0YXR1cyA9IFNlY0FjY2Vzc0NyZWF0
ZSgoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpbG9jYWxpemVkSXRlbU5hbWUsIG51bGxwdHIsICZhY2Nl
c3NSZWYpOwogICAgIGlmIChzdGF0dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3Qg
Y3JlYXRlIGEgc2VjdXJpdHkgYWNjZXNzIG9iamVjdCBmb3Igc3RvcmluZyBXZWJDcnlwdG8gbWFz
dGVyIGtleSwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPFNlY0Fj
Y2Vzc1JlZj4gYWNjZXNzID0gYWRvcHRDRihhY2Nlc3NSZWYpOwogCkBAIC0xMjAsMTkgKzEyMSwx
OCBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdh
eXMoIkNhbm5vdCBjcmVhdGUgYSB0cnVzdGVkIGFwcGxpY2F0aW9uIG9iamVjdCBmb3Igc3Rvcmlu
ZyBXZWJDcnlwdG8gbWFzdGVyIGtleSwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAg
UmV0YWluUHRyPFNlY1RydXN0ZWRBcHBsaWNhdGlvblJlZj4gdHJ1c3RlZEFwcCA9IGFkb3B0Q0Yo
dHJ1c3RlZEFwcFJlZik7CiAKICAgICBzdGF0dXMgPSBTZWNBQ0xTZXRDb250ZW50cyhhY2wsIChf
X2JyaWRnZSBDRkFycmF5UmVmKUBbIChfX2JyaWRnZSBpZCl0cnVzdGVkQXBwLmdldCgpIF0sIChf
X2JyaWRnZSBDRlN0cmluZ1JlZilsb2NhbGl6ZWRJdGVtTmFtZSwga1NlY0tleWNoYWluUHJvbXB0
UmVxdWlyZVBhc3NwaGFzZSk7CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdh
eXMoIkNhbm5vdCBzZXQgQUNMIGZvciBXZWJDcnlwdG8gbWFzdGVyIGtleSwgZXJyb3IgJWQiLCAo
aW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICB9CiAjZW5kaWYKIAotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGVk
TWFzdGVyS2V5RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUobWFzdGVyS2V5RGF0YSwgYmFzZTY0RW5j
b2RlZE1hc3RlcktleURhdGEpOworICAgIGF1dG8gYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEg
PSBiYXNlNjRFbmNvZGUobWFzdGVyS2V5RGF0YSk7CiAKICAgICAvLyBDYW5ub3QgdXNlIGtTZWND
bGFzc0tleSBiZWNhdXNlIG9mIDxyZGFyOi8vcHJvYmxlbS8xNjA2ODIwNz4uCiAgICAgTlNEaWN0
aW9uYXJ5ICphdHRyaWJ1dGVzID0gQHsKQEAgLTE1MCwxMiArMTUwLDEzIEBAIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0VORAogICAgIHN0YXR1cyA9IFNlY0l0ZW1BZGQoKENGRGljdGlv
bmFyeVJlZilhdHRyaWJ1dGVzLCBudWxscHRyKTsKICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAg
IFdURkxvZ0Fsd2F5cygiQ2Fubm90IHN0b3JlIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAl
ZCIsIChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBtYXN0
ZXJLZXlEYXRhOwogfQogCi1zdGF0aWMgYm9vbCBmaW5kTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90
PiYgbWFzdGVyS2V5RGF0YSkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGZpbmRN
YXN0ZXJLZXkoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJv
Y2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzQ3JlZGVudGlhbHMpKTsKIApAQCAtMTcwLDIwICsxNzEs
MjUgQEAgc3RhdGljIGJvb2wgZmluZE1hc3RlcktleShWZWN0b3I8dWludDhfdAogICAgIGlmIChz
dGF0dXMpIHsKICAgICAgICAgaWYgKHN0YXR1cyAhPSBlcnJTZWNJdGVtTm90Rm91bmQgJiYgc3Rh
dHVzICE9IGVyclNlY1VzZXJDYW5jZWxlZCkKICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ291
bGQgbm90IGZpbmQgV2ViQ3J5cHRvIG1hc3RlciBrZXkgaW4gS2V5Y2hhaW4sIGVycm9yICVkIiwg
KGludClzdGF0dXMpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGtleURhdGEgPSBhZG9w
dENGKGtleURhdGFSZWYpOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZWRNYXN0
ZXJLZXlEYXRhID0gdmVjdG9yRnJvbU5TRGF0YSgoX19icmlkZ2UgTlNEYXRhICopa2V5RGF0YS5n
ZXQoKSk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZSgoY29uc3QgY2hhciopYmFzZTY0RW5jb2Rl
ZE1hc3RlcktleURhdGEuZGF0YSgpLCBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YS5zaXplKCks
IG1hc3RlcktleURhdGEpOworICAgIHJldHVybiBiYXNlNjREZWNvZGUocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oQ0ZEYXRhR2V0Qnl0ZVB0cihrZXlEYXRhLmdldCgpKSksIENGRGF0YUdl
dExlbmd0aChrZXlEYXRhLmdldCgpKSk7CiB9CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleShWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpCiB7Ci0gICAgaWYgKCFmaW5kTWFzdGVy
S2V5KG1hc3RlcktleSkgJiYgIWNyZWF0ZUFuZFN0b3JlTWFzdGVyS2V5KG1hc3RlcktleSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSRUxFQVNFX0FTU0VSVChtYXN0ZXJLZXkuc2l6ZSgp
ID09IG1hc3RlcktleVNpemVJbkJ5dGVzKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYXV0
byBtYXN0ZXJLZXkgPSBmaW5kTWFzdGVyS2V5KCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bWFzdGVyS2V5LT5zaXplKCkgPT0gbWFzdGVyS2V5U2l6ZUluQnl0ZXMpOworICAgICAgICByZXR1
cm4gbWFzdGVyS2V5OworICAgIH0KKworICAgIGlmIChhdXRvIG1hc3RlcktleSA9IGNyZWF0ZUFu
ZFN0b3JlTWFzdGVyS2V5KCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWFzdGVyS2V5LT5z
aXplKCkgPT0gbWFzdGVyS2V5U2l6ZUluQnl0ZXMpOworICAgICAgICByZXR1cm4gbWFzdGVyS2V5
OworICAgIH0KKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIGJvb2wgZGVsZXRlRGVm
YXVsdFdlYkNyeXB0b01hc3RlcktleSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vb3Bl
bnNzbC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE9wZW5TU0wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNT
TC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3Ns
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDE1ICszMSwxNCBAQAogI2lmIEVOQUJMRShXRUJfQ1JZUFRPKQogCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1ib29sIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+
JiBtYXN0ZXJLZXkpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9N
YXN0ZXJLZXkoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1h
c3RlcktleSk7Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IH0KIAogLy8gSW5pdGlhbGx5IHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgd2VyZSBpbnRlbmRlZCB0
byBwZXJmb3JtIEtFSyB3cmFwcGluZyBhbmQgdW53cmFwcGluZywKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMzLDI2ICszMzMsMTIgQEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9U
ZXh0KCkKIAogdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRhVVJMKCkKIHsKLSAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJkYXRh
OiIpOwotCiAgICAgaWYgKCFtX2J5dGVzTG9hZGVkKSB7Ci0gICAgICAgIG1fc3RyaW5nUmVzdWx0
ID0gYnVpbGRlci50b1N0cmluZygpOworICAgICAgICBtX3N0cmluZ1Jlc3VsdCA9ICJkYXRhOiJf
czsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2RhdGFUeXBlLmlzRW1wdHko
KSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwot
ICAgIGVsc2UKLSAgICAgICAgYnVpbGRlci5hcHBlbmQobV9kYXRhVHlwZSk7Ci0gICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCI7YmFzZTY0LCIpOwotCi0gICAgVmVjdG9yPGNoYXI+IG91dDsKLSAg
ICBiYXNlNjRFbmNvZGUobV9yYXdEYXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQsIG91dCk7Ci0g
ICAgb3V0LmFwcGVuZCgnXDAnKTsKLSAgICBidWlsZGVyLmFwcGVuZChvdXQuZGF0YSgpKTsKLQot
ICAgIG1fc3RyaW5nUmVzdWx0ID0gYnVpbGRlci50b1N0cmluZygpOworICAgIG1fc3RyaW5nUmVz
dWx0ID0gbWFrZVN0cmluZygiZGF0YTo7YmFzZTY0LCIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8g
ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgOiBtX2RhdGFUeXBlLCBiYXNlNjRFbmNvZGVkKG1f
cmF3RGF0YS0+ZGF0YSgpLCBtX2J5dGVzTG9hZGVkKSwgJ1wwJyk7CiB9CiAKIGJvb2wgRmlsZVJl
YWRlckxvYWRlcjo6aXNDb21wbGV0ZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MjksMTQgKzQyOSwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdl
c3Q+CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNoOwog
ICAgICAgICAgICAgYXR0cnNTSEExLmNvbXB1dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAgICAg
ICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZShhdHRyc0hhc2guZGF0YSgpLCAxMCk7
CisgICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2Rl
ZChhdHRyc0hhc2guZGF0YSgpLCAxMCkpOwogICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNo
YTEsIGRpZ2VzdC0+YXR0cnNTSEExKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFNIQTE6OkRp
Z2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZGlnZXN0LT5zaGEx
ID0gYmFzZTY0RW5jb2RlKGhhc2guZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKGhhc2guZGF0YSgpLCAxMCkpOwogICAgIGlmICh1bnVzZWRO
b2Rlc01hcCkKICAgICAgICAgdW51c2VkTm9kZXNNYXAtPmFkZChkaWdlc3QtPnNoYTEsIGRpZ2Vz
dC5nZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTk4LDExICs1OTgsMTEgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZp
YwogICAgIGlmICghbV9jbGllbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFZlY3Rv
cjx1aW50OF90PiBkYXRhOwotICAgIGlmICghYmFzZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZp
Y2F0ZSwgZGF0YSkpCisgICAgYXV0byBkYXRhID0gYmFzZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0
aWZpY2F0ZSk7CisgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgp
KTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS0+ZGF0YSgpLCBk
YXRhLT5zaXplKCkpOwogICAgIE9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJ
bmZvOwogICAgIGRlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvOwogICAgIGlmICghY2VydGlmaWNh
dGVJbmZvKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jl
c291cmNlc0RhdGEuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyAr
MTA2LDcgQEAgdW5zaWduZWQgTmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRAogICAgICAg
ICBtX2NvbnRlbnQgPSBtX2RlY29kZXItPmRlY29kZUFuZEZsdXNoKG1fZGF0YUJ1ZmZlci0+ZGF0
YSgpLCBkYXRhTGVuZ3RoKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2Jhc2U2NEVuY29kZWQg
PSB0cnVlOwotICAgICAgICBtX2NvbnRlbnQgPSBiYXNlNjRFbmNvZGUobV9kYXRhQnVmZmVyLT5k
YXRhKCksIGRhdGFMZW5ndGgpOworICAgICAgICBtX2NvbnRlbnQgPSBtYWtlU3RyaW5nKFdURjo6
YmFzZTY0RW5jb2RlZChtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCkpOwogICAgIH0K
IAogICAgIG1fZGF0YUJ1ZmZlciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01B
Z2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDksNyArMTcwOSw3IEBAIHN0YXRpYyBTdHJp
bmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGkKICAgICBhdXRvIGNyeXB0b0RpZ2VzdCA9IFBB
TDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hB
XzI1Nik7CiAgICAgY3J5cHRvRGlnZXN0LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVu
dC5zaXplKCkpOwogICAgIGF1dG8gZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgp
OwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlKGRpZ2VzdC5k
YXRhKCksIGRpZ2VzdC5zaXplKCkpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygic2hhMjU2LSIs
IGJhc2U2NEVuY29kZWQoZGlnZXN0LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOwogfQogCiBSZWY8
UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9k
ZShOb2RlKiBub2RlLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5l
dHdvcmtBZ2VudC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTc1LDcgKzE3NSw3IEBAIFJlZjxQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGIK
ICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0T3Bjb2RlKGZyYW1lLm9wQ29kZSkKICAgICAgICAgLnNldE1hc2soZnJhbWUu
bWFza2VkKQotICAgICAgICAuc2V0UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJp
bmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxv
YWRMZW5ndGgpIDogYmFzZTY0RW5jb2RlKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5n
dGgpKQorICAgICAgICAuc2V0UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6
OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRM
ZW5ndGgpIDogbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBh
eWxvYWRMZW5ndGgpKSkKICAgICAgICAgLnNldFBheWxvYWRMZW5ndGgoZnJhbWUucGF5bG9hZExl
bmd0aCkKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KQEAgLTU4Niw3ICs1ODYsNyBAQCB2b2lkIElu
c3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZURhCiAgICAgICAgIC8vIE9mdGVuIHRoZSBk
YXRhIGlzIHRleHQgYW5kIHdlIHdvdWxkIGhhdmUgYSBkZWNvZGVyLCBidXQgZm9yIG5vbi10ZXh0
IHdlIHdvbid0IGhhdmUgYSBkZWNvZGVyLgogICAgICAgICAvLyBTeW5jIFhIUnMgbWF5IG5vdCBo
YXZlIGEgY2FjaGVkIHJlc291cmNlLCB3aGlsZSBub24tc3luYyBYSFJzIHVzdWFsbHkgdHJhbnNm
ZXIgZGF0YSBvdmVyIG9uIGNvbXBsZXRpb24uCiAgICAgICAgIGlmIChtX2xvYWRpbmdYSFJTeW5j
aHJvbm91c2x5ICYmIHJlc291cmNlRGF0YSAmJiAhcmVzb3VyY2VEYXRhLT5oYXNCdWZmZXJlZERh
dGEoKSAmJiAhcmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpKQotICAgICAgICAgICAgbV9y
ZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQocmVxdWVzdElkLCBiYXNlNjRFbmNvZGUo
ZGF0YSwgZGF0YUxlbmd0aCksIHRydWUpOworICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5z
ZXRSZXNvdXJjZUNvbnRlbnQocmVxdWVzdElkLCBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoZGF0
YSwgZGF0YUxlbmd0aCkpLCB0cnVlKTsKICAgICB9CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+ZGF0YVJlY2VpdmVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5ndGgsIGVuY29k
ZWREYXRhTGVuZ3RoKTsKQEAgLTEwMDQsNyArMTAwNCw3IEBAIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPFN0cmluZz4gSW5zcGVjdG8KIAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5j
b2RlcjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAgcmV0dXJuIGJh
c2U2NEVuY29kZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAg
cmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVy
LmJ1ZmZlclNpemUoKSkpOwogfQogCiBXZWJTb2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
d2ViU29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQm
IHJlcXVlc3RJZCkKQEAgLTEyMDIsMTEgKzEyMDIsMTEgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yTgogICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZHMo
V1RGTW92ZShleHBsaWNpdEhlYWRlcnMpKTsKICAgICB9CiAgICAgaWYgKCEhcG9zdERhdGEpIHsK
LSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNv
ZGUocG9zdERhdGEsIGJ1ZmZlcikpCisgICAgICAgIGF1dG8gYnVmZmVyID0gYmFzZTY0RGVjb2Rl
KHBvc3REYXRhKTsKKyAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gcG9zdERhdGEiX3MpOwogCi0gICAg
ICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShidWZmZXIpKTsKKyAgICAg
ICAgcmVxdWVzdC5zZXRIVFRQQm9keShGb3JtRGF0YTo6Y3JlYXRlKFdURk1vdmUoKmJ1ZmZlcikp
KTsKICAgICB9CiAgICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgaG93IHRvIGlkZW50aWZ5IHdoZW4g
YSByZXF1ZXN0IGhhcyBiZWVuIG92ZXJyaWRkZW4gd2hlbiB3ZSBhZGQgdGhpcyB0byB0aGUgZnJv
bnRlbmQuCiAgICAgcGVuZGluZ1JlcXVlc3QtPmNvbnRpbnVlV2l0aFJlcXVlc3QocmVxdWVzdCk7
CkBAIC0xMjQyLDExICsxMjQyLDExIEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3Rvck4KIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG92ZXJyaWRlRGF0YTsKICAgICBp
ZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAg
ICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBidWZmZXIpKQorICAgICAgICBhdXRvIGJ1
ZmZlciA9IGJhc2U2NERlY29kZShjb250ZW50KTsKKyAgICAgICAgaWYgKCFidWZmZXIpCiAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29u
dGVudCJfcyk7CiAKLSAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
V1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpj
cmVhdGUoV1RGTW92ZSgqYnVmZmVyKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG92ZXJyaWRlRGF0
YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwgY29udGVudC51
dGY4KCkubGVuZ3RoKCkpOwogCkBAIC0xMjY4LDExICsxMjY4LDExIEBAIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck4KIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGE7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1
ZmZlcjsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgYnVmZmVyKSkKKyAgICAg
ICAgYXV0byBidWZmZXIgPSBiYXNlNjREZWNvZGUoY29udGVudCk7CisgICAgICAgIGlmICghYnVm
ZmVyKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZGVjb2Rl
IGdpdmVuIGNvbnRlbnQiX3MpOwogCi0gICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
V1RGTW92ZSgqYnVmZmVyKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGRhdGEgPSBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShjb250ZW50LnV0ZjgoKS5kYXRhKCksIGNvbnRlbnQudXRmOCgpLmxlbmd0aCgp
KTsKIApAQCAtMTQwNSw3ICsxNDA1LDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNh
Y2hlZFJlc291cgogICAgICAgICB9CiAKICAgICAgICAgKmJhc2U2NEVuY29kZWQgPSB0cnVlOwot
ICAgICAgICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNp
emUoKSk7CisgICAgICAgICpyZXN1bHQgPSBtYWtlU3RyaW5nKFdURjo6YmFzZTY0RW5jb2RlZChi
dWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1
ZmZlckNvbgogYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIHNpemUsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9v
bCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2
NEVuY29kZSkgewotICAgICAgICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlKGRhdGEsIHNpemUpOwor
ICAgICAgICAqcmVzdWx0ID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGRhdGEsIHNpemUpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMTAyLDcgKzExMDIsNyBAQCBQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvCiAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiQ291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJf
cyk7CiAKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5yYXdEYXRh
UmVwcmVzZW50YXRpb24oKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQ
dHIoYnVmZmVyLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOworICAgIHJl
dHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0
KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSkpOwogfQogI2VuZGlmCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzExOCw3ICszMTE4LDcgQEAgdW5zaWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNl
UwogICAgICAgICBBU1NFUlQoIW5ld1JlcXVlc3QuaXNOdWxsKCkpOwogCiAgICAgICAgIGlmICgh
ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS5tYXliZUxvYWRTeW5jaHJv
bm91c2x5KG5ld1JlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSkpIHsKLSAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVy
OwogICAgICAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoKnRoaXMsIGlkZW50aWZpZXIsIG5ld1JlcXVlc3QsIGNs
aWVudENyZWRlbnRpYWxQb2xpY3ksIG9wdGlvbnMsIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIGVy
cm9yLCByZXNwb25zZSwgYnVmZmVyKTsKICAgICAgICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+
YXBwbGljYXRpb25DYWNoZUhvc3QoKS5tYXliZUxvYWRGYWxsYmFja1N5bmNocm9ub3VzbHkobmV3
UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9Mb2FkZXJTdHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Mb2FkZXJTdHJhdGVneS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvTG9hZGVyU3RyYXRlZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBz
dHJ1Y3QgRmV0Y2hPcHRpb25zOwogY2xhc3MgV0VCQ09SRV9FWFBPUlQgTG9hZGVyU3RyYXRlZ3kg
ewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRnJhbWUmLCBDYWNoZWRS
ZXNvdXJjZSYsIFJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4mJik+JiYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxv
YWRlciYsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgRmV0Y2hPcHRpb25zJiwgY29uc3QgSFRUUEhl
YWRlck1hcCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+
JiBkYXRhKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0aW9ucyYsIGNvbnN0
IEhUVFBIZWFkZXJNYXAmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rv
cjx1aW50OF90PiYgZGF0YSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlTG9hZENvbXBsZXRl
ZChQYWdlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBicm93c2luZ0NvbnRleHRSZW1vdmVkKEZy
YW1lJikgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Qcml2YXRl
Q2xpY2tNZWFzdXJlbWVudC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
OSwxMCArMTg5LDEwIEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkVwaGVtZXJhbFMK
IHsKICAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaWYgd2UgY2FuIGRvIHdpdGggYSBzaW1wbGUg
bGVuZ3RoIGNoZWNrIGluc3RlYWQgb2YgZGVjb2RpbmcuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTk0NQotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdl
c3Q7Ci0gICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUobm9uY2UsIGRpZ2VzdCkpCisgICAgYXV0byBk
aWdlc3QgPSBiYXNlNjRVUkxEZWNvZGUobm9uY2UpOworICAgIGlmICghZGlnZXN0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGRpZ2VzdC5zaXplKCkgPT0gRXBoZW1lcmFsU291
cmNlTm9uY2VSZXF1aXJlZE51bWJlck9mQnl0ZXM7CisgICAgcmV0dXJuIGRpZ2VzdC0+c2l6ZSgp
ID09IEVwaGVtZXJhbFNvdXJjZU5vbmNlUmVxdWlyZWROdW1iZXJPZkJ5dGVzOwogfQogCiB2b2lk
IFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpzZXRFcGhlbWVyYWxTb3VyY2VOb25jZShFcGhlbWVy
YWxTb3VyY2VOb25jZSYmIG5vbmNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gc3RhdGljIAogICAgIGlmIChidWZmZXIucG9zaXRpb24oKSA9PSBiZWdpbkhh
c2hWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3Rvcjx1aW50
OF90PiBkaWdlc3Q7CiAgICAgU3RyaW5nVmlldyBoYXNoVmFsdWUoYmVnaW5IYXNoVmFsdWUsIGJ1
ZmZlci5wb3NpdGlvbigpIC0gYmVnaW5IYXNoVmFsdWUpOwotICAgIGlmICghYmFzZTY0RGVjb2Rl
KGhhc2hWYWx1ZSwgZGlnZXN0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKSB7Ci0gICAgICAgIGlm
ICghYmFzZTY0VVJMRGVjb2RlKGhhc2hWYWx1ZSwgZGlnZXN0KSkKLSAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0gICAgfQogCi0gICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdCB7ICphbGdvcml0aG0sIFdURk1vdmUoZGlnZXN0KSB9OworICAgIGlmIChhdXRvIGRp
Z2VzdCA9IGJhc2U2NERlY29kZShoYXNoVmFsdWUsIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlk
YXRlUGFkZGluZykpCisgICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Qg
eyAqYWxnb3JpdGhtLCBXVEZNb3ZlKCpkaWdlc3QpIH07CisKKyAgICBpZiAoYXV0byBkaWdlc3Qg
PSBiYXNlNjRVUkxEZWNvZGUoaGFzaFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsKKworICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNo
YXI+JiBidWZmZXIpCkBAIC0xMjQsMTMgKzEyNSwxMyBAQCBPcHRpb25hbDxFbmNvZGVkUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnCiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dD4gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVk
UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0JiBlbmNvZGVkRGlnZXN0KQogewotICAgIFZlY3Rv
cjx1aW50OF90PiBkaWdlc3Q7Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoZW5jb2RlZERpZ2VzdC5k
aWdlc3QsIGRpZ2VzdCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkgewotICAgICAgICBpZiAoIWJh
c2U2NFVSTERlY29kZShlbmNvZGVkRGlnZXN0LmRpZ2VzdCwgZGlnZXN0KSkKLSAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfQorICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2
NERlY29kZShlbmNvZGVkRGlnZXN0LmRpZ2VzdCwgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRh
dGVQYWRkaW5nKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7
IGVuY29kZWREaWdlc3QuYWxnb3JpdGhtLCBXVEZNb3ZlKCpkaWdlc3QpIH07CisKKyAgICBpZiAo
YXV0byBkaWdlc3QgPSBiYXNlNjRVUkxEZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdlc3QpKQorICAg
ICAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERpZ2VzdC5h
bGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsKIAotICAgIHJldHVybiBSZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3QgeyBlbmNvZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZShkaWdlc3Qp
IH07CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogc3RhdGljIFBBTDo6Q3J5cHRvRGln
ZXN0OjpBbGdvcml0aG0gdG9DcnlwdG9EaWdlc3RBbGdvcml0aG0oUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0OjpBbGdvcml0aG0gYWxnb3JpdGhtKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hp
dmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsOSArMTY3LDcgQEAgUmVmPFNoYXJlZEJ1ZmZl
cj4gTUhUTUxBcmNoaXZlOjpnZW5lcmF0ZQogCiAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IHJl
c291cmNlcykgewogICAgICAgICBzdHJpbmdCdWlsZGVyLmNsZWFyKCk7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGVuZE9mUmVzb3VyY2VCb3VuZGFyeSk7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCJDb250ZW50LVR5cGU6ICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChyZXNvdXJjZS5taW1lVHlwZSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGVu
ZE9mUmVzb3VyY2VCb3VuZGFyeSwgIkNvbnRlbnQtVHlwZTogIiwgcmVzb3VyY2UubWltZVR5cGUp
OwogCiAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRFbmNvZGluZyA9IG51bGxwdHI7CiAgICAg
ICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShy
ZXNvdXJjZS5taW1lVHlwZSkgfHwgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFn
ZU1JTUVUeXBlKHJlc291cmNlLm1pbWVUeXBlKSkKQEAgLTE3NywyNyArMTc1LDIyIEBAIFJlZjxT
aGFyZWRCdWZmZXI+IE1IVE1MQXJjaGl2ZTo6Z2VuZXJhdGUKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgY29udGVudEVuY29kaW5nID0gYmFzZTY0OwogCi0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCJcclxuQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGNvbnRlbnRFbmNvZGluZyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCJcclxuQ29udGVudC1Mb2NhdGlvbjogIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHJlc291cmNlLnVybC5zdHJpbmcoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJcclxuXHJcbiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRl
bnQtVHJhbnNmZXItRW5jb2Rpbmc6ICIsIGNvbnRlbnRFbmNvZGluZywgIlxyXG5Db250ZW50LUxv
Y2F0aW9uOiAiLCByZXNvdXJjZS51cmwuc3RyaW5nKCksICJcclxuXHJcbiIpOwogCiAgICAgICAg
IGFzY2lpU3RyaW5nID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKICAgICAgICAg
bWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlTdHJpbmcuZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgo
KSk7CiAKICAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkgd2Ugd291bGQgZW5jb2RlIHRoZSBjb250
ZW50IGFzIGEgc3RyZWFtIHdpdGhvdXQgaGF2aW5nIHRvIGZldGNoIGl0IGFsbC4KLSAgICAgICAg
Y29uc3QgY2hhciogZGF0YSA9IHJlc291cmNlLmRhdGEtPmRhdGEoKTsKKyAgICAgICAgYXV0byog
ZGF0YSA9IHJlc291cmNlLmRhdGEtPmRhdGFBc1VJbnQ4UHRyKCk7CiAgICAgICAgIHNpemVfdCBk
YXRhTGVuZ3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgpOwotICAgICAgICBWZWN0b3I8Y2hhcj4g
ZW5jb2RlZERhdGE7CiAgICAgICAgIGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgcXVvdGVk
UHJpbnRhYmxlKSkgewotICAgICAgICAgICAgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGRhdGEsIGRh
dGFMZW5ndGgsIGVuY29kZWREYXRhKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBx
dW90ZWRQcmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCk7CiAgICAgICAgICAgICBtaHRt
bERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUoKSk7CiAg
ICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZCgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoY29udGVudEVuY29kaW5nLCBiYXNlNjQpKTsK
ICAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0cnVlIGJl
bG93IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGluZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJlcXVpcmVz
IENSTEZzLgotICAgICAgICAgICAgYmFzZTY0RW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgsIGVuY29k
ZWREYXRhKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGUoZGF0
YSwgZGF0YUxlbmd0aCk7CiAgICAgICAgICAgICBjb25zdCBzaXplX3QgbWF4aW11bUxpbmVMZW5n
dGggPSA3NjsKICAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IDA7CiAgICAgICAgICAgICBzaXpl
X3QgZW5jb2RlZERhdGFMZW5ndGggPSBlbmNvZGVkRGF0YS5zaXplKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9N
SFRNTFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MiwxNiArMTkyLDE5IEBAIFJlZlB0
cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCi0gICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IGRhdGE7CiAgICAgc3dpdGNoIChtaW1lSGVhZGVyLmNvbnRlbnRUcmFuc2ZlckVuY29kaW5nKCkp
IHsKLSAgICBjYXNlIE1JTUVIZWFkZXI6OkJhc2U2NDoKLSAgICAgICAgaWYgKCFiYXNlNjREZWNv
ZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCksIGRhdGEpKSB7CisgICAgY2FzZSBN
SU1FSGVhZGVyOjpCYXNlNjQ6IHsKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERl
Y29kZShjb250ZW50LT5kYXRhQXNVSW50OFB0cigpICAgLCBjb250ZW50LT5zaXplKCkpOworICAg
ICAgICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkludmFsaWQg
YmFzZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgfQorICAgICAgICBkYXRhID0gV1RGTW92ZSgqZGVjb2RlZERhdGEpOwog
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpRdW90ZWRQcmludGFi
bGU6Ci0gICAgICAgIHF1b3RlZFByaW50YWJsZURlY29kZShjb250ZW50LT5kYXRhKCksIGNvbnRl
bnQtPnNpemUoKSwgZGF0YSk7CisgICAgICAgIGRhdGEgPSBxdW90ZWRQcmludGFibGVEZWNvZGUo
Y29udGVudC0+ZGF0YUFzVUludDhQdHIoKSwgY29udGVudC0+c2l6ZSgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpTZXZlbkJpdDoKICAgICBjYXNlIE1JTUVIZWFkZXI6
OkJpbmFyeToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jb2NvYS9Qcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
b2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2Nv
YS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEwIEBAIGJvb2wgUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUEKIHsKICNpZiBIQVZFKFJTQV9CU1NBKQogICAgIHsKLSAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcnZlclB1YmxpY0tleURhdGE7Ci0gICAgICAgIGlmICgh
YmFzZTY0VVJMRGVjb2RlKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCwgc2VydmVyUHVibGljS2V5
RGF0YSkpCisgICAgICAgIGF1dG8gc2VydmVyUHVibGljS2V5RGF0YSA9IGJhc2U2NFVSTERlY29k
ZShzZXJ2ZXJQdWJsaWNLZXlCYXNlNjRVUkwpOworICAgICAgICBpZiAoIXNlcnZlclB1YmxpY0tl
eURhdGEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gc2VydmVyUHVi
bGljS2V5ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzZXJ2ZXJQdWJs
aWNLZXlEYXRhLmRhdGEoKSBsZW5ndGg6c2VydmVyUHVibGljS2V5RGF0YS5zaXplKCldKTsKKyAg
ICAgICAgYXV0byBzZXJ2ZXJQdWJsaWNLZXkgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0
V2l0aEJ5dGVzOnNlcnZlclB1YmxpY0tleURhdGEtPmRhdGEoKSBsZW5ndGg6c2VydmVyUHVibGlj
S2V5RGF0YS0+c2l6ZSgpXSk7CiAKICAgICAgICAgLy8gRklYTUUoMjIyMDE4KTogQ2hlY2sgZXJy
b3IuCiAgICAgICAgIG1fc291cmNlVW5saW5rYWJsZVRva2VuLmJsaW5kZXIgPSBhZG9wdE5TKFtQ
QUw6OmFsbG9jUlNBQlNTQVRva2VuQmxpbmRlckluc3RhbmNlKCkgaW5pdFdpdGhQdWJsaWNLZXk6
c2VydmVyUHVibGljS2V5LmdldCgpIGVycm9yOm51bGxwdHJdKTsKQEAgLTUwLDcgKzUwLDcgQEAg
Ym9vbCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogICAgIGlmICghbV9zb3Vy
Y2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBtX3NvdXJjZVVubGlua2FibGVUb2tlbi52YWx1ZUJhc2U2NFVSTCA9IFdURjo6YmFzZTY0
VVJMRW5jb2RlKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4gYmxpbmRlZE1l
c3NhZ2VdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuIGJsaW5k
ZWRNZXNzYWdlXS5sZW5ndGgpOworICAgIG1fc291cmNlVW5saW5rYWJsZVRva2VuLnZhbHVlQmFz
ZTY0VVJMID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKFttX3NvdXJjZVVubGlua2FibGVU
b2tlbi53YWl0aW5nVG9rZW4gYmxpbmRlZE1lc3NhZ2VdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmth
YmxlVG9rZW4ud2FpdGluZ1Rva2VuIGJsaW5kZWRNZXNzYWdlXS5sZW5ndGgpKTsKICAgICByZXR1
cm4gdHJ1ZTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlcnZlclB1YmxpY0tleUJhc2U2NFVS
TCk7CkBAIC02NSwxMCArNjUsMTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2Fs
Y3VsYXRlQQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB7Ci0gICAgICAgIFZlY3Rvcjx1
aW50OF90PiBzZXJ2ZXJSZXNwb25zZURhdGE7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2Rl
KHNlcnZlclJlc3BvbnNlQmFzZTY0VVJMLCBzZXJ2ZXJSZXNwb25zZURhdGEpKQorICAgICAgICBh
dXRvIHNlcnZlclJlc3BvbnNlRGF0YSA9IGJhc2U2NFVSTERlY29kZShzZXJ2ZXJSZXNwb25zZUJh
c2U2NFVSTCk7CisgICAgICAgIGlmICghc2VydmVyUmVzcG9uc2VEYXRhKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvIHNlcnZlclJlc3BvbnNlID0gYWRvcHROUyhbW05T
RGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzZXJ2ZXJSZXNwb25zZURhdGEuZGF0YSgpIGxlbmd0
aDpzZXJ2ZXJSZXNwb25zZURhdGEuc2l6ZSgpXSk7CisgICAgICAgIGF1dG8gc2VydmVyUmVzcG9u
c2UgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZlclJlc3BvbnNl
RGF0YS0+ZGF0YSgpIGxlbmd0aDpzZXJ2ZXJSZXNwb25zZURhdGEtPnNpemUoKV0pOwogCiAgICAg
ICAgIC8vIEZJWE1FKDIyMjAxOCk6IENoZWNrIGVycm9yLgogICAgICAgICBtX3NvdXJjZVVubGlu
a2FibGVUb2tlbi5yZWFkeVRva2VuID0gW21fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdU
b2tlbiBhY3RpdmF0ZVRva2VuV2l0aFNlcnZlclJlc3BvbnNlOnNlcnZlclJlc3BvbnNlLmdldCgp
IGVycm9yOm51bGxwdHJdOwpAQCAtNzcsOSArNzcsOSBAQCBib29sIFByaXZhdGVDbGlja01lYXN1
cmVtZW50OjpjYWxjdWxhdGVBCiAgICAgfQogCiAgICAgU291cmNlU2VjcmV0VG9rZW4gdG9rZW47
Ci0gICAgdG9rZW4udG9rZW5CYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3Vy
Y2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmJ5dGVzLCBbbV9zb3Vy
Y2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmxlbmd0aCk7Ci0gICAg
dG9rZW4ua2V5SURCYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxp
bmthYmxlVG9rZW4ucmVhZHlUb2tlbiBrZXlJZF0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVU
b2tlbi5yZWFkeVRva2VuIGtleUlkXS5sZW5ndGgpOwotICAgIHRva2VuLnNpZ25hdHVyZUJhc2U2
NFVSTCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFk
eVRva2VuIHNpZ25hdHVyZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRv
a2VuIHNpZ25hdHVyZV0ubGVuZ3RoKTsKKyAgICB0b2tlbi50b2tlbkJhc2U2NFVSTCA9IG1ha2VT
dHJpbmcoYmFzZTY0VVJMRW5jb2RlZChbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tl
biB0b2tlbkNvbnRlbnRdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tl
biB0b2tlbkNvbnRlbnRdLmxlbmd0aCkpOworICAgIHRva2VuLmtleUlEQmFzZTY0VVJMID0gbWFr
ZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRv
a2VuIGtleUlkXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5
SWRdLmxlbmd0aCkpOworICAgIHRva2VuLnNpZ25hdHVyZUJhc2U2NFVSTCA9IG1ha2VTdHJpbmco
YmFzZTY0VVJMRW5jb2RlZChbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBzaWdu
YXR1cmVdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1
cmVdLmxlbmd0aCkpOwogCiAgICAgbV9zb3VyY2VTZWNyZXRUb2tlbiA9IFdURk1vdmUodG9rZW4p
OwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0
aWVzLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRV
dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEV4Y2VwdGlvbk9y
PFN0cmluZz4gQmFzZTY0VXRpbGl0aWVzOjpidG8KICAgICBpZiAoIXN0cmluZ1RvRW5jb2RlLmlz
QWxsTGF0aW4xKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVy
RXJyb3IgfTsKIAotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoc3RyaW5nVG9FbmNvZGUubGF0aW4x
KCkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoc3RyaW5nVG9FbmNvZGUu
bGF0aW4xKCkpKTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0
b2IoY29uc3QgU3RyaW5nJiBlbmNvZGVkU3RyaW5nKQpAQCAtNDYsMTEgKzQ2LDExIEBAIEV4Y2Vw
dGlvbk9yPFN0cmluZz4gQmFzZTY0VXRpbGl0aWVzOjphdG8KICAgICBpZiAoZW5jb2RlZFN0cmlu
Zy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgVmVjdG9yPGNoYXI+
IG91dDsKLSAgICBpZiAoIWJhc2U2NERlY29kZShlbmNvZGVkU3RyaW5nLCBvdXQsIEJhc2U2NFZh
bGlkYXRlUGFkZGluZyB8IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzIHwgQmFzZTY0RGlz
Y2FyZFZlcnRpY2FsVGFiKSkKKyAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGVu
Y29kZWRTdHJpbmcsIHsgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nLCBCYXNl
NjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcywgQmFzZTY0RGVjb2RlT3B0
aW9uczo6RGlzY2FyZFZlcnRpY2FsVGFiIH0pOworICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAotICAgIHJl
dHVybiBTdHJpbmcob3V0LmRhdGEoKSwgb3V0LnNpemUoKSk7CisgICAgcmV0dXJuIFN0cmluZyhk
ZWNvZGVkRGF0YS0+ZGF0YSgpLCBkZWNvZGVkRGF0YS0+c2l6ZSgpKTsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQ4LDkgKzE4NDgsOCBAQCB2b2lkIFBhZ2U6
OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkCiAgICAgaWYgKHVybC5wcm90b2NvbElzRGF0
YSgpICYmIHVybC5zdHJpbmcoKS5zdGFydHNXaXRoKCJkYXRhOnRleHQvY3NzO2NoYXJzZXQ9dXRm
LTg7YmFzZTY0LCIpKSB7CiAgICAgICAgIG1fZGlkTG9hZFVzZXJTdHlsZVNoZWV0ID0gdHJ1ZTsK
IAotICAgICAgICBWZWN0b3I8Y2hhcj4gc3R5bGVTaGVldEFzVVRGODsKLSAgICAgICAgaWYgKGJh
c2U2NERlY29kZShkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnN0cmluZygpLnN1YnN0cmlu
ZygzNSkpLCBzdHlsZVNoZWV0QXNVVEY4LCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykp
Ci0gICAgICAgICAgICBtX3VzZXJTdHlsZVNoZWV0ID0gU3RyaW5nOjpmcm9tVVRGOChzdHlsZVNo
ZWV0QXNVVEY4LmRhdGEoKSwgc3R5bGVTaGVldEFzVVRGOC5zaXplKCkpOworICAgICAgICBpZiAo
YXV0byBzdHlsZVNoZWV0QXNVVEY4ID0gYmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyh1cmwuc3RyaW5nKCkuc3Vic3RyaW5nKDM1KSksIEJhc2U2NERlY29kZU9wdGlvbnM6Okln
bm9yZVNwYWNlc0FuZE5ld0xpbmVzKSkKKyAgICAgICAgICAgIG1fdXNlclN0eWxlU2hlZXQgPSBT
dHJpbmc6OmZyb21VVEY4KHN0eWxlU2hlZXRBc1VURjgtPmRhdGEoKSwgc3R5bGVTaGVldEFzVVRG
OC0+c2l6ZSgpKTsKICAgICB9CiAKICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBk
b2N1bWVudCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNiArMTg4LDExIEBAIHZvaWQgU2hhcmVkQnVm
ZmVyOjphcHBlbmQoY29uc3QgY2hhciogZGEKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3Rl
bnQoKSk7CiB9CiAKK3ZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oZGF0YSksIGxlbmd0aCk7Cit9CisKIHZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoVmVj
dG9yPGNoYXI+JiYgZGF0YSkKIHsKICAgICBBU1NFUlQoIW1faGFzQmVlbkNvbWJpbmVkSW50b09u
ZVNlZ21lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBh
cHBlbmQoY29uc3QgU2hhcmVkQnVmZmVyJik7CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhcios
IHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgdWludDhfdCosIHNpemVfdCk7CiAgICAg
dm9pZCBhcHBlbmQoVmVjdG9yPGNoYXI+JiYpOwogCiAgICAgdm9pZCBjbGVhcigpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMiArNzksMTUgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3Rv
cjxSZWZQdHI8S2V5SGFuZGxlPgogICAgICAgICAgICAgaWYgKCFrZXlWYWx1ZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIEtleUlEVHlwZSBrZXlJRERhdGE7
Ci0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SGFuZGxlVmFsdWVEYXRhOwotICAgICAg
ICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlJRCwgeyBrZXlJRERhdGEgfSkgfHwg
IVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleVZhbHVlLCB7IGtleUhhbmRsZVZhbHVlRGF0YSB9KSkK
KyAgICAgICAgICAgIGF1dG8ga2V5SUREYXRhID0gYmFzZTY0VVJMRGVjb2RlKGtleUlEKTsKKyAg
ICAgICAgICAgIGlmICgha2V5SUREYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgICAgICBhdXRvIGtleUhhbmRsZVZhbHVlRGF0YSA9IGJhc2U2NFVS
TERlY29kZShrZXlWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIWtleUhhbmRsZVZhbHVlRGF0YSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGRlY29kZWRLZXlz
LmFwcGVuZChLZXlIYW5kbGU6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6
VXNhYmxlLCBXVEZNb3ZlKGtleUlERGF0YSksIFdURk1vdmUoa2V5SGFuZGxlVmFsdWVEYXRhKSkp
OworICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtleUhhbmRsZTo6Y3JlYXRlKENETUlu
c3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFdURk1vdmUoKmtleUlERGF0YSksIFdU
Rk1vdmUoKmtleUhhbmRsZVZhbHVlRGF0YSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9KTsKICAgICBpZiAoIXZhbGlkRm9ybWF0KQpAQCAtMjE1LDggKzIxOCw3IEBAIHN0
YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5aWRzRnIKICAgICAvLyAia2lkcyIKICAg
ICAvLyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRo
ZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhl
IGtleSBJRCB2YWx1ZS4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5SWRDb3VudDsg
aSsrKSB7Ci0gICAgICAgIFN0cmluZyBrZXlJZCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKCZkYXRh
W2luZGV4XSwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpOwotICAgICAgICBrZXlJZHNBcnJh
eS0+cHVzaFN0cmluZyhrZXlJZCk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKG1h
a2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNp
emVJbkJ5dGVzKSkpOwogICAgICAgICBpbmRleCArPSBDbGVhcktleTo6S2V5SURTaXplSW5CeXRl
czsKICAgICB9CiAKQEAgLTI0Myw4ICsyNDUsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4g
ZXh0cmFjdEtleUlkRnJvCiAgICAgLy8gVGhlIGZvcm1hdCBpcyBhIEpTT04gb2JqZWN0IGNvbnRh
aW5pbmcgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFy
cmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVy
bCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZh
bHVlLgotICAgIFN0cmluZyBrZXlJZCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKGluaXREYXRhLmRh
dGEoKSwgaW5pdERhdGEuc2l6ZSgpKTsKLSAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhrZXlJ
ZCk7CisgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcobWFrZVN0cmluZyhiYXNlNjRVUkxFbmNv
ZGVkKGluaXREYXRhLmRhdGEoKSwgaW5pdERhdGEuc2l6ZSgpKSkpOwogCiAgICAgb2JqZWN0LT5z
ZXRBcnJheSgia2lkcyIsIFdURk1vdmUoa2V5SWRzQXJyYXkpKTsKICAgICBDU3RyaW5nIGpzb25E
YXRhID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkBAIC01ODcsNyArNTg4LDcgQEAg
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAgICAgYXV0
byBhcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYga2V5IDogbV9rZXlTdG9yZSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChrZXktPmlk
KCkuc2l6ZSgpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Ci0gICAg
ICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNvZGUoa2V5LT5p
ZCgpLmRhdGEoKSwga2V5LT5pZCgpLnNpemUoKSkpOworICAgICAgICAgICAgICAgIGFycmF5LT5w
dXNoU3RyaW5nKG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChrZXktPmlkKCkuZGF0YSgpLCBr
ZXktPmlkKCkuc2l6ZSgpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcm9vdE9iamVj
dC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGFycmF5KSk7CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0
cmVhbWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAkocmV2aXNpb24gMjc3NTY5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZh
aXJQbGF5U3RyZWFtaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDExICsxMTMsMTEgQEAg
c3RhdGljIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4gZXh0cmFjdAogICAgICAgICBpZiAoIWtl
eUlEKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgVmVjdG9yPGNoYXI+IHNpbmZE
YXRhOwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0RGVjb2RlKGtleUlELCB7IHNpbmZEYXRhIH0s
IFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpKQorICAgICAgICBhdXRvIHNpbmZE
YXRhID0gYmFzZTY0RGVjb2RlKGtleUlELCBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFj
ZXNBbmROZXdMaW5lcyk7CisgICAgICAgIGlmICghc2luZkRhdGEpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBzaW5mcy51bmNoZWNrZWRBcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVh
dGUoV1RGTW92ZShzaW5mRGF0YSkpKTsKKyAgICAgICAgc2luZnMudW5jaGVja2VkQXBwZW5kKFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKnNpbmZEYXRhKSkpOwogICAgIH0KIAogICAgIHJl
dHVybiBzaW5mczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNzE1LDcgKzcxNSw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1p
bmcKICAgICAgICAgaWRlbnRpZmllciA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdp
dGhEYXRhOmluaXREYXRhLT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBlbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ10pOwogI2lmIEhBVkUoRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19JTklUREFUQSkK
ICAgICBlbHNlIGlmIChpbml0RGF0YVR5cGUgPT0gSW5pdERhdGFSZWdpc3RyeTo6Y2VuY05hbWUo
KSkgewotICAgICAgICBTdHJpbmcgcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZShpbml0RGF0YS0+
ZGF0YSgpLCBpbml0RGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgYXV0byBwc3NoU3RyaW5nID0gbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKGluaXREYXRhLT5kYXRhKCksIGluaXREYXRhLT5zaXplKCkp
KTsKICAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0
YVdpdGhKU09OT2JqZWN0OkB7IEAicHNzaCI6IChOU1N0cmluZyopcHNzaFN0cmluZyB9IG9wdGlv
bnM6TlNKU09OV3JpdGluZ1ByZXR0eVByaW50ZWQgZXJyb3I6bmlsXTsKICAgICB9CiAjZW5kaWYK
QEAgLTg1MCwxMSArODUwLDExIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJl
YW1pbmcKICAgICAgICAgICAgIGlmICgha2V5SURTdHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SURWZWN0b3I7Ci0g
ICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShrZXlJRFN0cmluZywga2V5SURWZWN0b3IpKQor
ICAgICAgICAgICAgYXV0byBrZXlJRFZlY3RvciA9IGJhc2U2NERlY29kZShrZXlJRFN0cmluZyk7
CisgICAgICAgICAgICBpZiAoa2V5SURWZWN0b3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgICAgICBhdXRvIGtleUlEID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RG
TW92ZShrZXlJRFZlY3RvcikpOworICAgICAgICAgICAgYXV0byBrZXlJRCA9IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKFdURk1vdmUoKmtleUlEVmVjdG9yKSk7CiAgICAgICAgICAgICBhdXRvIGZvdW5k
SW5kZXggPSBtX2N1cnJlbnRSZXF1ZXN0LnZhbHVlKCkucmVxdWVzdHMuZmluZE1hdGNoaW5nKFsm
XSAoYXV0byYgcmVxdWVzdCkgewogICAgICAgICAgICAgICAgIGF1dG8ga2V5SURzID0ga2V5SURz
Rm9yUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4ga2V5SURz
LmZpbmRNYXRjaGluZyhbJl0oY29uc3QgUmVmPFNoYXJlZEJ1ZmZlcj4mIGlkKSB7CkBAIC04ODUs
MTAgKzg4NSwxMCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAg
ICAgICAgICAgICAgICAgYXV0byBwYXlsb2FkU3RyaW5nID0gcGF5bG9hZEZpbmRSZXN1bHRzLT52
YWx1ZS0+YXNTdHJpbmcoKTsKICAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWRTdHJpbmcpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8
dWludDhfdD4gcGF5bG9hZFZlY3RvcjsKLSAgICAgICAgICAgICAgICBpZiAoIWJhc2U2NERlY29k
ZShwYXlsb2FkU3RyaW5nLCBwYXlsb2FkVmVjdG9yKSkKKyAgICAgICAgICAgICAgICBhdXRvIHBh
eWxvYWRWZWN0b3IgPSBiYXNlNjREZWNvZGUocGF5bG9hZFN0cmluZyk7CisgICAgICAgICAgICAg
ICAgaWYgKCFwYXlsb2FkVmVjdG9yKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgYXV0byBwYXlsb2FkRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KFdURk1vdmUocGF5bG9hZFZlY3RvcikpOworICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZERh
dGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpwYXlsb2FkVmVjdG9yKSk7CiAgICAg
ICAgICAgICAgICAgW3JlcXVlc3QgcHJvY2Vzc0NvbnRlbnRLZXlSZXNwb25zZTpbUEFMOjpnZXRB
VkNvbnRlbnRLZXlSZXNwb25zZUNsYXNzKCkgY29udGVudEtleVJlc3BvbnNlV2l0aEZhaXJQbGF5
U3RyZWFtaW5nS2V5UmVzcG9uc2VEYXRhOnBheWxvYWREYXRhLT5jcmVhdGVOU0RhdGEoKS5nZXQo
KV1dOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTk1LDgg
KzExOTUsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAg
ICAgICAgICBhdXRvIGVudHJ5ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAg
IGF1dG8mIGtleUlEID0gcmVxdWVzdERhdGEuZmlyc3Q7CiAgICAgICAgICAgICBhdXRvJiBwYXls
b2FkID0gcmVxdWVzdERhdGEuc2Vjb25kOwotICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygi
a2V5SUQiLCBiYXNlNjRFbmNvZGUoa2V5SUQtPmRhdGEoKSwga2V5SUQtPnNpemUoKSkpOwotICAg
ICAgICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZShwYXlsb2Fk
LmdldCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAgICAgZW50cnkt
PnNldFN0cmluZygia2V5SUQiLCBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoa2V5SUQtPmRhdGEo
KSwga2V5SUQtPnNpemUoKSkpKTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoInBheWxv
YWQiLCBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocGF5bG9hZC5nZXQoKS5ieXRlcywgcGF5bG9h
ZC5nZXQoKS5sZW5ndGgpKSk7CiAgICAgICAgICAgICByZXF1ZXN0SlNPTi0+cHVzaE9iamVjdChX
VEZNb3ZlKGVudHJ5KSk7CiAgICAgICAgIH0KICAgICAgICAgYXV0byByZXF1ZXN0QnVmZmVyID0g
dXRmOEJ1ZmZlcihyZXF1ZXN0SlNPTi0+dG9KU09OU3RyaW5nKCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMTAgKzEzMCw3IEBAIFN0cmluZyBJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6dG9EYXRhVVIKICAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuICJkYXRhOiwiOwogCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0g
ICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCks
IGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0
LCIgKyBiYXNlNjREYXRhOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBl
LCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJ
bWFnZS5zaXplKCkpKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTAgKzE3NCw3IEBAIHN0YXRp
YyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QKIAogU3RyaW5nIGRhdGFVUkwoQ0ZE
YXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgVmVjdG9yPGNoYXI+
IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENG
RGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiAr
IG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgcmV0dXJuIG1ha2VTdHJp
bmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoQ0ZEYXRhR2V0
Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpKSk7CiB9CiAKIFN0cmluZyBkYXRh
VVJMKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcg
KzEwMCw3IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVlRm9udE5hbWUoKQogICAgIEdVSUQg
Zm9udFV1aWQ7CiAgICAgQ29DcmVhdGVHdWlkKCZmb250VXVpZCk7CiAKLSAgICBTdHJpbmcgZm9u
dE5hbWUgPSBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlkKSwg
c2l6ZW9mKGZvbnRVdWlkKSk7CisgICAgYXV0byBmb250TmFtZSA9IG1ha2VTdHJpbmcoYmFzZTY0
RW5jb2RlZChyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1
aWQpKSk7CiAgICAgQVNTRVJUKGZvbnROYW1lLmxlbmd0aCgpIDwgTEZfRkFDRVNJWkUpOwogICAg
IHJldHVybiBmb250TmFtZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnROYW1lKCkK
ICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQpOwogCi0gICAg
U3RyaW5nIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZm
b250VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBtYWtlU3Ry
aW5nKGJhc2U2NEVuY29kZWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlkKSwgc2l6
ZW9mKGZvbnRVdWlkKSkpOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VT
SVpFKTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTIxOSw3ICsyMTksNyBAQCBzdGF0aWMgU3RyaW5nIHNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nCiAgICAgaWYgKFNlY0FzbjFFbmNvZGVJdGVtKGNvZGVyLCAmc2lnbmVk
UHVibGljS2V5QW5kQ2hhbGxlbmdlLCBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VUZW1wbGF0
ZSwgJmVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UpICE9IG5vRXJyKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29kZWRTaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZS5MZW5ndGgpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoZW5j
b2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGlj
S2V5QW5kQ2hhbGxlbmdlLkxlbmd0aCkpOwogfQogCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lz
dHJ5SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVnaXN0cnlJbXBsLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgUmVmPFJlc291cmNlSGFuZGxlPiBjcmVhdGVCbG9iUmVz
CiAgICAgcmV0dXJuIGJsb2JSZWdpc3RyeSgpLmJsb2JSZWdpc3RyeUltcGwoKS0+Y3JlYXRlUmVz
b3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50KTsKIH0KIAotc3RhdGljIHZvaWQgbG9hZEJsb2JS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3N0
YXRpYyB2b2lkIGxvYWRCbG9iUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0
KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0
b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgYXV0byogYmxvYkRhdGEgPSBibG9iUmVnaXN0cnko
KS5ibG9iUmVnaXN0cnlJbXBsKCktPmdldEJsb2JEYXRhRnJvbVVSTChyZXF1ZXN0LnVybCgpKTsK
ICAgICBCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoYmxvYkRh
dGEsIHJlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JS
ZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgbmFtZXNw
YWNlIHsKIAogY2xhc3MgQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIgOiBwdWJsaWMgUmVz
b3VyY2VIYW5kbGVDbGllbnQgewogcHVibGljOgotICAgIEJsb2JSZXNvdXJjZVN5bmNocm9ub3Vz
TG9hZGVyKFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+Jik7
CisgICAgQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYsIFJlc291
cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mKTsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZVJl
c3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJlc3BvbnNlJiYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJikgZmluYWw7CiAgICAgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFu
ZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIGZpbmFsOwpAQCAtODUsMTAgKzg1LDEwIEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgUmVzb3VyY2VFcnJvciYgbV9lcnJvcjsKICAgICBSZXNvdXJj
ZVJlc3BvbnNlJiBtX3Jlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFyPiYgbV9kYXRhOworICAgIFZl
Y3Rvcjx1aW50OF90PiYgbV9kYXRhOwogfTsKIAotQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2Fk
ZXI6OkJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQorQmxvYlJlc291
cmNlU3luY2hyb25vdXNMb2FkZXI6OkJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291
cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhKQogICAgIDogbV9lcnJvcihlcnJvcikKICAgICAsIG1fcmVzcG9uc2UocmVzcG9u
c2UpCiAgICAgLCBtX2RhdGEoZGF0YSkKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIEJsb2JSZXNv
dXJjZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRSCiAKICAgICAvLyBSZWFkIGFsbCB0aGUgZGF0YS4K
ICAgICBtX2RhdGEucmVzaXplKHN0YXRpY19jYXN0PHNpemVfdD4ocmVzcG9uc2UuZXhwZWN0ZWRD
b250ZW50TGVuZ3RoKCkpKTsKLSAgICBzdGF0aWNfY2FzdDxCbG9iUmVzb3VyY2VIYW5kbGUqPiho
YW5kbGUpLT5yZWFkU3luYyhtX2RhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fZGF0YS5z
aXplKCkpKTsKKyAgICBzdGF0aWNfY2FzdDxCbG9iUmVzb3VyY2VIYW5kbGUqPihoYW5kbGUpLT5y
ZWFkU3luYyhyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2RhdGEuZGF0YSgpKSwgc3RhdGljX2Nh
c3Q8aW50PihtX2RhdGEuc2l6ZSgpKSk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIApA
QCAtMTQxLDcgKzE0MSw3IEBAIFJlZjxCbG9iUmVzb3VyY2VIYW5kbGU+IEJsb2JSZXNvdXJjZUhh
bmQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCbG9iUmVzb3VyY2VIYW5kbGUoYmxvYkRhdGEs
IHJlcXVlc3QsIGNsaWVudCwgdHJ1ZSkpOwogfQogCi12b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSogYmxvYkRhdGEsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRs
ZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSogYmxvYkRhdGEsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgaWYgKCFlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgImdldCIpKSB7
CiAgICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJvcih3ZWJLaXRCbG9iUmVzb3VyY2VEb21haW4s
IHN0YXRpY19jYXN0PGludD4oRXJyb3I6Ok1ldGhvZE5vdEFsbG93ZWQpLCByZXNwb25zZS51cmwo
KSwgIlJlcXVlc3QgbWV0aG9kIG11c3QgYmUgR0VUIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNl
SGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgQmxvYlJlc291
cmNlSGFuZGxlIGZpbmFsIDogcHVibGljIAogcHVibGljOgogICAgIHN0YXRpYyBSZWY8QmxvYlJl
c291cmNlSGFuZGxlPiBjcmVhdGVBc3luYyhCbG9iRGF0YSosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIFJlc291cmNlSGFuZGxlQ2xpZW50Kik7CiAKLSAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KEJsb2JEYXRhKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3Vy
Y2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIHN0
YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQmxvYkRhdGEqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1
aW50OF90PiYgZGF0YSk7CiAKICAgICB2b2lkIHN0YXJ0KCk7CiAgICAgaW50IHJlYWRTeW5jKGNo
YXIqLCBpbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50
aWFsQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9DcmVkZW50aWFsQmFzZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ3JlZGVudGlhbEJhc2UuaCIKIAogI2luY2x1ZGUgIkNy
ZWRlbnRpYWwuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC05NCw0ICs5NSwxMCBAQCBib29sIENyZWRlbnRpYWxCYXNlOjpjb21wYXJl
KGNvbnN0IENyZWRlCiAgICAgcmV0dXJuIENyZWRlbnRpYWw6OnBsYXRmb3JtQ29tcGFyZShhLCBi
KTsKIH0KIAorU3RyaW5nIENyZWRlbnRpYWxCYXNlOjpzZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRo
b3JpemF0aW9uSGVhZGVyKCkgY29uc3QKK3sKKyAgICBhdXRvIGNyZWRlbnRpYWxTdHJpbmdEYXRh
ID0gbWFrZVN0cmluZyhtX3VzZXIsICc6JywgbV9wYXNzd29yZCkudXRmOCgpOworICAgIHJldHVy
biBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRpYWxTdHJpbmdEYXRh
KSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVu
dGlhbEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0NyZWRlbnRpYWxCYXNlLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyAr
MzksNiBAQCBlbnVtIENyZWRlbnRpYWxQZXJzaXN0ZW5jZSB7CiB9OwogCiBjbGFzcyBDcmVkZW50
aWFsQmFzZSB7Ci0KIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRW1wdHkoKSBj
b25zdDsKICAgICAKQEAgLTUyLDYgKzUxLDggQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIGJvb2wgY29tcGFyZShjb25zdCBDcmVkZW50aWFsJiwgY29uc3QgQ3JlZGVudGlh
bCYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1
dGhvcml6YXRpb25IZWFkZXIoKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIFdFQkNPUkVfRVhQ
T1JUIENyZWRlbnRpYWxCYXNlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ3JlZGVudGlhbEJhc2Uo
Y29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkLCBDcmVkZW50aWFsUGVy
c2lzdGVuY2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJM
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9EYXRhVVJMRGVjb2Rlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDgsMzYgKzE0OCwyNiBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPERlY29kZVRhc2s+IGNyZWF0
CiAgICAgKTsKIH0KIAotc3RhdGljIGJvb2wgZGVjb2RlQmFzZTY0KERlY29kZVRhc2smIHRhc2ss
IE1vZGUgbW9kZSkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlY29kZUJhc2U2
NChjb25zdCBEZWNvZGVUYXNrJiB0YXNrLCBNb2RlIG1vZGUpCiB7Ci0gICAgVmVjdG9yPGNoYXI+
IGJ1ZmZlcjsKLSAgICBpZiAobW9kZSA9PSBNb2RlOjpGb3JnaXZpbmdCYXNlNjQpIHsKLSAgICAg
ICAgYXV0byB1bmVzY2FwZWRTdHJpbmcgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModGFzay5l
bmNvZGVkRGF0YS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpOwotICAgICAgICBpZiAoIWJhc2U2
NERlY29kZSh1bmVzY2FwZWRTdHJpbmcsIGJ1ZmZlciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nIHwg
QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgfCBCYXNlNjREaXNjYXJkVmVydGljYWxUYWIp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7CisgICAgc3dpdGNoICht
b2RlKSB7CisgICAgY2FzZSBNb2RlOjpGb3JnaXZpbmdCYXNlNjQ6CisgICAgICAgIHJldHVybiBi
YXNlNjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRhc2suZW5jb2RlZERhdGEpLCB7
IEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZywgQmFzZTY0RGVjb2RlT3B0aW9u
czo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMsIEJhc2U2NERlY29kZU9wdGlvbnM6OkRpc2NhcmRW
ZXJ0aWNhbFRhYn0pOworCisgICAgY2FzZSBNb2RlOjpMZWdhY3k6CiAgICAgICAgIC8vIEZpcnN0
IHRyeSBiYXNlNjR1cmwuCi0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKHRhc2suZW5jb2Rl
ZERhdGEudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBidWZmZXIpKSB7Ci0gICAgICAgICAgICAv
LyBEaWRuJ3Qgd29yaywgdHJ5IHVuZXNjYXBpbmcgYW5kIGRlY29kaW5nIGFzIGJhc2U2NC4KLSAg
ICAgICAgICAgIGF1dG8gdW5lc2NhcGVkU3RyaW5nID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2Vz
KHRhc2suZW5jb2RlZERhdGEudG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKLSAgICAgICAgICAg
IGlmICghYmFzZTY0RGVjb2RlKHVuZXNjYXBlZFN0cmluZywgYnVmZmVyLCBCYXNlNjRJZ25vcmVT
cGFjZXNBbmROZXdMaW5lcyB8IEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIGRlY29kZWRE
YXRhID0gYmFzZTY0VVJMRGVjb2RlKHRhc2suZW5jb2RlZERhdGEpKQorICAgICAgICAgICAgcmV0
dXJuIGRlY29kZWREYXRhOworICAgICAgICAvLyBEaWRuJ3Qgd29yaywgdHJ5IHVuZXNjYXBpbmcg
YW5kIGRlY29kaW5nIGFzIGJhc2U2NC4KKyAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZShkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXModGFzay5lbmNvZGVkRGF0YSksIHsgQmFzZTY0RGVjb2RlT3B0
aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMsIEJhc2U2NERlY29kZU9wdGlvbnM6OkRpc2Nh
cmRWZXJ0aWNhbFRhYiB9KTsKICAgICB9Ci0gICAgYnVmZmVyLnNocmlua1RvRml0KCk7Ci0gICAg
dGFzay5yZXN1bHQuZGF0YSA9IFdURk1vdmUoYnVmZmVyKTsKLQotICAgIHJldHVybiB0cnVlOwog
fQogCi1zdGF0aWMgdm9pZCBkZWNvZGVFc2NhcGVkKERlY29kZVRhc2smIHRhc2spCitzdGF0aWMg
VmVjdG9yPHVpbnQ4X3Q+IGRlY29kZUVzY2FwZWQoY29uc3QgRGVjb2RlVGFzayYgdGFzaykKIHsK
ICAgICBUZXh0RW5jb2RpbmcgZW5jb2RpbmdGcm9tQ2hhcnNldCh0YXNrLnJlc3VsdC5jaGFyc2V0
KTsKICAgICBhdXRvJiBlbmNvZGluZyA9IGVuY29kaW5nRnJvbUNoYXJzZXQuaXNWYWxpZCgpID8g
ZW5jb2RpbmdGcm9tQ2hhcnNldCA6IFVURjhFbmNvZGluZygpOwotICAgIGF1dG8gYnVmZmVyID0g
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKHRhc2suZW5jb2RlZERhdGEsIGVuY29kaW5n
KTsKLQotICAgIGJ1ZmZlci5zaHJpbmtUb0ZpdCgpOwotICAgIHRhc2sucmVzdWx0LmRhdGEgPSBX
VEZNb3ZlKGJ1ZmZlcik7CisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0
YSh0YXNrLmVuY29kZWREYXRhLCBlbmNvZGluZyk7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxSZXN1
bHQ+IGRlY29kZVN5bmNocm9ub3VzbHkoRGVjb2RlVGFzayYgdGFzaywgTW9kZSBtb2RlKQpAQCAt
MTg2LDExICsxNzYsMTQgQEAgc3RhdGljIE9wdGlvbmFsPFJlc3VsdD4gZGVjb2RlU3luY2hyb25v
dQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKHRhc2suaXNCYXNlNjQp
IHsKLSAgICAgICAgaWYgKCFkZWNvZGVCYXNlNjQodGFzaywgbW9kZSkpCisgICAgICAgIGF1dG8g
ZGVjb2RlZERhdGEgPSBkZWNvZGVCYXNlNjQodGFzaywgbW9kZSk7CisgICAgICAgIGlmICghZGVj
b2RlZERhdGEpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB0YXNr
LnJlc3VsdC5kYXRhID0gV1RGTW92ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxzZQotICAgICAg
ICBkZWNvZGVFc2NhcGVkKHRhc2spOworICAgICAgICB0YXNrLnJlc3VsdC5kYXRhID0gZGVjb2Rl
RXNjYXBlZCh0YXNrKTsKIAorICAgIHRhc2sucmVzdWx0LmRhdGEuc2hyaW5rVG9GaXQoKTsKICAg
ICByZXR1cm4gV1RGTW92ZSh0YXNrLnJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmgJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBzdHJ1Y3QgUmVzdWx0IHsKICAgICBTdHJp
bmcgbWltZVR5cGU7CiAgICAgU3RyaW5nIGNoYXJzZXQ7CiAgICAgU3RyaW5nIGNvbnRlbnRUeXBl
OwotICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogfTsK
IAogdXNpbmcgRGVjb2RlQ29tcGxldGlvbkhhbmRsZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQgKE9w
dGlvbmFsPFJlc3VsdD4pPjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmZhaWx1cmVUaW1lckZp
cmVkKCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBz
dG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291cmNlSGFuZGxl
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBpZiAoYXV0byBj
b25zdHJ1Y3RvciA9IGJ1aWx0aW5SZXNvdXJjZUhhbmRsZVN5bmNocm9ub3VzTG9hZGVyTWFwKCku
Z2V0KHJlcXVlc3QudXJsKCkucHJvdG9jb2woKS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpKSB7
CiAgICAgICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxz
UG9saWN5LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIGNsYXNzIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVn
YXRlOwogY2xhc3MgUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvdXJjZUhh
bmRsZT4sIHB1YmxpYyBBdXRoZW50aWNhdGlvbkNsaWVudCB7CiBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlKE5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqLCBi
b29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZENv
bnRlbnRFbmNvZGluZ1NuaWZmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBsb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJj
ZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJy
b3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKICAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5SZXNvdXJjZUhhbmRsZSgpOwogCiAjaWYgUExBVEZPUk0oQ09D
T0EpIHx8IFVTRShDRlVSTENPTk5FQ1RJT04pCkBAIC0xOTMsNyArMTkzLDcgQEAgcHVibGljOgog
ICAgIHR5cGVkZWYgUmVmPFJlc291cmNlSGFuZGxlPiAoKkJ1aWx0aW5Db25zdHJ1Y3RvcikoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50
KTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJ1aWx0aW5Db25zdHJ1Y3Rvcihjb25zdCBBdG9t
U3RyaW5nJiBwcm90b2NvbCwgQnVpbHRpbkNvbnN0cnVjdG9yKTsKIAotICAgIHR5cGVkZWYgdm9p
ZCAoKkJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlcikoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYs
IFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIHR5cGVkZWYgdm9p
ZCAoKkJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlcikoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYs
IFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogICAgIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyQnVpbHRpblN5bmNocm9ub3VzTG9hZGVyKGNvbnN0IEF0b21TdHJpbmcmIHBy
b3RvY29sLCBCdWlsdGluU3luY2hyb25vdXNMb2FkZXIpOwogCiBwcm90ZWN0ZWQ6CkBAIC0yMTMs
NyArMjEzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjaGVkdWxlRmFpbHVyZShGYWlsdXJlVHlw
ZSk7CiAKICAgICBib29sIHN0YXJ0KCk7Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1Mb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJl
c3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291
cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgdm9pZCByZWZBdXRo
ZW50aWNhdGlvbkNsaWVudCgpIG92ZXJyaWRlIHsgcmVmKCk7IH0KICAgICB2b2lkIGRlcmVmQXV0
aGVudGljYXRpb25DbGllbnQoKSBvdmVycmlkZSB7IGRlcmVmKCk7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2Fk
ZXJDbGllbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMsNyArNzMsNyBAQCB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlCiAK
IHZvaWQgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFu
ZGxlKiwgY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBpbnQgLyplbmNvZGVkRGF0
YUxlbmd0aCovKQogewotICAgIG1fZGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKKyAgICBtX2Rh
dGEuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgp
OwogfQogCiB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRGaW5pc2hMb2FkaW5nKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9h
ZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBzZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKGJvb2wgYWxsb3cpIHsgbV9hbGxvd1N0
b3JlZENyZWRlbnRpYWxzID0gYWxsb3c7IH0KICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KLSAgICBWZWN0b3I8Y2hhcj4m
IG11dGFibGVEYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgVmVjdG9yPHVpbnQ4X3Q+JiBt
dXRhYmxlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvcjsgfQogICAgIFN5bmNocm9ub3VzTG9hZGVy
TWVzc2FnZVF1ZXVlJiBtZXNzYWdlUXVldWUoKSB7IHJldHVybiBtX21lc3NhZ2VRdWV1ZS5nZXQo
KTsgfQogCkBAIC03NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fYWxsb3dTdG9y
ZWRDcmVkZW50aWFscyB7IGZhbHNlIH07CiAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNl
OwotICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fZGF0YTsK
ICAgICBSZXNvdXJjZUVycm9yIG1fZXJyb3I7CiAgICAgUmVmPFN5bmNocm9ub3VzTG9hZGVyTWVz
c2FnZVF1ZXVlPiBtX21lc3NhZ2VRdWV1ZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
UmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDkgKzg1LDcgQEAg
c3RhdGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZEYXRhUgogCiBzdGF0aWMgdm9pZCBh
cHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcihSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7Ci0gICAgU3RyaW5nIGF1dGhlbnRpY2F0aW9u
SGVhZGVyID0gIkJhc2ljICIgKyBiYXNlNjRFbmNvZGUoU3RyaW5nKGNyZWRlbnRpYWwudXNlcigp
ICsgIjoiICsgY3JlZGVudGlhbC5wYXNzd29yZCgpKS51dGY4KCkpOwotCi0gICAgcmVxdWVzdC5z
ZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGF1dGhlbnRp
Y2F0aW9uSGVhZGVyKTsKKyAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVy
TmFtZTo6QXV0aG9yaXphdGlvbiwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRo
b3JpemF0aW9uSGVhZGVyKCkpOwogfQogCiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbCgpCkBAIC01MjQsNyArNTIyLDcgQEAgc3RhdGljIHZvaWQgZW1wdHlQ
ZXJmb3JtKHZvaWQqKQogewogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZv
cm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBMT0coTmV0d29y
aywgIlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHk6JXMg
c3N0b3JlZENyZWRlbnRpYWxzUG9saWN5OiV1IiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kp
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNyArMzY4LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6
cmVzdGFydFJlcXVlc3RXaXRoQwogICAgIGQtPm1fY3VybFJlcXVlc3QtPnN0YXJ0KCk7CiB9CiAK
LXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4m
IGRhdGEpCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ks
IFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9y
PHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNT
RVJUKCFyZXF1ZXN0LmlzRW1wdHkoKSk7CkBAIC01NjIsOSArNTYyLDkgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6aGFuZGxlRGF0YVVSTCgpCiAKICAgICAgICAgLy8gZGlkUmVjZWl2ZVJlc3BvbnNl
IG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRlZC4KICAgICAgICAgaWYgKGNsaWVu
dCgpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYgKGJh
c2U2NERlY29kZShkYXRhLCBvdXQsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSAmJiBv
dXQuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZl
cih0aGlzLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpKSwgb3Jp
Z2luYWxTaXplKTsKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUo
ZGF0YSwgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpOworICAg
ICAgICAgICAgaWYgKGRlY29kZWREYXRhICYmIGRlY29kZWREYXRhLT5zaXplKCkgPiAwKQorICAg
ICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKHRoaXMsIFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGRlY29kZWREYXRhLT5kYXRhKCksIGRlY29kZWREYXRhLT5zaXplKCkpLCBvcmln
aW5hbFNpemUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgVGV4dEVuY29kaW5n
IGVuY29kaW5nKGNoYXJzZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0JKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxl
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw5ICs2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAKIHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKLSAg
ICBTdHJpbmcgYXV0aGVudGljYXRpb25IZWFkZXIgPSAiQmFzaWMgIiArIGJhc2U2NEVuY29kZShT
dHJpbmcoY3JlZGVudGlhbC51c2VyKCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3b3JkKCkpLnV0
ZjgoKSk7Ci0KLSAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6
QXV0aG9yaXphdGlvbiwgYXV0aGVudGljYXRpb25IZWFkZXIpOworICAgIHJlcXVlc3Quc2V0SFRU
UEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uLCBjcmVkZW50aWFsLnNl
cmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSk7CiB9CiAKIHN0YXRpYyBO
U09wZXJhdGlvblF1ZXVlICpvcGVyYXRpb25RdWV1ZUZvckFzeW5jQ2xpZW50cygpCkBAIC0zNTIs
NyArMzUwLDcgQEAgQ0ZTdHJpbmdSZWYgUmVzb3VyY2VIYW5kbGU6OnN5bmNocm9ub3VzTAogICAg
IHJldHVybiBDRlNUUigiV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUiKTsKIH0K
IAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNv
dXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFy
PiYgZGF0YSkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hy
b25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0
b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgTE9HKE5ldHdvcmssICJSZXNvdXJjZUhhbmRsZTo6
cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5OiVAIHN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5OiV1IiwgcmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90
VXBkYXRlSFRUUEJvZHkpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3kpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlSGFuZGxlU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6cGxhdGZvcm1TZXREZWZlcnNMbwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
Ci12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50
aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hh
cj4mKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PHVpbnQ4X3Q+JikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0
d29ya1Nlc3Npb24uY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgICAgICBkaWdlc3QtPmFkZEJ5dGVzKGNlcnRp
ZmljYXRlRGF0YS0+ZGF0YSwgY2VydGlmaWNhdGVEYXRhLT5sZW4pOwogCiAgICAgICAgIGF1dG8g
aGFzaCA9IGRpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKLSAgICAgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihoYXNoLmRhdGEoKSksIGhhc2guc2l6ZSgp
KTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihoYXNoLmRhdGEoKSksIGhhc2guc2l6ZSgpKSk7CiAgICAgfQogCiAg
ICAgSGFzaFNldDxTdHJpbmc+IG1fY2VydGlmaWNhdGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNl
cXVlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTEgKzE1NCwxMSBAQCBTdHJpbmcgZGVj
b2RlRXNjYXBlU2VxdWVuY2VzKFN0cmluZ1ZpZXcgCiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmlu
ZygpOwogfQogCi1pbmxpbmUgVmVjdG9yPGNoYXI+IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0Fz
RGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK2lu
bGluZSBWZWN0b3I8dWludDhfdD4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKFN0cmlu
Z1ZpZXcgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewogICAgIEFTU0VS
VChlbmNvZGluZy5pc1ZhbGlkKCkpOwogCi0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBW
ZWN0b3I8dWludDhfdD4gcmVzdWx0OwogICAgIHNpemVfdCBkZWNvZGVkUG9zaXRpb24gPSAwOwog
ICAgIHNpemVfdCBzZWFyY2hQb3NpdGlvbiA9IDA7CiAgICAgd2hpbGUgKHRydWUpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVk
UHJpbnRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBzdGF0aWMgY29u
c3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gCiAKIHN0YXRpYyBjb25zdCBjaGFyIGNybGZM
aW5lRW5kaW5nW10gPSAiXHJcbiI7CiAKLXN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5kaW5n
QXRJbmRleChjb25zdCBjaGFyKiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoLCBzaXplX3QgaW5k
ZXgpCitzdGF0aWMgc2l6ZV90IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoY29uc3QgdWludDhf
dCogaW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCwgc2l6ZV90IGluZGV4KQogewogICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgaW5wdXRMZW5ndGgpOwogICAgIGlm
IChpbnB1dFtpbmRleF0gPT0gJ1xuJykKQEAgLTU1LDE5ICs1NSwxOSBAQCBzdGF0aWMgc2l6ZV90
IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgcXVv
dGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFZlY3RvcjxjaGFyPiYg
b3V0KQorVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8
dWludDhfdD4mIGlucHV0KQogewotICAgIHF1b3RlZFByaW50YWJsZUVuY29kZShpbi5kYXRhKCks
IGluLnNpemUoKSwgb3V0KTsKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGlucHV0
LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVFbmNvZGUo
Y29uc3QgY2hhciogaW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCwgVmVjdG9yPGNoYXI+JiBvdXQp
CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqIGlu
cHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCiB7Ci0gICAgb3V0LmNsZWFyKCk7Ci0gICAgb3V0LnJl
c2VydmVDYXBhY2l0eShpbnB1dExlbmd0aCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dDsKKyAg
ICBvdXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnB1dExlbmd0aCk7CiAgICAgc2l6ZV90IGN1
cnJlbnRMaW5lTGVuZ3RoID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlucHV0TGVu
Z3RoOyArK2kpIHsKICAgICAgICAgYm9vbCBpc0xhc3RDaGFyYWN0ZXIgPSAoaSA9PSBpbnB1dExl
bmd0aCAtIDEpOwotICAgICAgICBjaGFyIGN1cnJlbnRDaGFyYWN0ZXIgPSBpbnB1dFtpXTsKKyAg
ICAgICAgdWludDhfdCBjdXJyZW50Q2hhcmFjdGVyID0gaW5wdXRbaV07CiAgICAgICAgIGJvb2wg
cmVxdWlyZXNFbmNvZGluZyA9IGZhbHNlOwogICAgICAgICAvLyBBbGwgbm9uLXByaW50YWJsZSBB
U0NJSSBjaGFyYWN0ZXJzIGFuZCA9IHJlcXVpcmUgZW5jb2RpbmcuCiAgICAgICAgIGlmICgoY3Vy
cmVudENoYXJhY3RlciA8ICcgJyB8fCBjdXJyZW50Q2hhcmFjdGVyID4gJ34nIHx8IGN1cnJlbnRD
aGFyYWN0ZXIgPT0gJz0nKSAmJiBjdXJyZW50Q2hhcmFjdGVyICE9ICdcdCcpCkBAIC0xMTIsMTgg
KzExMiwyMCBAQCB2b2lkIHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBjaGFyKiBpCiAgICAg
ICAgICAgICBjdXJyZW50TGluZUxlbmd0aCsrOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0
dXJuIG91dDsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPGNo
YXI+JiBpbiwgVmVjdG9yPGNoYXI+JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRh
YmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCiB7Ci0gICAgcXVvdGVkUHJp
bnRhYmxlRGVjb2RlKGluLmRhdGEoKSwgaW4uc2l6ZSgpLCBvdXQpOworICAgIHJldHVybiBxdW90
ZWRQcmludGFibGVEZWNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwogfQogCi12b2lk
IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0
aCwgVmVjdG9yPGNoYXI+JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVj
b2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQogewotICAgIG91dC5j
bGVhcigpOworICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgaWYgKCFkYXRhTGVuZ3RoKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBvdXQ7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkgewogICAgICAgICBjaGFyIGN1cnJlbnRDaGFyYWN0
ZXIgPSBkYXRhW2ldOwpAQCAtMTQ5LDggKzE1MSw5IEBAIHZvaWQgcXVvdGVkUHJpbnRhYmxlRGVj
b2RlKGNvbnN0IGNoYXIqIGQKICAgICAgICAgICAgIG91dC5hcHBlbmQobG93ZXJDaGFyYWN0ZXIp
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgb3V0LmFwcGVuZChz
dGF0aWNfY2FzdDxjaGFyPih0b0FTQ0lJSGV4VmFsdWUodXBwZXJDaGFyYWN0ZXIsIGxvd2VyQ2hh
cmFjdGVyKSkpOworICAgICAgICBvdXQuYXBwZW5kKHRvQVNDSUlIZXhWYWx1ZSh1cHBlckNoYXJh
Y3RlciwgbG93ZXJDaGFyYWN0ZXIpKTsKICAgICB9CisgICAgcmV0dXJuIG91dDsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5o
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3Rl
ZFByaW50YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxOSArMjgsMTYgQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotI2lmbmRlZiBRdW90ZWRQcmludGFibGVfaAotI2RlZmluZSBRdW90ZWRQ
cmludGFibGVfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZl
Y3RvcjxjaGFyPiYsIFZlY3RvcjxjaGFyPiYpOwotdm9pZCBxdW90ZWRQcmludGFibGVFbmNvZGUo
Y29uc3QgY2hhciosIHNpemVfdCwgVmVjdG9yPGNoYXI+Jik7CitWZWN0b3I8dWludDhfdD4gcXVv
dGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworVmVjdG9yPHVpbnQ4
X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIAotdm9p
ZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgVmVjdG9yPGNoYXI+
Jik7Ci12b2lkIHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90LCBWZWN0
b3I8Y2hhcj4mKTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+Jik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2Rl
KGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBRdW90ZWRQcmludGFibGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFs
bGVuZ2VTdHJpbmcKICAgICAgICAgaWYgKCFDcnlwdFNpZ25BbmRFbmNvZGVDZXJ0aWZpY2F0ZSho
Q29udGV4dCwgQVRfS0VZRVhDSEFOR0UsIFg1MDlfQVNOX0VOQ09ESU5HLCBYNTA5X0tFWUdFTl9S
RVFVRVNUX1RPX0JFX1NJR05FRCwgJnJlcXVlc3RJbmZvLCAmc2lnbkFsZ28sIDAsIHJlaW50ZXJw
cmV0X2Nhc3Q8TFBCWVRFPihiaW5hcnkuZGF0YSgpKSwgJmR3RW5jb2RlZExlbmd0aCkpCiAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICBrZXlTdHJpbmcgPSBiYXNlNjRFbmNvZGUoYmluYXJ5
KTsKKyAgICAgICAga2V5U3RyaW5nID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGJpbmFyeSkp
OwogICAgIH0gd2hpbGUoMCk7CiAKICAgICBpZiAocFB1YkluZm8pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3Jh
Z2UuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZp
Y2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2
LDcgQEAgU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgUwogICAgIGF1dG8g
aW5wdXRVdGY4ID0gaW5wdXQudXRmOCgpOwogICAgIGNyeXB0by0+YWRkQnl0ZXMoaW5wdXRVdGY4
LmRhdGEoKSwgaW5wdXRVdGY4Lmxlbmd0aCgpKTsKICAgICBhdXRvIGhhc2ggPSBjcnlwdG8tPmNv
bXB1dGVIYXNoKCk7Ci0gICAgcmV0dXJuIFdURjo6YmFzZTY0VVJMRW5jb2RlKGhhc2guZGF0YSgp
LCBoYXNoLnNpemUoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZCho
YXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpKTsKIH0KIAogU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6
c2hhMkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
Nzc3MTUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDk5IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUgbW9k
ZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoK
KyAgICAgICAgKFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJV
UkxTY2hlbWVIYW5kbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2su
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVUYXNrOjpkaWRDb21wbGV0ZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJM
b2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5Lmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6bG9hZFN5bmNocm9ub3VzbHkpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuaDoKKyAgICAgICAg
VXBkYXRlIHRvIHVzZSB1aW50OF90KiBkYXRhIGJ1ZmZlcnMgbW9yZSBjb25zaXN0ZW50bHkgZm9y
IHN5bmNocm9ub3VzIGxvYWRzLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jl
c291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6c2VuZFJlcGx5VG9TeW5jaHJvbm91
c1JlcXVlc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIHVpbnQ4X3QqIGRhdGEgYnVmZmVycyBt
b3JlIGNvbnNpc3RlbnRseSBmb3Igc3luY2hyb25vdXMgbG9hZHMuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcmVDb252ZXJzaW9uUmVx
dWVzdCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZSAvIG1ha2VT
dHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgpKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjphcHBseUJhc2lj
QXV0aG9yaXphdGlvbkhlYWRlcik6CisgICAgICAgIFVzZSBuZXcgc2VyaWFsaXphdGlvbkZvckJh
c2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGhlbHBlci4KKworICAgICAgICAqIFNoYXJlZC9BUEkv
QVBJRGF0YS5oOgorICAgICAgICAoQVBJOjpEYXRhOjpjcmVhdGUpOgorICAgICAgICAoQVBJOjpE
YXRhOjpmYXN0RnJlZUJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgQWRkIG5ldyBjcmVhdGUgZnVu
Y3Rpb24gdGhhdCB0YWtlcyBvd25lcnNoaXAgb2YgYSBWZWN0b3IncyBidWZmZXIgcmF0aGVyCisg
ICAgICAgIHRoYW4gY29weWluZyBpdC4gUmVwbGFjZSB1c2Ugb2Ygc3RhdGljIGZ1bmN0aW9ucyB3
aXRoIGlubGluZSBsYW1iZGFzIGZvcgorICAgICAgICBmcmVlLWZ1bmN0aW9ucy4KKworICAgICAg
ICAqIFNoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbToKKyAgICAgICAgKFdlYktpdDo6
c2FuZGJveEZpbGVQYXRoKToKKyAgICAgICAgVXNlIG1ha2VTdHJpbmcgYW5kIG5ldyBiYXNlNjRV
UkxFbmNvZGVkKCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhl
bnRpY2F0aW9uUGFuZWwubW06CisgICAgICAgIChwcm9kdWNlQ2xpZW50RGF0YUpzb24pOgorICAg
ICAgICBVc2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgpKS4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3Bw
OgorICAgICAgICAoV2ViS2l0OjpiYXNlNjRFbmNvZGVkUE5HRGF0YSk6CisgICAgICAgIFVzZSBu
ZXcgbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogVUlQcm9jZXNzL0Nv
Y29hL05hdmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRl
OjpOYXZpZ2F0aW9uQ2xpZW50Ojp3ZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICBVc2UgbmV3
IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKSBhbmQgbmV3IGFkb3B0aW5nIEFQSTo6RGF0YTo6
Y3JlYXRlIGZ1bmN0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1Jl
bW90ZUluc3BlY3RvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKToKKyAgICAgICAgVXNlIG5ldyBtYWtlU3RyaW5n
KGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9S
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAgVXNlIG5ldyBiYXNl
NjREZWNvZGUoKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3Bl
Y3RvclVJUHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5
OjpwbGF0Zm9ybVNhdmUpOgorICAgICAgICBVc2UgbmV3IGJhc2U2NERlY29kZSgpLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1h
Yy5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1TYXZlKToKKyAgICAgICAgVXNlIG5ldyBiYXNlNjREZWNvZGUoKS4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6CisgICAgICAgIFVz
ZSBuZXcgYmFzZTY0RGVjb2RlKCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJ
bnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcyk6CisgICAgICAgIFVzZSBuZXcgbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbToKKyAgICAgICAgKFdlYktpdDo6
TG9jYWxBdXRoZW50aWNhdG9ySW50ZXJuYWw6OnByb2R1Y2VIYXNoU2V0KToKKyAgICAgICAgKFdl
YktpdDo6TG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgVXNlIG5ldyBt
YWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok1vY2tIaWRDb25uZWN0aW9uOjpmZWVkUmVwb3J0cyk6CisgICAgICAgIFVzZSBuZXcgYmFzZTY0
RGVjb2RlKCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9N
b2NrTG9jYWxDb25uZWN0aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpNb2NrTG9jYWxDb25uZWN0
aW9uOjpmaWx0ZXJSZXNwb25zZXMgY29uc3QpOgorICAgICAgICBVc2UgbmV3IG1ha2VTdHJpbmco
YmFzZTY0RW5jb2RlZCgpKS4KKwogMjAyMS0wNS0xOCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9y
dG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBhbGxvd3NDb250ZW50SmF2YVNjcmlwdCBBUEkgbm90
IGFwcGxpZWQgZnJvbSBkZWZhdWx0V2VicGFnZVByZWZlcmVuY2VzCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2Vz
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIG1lc3NhZ2VzIC0+
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKIAogICAgIFNj
aGVkdWxlUmVzb3VyY2VMb2FkKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMg
cmVzb3VyY2VMb2FkUGFyYW1ldGVycykKLSAgICBQZXJmb3JtU3luY2hyb25vdXNMb2FkKFdlYktp
dDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykg
LT4gKFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiBkYXRhKSBTeW5jaHJvbm91cworICAgIFBlcmZvcm1T
eW5jaHJvbm91c0xvYWQoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNv
dXJjZUxvYWRQYXJhbWV0ZXJzKSAtPiAoV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5
bmNocm9ub3VzCiAgICAgVGVzdFByb2Nlc3NJbmNvbWluZ1N5bmNNZXNzYWdlc1doZW5XYWl0aW5n
Rm9yU3luY1JlcGx5KFdlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQpIC0+IChi
b29sIGhhbmRsZWQpIFN5bmNocm9ub3VzCiAgICAgTG9hZFBpbmcoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKQogICAgIFJlbW92ZUxv
YWRJZGVudGlmaWVyKHVpbnQ2NF90IHJlc291cmNlTG9hZElkZW50aWZpZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcg
QEAgc3RhdGljIHZvaWQgc2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlcwogICAgIEFTU0VSVChk
YXRhLmRlbGF5ZWRSZXBseSk7CiAgICAgQVNTRVJUKCFkYXRhLnJlc3BvbnNlLmlzTnVsbCgpIHx8
ICFkYXRhLmVycm9yLmlzTnVsbCgpKTsKIAotICAgIFZlY3RvcjxjaGFyPiByZXNwb25zZUJ1ZmZl
cjsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzcG9uc2VCdWZmZXI7CiAgICAgaWYgKGJ1ZmZlciAm
JiBidWZmZXItPnNpemUoKSkKICAgICAgICAgcmVzcG9uc2VCdWZmZXIuYXBwZW5kKGJ1ZmZlci0+
ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdl
ci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1
LDE0ICszMTUsMTUgQEAgdm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcgog
ICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBwdWJsaWNLZXlEYXRhOwotICAgICAgICBXVEY6OmJhc2U2NFVSTERlY29k
ZShwdWJsaWNLZXlCYXNlNjRVUkwsIHB1YmxpY0tleURhdGEpOworICAgICAgICBhdXRvIHB1Ymxp
Y0tleURhdGEgPSBiYXNlNjRVUkxEZWNvZGUocHVibGljS2V5QmFzZTY0VVJMKTsKKyAgICAgICAg
aWYgKCFwdWJsaWNLZXlEYXRhKQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8g
Y3J5cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxn
b3JpdGhtOjpTSEFfMjU2KTsKLSAgICAgICAgY3J5cHRvLT5hZGRCeXRlcyhwdWJsaWNLZXlEYXRh
LmRhdGEoKSwgcHVibGljS2V5RGF0YS5zaXplKCkpOworICAgICAgICBjcnlwdG8tPmFkZEJ5dGVz
KHB1YmxpY0tleURhdGEtPmRhdGEoKSwgcHVibGljS2V5RGF0YS0+c2l6ZSgpKTsKICAgICAgICAg
YXV0byBwdWJsaWNLZXlEYXRhSGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKIAotICAgICAg
ICBhdXRvIGtleUlEID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUocHVibGljS2V5RGF0YUhhc2guZGF0
YSgpLCBwdWJsaWNLZXlEYXRhSGFzaC5zaXplKCkpOworICAgICAgICBhdXRvIGtleUlEID0gbWFr
ZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKHB1YmxpY0tleURhdGFIYXNoLmRhdGEoKSwgcHVibGlj
S2V5RGF0YUhhc2guc2l6ZSgpKSk7CiAgICAgICAgIGlmIChrZXlJRCAhPSBhdHRyaWJ1dGlvbi5z
b3VyY2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURCYXNlNjRVUkwpCiAgICAgICAgICAgICByZXR1
cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0Rh
dGFUYXNrQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICNpZiBV
U0UoQ1JFREVOVElBTF9TVE9SQUdFX1dJVEhfTkVUV09SS19TRVNTSU9OKQogc3RhdGljIHZvaWQg
YXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogewotICAgIFN0
cmluZyBhdXRoZW50aWNhdGlvbkhlYWRlciA9ICJCYXNpYyAiICsgYmFzZTY0RW5jb2RlKFN0cmlu
ZyhjcmVkZW50aWFsLnVzZXIoKSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKSkudXRmOCgp
KTsKLSAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFt
ZTo6QXV0aG9yaXphdGlvbiwgYXV0aGVudGljYXRpb25IZWFkZXIpOworICAgIHJlcXVlc3Quc2V0
SFRUUEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uLCBj
cmVkZW50aWFsLnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSk7CiB9
CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJRGF0YS5oCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw3ICs2MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtZW1jcHkoY29waWVk
Qnl0ZXMsIGJ5dGVzLCBzaXplKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBjcmVhdGVX
aXRob3V0Q29weWluZyhjb3BpZWRCeXRlcywgc2l6ZSwgZmFzdEZyZWVCeXRlcywgbnVsbHB0cik7
CisgICAgICAgIHJldHVybiBjcmVhdGVXaXRob3V0Q29weWluZyhjb3BpZWRCeXRlcywgc2l6ZSwg
W10gKHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBjb25zdCB2b2lkKikgeworICAgICAgICAgICAgaWYg
KGJ5dGVzKQorICAgICAgICAgICAgICAgIGZhc3RGcmVlKHN0YXRpY19jYXN0PHZvaWQqPihieXRl
cykpOworICAgICAgICB9LCBudWxscHRyKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFJlZjxE
YXRhPiBjcmVhdGUoY29uc3QgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiBidWZmZXIpCkBAIC02OCw2
ICs3MSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLmRhdGEoKSwg
YnVmZmVyLnNpemUoKSk7CiAgICAgfQogCisgICAgc3RhdGljIFJlZjxEYXRhPiBjcmVhdGUoVmVj
dG9yPHVuc2lnbmVkIGNoYXI+JiYgYnVmZmVyKQorICAgIHsKKyAgICAgICAgYXV0byBidWZmZXJT
aXplID0gYnVmZmVyLnNpemUoKTsKKyAgICAgICAgYXV0byBidWZmZXJQb2ludGVyID0gYnVmZmVy
LnJlbGVhc2VCdWZmZXIoKS5sZWFrUHRyKCk7CisgICAgICAgIHJldHVybiBjcmVhdGVXaXRob3V0
Q29weWluZyhidWZmZXJQb2ludGVyLCBidWZmZXJTaXplLCBbXSAodW5zaWduZWQgY2hhciogYnl0
ZXMsIGNvbnN0IHZvaWQqKSB7CisgICAgICAgICAgICBpZiAoYnl0ZXMpCisgICAgICAgICAgICAg
ICAgV1RGOjpWZWN0b3JNYWxsb2M6OmZyZWUoYnl0ZXMpOworICAgICAgICB9LCBudWxscHRyKTsK
KyAgICB9CisKICAgICBzdGF0aWMgUmVmUHRyPERhdGE+IGNyZWF0ZShjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmKTsKICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTk2LDEyICsxMDksNiBA
QCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBmYXN0RnJlZUJ5dGVz
KHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBjb25zdCB2b2lkKikKLSAgICB7Ci0gICAgICAgIGlmIChi
eXRlcykKLSAgICAgICAgICAgIGZhc3RGcmVlKHN0YXRpY19jYXN0PHZvaWQqPihieXRlcykpOwot
ICAgIH0KLQogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1fYnl0ZXMgeyBudWxscHRyIH07CiAg
ICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L0F1eGlsaWFyeVByb2Nlc3NNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTUsMTggKzMxNSwxMyBAQCBzdGF0aWMgU3RyaW5nIHNhbmRib3hEaXJlY3RvcnkoV2Vi
Q29yZTo6CiAKIHN0YXRpYyBTdHJpbmcgc2FuZGJveEZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGly
ZWN0b3J5UGF0aCwgY29uc3QgQ1N0cmluZyYgaGVhZGVyKQogewotICAgIFN0cmluZ0J1aWxkZXIg
c2FuZGJveEZpbGU7Ci0gICAgc2FuZGJveEZpbGUuYXBwZW5kKGRpcmVjdG9yeVBhdGgpOwotICAg
IHNhbmRib3hGaWxlLmFwcGVuZCgiL0NvbXBpbGVkU2FuZGJveCsiKTsKLQogICAgIC8vIE1ha2Ug
dGhlIGZpbGVuYW1lIHNlbWktdW5pcXVlIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgaGVh
ZGVyLgorCiAgICAgYXV0byBjcnlwdG8gPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6
Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwogICAgIGNyeXB0by0+YWRkQnl0ZXMo
aGVhZGVyLmRhdGEoKSwgaGVhZGVyLmxlbmd0aCgpKTsKLSAgICBWZWN0b3I8dWludDhfdD4gaGFz
aCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKLSAgICBTdHJpbmcgcmVhZGFibGVIYXNoID0gV1RG
OjpiYXNlNjRVUkxFbmNvZGUoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBhdXRvIGhh
c2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAgICBzYW5kYm94RmlsZS5hcHBlbmQocmVh
ZGFibGVIYXNoKTsKLSAgICByZXR1cm4gc2FuZGJveEZpbGUudG9TdHJpbmcoKTsKKyAgICByZXR1
cm4gbWFrZVN0cmluZyhkaXJlY3RvcnlQYXRoLCAiL0NvbXBpbGVkU2FuZGJveCsiLCBiYXNlNjRV
UkxFbmNvZGVkKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSkpOwogfQogCiBzdGF0aWMgYm9vbCBl
bnN1cmVTYW5kYm94Q2FjaGVEaXJlY3RvcnkoY29uc3QgU2FuZGJveEluZm8mIGluZm8pCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTUyMCw3ICs1MjAsNyBAQCBtZXNzYWdl
cyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgU3RhcnRVUkxTY2hlbWVUYXNrKHN0cnVjdCBXZWJL
aXQ6OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpCiAgICAgU3RvcFVSTFNjaGVt
ZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVy
KQotICAgIExvYWRTeW5jaHJvbm91c1VSTFNjaGVtZVRhc2soc3RydWN0IFdlYktpdDo6VVJMU2No
ZW1lVGFza1BhcmFtZXRlcnMgcGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UgcmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFZlY3RvcjxjaGFyPiBk
YXRhKSBTeW5jaHJvbm91cworICAgIExvYWRTeW5jaHJvbm91c1VSTFNjaGVtZVRhc2soc3RydWN0
IFdlYktpdDo6VVJMU2NoZW1lVGFza1BhcmFtZXRlcnMgcGFyYW1ldGVycykgLT4gKFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3Is
IFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwogCiAjaWYgRU5BQkxFKERFVklDRV9P
UklFTlRBVElPTikKICAgICBTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBzdHJ1Y3QgV2ViS2l0OjpGcmFt
ZUluZm9EYXRhIGZyYW1lSW5mbywgYm9vbCBtYXlQcm9tcHQpIC0+IChlbnVtOnVpbnQ4X3QgV2Vi
Q29yZTo6RGV2aWNlT3JpZW50YXRpb25Pck1vdGlvblBlcm1pc3Npb25TdGF0ZSBwZXJtaXNzaW9u
U3RhdGUpIEFzeW5jCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVI
YW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2No
ZW1lSGFuZGxlci5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJVUkxTY2hlbWVIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAg
c3RydWN0IFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzOwogY2xhc3MgV2ViUGFnZVByb3h5OwogY2xh
c3MgV2ViUHJvY2Vzc1Byb3h5OwogCi11c2luZyBTeW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0g
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3RvcjxjaGFyPiYpPjsKK3Vz
aW5nIFN5bmNMb2FkQ29tcGxldGlvbkhhbmRsZXIgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik+OwogCiBjbGFzcyBXZWJVUkxTY2hlbWVIYW5k
bGVyIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVVJMU2NoZW1lSGFuZGxlcj4gewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFdlYlVSTFNjaGVtZUhhbmRsZXIpOwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTIsMTAgKzIxMiwxMCBAQCBhdXRvIFdlYlVSTFNjaGVtZVRhc2s6OmRpZENvbXBs
ZXRlKGNvbnN0CiAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwogICAgIAogICAgIGlmIChpc1N5bmMo
KSkgewotICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGRhdGE7CiAgICAgICAgIGlmIChtX3N5bmNEYXRhKSB7CiAgICAgICAgICAgICBkYXRhLnJlc2l6
ZShtX3N5bmNEYXRhLT5zaXplKCkpOwotICAgICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX3N5bmNEYXRhLT5kYXRhKCkpLCBtX3N5bmNE
YXRhLT5zaXplKCkpOworICAgICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX3N5bmNEYXRhLT5kYXRhKCkpLCBtX3N5bmNEYXRhLT5z
aXplKCkpOwogICAgICAgICB9CiAKICAgICAgICAgbV9zeW5jQ29tcGxldGlvbkhhbmRsZXIobV9z
eW5jUmVzcG9uc2UsIGVycm9yLCBXVEZNb3ZlKGRhdGEpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNyArNTEsNyBAQCBzdHJ1Y3QgVVJMU2NoZW1lVGFza1BhcmFtZXRlcnM7CiBjbGFzcyBXZWJV
UkxTY2hlbWVIYW5kbGVyOwogY2xhc3MgV2ViUGFnZVByb3h5OwogCi11c2luZyBTeW5jTG9hZENv
bXBsZXRpb25IYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZl
Y3RvcjxjaGFyPiYpPjsKK3VzaW5nIFN5bmNMb2FkQ29tcGxldGlvbkhhbmRsZXIgPSBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik+OwogCiBjbGFz
cyBXZWJVUkxTY2hlbWVUYXNrIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6
VHlwZTo6VVJMU2NoZW1lVGFzaz4sIHB1YmxpYyBJbnN0YW5jZUNvdW50ZWQ8V2ViVVJMU2NoZW1l
VGFzaz4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlVSTFNjaGVtZVRhc2spOwpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzM4LDEzICsyMzM4LDE0IEBAIHZvaWQgV0tQYWdlU2V0UGFnZU5hdmlnYXRp
b25DbGllbnQoV0tQYWcKICAgICAgICAgICAgIGlmIChtX2NsaWVudC5jb3B5V2ViQ3J5cHRvTWFz
dGVyS2V5KQogICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZih0b0ltcGwobV9jbGllbnQu
Y29weVdlYkNyeXB0b01hc3RlcktleSh0b0FQSSgmcGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50
SW5mbykpKTsKIAotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICNpZiBF
TkFCTEUoV0VCX0NSWVBUTykKLSAgICAgICAgICAgIGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleShtYXN0ZXJLZXkpKQorICAgICAgICAgICAgYXV0byBtYXN0ZXJLZXkgPSBkZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgICAgICAgICBpZiAoIW1hc3RlcktleSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBBUEk6OkRhdGE6
OmNyZWF0ZShXVEZNb3ZlKCptYXN0ZXJLZXkpKTsKKyNlbHNlCisgICAgICAgICAgICByZXR1cm4g
QVBJOjpEYXRhOjpjcmVhdGUobnVsbHB0ciwgMCk7CiAjZW5kaWYKLQotICAgICAgICAgICAgcmV0
dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKG1hc3RlcktleS5kYXRhKCksIG1hc3RlcktleS5zaXplKCkp
OwogICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPEFQSTo6U3RyaW5nPiBzaWduZWRQdWJsaWNL
ZXlBbmRDaGFsbGVuZ2VTdHJpbmcoV2ViUGFnZVByb3h5JiBwYWdlLCB1bnNpZ25lZCBrZXlTaXpl
SW5kZXgsIGNvbnN0IFJlZlB0cjxBUEk6OlN0cmluZz4mIGNoYWxsZW5nZVN0cmluZywgY29uc3Qg
VVJMJiB1cmwpIG92ZXJyaWRlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAg
c3RhdGljIFJldGFpblB0cjxOU0RhdGE+IHByb2R1Y2VDbGllbnREYQogICAgICAgICBbZGljdGlv
bmFyeSBzZXRPYmplY3Q6QCJ3ZWJhdXRobi5nZXQiIGZvcktleTpAInR5cGUiXTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpXVEY6OmJhc2U2NFVSTEVu
Y29kZShjaGFsbGVuZ2UuYnl0ZXMsIGNoYWxsZW5nZS5sZW5ndGgpIGZvcktleTpAImNoYWxsZW5n
ZSJdOworICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDptYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29k
ZWQoY2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2UubGVuZ3RoKSkgZm9yS2V5OkAiY2hhbGxlbmdl
Il07CiAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om9yaWdpbiBmb3JLZXk6QCJvcmlnaW4iXTsK
IAogICAgIHJldHVybiBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6ZGlj
dGlvbmFyeS5nZXQoKSBvcHRpb25zOk5TSlNPTldyaXRpbmdTb3J0ZWRLZXlzIGVycm9yOm5pbF07
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9t
YXRpb25TZXNzaW9uQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2ViQXV0b21hdGlvblNlc3Npb25DYWlyby5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fpcm8v
V2ViQXV0b21hdGlvblNlc3Npb25DYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5
LDcgQEAgc3RhdGljIE9wdGlvbmFsPFN0cmluZz4gYmFzZTY0RW5jb2RlZFBORwogICAgIGlmIChw
bmdEYXRhLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGUocG5nRGF0YSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0
RW5jb2RlZChwbmdEYXRhKSk7CiB9CiAKIE9wdGlvbmFsPFN0cmluZz4gV2ViQXV0b21hdGlvblNl
c3Npb246OnBsYXRmb3JtR2V0QmFzZTY0RW5jb2RlZFBOR0RhdGEoY29uc3QgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmIGhhbmRsZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L05hdmlnYXRpb25TdGF0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTEzNSwxMSArMTEzNSwxMSBAQCBSZWZQdHI8QVBJOjpEYXRhPiBOYXZpZ2F0aW9uU3RhdGU6
Ok5hdmlnCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFtX25hdmlnYXRpb25T
dGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYkNyeXB0b01hc3RlcktleUZvcldl
YlZpZXcpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKLSAgICAgICAgaWYg
KCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkpCisgICAgICAgIGF1dG8g
bWFzdGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgICAgICBpZiAoIW1h
c3RlcktleSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIHJldHVybiBB
UEk6OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0YSgpLCBtYXN0ZXJLZXkuc2l6ZSgpKTsKKyAg
ICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKFdURk1vdmUoKm1hc3RlcktleSkpOwogICAg
IH0KIAogICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1f
bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGll
bnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTQsMTMgKzE5NCwxMSBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0dXBDb25uZWN0
CiB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IGNo
YXIqIGJhY2tlbmRDb21tYW5kcykKIHsKICAgICBpZiAoIWJhY2tlbmRDb21tYW5kcyB8fCAhYmFj
a2VuZENvbW1hbmRzWzBdKSB7Ci0gICAgICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gU3RyaW5n
KCk7CisgICAgICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0geyB9OwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2Rl
KGJhY2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tlbmRDb21tYW5kcyksIGJhc2U2NERhdGEpOwot
ICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwi
ICsgYmFzZTY0RGF0YTsKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1ha2VTdHJpbmcoImRh
dGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKGJhY2tlbmRDb21tYW5k
cywgc3RybGVuKGJhY2tlbmRDb21tYW5kcykpKTsKIH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3JD
bGllbnQ6OmNvbm5lY3Rpb25EaWRDbG9zZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5z
cGVjdG9yVUlQcm94eUd0ay5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzOSwxNiArMTM5LDE4IEBAIHZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm0KICAgICBpZiAoZ3RrX25hdGl2ZV9kaWFsb2dfcnVuKEdUS19O
QVRJVkVfRElBTE9HKGRpYWxvZy5nZXQoKSkpICE9IEdUS19SRVNQT05TRV9BQ0NFUFQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxjaGFyPiBkYXRhVmVjdG9yOworICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhVmVjdG9yOwogICAgIENTdHJpbmcgZGF0YVN0cmluZzsKICAgICBpZiAoYmFz
ZTY0RW5jb2RlZCkgewotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBkYXRhVmVj
dG9yLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICBhdXRvIGRlY29kZWREYXRhID0g
YmFzZTY0RGVjb2RlKGNvbnRlbnQsIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGlu
Zyk7CisgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgZGVjb2RlZERhdGEtPnNocmlu
a1RvRml0KCk7CisgICAgICAgIGRhdGFWZWN0b3IgPSBXVEZNb3ZlKCpkZWNvZGVkRGF0YSk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGRhdGFTdHJpbmcgPSBjb250ZW50LnV0ZjgoKTsKIAotICAgIGNv
bnN0IGNoYXIqIGRhdGEgPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcuZGF0YSgp
IDogZGF0YVZlY3Rvci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZGF0YSA9ICFkYXRhU3RyaW5n
LmlzTnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiByZWludGVycHJldF9jYXN0PGNoYXIqPihk
YXRhVmVjdG9yLmRhdGEoKSk7CiAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAhZGF0YVN0cmluZy5p
c051bGwoKSA/IGRhdGFTdHJpbmcubGVuZ3RoKCkgOiBkYXRhVmVjdG9yLnNpemUoKTsKICAgICBH
UmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGUo
Y2hvb3NlcikpOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2ZpbGVfZ2V0X3BhdGgoZmls
ZS5nZXQoKSkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9X
ZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYklu
c3BlY3RvclVJUHJveHlHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzgsMTYgKzUzOCwxOCBA
QCB2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZShjCiAgICAgaWYgKGd0a19u
YXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAhPSBHVEtf
UkVTUE9OU0VfQUNDRVBUKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8Y2hhcj4gZGF0
YVZlY3RvcjsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcjsKICAgICBDU3RyaW5nIGRh
dGFTdHJpbmc7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgaWYgKCFiYXNlNjRE
ZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAg
ICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50LCBCYXNlNjREZWNvZGVP
cHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBkYXRhVmVjdG9yLnNocmlua1RvRml0KCk7CisgICAg
ICAgIGRlY29kZWREYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgICAgICBkYXRhVmVjdG9yID0gV1RG
TW92ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxzZQogICAgICAgICBkYXRhU3RyaW5nID0gY29u
dGVudC51dGY4KCk7CiAKLSAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxs
KCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOworICAgIGNvbnN0IGNo
YXIqIGRhdGEgPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcuZGF0YSgpIDogcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YVZlY3Rvci5kYXRhKCkpOwogICAgIHNpemVfdCBkYXRh
TGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgpIDogZGF0
YVZlY3Rvci5zaXplKCk7CiAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihndGtf
ZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IHBh
dGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHlNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEwICsxNzQsMTAgQEAgdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybQogICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFw
LnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwogCiAgICAgICAgIGlmIChiYXNlNjRF
bmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYg
KCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkK
KyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudENvcHks
IEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgICAgICBpZiAo
IWRlY29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFp
blB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdp
dGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAgICBhdXRv
IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpkZWNv
ZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0YS0+c2l6ZSgpXSk7CiAgICAgICAgICAg
ICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVS
TCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxM
XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVj
dG9yVUlQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlQ
cm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTA5LDEwICs1MDksMTAgQEAgdm9pZCBXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUoYwogICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0
dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwogCiAgICAgICAgIGlm
IChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAg
ICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQ
YWRkaW5nKSkKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29u
dGVudENvcHksIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAg
ICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxv
Y10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAg
ICAgICBhdXRvIGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhC
eXRlczpkZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0YS0+c2l6ZSgpXSk7CiAg
ICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZ
RVNdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJM
OmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBl
cnJvcjpOVUxMXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2Nr
ZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2Nr
ZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDcgKzIw
Niw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ28KICAgICBpZiAo
IWV2ZW50Lm1lc3NhZ2UgfHwgZXZlbnQubWVzc2FnZS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9q
YXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGUoZXZlbnQubWVzc2FnZS0+dXRmOCgpKSk7
CisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvamF2YXNj
cmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChldmVudC5tZXNzYWdlLT51dGY4KCkpKTsKIH0K
IAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQm
IGV2ZW50KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
Q29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQko
cmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Miwx
MCArODIsOCBAQCBzdGF0aWMgaW5saW5lIEhhc2hTZXQ8U3RyaW5nPiBwcm9kdWNlSGFzCiB7CiAg
ICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKICAgICBmb3IgKGF1dG8mIGNyZWRlbnRpYWxEZXNj
cmlwdG9yIDogY3JlZGVudGlhbERlc2NyaXB0b3JzKSB7Ci0gICAgICAgIGlmIChlbXB0eVRyYW5z
cG9ydHNPckNvbnRhaW4oY3JlZGVudGlhbERlc2NyaXB0b3IudHJhbnNwb3J0cywgQXV0aGVudGlj
YXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpCi0gICAgICAgICAgICAmJiBjcmVkZW50aWFsRGVzY3Jp
cHRvci50eXBlID09IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkKLSAgICAgICAg
ICAgICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFs
SWRMZW5ndGgpCi0gICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZShjcmVkZW50aWFs
RGVzY3JpcHRvci5pZFZlY3Rvci5kYXRhKCksIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9y
LnNpemUoKSkpOworICAgICAgICBpZiAoZW1wdHlUcmFuc3BvcnRzT3JDb250YWluKGNyZWRlbnRp
YWxEZXNjcmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFs
KSAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBl
OjpQdWJsaWNLZXkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpID09IGNy
ZWRlbnRpYWxJZExlbmd0aCkKKyAgICAgICAgICAgIHJlc3VsdC5hZGQobWFrZVN0cmluZyhiYXNl
NjRFbmNvZGVkKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLmRhdGEoKSwgY3JlZGVudGlh
bERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpKSkpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtMjQxLDcgKzIzOSw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3Jl
ZGVudGlhbCgKICAgICAgICAgaWYgKG5vdEZvdW5kICE9IG1fZXhpc3RpbmdDcmVkZW50aWFscy5m
aW5kTWF0Y2hpbmcoWyZleGNsdWRlQ3JlZGVudGlhbElkc10gKGF1dG8mIGNyZWRlbnRpYWwpIHsK
ICAgICAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+cmF3SWQoKTsKICAgICAgICAg
ICAgIEFTU0VSVChyYXdJZCk7Ci0gICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJ
ZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3Ro
KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyht
YWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgo
KSkpKTsKICAgICAgICAgfSkpIHsKICAgICAgICAgICAgIHJlY2VpdmVFeGNlcHRpb24oeyBOb3RB
bGxvd2VkRXJyb3IsICJBdCBsZWFzdCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9m
IHRoZSBleGNsdWRlQ3JlZGVudGlhbHMgbGlzdCBpbiB0aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0
aGVudGljYXRvci4iX3MgfSwgV2ViQXV0aGVudGljYXRpb25TdGF0dXM6OkxBRXhjbHVkZUNyZWRl
bnRpYWxzTWF0Y2hlZCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01MTgsNyArNTE2LDcgQEAg
dm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCiAgICAgICAgIH0KIAogICAg
ICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7Ci0gICAgICAgIGlmIChhbGxv
d0NyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlKHJhd0lkLT5kYXRhKCksIHJhd0lk
LT5ieXRlTGVuZ3RoKCkpKSkKKyAgICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlu
cyhtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5n
dGgoKSkpKSkKICAgICAgICAgICAgIGFzc2VydGlvblJlc3BvbnNlcy51bmNoZWNrZWRBcHBlbmQo
Y3JlZGVudGlhbC5jb3B5UmVmKCkpOwogICAgIH0KICAgICBpZiAoYXNzZXJ0aW9uUmVzcG9uc2Vz
LmlzRW1wdHkoKSkgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjEsMTUgKzI2MSwxMyBAQCB2b2lkIE1vY2tIaWRDb25uZWN0aW9uOjpmZWVkUmVwb3J0cygpCiAg
ICAgICAgIGlmIChzdGFnZXNNYXRjaCgpICYmIG1fY29uZmlndXJhdGlvbi5oaWQtPmVycm9yID09
IE1vY2s6OkhpZEVycm9yOjpVbnN1cHBvcnRlZE9wdGlvbnMgJiYgKG1fcmVxdWlyZVJlc2lkZW50
S2V5IHx8IG1fcmVxdWlyZVVzZXJWZXJpZmljYXRpb24pKQogICAgICAgICAgICAgbWVzc2FnZSA9
IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNv
bW1hbmQ6OmtDYm9yLCB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEN0YXBEZXZpY2VSZXNwb25zZUNv
ZGU6OmtDdGFwMkVyclVuc3VwcG9ydGVkT3B0aW9uKSB9KTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4gcGF5bG9hZDsKICAgICAgICAgICAgIEFTU0VSVCghbV9j
b25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NC5pc0VtcHR5KCkpOwotICAgICAgICAgICAg
YXV0byBzdGF0dXMgPSBiYXNlNjREZWNvZGUobV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJh
c2U2NFswXSwgcGF5bG9hZCk7CisgICAgICAgICAgICBhdXRvIHBheWxvYWQgPSBiYXNlNjREZWNv
ZGUobV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NFswXSk7CiAgICAgICAgICAgICBt
X2NvbmZpZ3VyYXRpb24uaGlkLT5wYXlsb2FkQmFzZTY0LnJlbW92ZSgwKTsKLSAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoc3RhdHVzLCBzdGF0dXMpOwogICAgICAgICAgICAgaWYgKCFtX2NvbmZp
Z3VyYXRpb24uaGlkLT5pc1UyZikKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1l
c3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a0Ni
b3IsIHBheWxvYWQpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6
Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21tYW5kOjprQ2JvciwgV1RG
TW92ZSgqcGF5bG9hZCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lc3Nh
Z2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZp
Y2VDb21tYW5kOjprTXNnLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlk
b0hpZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFu
ZDo6a01zZywgV1RGTW92ZSgqcGF5bG9hZCkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENv
bm5lY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tM
b2NhbENvbm5lY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lk
IE1vY2tMb2NhbENvbm5lY3Rpb246OmZpbHRlclJlc3BvbnNlCiAgICAgZm9yICg7IGl0ciAhPSBy
ZXNwb25zZXMuZW5kKCk7ICsraXRyKSB7CiAgICAgICAgIGF1dG8qIHJhd0lkID0gaXRyLT5nZXQo
KS5yYXdJZCgpOwogICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAgICBhdXRvIHJhd0lkQmFz
ZTY0ID0gYmFzZTY0RW5jb2RlKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpOwor
ICAgICAgICBhdXRvIHJhd0lkQmFzZTY0ID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJhd0lk
LT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKTsKICAgICAgICAgaWYgKHJhd0lkQmFzZTY0
ID09IHByZWZlcnJlZENyZWRlbnRpYWxJZEJhc2U2NCkKICAgICAgICAgICAgIGJyZWFrOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0
ZWd5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9X
ZWJMb2FkZXJTdHJhdGVneS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTc4LDcgKzU3OCw3IEBAIE9wdGlvbmFsPFdlYkxvYWRlclN0cmF0ZWd5OjpTeW5jTG9hZFJl
c3UKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFdlYkxvYWRlclN0cmF0ZWd5Ojpsb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciwgdW5zaWduZWQg
bG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIENsaWVudENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgIGNvbnN0
IEZldGNoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYgb3JpZ2luYWxSZXF1
ZXN0SGVhZGVycywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYkxvYWRlclN0cmF0ZWd5Ojpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciwgdW5zaWduZWQgbG9u
ZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IENsaWVudENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgIGNvbnN0IEZl
dGNoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYgb3JpZ2luYWxSZXF1ZXN0
SGVhZGVycywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgYXV0byogd2ViRnJhbWVMb2FkZXJDbGll
bnQgPSB0b1dlYkZyYW1lTG9hZGVyQ2xpZW50KGZyYW1lTG9hZGVyLmNsaWVudCgpKTsKICAgICBh
dXRvKiB3ZWJGcmFtZSA9IHdlYkZyYW1lTG9hZGVyQ2xpZW50ID8gJndlYkZyYW1lTG9hZGVyQ2xp
ZW50LT53ZWJGcmFtZSgpIDogbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuaAkocmV2aXNpb24gMjc3NTY5
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3ku
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfldlYkxvYWRl
clN0cmF0ZWd5KCkgZmluYWw7CiAgICAgCiAgICAgdm9pZCBsb2FkUmVzb3VyY2UoV2ViQ29yZTo6
RnJhbWUmLCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcj4mJik+JiYpIGZpbmFs
OwotICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpGcmFtZUxvYWRl
ciYsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3Qg
V2ViQ29yZTo6RmV0Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYsIFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PGNoYXI+JiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
V2ViQ29yZTo6RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OkNsaWVudENyZWRl
bnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0aW9ucyYsIGNvbnN0IFdlYkNvcmU6
OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgZmluYWw7CiAgICAgdm9pZCBwYWdl
TG9hZENvbXBsZXRlZChXZWJDb3JlOjpQYWdlJikgZmluYWw7CiAgICAgdm9pZCBicm93c2luZ0Nv
bnRleHRSZW1vdmVkKFdlYkNvcmU6OkZyYW1lJikgZmluYWw7CiAKQEAgLTEwMSw3ICsxMDEsNyBA
QCBwcml2YXRlOgogICAgIHN0cnVjdCBTeW5jTG9hZFJlc3VsdCB7CiAgICAgICAgIFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNlRXJy
b3IgZXJyb3I7Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKICAgICB9OwogICAgIE9wdGlvbmFsPFN5bmNMb2FkUmVzdWx0PiB0cnlMb2Fk
aW5nU3luY2hyb25vdXNseVVzaW5nVVJMU2NoZW1lSGFuZGxlcihXZWJDb3JlOjpGcmFtZUxvYWRl
ciYsIFJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYpOwogICAgIFN5bmNMb2FkUmVzdWx0IGxvYWREYXRhVVJMU3luY2hyb25vdXNseShjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMs
NyBAQCB2b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6c3RhcnROZXdUCiAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS0+c3RhcnRMb2FkaW5nKCk7CiB9CiAKLXZvaWQgV2ViVVJMU2NoZW1l
SGFuZGxlclByb3h5Ojpsb2FkU3luY2hyb25vdXNseShSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGxv
YWRJZGVudGlmaWVyLCBXZWJGcmFtZSYgd2ViRnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291cmNlRXJyb3ImIGVycm9y
LCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6bG9h
ZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBsb2FkSWRlbnRpZmllciwgV2Vi
RnJhbWUmIHdlYkZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQogewogICAgIGRhdGEuc2hyaW5rKDApOwogICAgIGlmICghbV93ZWJQYWdlLnNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxvYWRTeW5jaHJvbm91c1VSTFNjaGVtZVRhc2so
VVJMU2NoZW1lVGFza1BhcmFtZXRlcnMgeyBtX2lkZW50aWZpZXIsIGxvYWRJZGVudGlmaWVyLCBy
ZXF1ZXN0LCB3ZWJGcmFtZS5pbmZvKCkgfSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxvYWRT
eW5jaHJvbm91c1VSTFNjaGVtZVRhc2s6OlJlcGx5KHJlc3BvbnNlLCBlcnJvciwgZGF0YSkpKSB7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5k
bGVyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnROZXdU
YXNrKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyJiwgV2ViRnJhbWUmKTsKICAgICB2b2lkIHN0b3BB
bGxUYXNrcygpOwogCi0gICAgdm9pZCBsb2FkU3luY2hyb25vdXNseShSZXNvdXJjZUxvYWRJZGVu
dGlmaWVyLCBXZWJGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgVmVjdG9yPGNo
YXI+Jik7CisgICAgdm9pZCBsb2FkU3luY2hyb25vdXNseShSZXNvdXJjZUxvYWRJZGVudGlmaWVy
LCBXZWJGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgVmVjdG9yPHVpbnQ4X3Q+
Jik7CiAKICAgICB1aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlm
aWVyOyB9CiAgICAgV2ViUGFnZSYgcGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFnZTsgfQpJbmRleDog
U291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dExlZ2FjeS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDUtMTgg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBCYXNlNjQg
ZW5jb2RpbmcvZGVjb2RpbmcgdG8gbWF0Y2ggbW9yZSBtb2Rlcm4gV2ViS2l0IGNvbnZlbnRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5MjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oOgorICAgICAgICBVcGRh
dGUgdG8gbWF0Y2ggbmV3IHNpZ25hdHVyZS4gY2hhciAtPiB1aW50OF90LgorCiAyMDIxLTA1LTE0
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEZpbGVT
eXN0ZW06OmdldEZpbGVTaXplKCkgdG8gRmlsZVN5c3RlbTo6ZmlsZVNpemUoKQpJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OmxvYWRSZXNvdQogICAgIH0pOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIs
IHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2xpZW50Q3Jl
ZGVudGlhbFBvbGljeSwgY29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zLCBjb25zdCBIVFRQSGVh
ZGVyTWFwJiwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVk
IGxvbmcsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2xpZW50Q3JlZGVudGlhbFBv
bGljeSwgY29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwg
UmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8
dWludDhfdD4mIGRhdGEpCiB7CiAgICAgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoZnJhbWVMb2FkZXIubmV0d29ya2luZ0NvbnRleHQoKSwgcmVxdWVzdCwgb3B0aW9u
cy5jcmVkZW50aWFscyA9PSBGZXRjaE9wdGlvbnM6OkNyZWRlbnRpYWxzOjpPbWl0ID8gU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlIDogU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVz
ZSwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kv
V2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3Vw
cG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyAr
NDUsNyBAQCBwdWJsaWM6CiAgICAgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAKICAgICB2
b2lkIGxvYWRSZXNvdXJjZShXZWJDb3JlOjpGcmFtZSYsIFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
JiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9h
ZGVyT3B0aW9ucyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdlYkNvcmU6OlN1YnJl
c291cmNlTG9hZGVyPiYmKT4mJikgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KFdlYkNvcmU6OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZywgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29u
c3QgV2ViQ29yZTo6RmV0Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYs
IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVj
dG9yPGNoYXI+JikgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdl
YkNvcmU6OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZywgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgV2ViQ29y
ZTo6RmV0Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYsIFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4
X3Q+JikgZmluYWw7CiAgICAgdm9pZCBwYWdlTG9hZENvbXBsZXRlZChXZWJDb3JlOjpQYWdlJikg
ZmluYWw7CiAgICAgdm9pZCBicm93c2luZ0NvbnRleHRSZW1vdmVkKFdlYkNvcmU6OkZyYW1lJikg
ZmluYWw7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE5IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNv
bT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1v
cmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06
CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OndyYXBDcnlwdG9LZXkgY29uc3QpOgorICAgICAg
ICAoV2ViQ2hyb21lQ2xpZW50Ojp1bndyYXBDcnlwdG9LZXkgY29uc3QpOgorICAgICAgICBVcGRh
dGUgdG8gdXNlIG5ldyBPcHRpb25hbCByZXR1cm5pbmcgZGVmYXVsdFdlYkNyeXB0b01hc3Rlcktl
eSgpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNhdmUpOgorICAgICAgICBVcGRh
dGUgdG8gdXNlIG5ldyBPcHRpb25hbCByZXR1cm5pbmcgYmFzZTY0RGVjb2RlKCkuCisKIDIwMjEt
MDUtMTUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRGVsZXRl
IFdlYlNRTCBjb2RlIGZyb20gV2ViS2l0MgpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY2LDI4ICsxMDY2LDM0IEBAIHZv
aWQgV2ViQ2hyb21lQ2xpZW50OjpleGl0RnVsbFNjcmVlbkZvckUKIAogYm9vbCBXZWJDaHJvbWVD
bGllbnQ6OndyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1
aW50OF90PiYgd3JhcHBlZEtleSkgY29uc3QKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVy
S2V5OwogICAgIFNFTCBzZWxlY3RvciA9IEBzZWxlY3Rvcih3ZWJDcnlwdG9NYXN0ZXJLZXlGb3JX
ZWJWaWV3Oik7CiAgICAgaWYgKFtbbV93ZWJWaWV3IFVJRGVsZWdhdGVdIHJlc3BvbmRzVG9TZWxl
Y3RvcjpzZWxlY3Rvcl0pIHsKICAgICAgICAgTlNEYXRhICprZXlEYXRhID0gQ2FsbFVJRGVsZWdh
dGUobV93ZWJWaWV3LCBzZWxlY3Rvcik7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJL
ZXk7CiAgICAgICAgIG1hc3RlcktleS5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGNvbnN0
X2Nhc3Q8dm9pZCo+KFtrZXlEYXRhIGJ5dGVzXSkpLCBba2V5RGF0YSBsZW5ndGhdKTsKLSAgICB9
IGVsc2UgaWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkpCisgICAg
ICAgIHJldHVybiB3cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIGtleSwgd3JhcHBl
ZEtleSk7CisgICAgfQorICAgIAorICAgIGF1dG8gbWFzdGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSgpOworICAgIGlmICghbWFzdGVyS2V5KQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gd3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCBrZXksIHdy
YXBwZWRLZXkpOworICAgIHJldHVybiB3cmFwU2VyaWFsaXplZENyeXB0b0tleShXVEZNb3ZlKCpt
YXN0ZXJLZXkpLCBrZXksIHdyYXBwZWRLZXkpOwogfQogCiBib29sIFdlYkNocm9tZUNsaWVudDo6
dW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSwgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXkpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsK
ICAgICBTRUwgc2VsZWN0b3IgPSBAc2VsZWN0b3Iod2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmll
dzopOwogICAgIGlmIChbW21fd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6
c2VsZWN0b3JdKSB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAgICAgICAg
IE5TRGF0YSAqa2V5RGF0YSA9IENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgc2VsZWN0b3IpOwog
ICAgICAgICBtYXN0ZXJLZXkuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihjb25zdF9jYXN0
PHZvaWQqPihba2V5RGF0YSBieXRlc10pKSwgW2tleURhdGEgbGVuZ3RoXSk7Ci0gICAgfSBlbHNl
IGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1h
c3RlcktleSwgd3JhcHBlZEtleSwga2V5KTsKKyAgICB9CiAKLSAgICByZXR1cm4gdW53cmFwU2Vy
aWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIHdyYXBwZWRLZXksIGtleSk7CisgICAgYXV0byBt
YXN0ZXJLZXkgPSBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgaWYgKCFtYXN0ZXJL
ZXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdW53cmFwU2VyaWFsaXplZENy
eXB0b0tleShXVEZNb3ZlKCptYXN0ZXJLZXkpLCB3cmFwcGVkS2V5LCBrZXkpOwogfQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDA4LDEwICs0MDgsMTAgQEAgdm9pZCBXZWJJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6c2F2ZShjbwogICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFw
LnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwogCiAgICAgICAgIGlmIChiYXNlNjRF
bmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYg
KCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkK
KyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudCwgQmFz
ZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKTsKKyAgICAgICAgICAgIGlmICghZGVj
b2RlZERhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgUmV0YWluUHRy
PE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5
dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKKyAgICAgICAgICAgIFJldGFpblB0
cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhC
eXRlczpkZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0YS0+c2l6ZSgpXSk7CiAg
ICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZ
RVNdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJM
OmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBl
cnJvcjpOVUxMXTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI3NzcxNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1h
dGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHRvIHVzZSB1cGRhdGVkIGJhc2U2NCBh
bmQgZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpIHJlbGF0ZWQKKyAgICAgICAgZnVuY3Rpb25z
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VENQU2VydmVyOjpzdGFydFNlY3VyZUNvbm5lY3Rpb24pOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjp0ZXN0Q2VydGlmaWNhdGUpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VENQU2VydmVyOjp0ZXN0UHJpdmF0ZUtleSk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9TZXJpYWxp
emVkQ3J5cHRvS2V5V3JhcC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW06Cisg
ICAgICAgICh0ZXN0SWRlbnRpdHkyKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0V2ZW50QXR0cmlidXRpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
RVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3Iu
bW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5l
Y3Rpb246OndlYlNvY2tldEhhbmRzaGFrZSk6CisKIDIwMjEtMDUtMTggIFJvYmluIE1vcmlzc2V0
ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nIHVzZSBsZXNzIG1lbW9yeQpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UQ1BTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQ
U2VydmVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UQ1BT
ZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsOSArMTU1LDggQEAgdm9pZCBUQ1BTZXJ2
ZXI6OnN0YXJ0U2VjdXJlQ29ubmVjdGlvbihTbwogICAgICJsZFk5YXZjVEdTd2J3b2l1SXF2MGpU
TDFmSEZuenkzUkhNTERoK0xwdm9sYzVEU3JTSkhDUDVXdUswZWVKWGhyIgogICAgICJUNW9RcEhM
OXovY0NETEFLQ0tSYTR1VjBmaEVkT1dCcXlSOXA4eTVqSnR5ZTcydDZDdUZVVjVpcWNwRjRCSDRm
IgogICAgICJqMlZOSHdzU3JKd2tENFFVR2xVdEg3dnduUW15Q0Z4Wk1tV0FKZz09Iik7Ci0gICAg
VmVjdG9yPHVpbnQ4X3Q+IGNlcnRERVI7Ci0gICAgYmFzZTY0RGVjb2RlKGNlcnRQRU0sIGNlcnRE
RVIsIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6QmFzZTY0RGVmYXVsdCk7Ci0gICAgc3NsOjp1
bmlxdWVfcHRyPENSWVBUT19CVUZGRVI+IGNlcnQoQ1JZUFRPX0JVRkZFUl9uZXcoY2VydERFUi5k
YXRhKCksIGNlcnRERVIuc2l6ZSgpLCBudWxscHRyKSk7CisgICAgYXV0byBjZXJ0REVSID0gYmFz
ZTY0RGVjb2RlKGNlcnRQRU0pOworICAgIHNzbDo6dW5pcXVlX3B0cjxDUllQVE9fQlVGRkVSPiBj
ZXJ0KENSWVBUT19CVUZGRVJfbmV3KGNlcnRERVItPmRhdGEoKSwgY2VydERFUi0+c2l6ZSgpLCBu
dWxscHRyKSk7CiAgICAgQVNTRVJUKGNlcnQpOwogCiAgICAgLy8gVGhpcyBpcyBhIHRlc3Qga2V5
IGZyb20gQm9yaW5nU1NMLgpAQCAtNDEyLDkgKzQxMSw4IEBAIFZlY3Rvcjx1aW50OF90PiBUQ1BT
ZXJ2ZXI6OnRlc3RDZXJ0aWZpY2EKICAgICAiRzNQRm5ZYlc4dXJIME5TSkcvVysvOURBK1k3QWEw
Y3M0VFBwdUJHWjBOVTFXOTRPb0NNbzRsa082SC95NkxldSIKICAgICAiM3ZqWkQzeTlrWms3bXJl
OVhId2tJOE1kSzVzPSIpOwogICAgIAotICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7Ci0gICAg
YmFzZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSwgdmVjdG9yLCBXVEY6OkJhc2U2NERl
Y29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwotICAgIHJldHVybiB2ZWN0b3I7CisgICAgYXV0
byBkZWNvZGVkQ2VydGlmaWNhdGUgPSBiYXNlNjREZWNvZGUocGVtRW5jb2RlZENlcnRpZmljYXRl
KTsKKyAgICByZXR1cm4gV1RGTW92ZSgqZGVjb2RlZENlcnRpZmljYXRlKTsKIH0KIAogVmVjdG9y
PHVpbnQ4X3Q+IFRDUFNlcnZlcjo6dGVzdFByaXZhdGVLZXkoKQpAQCAtNDcxLDkgKzQ2OSw4IEBA
IFZlY3Rvcjx1aW50OF90PiBUQ1BTZXJ2ZXI6OnRlc3RQcml2YXRlS2UKICAgICAiZEVPYnZjcFNo
UDIySXRPVmpTYW1wUnVBdVJHMjZaZW1FYkdDSTNKNk1xeDN5Nm0rNkh3dWx0c2d0ZHpEZ3JGZSIK
ICAgICAicUpmVThiYmRidTJwaTQ3WTRGZEpLMEhMZmZsNVJ3PT0iKTsKIAotICAgIFZlY3Rvcjx1
aW50OF90PiB2ZWN0b3I7Ci0gICAgYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRQcml2YXRlS2V5LCB2
ZWN0b3IsIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6QmFzZTY0RGVmYXVsdCk7Ci0gICAgcmV0
dXJuIHZlY3RvcjsKKyAgICBhdXRvIGRlY29kZWRQcml2YXRlS2V5ID0gYmFzZTY0RGVjb2RlKHBl
bUVuY29kZWRQcml2YXRlS2V5KTsKKyAgICByZXR1cm4gV1RGTW92ZSgqZGVjb2RlZFByaXZhdGVL
ZXkpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGJhc2U2NEVu
Y29kZWRTaW5mV2l0aAogCiBURVNUKElTT0JveCwgSVNPUHJvdGVjdGlvblNjaGVtZUluZm9Cb3gp
CiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHNpbmZBcnJheTsKLSAgICBBU1NFUlRfVFJVRShiYXNl
NjREZWNvZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNvZGVkU2luZldpdGhLZXlJRDMpLCBzaW5mQXJy
YXkpKTsKLSAgICBBU1NFUlRfRVEoOTdVTCwgc2luZkFycmF5LnNpemUoKSk7CisgICAgYXV0byBz
aW5mQXJyYXkgPSBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNvZGVkU2luZldpdGhL
ZXlJRDMpKTsKKyAgICBBU1NFUlRfVFJVRShzaW5mQXJyYXkpOworICAgIEFTU0VSVF9FUSg5N1VM
LCBzaW5mQXJyYXktPnNpemUoKSk7CiAKLSAgICBhdXRvIHZpZXcgPSBKU0M6OkRhdGFWaWV3Ojpj
cmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShzaW5mQXJyYXkuZGF0YSgpLCBzaW5mQXJyYXkuc2l6
ZSgpKSwgMCwgc2luZkFycmF5LnNpemUoKSk7CisgICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmll
dzo6Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUoc2luZkFycmF5LT5kYXRhKCksIHNpbmZBcnJh
eS0+c2l6ZSgpKSwgMCwgc2luZkFycmF5LT5zaXplKCkpOwogCiAgICAgSVNPUHJvdGVjdGlvblNj
aGVtZUluZm9Cb3ggc2luZkJveDsKICAgICBBU1NFUlRfVFJVRShzaW5mQm94LnJlYWQodmlldykp
OwpAQCAtNzgsMTEgKzc4LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBiYXNlNjRFbmNvZGVkUHNz
aFdpdGgKIAogVEVTVChJU09Cb3gsIElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveCkKIHsKLSAg
ICBWZWN0b3I8dWludDhfdD4gcHNzaEFycmF5OwotICAgIEFTU0VSVF9UUlVFKGJhc2U2NERlY29k
ZShTdHJpbmdWaWV3KGJhc2U2NEVuY29kZWRQc3NoV2l0aEFzc2V0SWQpLCBwc3NoQXJyYXkpKTsK
LSAgICBBU1NFUlRfRVEoMTc2VUwsIHBzc2hBcnJheS5zaXplKCkpOworICAgIGF1dG8gcHNzaEFy
cmF5ID0gYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2RlZFBzc2hXaXRoQXNzZXRJ
ZCkpOworICAgIEFTU0VSVF9UUlVFKHBzc2hBcnJheSk7CisgICAgQVNTRVJUX0VRKDE3NlVMLCBw
c3NoQXJyYXktPnNpemUoKSk7CiAKLSAgICBhdXRvIHZpZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVh
dGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShwc3NoQXJyYXkuZGF0YSgpLCBwc3NoQXJyYXkuc2l6ZSgp
KSwgMCwgcHNzaEFycmF5LnNpemUoKSk7CisgICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6
Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUocHNzaEFycmF5LT5kYXRhKCksIHBzc2hBcnJheS0+
c2l6ZSgpKSwgMCwgcHNzaEFycmF5LT5zaXplKCkpOwogCiAgICAgSVNPRmFpclBsYXlTdHJlYW1p
bmdQc3NoQm94IHBzc2hCb3g7CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFz
dXJlbWVudENvY29hLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQkod29y
a2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBURVNUKFByaXZhdGVDbGlja01lYXN1cmVtZW50
LCBWYWxpZEJsaW5kCiAgICAgYXV0byAqbnNTcGtpRGF0YSA9IChfX2JyaWRnZSBOU0RhdGEgKilz
cGtpRGF0YS5nZXQoKTsKIAogICAgIC8vIENvbnRpbnVlIHRoZSB0ZXN0LgotICAgIEVYUEVDVF9U
UlVFKHBjbS5jYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VVbmxpbmthYmxlVG9rZW4oV1RGOjpiYXNl
NjRVUkxFbmNvZGUobnNTcGtpRGF0YS5ieXRlcywgbnNTcGtpRGF0YS5sZW5ndGgpKSk7CisgICAg
RVhQRUNUX1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVVubGlua2FibGVUb2tlbiht
YWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQobnNTcGtpRGF0YS5ieXRlcywgbnNTcGtpRGF0YS5s
ZW5ndGgpKSkpOwogICAgIGF1dG8gc291cmNlU2VjcmV0VG9rZW4gPSBwY20udG9rZW5TaWduYXR1
cmVKU09OKCk7CiAgICAgRVhQRUNUX0VRKHNvdXJjZVNlY3JldFRva2VuLT5hc09iamVjdCgpLT5z
aXplKCksIDR1bCk7CiAgICAgRVhQRUNUX1NUUkVRKHNvdXJjZVNlY3JldFRva2VuLT5nZXRTdHJp
bmcoInNvdXJjZV9lbmdhZ2VtZW50X3R5cGUiX3MpLnV0ZjgoKS5kYXRhKCksICJjbGljayIpOwpA
QCAtOTAsMTQgKzkwLDEzIEBAIFRFU1QoUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIFZhbGlkQmxp
bmQKICAgICBFWFBFQ1RfRVEoc291cmNlU2VjcmV0VG9rZW4tPmdldEludGVnZXIoInZlcnNpb24i
X3MpLCAyKTsKIAogICAgIC8vIEdlbmVyYXRlIHRoZSBzaWduYXR1cmUuCi0gICAgVmVjdG9yPHVp
bnQ4X3Q+IGJsaW5kZWRNZXNzYWdlOwotICAgIGJhc2U2NFVSTERlY29kZShzb3VyY2VTZWNyZXRU
b2tlbi0+Z2V0U3RyaW5nKCJzb3VyY2Vfc2VjcmV0X3Rva2VuIl9zKSwgYmxpbmRlZE1lc3NhZ2Up
OworICAgIGF1dG8gYmxpbmRlZE1lc3NhZ2UgPSBiYXNlNjRVUkxEZWNvZGUoc291cmNlU2VjcmV0
VG9rZW4tPmdldFN0cmluZygic291cmNlX3NlY3JldF90b2tlbiJfcykpOwogCi0gICAgYXV0byBi
bGluZGVkU2lnbmF0dXJlID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRXaXRo
TGVuZ3RoOiBtb2R1bHVzTkJ5dGVzXSk7Ci0gICAgY2Nyc2Fic3NhX3NpZ25fYmxpbmRlZF9tZXNz
YWdlKGNpcGhlcnN1aXRlLCByc2FQcml2YXRlS2V5LCBibGluZGVkTWVzc2FnZS5kYXRhKCksIGJs
aW5kZWRNZXNzYWdlLnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAqPihbYmxpbmRlZFNpZ25h
dHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSwgcm5nKTsKKyAg
ICBhdXRvIGJsaW5kZWRTaWduYXR1cmUgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10g
aW5pdFdpdGhMZW5ndGg6bW9kdWx1c05CeXRlc10pOworICAgIGNjcnNhYnNzYV9zaWduX2JsaW5k
ZWRfbWVzc2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJpdmF0ZUtleSwgYmxpbmRlZE1lc3NhZ2UtPmRh
dGEoKSwgYmxpbmRlZE1lc3NhZ2UtPnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAqPihbYmxp
bmRlZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSwg
cm5nKTsKIAogICAgIC8vIENvbnRpbnVlIHRoZSB0ZXN0LgotICAgIEVYUEVDVF9UUlVFKHBjbS5j
YWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VTZWNyZXRUb2tlbihXVEY6OmJhc2U2NFVSTEVuY29kZShb
YmxpbmRlZFNpZ25hdHVyZSBieXRlc10sIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0pKSk7Cisg
ICAgRVhQRUNUX1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVNlY3JldFRva2VuKG1h
a2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChbYmxpbmRlZFNpZ25hdHVyZSBieXRlc10sIFtibGlu
ZGVkU2lnbmF0dXJlIGxlbmd0aF0pKSkpOwogICAgIGF1dG8mIHBlcnNpc3RlbnRUb2tlbiA9IHBj
bS5zb3VyY2VVbmxpbmthYmxlVG9rZW4oKTsKICAgICBFWFBFQ1RfVFJVRShwZXJzaXN0ZW50VG9r
ZW4pOwogICAgIEVYUEVDVF9GQUxTRShwZXJzaXN0ZW50VG9rZW4tPnRva2VuQmFzZTY0VVJMLmlz
RW1wdHkoKSk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2Ev
U2VyaWFsaXplZENyeXB0b0tleVdyYXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2Ev
U2VyaWFsaXplZENyeXB0b0tleVdyYXAubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDM3ICs0NCwz
NyBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotVEVTVF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFw
VGVzdCwgR2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSkKK1RFU1RfRihTZXJpYWxpemVkQ3J5
cHRvS2V5V3JhcFRlc3QsIERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpCiB7Ci0gICAgVmVjdG9y
PHVpbnQ4X3Q+IG1hc3RlcktleTE7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVs
dFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkxKSk7CisgICAgYXV0byBtYXN0ZXJLZXkxID0g
V2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIEVYUEVDVF9UUlVFKG1h
c3RlcktleTEpOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTI7Ci0gICAgRVhQRUNU
X1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkyKSk7
CisgICAgYXV0byBtYXN0ZXJLZXkyID0gV2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3Rlcktl
eSgpOworICAgIEVYUEVDVF9UUlVFKG1hc3RlcktleTIpOwogCiAgICAgRVhQRUNUX1RSVUUobWFz
dGVyS2V5MSA9PSBtYXN0ZXJLZXkyKTsKIH0KIAogVEVTVF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwVGVzdCwgRGVsZXRlRGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSkKIHsKLSAgICBWZWN0b3I8
dWludDhfdD4gbWFzdGVyS2V5MTsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpnZXREZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleTEpKTsKKyAgICBhdXRvIG1hc3RlcktleTEgPSBX
ZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQRUNUX1RSVUUobWFz
dGVyS2V5MSk7CiAgICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6ZGVsZXRlRGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSgpKTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXkyOwotICAgIEVY
UEVDVF9UUlVFKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5
MikpOworICAgIGF1dG8gbWFzdGVyS2V5MiA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0
ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkyKTsKIAogICAgIEVYUEVDVF9UUlVF
KG1hc3RlcktleTEgIT0gbWFzdGVyS2V5Mik7CiB9CiAKIFRFU1RfRihTZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcFRlc3QsIFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVW53cmFwKQogewotICAgIFZlY3Rv
cjx1aW50OF90PiBtYXN0ZXJLZXk7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVs
dFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKTsKKyAgICBhdXRvIG1hc3RlcktleSA9IFdl
YkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0
ZXJLZXkpOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGNyeXB0b0tleSgxNiwgMSk7CiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHdyYXBwZWRLZXk7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6d3JhcFNl
cmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCBjcnlwdG9LZXksIHdyYXBwZWRLZXkpKTsKKyAg
ICBFWFBFQ1RfVFJVRShXZWJDb3JlOjp3cmFwU2VyaWFsaXplZENyeXB0b0tleSgqbWFzdGVyS2V5
LCBjcnlwdG9LZXksIHdyYXBwZWRLZXkpKTsKICAgICBFWFBFQ1RfVFJVRShjcnlwdG9LZXkgIT0g
d3JhcHBlZEtleSk7CiAgICAgLy8gZW5zdXJlIHdyYXBwZWRLZXkgZG9lc24ndCBjb250YWluIGNy
eXB0b0tleQogICAgIGJvb2wgbm90Q29udGFpbmVkID0gdHJ1ZTsKQEAgLTkwLDcgKzkwLDcgQEAg
VEVTVF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVzdCwgU2VyaQogICAgIEVYUEVDVF9UUlVF
KG5vdENvbnRhaW5lZCk7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdW53cmFwcGVkS2V5OwotICAg
IEVYUEVDVF9UUlVFKFdlYkNvcmU6OnVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5
LCB3cmFwcGVkS2V5LCB1bndyYXBwZWRLZXkpKTsKKyAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjp1
bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KCptYXN0ZXJLZXksIHdyYXBwZWRLZXksIHVud3JhcHBl
ZEtleSkpOwogICAgIEVYUEVDVF9UUlVFKHVud3JhcHBlZEtleSA9PSBjcnlwdG9LZXkpOwogfQog
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0No
YWxsZW5nZS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMyArMTc2
LDEwIEBAIFJldGFpblB0cjxTZWNJZGVudGl0eVJlZj4gdGVzdElkZW50aXR5MigKICAgICAiSkFI
Mm54S0d1cXRBSzJoV2JBQ3U2MVJUNWdBcUF2L2hCOUpZbmMyT2lRMlZtallrT2syR0VkSWpuMHhT
Z1g3VyIKICAgICAibUkvaEhieEtNRzNSa3Y5cTFDeCtXQi92MXQ4PSIpOwogCi0gICAgVmVjdG9y
PHVpbnQ4X3Q+IHByaXZhdGVLZXlCeXRlczsKLSAgICBiYXNlNjREZWNvZGUocGVtRW5jb2RlZFBy
aXZhdGVLZXksIHByaXZhdGVLZXlCeXRlcywgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNl
NjREZWZhdWx0KTsKKyAgICBhdXRvIHByaXZhdGVLZXlCeXRlcyA9IGJhc2U2NERlY29kZShwZW1F
bmNvZGVkUHJpdmF0ZUtleSk7CisgICAgYXV0byBjZXJ0aWZpY2F0ZUJ5dGVzID0gYmFzZTY0RGVj
b2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gY2VydGlm
aWNhdGVCeXRlczsKLSAgICBiYXNlNjREZWNvZGUocGVtRW5jb2RlZENlcnRpZmljYXRlLCBjZXJ0
aWZpY2F0ZUJ5dGVzLCBXVEY6OkJhc2U2NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwot
Ci0gICAgcmV0dXJuIGNyZWF0ZVRlc3RJZGVudGl0eShwcml2YXRlS2V5Qnl0ZXMsIGNlcnRpZmlj
YXRlQnl0ZXMpOworICAgIHJldHVybiBjcmVhdGVUZXN0SWRlbnRpdHkoV1RGTW92ZSgqcHJpdmF0
ZUtleUJ5dGVzKSwgV1RGTW92ZSgqY2VydGlmaWNhdGVCeXRlcykpOwogfQogCiBzdGF0aWMgUmV0
YWluUHRyPE5TVVJMQ3JlZGVudGlhbD4gY3JlZGVudGlhbFdpdGhJZGVudGl0eSgpCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0V2ZW50QXR0cmlidXRpb24ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVu
dEF0dHJpYnV0aW9uLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0V2ZW50QXR0cmlidXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAg
LTE4NCwxMyArMTg0LDEyIEBAIFRFU1QoRXZlbnRBdHRyaWJ1dGlvbiwgRnJhdWRQcmV2ZW50aW9u
KQogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBlbmQgPSByZXF1ZXN0MlN0cmluZy5maW5k
KCciJywgc3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0b2tlbiA9IHJlcXVl
c3QyU3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYmxpbmRlZE1lc3NhZ2U7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBiYXNlNjRVUkxEZWNvZGUodG9rZW4sIGJsaW5kZWRNZXNzYWdlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gYmxpbmRlZE1lc3NhZ2UgPSBiYXNlNjRVUkxEZWNvZGUo
dG9rZW4pOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY2Nyc2Fic3Nh
X2NpcGhlcnN1aXRlICpjaXBoZXJzdWl0ZSA9ICZjY3JzYWJzc2FfY2lwaGVyc3VpdGVfcnNhNDA5
Nl9zaGEzODQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGJsaW5kZWRTaWduYXR1cmUg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdFdpdGhMZW5ndGg6IG1vZHVsdXNO
Qnl0ZXNdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNjcnNhYnNzYV9zaWduX2JsaW5kZWRf
bWVzc2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJpdmF0ZUtleSwgYmxpbmRlZE1lc3NhZ2UuZGF0YSgp
LCBibGluZGVkTWVzc2FnZS5zaXplKCksIHN0YXRpY19jYXN0PHVpbnQ4X3QgKj4oW2JsaW5kZWRT
aWduYXR1cmUgbXV0YWJsZUJ5dGVzXSksIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0sIHJuZyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVubGlua2FibGVUb2tlbiA9IFdURjo6YmFz
ZTY0VVJMRW5jb2RlKFtibGluZGVkU2lnbmF0dXJlIGJ5dGVzXSwgW2JsaW5kZWRTaWduYXR1cmUg
bGVuZ3RoXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGJsaW5kZWRTaWduYXR1cmUg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdFdpdGhMZW5ndGg6bW9kdWx1c05C
eXRlc10pOworICAgICAgICAgICAgICAgICAgICAgICAgY2Nyc2Fic3NhX3NpZ25fYmxpbmRlZF9t
ZXNzYWdlKGNpcGhlcnN1aXRlLCByc2FQcml2YXRlS2V5LCBibGluZGVkTWVzc2FnZS0+ZGF0YSgp
LCBibGluZGVkTWVzc2FnZS0+c2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50OF90ICo+KFtibGluZGVk
U2lnbmF0dXJlIG11dGFibGVCeXRlc10pLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdLCBybmcp
OworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmxpbmthYmxlVG9rZW4gPSBtYWtlU3Ry
aW5nKGJhc2U2NFVSTEVuY29kZWQoW2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBbYmxpbmRlZFNp
Z25hdHVyZSBsZW5ndGhdKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4YW1wbGUg
cmVzcG9uc2U6IHsgInVubGlua2FibGVfdG9rZW4iOiAiQUJDRCIgfS4gIkFCQ0QiIHNob3VsZCBi
ZSBCYXNlNjRVUkwgZW5jb2RlZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVzcG9u
c2UgPSBtYWtlU3RyaW5nKCJIVFRQLzEuMSAyMDAgT0tcclxuIgpAQCAtMjIyLDE4ICsyMjEsMTYg
QEAgVEVTVChFdmVudEF0dHJpYnV0aW9uLCBGcmF1ZFByZXZlbnRpb24pCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKz0ga2V5Lmxlbmd0aCgpICsgMzsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGVuZCA9IHJlcXVlc3Q0
U3RyaW5nLmZpbmQoJyInLCBzdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byB0b2tlbiA9IHJlcXVlc3Q0U3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5k
IC0gc3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiB0b2tlblZlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlNjRVUkxEZWNvZGUodG9rZW4sIHRva2VuVmVjdG9yKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRva2VuRGF0YSA9IGFkb3B0TlMoW1tO
U0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6dG9rZW5WZWN0b3IuZGF0YSgpIGxlbmd0aDp0b2tl
blZlY3Rvci5zaXplKCldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIHRva2VuVmVjdG9yID0gYmFzZTY0VVJMRGVjb2RlKHRva2VuKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRva2VuRGF0YSA9IGFkb3B0TlMoW1tO
U0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6dG9rZW5WZWN0b3ItPmRhdGEoKSBsZW5ndGg6dG9r
ZW5WZWN0b3ItPnNpemUoKV0pOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga2V5ID0gU3RyaW5nKCJzb3VyY2Vfc2VjcmV0X3Rva2VuX3NpZ25hdHVyZSIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gcmVxdWVzdDRTdHJp
bmcuZmluZChrZXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXJ0ICs9IGtleS5sZW5ndGgoKSArIDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kID0gcmVxdWVzdDRTdHJpbmcuZmluZCgnIicsIHN0YXJ0KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHNpZ25hdHVyZSA9IHJlcXVlc3Q0
U3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1cmVWZWN0b3I7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0VVJMRGVjb2RlKHNp
Z25hdHVyZSwgc2lnbmF0dXJlVmVjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvIHNpZ25hdHVyZURhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBp
bml0V2l0aEJ5dGVzOnNpZ25hdHVyZVZlY3Rvci5kYXRhKCkgbGVuZ3RoOnNpZ25hdHVyZVZlY3Rv
ci5zaXplKCldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IHNpZ25hdHVyZVZlY3RvciA9IGJhc2U2NFVSTERlY29kZShzaWduYXR1cmUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2lnbmF0dXJlRGF0YSA9IGFkb3B0
TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2lnbmF0dXJlVmVjdG9yLT5kYXRhKCkg
bGVuZ3RoOnNpZ25hdHVyZVZlY3Rvci0+c2l6ZSgpXSk7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShTZWNLZXlWZXJpZnlTaWduYXR1cmUoc2Vj
S2V5LmdldCgpLCBrU2VjS2V5QWxnb3JpdGhtUlNBU2lnbmF0dXJlTWVzc2FnZVBTU1NIQTM4NCwg
KF9fYnJpZGdlIENGRGF0YVJlZil0b2tlbkRhdGEuZ2V0KCksIChfX2JyaWRnZSBDRkRhdGFSZWYp
c2lnbmF0dXJlRGF0YS5nZXQoKSwgTlVMTCkpOwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW0JKHdvcmtp
bmcgY29weSkKQEAgLTk4LDggKzk4LDggQEAgVEVTVF9GKFNTTEtleUdlbmVyYXRvclRlc3QsIERl
ZmF1bHRUZXN0KQogICAgIGNoYXIgY2hhbGxlbmdlW10gPSAiMDEyMzQ1Njc4OSI7CiAgICAgYXV0
byByYXdSZXN1bHQgPSBXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmco
MCwgY2hhbGxlbmdlLCB1cmwpOwogICAgIEFTU0VSVF9GQUxTRShyYXdSZXN1bHQuaXNFbXB0eSgp
KTsKLSAgICBWZWN0b3I8dWludDhfdD4gZGVyUmVzdWx0OwotICAgIEFTU0VSVF9UUlVFKGJhc2U2
NERlY29kZShyYXdSZXN1bHQsIGRlclJlc3VsdCkpOworICAgIGF1dG8gZGVyUmVzdWx0ID0gYmFz
ZTY0RGVjb2RlKHJhd1Jlc3VsdCk7CisgICAgQVNTRVJUX1RSVUUoZGVyUmVzdWx0KTsKIAogICAg
IFNlY0FzbjFDb2RlclJlZiBjb2RlciA9IG51bGxwdHI7CiAgICAgQVNTRVJUX0VRKGVyclNlY1N1
Y2Nlc3MsIFNlY0FzbjFDb2RlckNyZWF0ZSgmY29kZXIpKTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBU
RVNUX0YoU1NMS2V5R2VuZXJhdG9yVGVzdCwgRGVmYXVsdFRlc3QpCiAgICAgfSk7CiAKICAgICBT
aWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UgZGVjb2RlZFJlc3VsdCB7IH07Ci0gICAgU2VjQXNu
MUl0ZW0gZGVyUmVzdWx0SXRlbSB7IGRlclJlc3VsdC5zaXplKCksIGRlclJlc3VsdC5kYXRhKCkg
fTsKKyAgICBTZWNBc24xSXRlbSBkZXJSZXN1bHRJdGVtIHsgZGVyUmVzdWx0LT5zaXplKCksIGRl
clJlc3VsdC0+ZGF0YSgpIH07CiAgICAgQVNTRVJUX0VRKGVyclNlY1N1Y2Nlc3MsIFNlY0FzbjFE
ZWNvZGVEYXRhKGNvZGVyLCAmZGVyUmVzdWx0SXRlbSwgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlVGVtcGxhdGUsICZkZWNvZGVkUmVzdWx0KSk7CiAKICAgICAvLyBDaGVjayBjaGFsbGVuZ2UK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0JKHJldmlzaW9uIDI3
NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6d2ViU29ja2V0SGFu
ZHNoYWtlKENvbXAKICAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4od2ViU29ja2V0S2V5R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlE
KSk7CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAgIHNoYTEuY29t
cHV0ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGhhc2guZGF0
YSgpLCBTSEExOjpoYXNoU2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNl
NjRFbmNvZGVkKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSkpOwogICAgICAgICB9OwogCiAg
ICAgICAgIGNvbm5lY3Rpb24uc2VuZChIVFRQUmVzcG9uc2UoMTAxLCB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429046</attachid>
            <date>2021-05-19 07:13:09 -0700</date>
            <delta_ts>2021-05-19 10:14:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210519071308.patch</filename>
            <type>text/plain</type>
            <size>203188</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnJpbmcgYmFzZTY0IGVuY29kaW5nL2RlY29k
aW5nIHVwIHRvIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZXRpb25zIGJ5OgorICAgICAgICAtIFJl
cGxhY2UgdXNlIG9mICJvdXQgcGFyYW1ldGVyICsgYm9vbCIgd2l0aCBPcHRpb25hbCByZXR1cm4g
dmFsdWVzLgorICAgICAgICAtIFVzaW5nIGVudW0gY2xhc3MgZm9yIGVudW1lcmF0aW9ucy4KKyAg
ICAgICAgLSBSZXBsYWNpbmcgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyL0NvbnN0
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyCisgICAgICAgICAgd2l0aCBhcHByb3By
aWF0ZSBmdW5jdGlvbiBvdmVybG9hZHMuCisKKyAgICAgICAgQWxzbyBhZGRzIGEgbmV3IFN0cmlu
Z1R5cGVBZGFwdGVyIGZvciBpbmxpbmUgYmFzZTY0IGVuY29kaW5nIGRhdGEgaW4gZWl0aGVyIG1h
a2VTdHJpbmcoKQorICAgICAgICBvciBTdHJpbmdCdWlsZGVyLiBUbyBtYWtlIHRoaXMgd29yaywg
YSBmZXcgbW9kaWZpY2F0aW9ucyB3ZXJlIG5lZWQgdG8gdGhlIGJhc2U2NEVuY29kZSgpCisgICAg
ICAgIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBmaXhlZCBzaXplIHdyaXRlVG8oKSBmdW5jdGlv
bi4KKworICAgICAgICBGaXJzdCwgdGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBkYXRhIGlzIG5v
dyBjb21wdXRlZCB1cCBmcm9udCBkZXBlbmRpbmcgb24gdGhlIHBvbGljeS4KKyAgICAgICAgVGhp
cyBoYXMgYmVlbiBleHRyYWN0ZWQgaW50byBhIG5ldyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6
ZSgpIGZ1bmN0aW9uIHVzZWQgYnkgYm90aAorICAgICAgICB0aGUgYWRhcHRvciBhbmQgYnkgYmFz
ZTY0RW5jb2RlIHdoZW4gcGFzc2VkIGEgVmVjdG9yLiBQcmV2aW91c2x5LCB3aGVuIGVuY29kaW5n
IHVzaW5nCisgICAgICAgIHNvbWUgcG9saWNpZXMsIHRoZSBzaXplIHdhcyBhbiBvdmVyZXN0aW1h
dGUgYW5kIHRoZSByZXN1bHRpbmcgVmVjdG9yIHdvdWxkIGJlIHJlc2l6ZWQKKyAgICAgICAgZG93
biBhZnRlciBlbmNvZGluZy4KKworICAgICAgICBTZWNvbmQsIGJhc2U2NEVuY29kZUludGVybmFs
IHdhcyBtYWRlIGludG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbiB0byBhbGxvdyBmb3IgdHdvIG5ldyAK
KyAgICAgICAgYmFzZTY0RW5jb2RlIGZ1bmN0aW9ucywgb25lIG9mIHdoaWNoIGhhcyBhIFVDaGFy
KiBkZXN0aW5hdGlvbi4gVGhlc2UgYXJlIHVzZWQgYnkgdGhlCisgICAgICAgIGFkYXB0b3IgdG8g
d3JpdGUgdGhlIGVuY29kZWQgZGF0YS4KKworICAgICAgICBPbmUgYWRkaXRpb25hbCBzbWFsbCBj
aGFuZ2UgaXMgdGhhdCBub3cgYSBvcHRpb25hbCBtYXAgdHlwZSBwYXJhbWV0ZXIgaGFzIGJlZW4g
YWRkZWQKKyAgICAgICAgdG8gYWxsIHRoZSBlbmNvZGVycyB0byBhbGxvdyB1c2luZyBlaXRoZXIg
dGhlIGRlZmF1bHQgbWFwIG9yIHRoZSBVUkwgb25lIGFzIGRlZmluZWQgCisgICAgICAgIGluIFJG
QyA0NjQ4LiBUaGlzIHNpbXBsaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJpbmdU
eXBlQWRhcHRlciBhbmQgbWFrZXMgdGhlCisgICAgICAgIGJhc2U2NFVSTEVuY29kZS9iYXNlNjRV
UkxEZWNvZGUgZnVuY3Rpb25zIGludG8gc2ltcGxlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0
IHVzZQorICAgICAgICB0aGUgcmlnaHQgZGVmYXVsdHMgZm9yIHRoZSBnZW5lcmljIGVuY29kZS9k
ZWNvZGUgZnVuY3Rpb25zLiAKKworICAgICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5jcHA6CisgICAg
ICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVybmFsKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5j
b2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlSW50ZXJuYWwpOgorICAgICAgICAoV1RG
OjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxEZWNvZGUpOgorICAgICAg
ICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L0Jh
c2U2NC5oOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNl
NjRFbmNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOgorICAgICAgICAoV1RG
Ojppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKToKKyAgICAgICAgKFdURjo6Y2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGVkKToKKyAgICAg
ICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlZCk6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFw
dGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpTdHJpbmdUeXBlQWRhcHRlcik6CisgICAgICAgIChX
VEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpsZW5ndGggY29uc3Qp
OgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6
aXM4Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3Bl
Y2lmaWNhdGlvbj46OndyaXRlVG8gY29uc3QpOgorCiAyMDIxLTA1LTE2ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRl
U3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9CYXNlNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAgIENvcHlyaWdodCAoQykgMjAw
MC0yMDAxIERhd2l0IEFsZW1heWVodSA8YWRhd2l0QGtkZS5vcmc+CiAgICBDb3B5cmlnaHQgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KLSAgIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJv
Z2EuY29tPgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMTMgKzI1LDE2IEBACiAjaW5jbHVkZSA8
d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKIGNvbnN0IGNoYXIgbm9uQWxwaGFiZXQgPSAtMTsKIAotc3RhdGljIGNvbnN0IGNo
YXIgYmFzZTY0RW5jTWFwWzY0XSA9IHsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZW5jb2Rl
TWFwU2l6ZSA9IDY0Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBkZWNvZGVNYXBTaXplID0g
MTI4OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRFbmNNYXBbZW5jb2RlTWFwU2l6ZV0gPSB7
CiAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwKICAg
ICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAweDRGLCAweDUwLAogICAgIDB4
NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCkBAIC00Miw3ICs0
NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVuY01hcFs2NF0gPSB7CiAgICAgMHgzNCwg
MHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHgyRgogfTsKIAotc3RhdGljIGNv
bnN0IGNoYXIgYmFzZTY0RGVjTWFwWzEyOF0gPSB7CitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRE
ZWNNYXBbZGVjb2RlTWFwU2l6ZV0gPSB7CiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9u
QWxwaGFiZXQsCkBAIC02MSw3ICs2NCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NERlY01h
cFsxMjhdID0gewogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0LCBub25BbHBoYWJl
dCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsKIAotc3RhdGljIGNv
bnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyIGJhc2U2
NFVSTEVuY01hcFtlbmNvZGVNYXBTaXplXSA9IHsKICAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0
LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAogICAgIDB4NDksIDB4NEEsIDB4NEIsIDB4NEMsIDB4
NEQsIDB4NEUsIDB4NEYsIDB4NTAsCiAgICAgMHg1MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1NSwg
MHg1NiwgMHg1NywgMHg1OCwKQEAgLTcyLDcgKzc1LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFz
ZTY0VVJMRW5jTWFwWzY0XSA9IAogICAgIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4
MzksIDB4MkQsIDB4NUYKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NFVSTERlY01hcFsx
MjhdID0geworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRGVjTWFwW2RlY29kZU1hcFNpemVd
ID0gewogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwK
ICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCiAgICAg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LApAQCAtOTEsMjQz
ICs5NCwyNDIgQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRGVjTWFwWzEyOF0gPQogICAg
IDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQs
IG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIGJhc2U2
NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwg
VmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIGNvbnN0IGNoYXIg
KCZlbmNvZGVNYXApWzY0XSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRp
YyB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVpbnQ4X3QqIGlucHV0RGF0YUJ1ZmZl
ciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNsZWFyKCk7Ci0gICAgaWYgKCFs
ZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVzdGluYXRpb25MZW5ndGggPiAwKTsK
KyAgICBBU1NFUlQoY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoaW5wdXRMZW5ndGgsIHBvbGlj
eSkgPT0gZGVzdGluYXRpb25MZW5ndGgpOwogCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmluZyBp
cyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90aGluZy4KLSAgICAvLyBOb3Rl
OiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSAib3V0TGVuZ3RoIiBjb21wdXRhdGlvbiBiZWxv
dy4KLSAgICAvLyBSYXRoZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBh
IGJpdCBjb25zZXJ2YXRpdmUuCi0gICAgY29uc3QgdW5zaWduZWQgbWF4SW5wdXRCdWZmZXJTaXpl
ID0gVUlOVF9NQVggLyA3NyAqIDc2IC8gNCAqIDMgLSAyOwotICAgIGlmIChsZW4gPiBtYXhJbnB1
dEJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGVuY29kZU1hcCA9IChtYXAg
PT0gQmFzZTY0RW5jb2RlTWFwOjpVUkwpID8gYmFzZTY0VVJMRW5jTWFwIDogYmFzZTY0RW5jTWFw
OwogCiAgICAgdW5zaWduZWQgc2lkeCA9IDA7CiAgICAgdW5zaWduZWQgZGlkeCA9IDA7CisgICAg
dW5zaWduZWQgY291bnQgPSAwOwogCi0gICAgdW5zaWduZWQgb3V0TGVuZ3RoID0gKChsZW4gKyAy
KSAvIDMpICogNDsKKyAgICBib29sIGluc2VydExGcyA9IChwb2xpY3kgPT0gQmFzZTY0RW5jb2Rl
UG9saWN5OjpJbnNlcnRMRnMgJiYgZGVzdGluYXRpb25MZW5ndGggPiBtYXhpbXVtQmFzZTY0TGlu
ZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOwogCi0gICAgLy8gRGVhbCB3aXRoIHRoZSA3NiBjaGFy
YWN0ZXIgcGVyIGxpbmUgbGltaXQgc3BlY2lmaWVkIGluIFJGQyAyMDQ1LgotICAgIGJvb2wgaW5z
ZXJ0TEZzID0gKHBvbGljeSA9PSBCYXNlNjRJbnNlcnRMRnMgJiYgb3V0TGVuZ3RoID4gNzYpOwot
ICAgIGlmIChpbnNlcnRMRnMpCi0gICAgICAgIG91dExlbmd0aCArPSAoKG91dExlbmd0aCAtIDEp
IC8gNzYpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBvdXQuZ3JvdyhvdXRMZW5ndGgpOwot
Ci0gICAgLy8gMy1ieXRlIHRvIDQtYnl0ZSBjb252ZXJzaW9uICsgMC02MyB0byBhc2NpaSBwcmlu
dGFibGUgY29udmVyc2lvbgotICAgIGlmIChsZW4gPiAxKSB7Ci0gICAgICAgIHdoaWxlIChzaWR4
IDwgbGVuIC0gMikgeworICAgIGlmIChpbnB1dExlbmd0aCA+IDEpIHsKKyAgICAgICAgd2hpbGUg
KHNpZHggPCBpbnB1dExlbmd0aCAtIDIpIHsKICAgICAgICAgICAgIGlmIChpbnNlcnRMRnMpIHsK
LSAgICAgICAgICAgICAgICBpZiAoY291bnQgJiYgIShjb3VudCAlIDc2KSkKLSAgICAgICAgICAg
ICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOworICAgICAgICAgICAgICAgIGlmIChjb3VudCAm
JiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAg
ICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSAnXG4nOwog
ICAgICAgICAgICAgICAgIGNvdW50ICs9IDQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBv
dXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA+PiAyKSAmIDA3N107Ci0gICAgICAg
ICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lkeCArIDFdID4+IDQpICYgMDE3
KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3NyldOwotICAgICAgICAgICAgb3V0W2RpZHgrK10g
PSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAyXSA+PiA2KSAmIDAwMykgfCAoKGRhdGFbc2lkeCAr
IDFdIDw8IDIpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFtk
YXRhW3NpZHggKyAyXSAmIDA3N107CisKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZl
cltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXREYXRhQnVmZmVyW3NpZHggICAgXSA+PiAyKSAm
IDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29k
ZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChpbnB1dERh
dGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlv
bkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsg
Ml0gPj4gNikgJiAwMDMpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3
KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1h
cFsgIGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0gICAgICAgJiAwNzddOwogICAgICAgICAgICAg
c2lkeCArPSAzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHNpZHggPCBsZW4pIHsKLSAg
ICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgNzYpKQotICAg
ICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7Ci0KLSAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNv
ZGVNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzddOwotICAgICAgICBpZiAoc2lkeCA8IGxlbiAt
IDEpIHsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWygoZGF0YVtzaWR4ICsg
MV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYgMDc3KV07Ci0gICAgICAgICAg
ICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4ICsgMV0gPDwgMikgJiAwNzddOwor
ICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsKKyAgICAgICAgaWYgKGluc2VydExGcyAmJiAo
Y291bnQgPiAwKSAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVuSW5zZXJ0
aW5nTEZzKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gJ1xu
JzsKKworICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFso
aW5wdXREYXRhQnVmZmVyW3NpZHhdID4+IDIpICYgMDc3XTsKKyAgICAgICAgaWYgKHNpZHggPCBp
bnB1dExlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4
KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHggKyAxXSA+PiA0KSAmIDAxNykg
fCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA8PCA0KSAmIDA3NyldOworICAgICAgICAgICAgZGVz
dGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBbIChpbnB1dERhdGFCdWZmZXJb
c2lkeCArIDFdIDw8IDIpICYgMDc3XTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBvdXRb
ZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA8PCA0KSAmIDA3N107CisgICAgICAgICAg
ICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsgKGlucHV0RGF0YUJ1
ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzddOwogICAgIH0KIAotICAgIC8vIEFkZCBwYWRkaW5n
Ci0gICAgaWYgKHBvbGljeSA9PSBCYXNlNjRVUkxQb2xpY3kpCi0gICAgICAgIG91dC5yZXNpemUo
ZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdoaWxlIChkaWR4IDwgb3V0LnNpemUoKSkgewot
ICAgICAgICAgICAgb3V0W2RpZHhdID0gJz0nOwotICAgICAgICAgICAgKytkaWR4OwotICAgICAg
ICB9CisgICAgQVNTRVJUKHBvbGljeSAhPSBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCB8fCBkaWR4
ID09IGRlc3RpbmF0aW9uTGVuZ3RoKTsKKworICAgIHdoaWxlIChkaWR4IDwgZGVzdGluYXRpb25M
ZW5ndGgpIHsKKyAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHhdID0gJz0nOworICAg
ICAgICArK2RpZHg7CiAgICAgfQogfQogCi1TdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3N0YXRp
YyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29uc3QgdWludDhfdCogaW5w
dXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBv
bGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0Owot
ICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKLSAgICByZXR1
cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOworICAgIGF1dG8gZGVzdGlu
YXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dExlbmd0aCwgcG9s
aWN5KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRlc3RpbmF0aW9uVmVjdG9yKGRlc3RpbmF0aW9uTGVuZ3Ro
KTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChpbnB1dERhdGFCdWZmZXIsIGlucHV0TGVuZ3Ro
LCBkZXN0aW5hdGlvblZlY3Rvci5kYXRhKCksIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3ksIG1h
cCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uVmVjdG9yOwogfQogCi12b2lkIGJhc2U2NEVuY29k
ZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5KQorVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZShjb25z
dCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJhc2U2NEVuY29k
ZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuLCBv
dXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlSW50ZXJu
YWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVu
Z3RoLCBwb2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9p
ZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCog
aW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRlc3RpbmF0aW9u
RGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGlj
eSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3Vs
dDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVu
Y01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsK
KyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm47CisgICAgYmFzZTY0
RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZl
ciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqIGRh
dGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQpCit2b2lkIGJhc2U2NEVuY29kZShj
b25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBMQ2hhciog
ZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0
RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBiYXNlNjRF
bmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxl
biwgb3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7CisgICAgaWYgKCFkZXN0
aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGJhc2U2NEVuY29kZUludGVybmFs
KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZmZXIpLCBpbnB1dExlbmd0
aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5LCBtYXAp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBib29sIGJhc2U2NERl
Y29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgU2lnbmVkT3JVbnNp
Z25lZENoYXJWZWN0b3JBZGFwdGVyJiBvdXQsIHVuc2lnbmVkIG9wdGlvbnMsIGNvbnN0IGNoYXIg
KCZkZWNvZGVNYXApWzEyOF0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgT3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBpbnB1dERhdGFC
dWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICBvdXQuY2xlYXIoKTsKLSAg
ICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFpbnB1dExlbmd0
aCkKKyAgICAgICAgcmV0dXJuIFZlY3Rvcjx1aW50OF90PiB7IH07CiAKLSAgICBvdXQuZ3Jvdyhs
ZW5ndGgpOworICAgIGF1dG8gZGVjb2RlTWFwID0gKG1hcCA9PSBCYXNlNjREZWNvZGVNYXA6OlVS
TCkgPyBiYXNlNjRVUkxEZWNNYXAgOiBiYXNlNjREZWNNYXA7CisKKyAgICBWZWN0b3I8dWludDhf
dD4gZGVzdGluYXRpb24oaW5wdXRMZW5ndGgpOwogCiAgICAgdW5zaWduZWQgZXF1YWxzU2lnbkNv
dW50ID0gMDsKLSAgICB1bnNpZ25lZCBvdXRMZW5ndGggPSAwOwotICAgIGJvb2wgaGFkRXJyb3Ig
PSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgKytpZHgp
IHsKLSAgICAgICAgdW5zaWduZWQgY2ggPSBkYXRhW2lkeF07CisgICAgdW5zaWduZWQgZGVzdGlu
YXRpb25MZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4IDwgaW5wdXRM
ZW5ndGg7ICsraWR4KSB7CisgICAgICAgIHVuc2lnbmVkIGNoID0gaW5wdXREYXRhQnVmZmVyW2lk
eF07CiAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKICAgICAgICAgICAgICsrZXF1YWxzU2lnbkNv
dW50OwogICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIG5ldmVyIGJlIG1vcmUgdGhhbiAyIHBh
ZGRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChvcHRpb25zICYgQmFzZTY0VmFsaWRh
dGVQYWRkaW5nICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKLSAgICAgICAgICAgICAgICBoYWRF
cnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAob3B0
aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpICYmIGVx
dWFsc1NpZ25Db3VudCA+IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2hhciBkZWNv
ZGVkQ2hhcmFjdGVyID0gY2ggPCBXVEZfQVJSQVlfTEVOR1RIKGRlY29kZU1hcCkgPyBkZWNvZGVN
YXBbY2hdIDogbm9uQWxwaGFiZXQ7CisgICAgICAgICAgICBjaGFyIGRlY29kZWRDaGFyYWN0ZXIg
PSBjaCA8IGRlY29kZU1hcFNpemUgPyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFiZXQ7CiAgICAg
ICAgICAgICBpZiAoZGVjb2RlZENoYXJhY3RlciAhPSBub25BbHBoYWJldCkgewotICAgICAgICAg
ICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFkRXJy
b3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgb3V0W291dExlbmd0aCsrXSA9IGRlY29kZWRDaGFyYWN0ZXI7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucyAmIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5l
d0xpbmVzKQotICAgICAgICAgICAgICAgIHx8ICghaXNMYXRpbjEoY2gpIHx8ICFpc0FTQ0lJU3Bh
Y2UoY2gpIHx8ICgob3B0aW9ucyAmIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikgJiYgY2ggPT0g
J1x2JykpKSB7Ci0gICAgICAgICAgICAgICAgaGFkRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25bZGVzdGluYXRpb25MZW5ndGgrK10gPSBkZWNvZGVkQ2hhcmFjdGVyOworICAgICAgICAg
ICAgfSBlbHNlIGlmICghb3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25v
cmVTcGFjZXNBbmROZXdMaW5lcykgfHwgKCFpc0xhdGluMShjaCkgfHwgIWlzQVNDSUlTcGFjZShj
aCkgfHwgKG9wdGlvbnMuY29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlzY2FyZFZlcnRp
Y2FsVGFiKSAmJiBjaCA9PSAnXHYnKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gTWFrZSBz
dXJlIHdlIHNocmluayBiYWNrIHRoZSBWZWN0b3IgYmVmb3JlIHJldHVybmluZy4gb3V0TGVuZ3Ro
IG1heSBiZSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQKKyAgICAvLyBNYWtlIHN1cmUgd2Ugc2hyaW5r
IGJhY2sgdGhlIFZlY3RvciBiZWZvcmUgcmV0dXJuaW5nLiBkZXN0aW5hdGlvbkxlbmd0aCBtYXkg
YmUgc2hvcnRlciB0aGFuIGV4cGVjdGVkCiAgICAgLy8gaW4gY2FzZSBvZiBlcnJvciBvciBpbiBj
YXNlIG9mIGlnbm9yZWQgc3BhY2VzLgotICAgIGlmIChvdXRMZW5ndGggPCBvdXQuc2l6ZSgpKQot
ICAgICAgICBvdXQuc2hyaW5rKG91dExlbmd0aCk7Ci0KLSAgICBpZiAoaGFkRXJyb3IpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGggPCBkZXN0aW5hdGlv
bi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNocmluayhkZXN0aW5hdGlvbkxlbmd0aCk7
CiAKLSAgICBpZiAoIW91dExlbmd0aCkKLSAgICAgICAgcmV0dXJuICFlcXVhbHNTaWduQ291bnQ7
CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkgeworICAgICAgICBpZiAoZXF1YWxzU2lnbkNv
dW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIFZl
Y3Rvcjx1aW50OF90PiB7IH07CisgICAgfQogCiAgICAgLy8gVGhlIHNob3VsZCBiZSBubyBwYWRk
aW5nIGlmIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIDQuCi0gICAgLy8gV2UgdXNlIChvdXRMZW5n
dGggKyBlcXVhbHNTaWduQ291bnQpIGluc3RlYWQgb2YgbGVuZ3RoIGJlY2F1c2Ugd2UgZG9uJ3Qg
d2FudCB0byBhY2NvdW50IGZvciBpZ25vcmVkIGNoYXJhY3RlcnMgKGkuZS4gc3BhY2VzKS4KLSAg
ICBpZiAob3B0aW9ucyAmIEJhc2U2NFZhbGlkYXRlUGFkZGluZyAmJiBlcXVhbHNTaWduQ291bnQg
JiYgKG91dExlbmd0aCArIGVxdWFsc1NpZ25Db3VudCkgJSA0KQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgLy8gV2UgdXNlIChkZXN0aW5hdGlvbkxlbmd0aCArIGVxdWFsc1NpZ25Db3VudCkg
aW5zdGVhZCBvZiBsZW5ndGggYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGFjY291bnQgZm9yIGln
bm9yZWQgY2hhcmFjdGVycyAoaS5lLiBzcGFjZXMpLgorICAgIGlmIChvcHRpb25zLmNvbnRhaW5z
KEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZykgJiYgZXF1YWxzU2lnbkNvdW50
ICYmIChkZXN0aW5hdGlvbkxlbmd0aCArIGVxdWFsc1NpZ25Db3VudCkgJSA0KQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gVmFsaWQgZGF0YSBpcyAobiAqIDQgKyBbMCwy
LDNdKSBjaGFyYWN0ZXJzIGxvbmcuCi0gICAgaWYgKChvdXRMZW5ndGggJSA0KSA9PSAxKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKChkZXN0aW5hdGlvbkxlbmd0aCAlIDQpID09IDEp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgLy8gNC1ieXRlIHRvIDMt
Ynl0ZSBjb252ZXJzaW9uCi0gICAgb3V0TGVuZ3RoIC09IChvdXRMZW5ndGggKyAzKSAvIDQ7Ci0g
ICAgaWYgKCFvdXRMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZXN0aW5hdGlv
bkxlbmd0aCAtPSAoZGVzdGluYXRpb25MZW5ndGggKyAzKSAvIDQ7CisgICAgaWYgKCFkZXN0aW5h
dGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIHVuc2lnbmVk
IHNpZHggPSAwOwogICAgIHVuc2lnbmVkIGRpZHggPSAwOwotICAgIGlmIChvdXRMZW5ndGggPiAx
KSB7Ci0gICAgICAgIHdoaWxlIChkaWR4IDwgb3V0TGVuZ3RoIC0gMikgewotICAgICAgICAgICAg
b3V0W2RpZHhdID0gKCgob3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHggKyAxXSA+
PiA0KSAmIDAwMykpOwotICAgICAgICAgICAgb3V0W2RpZHggKyAxXSA9ICgoKG91dFtzaWR4ICsg
MV0gPDwgNCkgJiAyNTUpIHwgKChvdXRbc2lkeCArIDJdID4+IDIpICYgMDE3KSk7Ci0gICAgICAg
ICAgICBvdXRbZGlkeCArIDJdID0gKCgob3V0W3NpZHggKyAyXSA8PCA2KSAmIDI1NSkgfCAob3V0
W3NpZHggKyAzXSAmIDA3NykpOworICAgIGlmIChkZXN0aW5hdGlvbkxlbmd0aCA+IDEpIHsKKyAg
ICAgICAgd2hpbGUgKGRpZHggPCBkZXN0aW5hdGlvbkxlbmd0aCAtIDIpIHsKKyAgICAgICAgICAg
IGRlc3RpbmF0aW9uW2RpZHggICAgXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggICAgXSA8PCAyKSAm
IDI1NSkgfCAoKGRlc3RpbmF0aW9uW3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOworICAgICAgICAg
ICAgZGVzdGluYXRpb25bZGlkeCArIDFdID0gKCgoZGVzdGluYXRpb25bc2lkeCArIDFdIDw8IDQp
ICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lkeCArIDJdID4+IDIpICYgMDE3KSk7CisgICAgICAg
ICAgICBkZXN0aW5hdGlvbltkaWR4ICsgMl0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICsgMl0gPDwg
NikgJiAyNTUpIHwgIChkZXN0aW5hdGlvbltzaWR4ICsgM10gICAgICAgJiAwNzcpKTsKICAgICAg
ICAgICAgIHNpZHggKz0gNDsKICAgICAgICAgICAgIGRpZHggKz0gMzsKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChkaWR4IDwgb3V0TGVuZ3RoKQotICAgICAgICBvdXRbZGlkeF0gPSAoKChv
dXRbc2lkeF0gPDwgMikgJiAyNTUpIHwgKChvdXRbc2lkeCArIDFdID4+IDQpICYgMDAzKSk7Ci0K
LSAgICBpZiAoKytkaWR4IDwgb3V0TGVuZ3RoKQotICAgICAgICBvdXRbZGlkeF0gPSAoKChvdXRb
c2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgob3V0W3NpZHggKyAyXSA+PiAyKSAmIDAxNykpOwor
ICAgIGlmIChkaWR4IDwgZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0aW9uW2Rp
ZHhdID0gKCgoZGVzdGluYXRpb25bc2lkeCAgICBdIDw8IDIpICYgMjU1KSB8ICgoZGVzdGluYXRp
b25bc2lkeCArIDFdID4+IDQpICYgMDAzKSk7CiAKLSAgICBpZiAob3V0TGVuZ3RoIDwgb3V0LnNp
emUoKSkKLSAgICAgICAgb3V0LnNocmluayhvdXRMZW5ndGgpOworICAgIGlmICgrK2RpZHggPCBk
ZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgZGVzdGluYXRpb25bZGlkeF0gPSAoKChkZXN0aW5h
dGlvbltzaWR4ICsgMV0gPDwgNCkgJiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMl0gPj4g
MikgJiAwMTcpKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIGlmIChkZXN0aW5hdGlvbkxlbmd0
aCA8IGRlc3RpbmF0aW9uLnNpemUoKSkKKyAgICAgICAgZGVzdGluYXRpb24uc2hyaW5rKGRlc3Rp
bmF0aW9uTGVuZ3RoKTsKKyAgICByZXR1cm4gZGVzdGluYXRpb247CiB9CiAKLWJvb2wgYmFzZTY0
RGVjb2RlKGNvbnN0IFN0cmluZyYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
ciBvdXQsIHVuc2lnbmVkIG9wdGlvbnMpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2
NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSBpbi5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbi5pczhCaXQoKSkKLSAgICAgICAg
cmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0
LCBvcHRpb25zLCBiYXNlNjREZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5h
bChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIG9wdGlvbnMsIGJhc2U2NERlY01hcCk7
CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAgaWYgKCFsZW5ndGgg
fHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChp
bnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CisgICAgcmV0dXJuIGJh
c2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9wdGlvbnMs
IG1hcCk7CiB9CiAKLWJvb2wgYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcgaW4sIFNpZ25lZE9yVW5z
aWduZWRDaGFyVmVjdG9yQWRhcHRlciBvdXQsIHVuc2lnbmVkIG9wdGlvbnMpCitPcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3IGlucHV0LCBPcHRpb25TZXQ8
QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBpbi5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbi5p
czhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3Rl
cnM4KCksIGxlbmd0aCwgb3V0LCBvcHRpb25zLCBiYXNlNjREZWNNYXApOwotICAgIHJldHVybiBi
YXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIG9wdGlv
bnMsIGJhc2U2NERlY01hcCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7
CisgICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNl
NjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1h
cCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigp
LCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKLWJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBvdXQsIHVu
c2lnbmVkIG9wdGlvbnMpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICBvdXQuY2xlYXIoKTsKKyAg
ICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJ
bnRlcm5hbChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgb3B0aW9ucywgbWFwKTsKK30KIAot
ICAgIC8vIElmIHRoZSBpbnB1dCBzdHJpbmcgaXMgcGF0aG9sb2dpY2FsbHkgbGFyZ2UsIGp1c3Qg
cmV0dXJuIG5vdGhpbmcuCi0gICAgaWYgKGluLnNpemUoKSA+IFVJTlRfTUFYKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0
aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKK3sKKyAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1h
cCk7Cit9CiAKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KGluLmRhdGEoKSksIGluLnNpemUoKSwgb3V0LCBvcHRpb25zLCBiYXNl
NjREZWNNYXApOworT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3Qg
dWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0
aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKK3sKKyAgICByZXR1cm4gYmFzZTY0
RGVjb2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJh
c2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlciBvdXQsIHVuc2lnbmVkIG9wdGlvbnMpCitPcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVN
YXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBvcHRpb25zLCBiYXNlNjREZWNNYXAp
OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKIH0KIAotYm9vbCBiYXNlNjRV
UkxEZWNvZGUoY29uc3QgU3RyaW5nJiBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyIG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IFN0cmluZyYgaW5wdXQpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0g
ICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNv
ZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwg
YmFzZTY0VVJMRGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hh
cmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXAp
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3Ro
IHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsK
KyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxl
bmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVj
b2RlKFN0cmluZ1ZpZXcgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBvdXQp
CitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3IGlu
cHV0KQogewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGluLmxlbmd0aCgpOwotICAgIGlmICghbGVu
Z3RoIHx8IGluLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW4uY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2NFVSTERl
Y01hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnMxNigp
LCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwgYmFzZTY0VVJMRGVjTWFwKTsKKyAgICB1bnNp
Z25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5p
czhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJh
Y3RlcnM4KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CisgICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHsgfSwg
QmFzZTY0RGVjb2RlTWFwOjpVUkwpOwogfQogCi1ib29sIGJhc2U2NFVSTERlY29kZShjb25zdCBW
ZWN0b3I8Y2hhcj4mIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0KQor
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBpbnB1dCkKIHsKLSAgICBvdXQuY2xlYXIoKTsKKyAgICBpZiAoaW5wdXQuc2l6ZSgp
ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Cit9CiAKLSAgICAv
LyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdlLCBqdXN0IHJldHVy
biBub3RoaW5nLgotICAgIGlmIChpbi5zaXplKCkgPiBVSU5UX01BWCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3Qg
VmVjdG9yPGNoYXI+JiBpbnB1dCkKK3sKKyAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpOworfQogCi0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihpbi5kYXRhKCkpLCBpbi5zaXplKCksIG91dCwgQmFzZTY0
RGVmYXVsdCwgYmFzZTY0VVJMRGVjTWFwKTsKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFz
ZTY0VVJMRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERl
Y29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0
YSwgdW5zaWduZWQgbGVuLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0KQor
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNlNjREZWZh
dWx0LCBiYXNlNjRVUkxEZWNNYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoLCB7IH0sIEJhc2U2
NERlY29kZU1hcDo6VVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQv
QmFzZTY0LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE5MSArMjcsMTAwIEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAotZW51bSBCYXNlNjRFbmNvZGVQb2xp
Y3kgewotICAgIEJhc2U2NERvTm90SW5zZXJ0TEZzLAotICAgIEJhc2U2NEluc2VydExGcywKLSAg
ICBCYXNlNjRVUkxQb2xpY3kgLy8gTm8gcGFkZGluZywgbm8gTEZzLgorZW51bSBjbGFzcyBCYXNl
NjRFbmNvZGVQb2xpY3kgeworICAgIERvTm90SW5zZXJ0TEZzLAorICAgIEluc2VydExGcywKKyAg
ICBVUkwgLy8gTm8gcGFkZGluZywgbm8gTEZzLgogfTsKIAotZW51bSBCYXNlNjREZWNvZGVPcHRp
b25zIHsKLSAgICBCYXNlNjREZWZhdWx0ID0gMCwKLSAgICBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcg
PSAxIDw8IDAsCi0gICAgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgPSAxIDw8IDEsCi0g
ICAgQmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiID0gMSA8PCAyLAotfTsKLQotY2xhc3MgU2lnbmVk
T3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIHsKLXB1YmxpYzoKLSAgICBTaWduZWRPclVuc2ln
bmVkQ2hhclZlY3RvckFkYXB0ZXIoVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCi0gICAgICAgIDogbV9p
c1NpZ25lZCh0cnVlKQotICAgIHsKLSAgICAgICAgbV92ZWN0b3IuYyA9ICZ2ZWN0b3I7Ci0gICAg
fQotICAgIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8dWludDhfdD4m
IHZlY3RvcikKLSAgICAgICAgOiBtX2lzU2lnbmVkKGZhbHNlKQotICAgIHsKLSAgICAgICAgbV92
ZWN0b3IudSA9ICZ2ZWN0b3I7Ci0gICAgfQotCi0gICAgdWludDhfdCogZGF0YSgpCi0gICAgewot
ICAgICAgICBpZiAobV9pc1NpZ25lZCkKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihtX3ZlY3Rvci5jLT5kYXRhKCkpOwotICAgICAgICByZXR1cm4gbV92ZWN0
b3IudS0+ZGF0YSgpOwotICAgIH0KLSAgICAKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAobV9pc1NpZ25lZCkKLSAgICAgICAgICAgIHJldHVybiBtX3ZlY3Rvci5j
LT5zaXplKCk7Ci0gICAgICAgIHJldHVybiBtX3ZlY3Rvci51LT5zaXplKCk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1faXNTaWduZWQpIHsKLSAg
ICAgICAgICAgIG1fdmVjdG9yLmMtPmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgbV92ZWN0b3IudS0+Y2xlYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBncm93KHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgaWYgKG1faXNTaWduZWQpIHsKLSAg
ICAgICAgICAgIG1fdmVjdG9yLmMtPmdyb3coc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbV92ZWN0b3IudS0+Z3JvdyhzaXplKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBzaHJpbmsoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICBpZiAobV9pc1NpZ25l
ZCkgewotICAgICAgICAgICAgbV92ZWN0b3IuYy0+c2hyaW5rKHNpemUpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1fdmVjdG9yLnUtPnNocmluayhzaXplKTsKLSAg
ICB9Ci0gICAgCi0gICAgdWludDhfdCYgb3BlcmF0b3JbXShzaXplX3QgcG9zaXRpb24pIHsgcmV0
dXJuIGRhdGEoKVtwb3NpdGlvbl07IH0KK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlTWFwIHsgRGVm
YXVsdCwgVVJMIH07CiAKLXByaXZhdGU6Ci0gICAgYm9vbCBtX2lzU2lnbmVkOwotICAgIHVuaW9u
IHsKLSAgICAgICAgVmVjdG9yPGNoYXI+KiBjOwotICAgICAgICBWZWN0b3I8dWludDhfdD4qIHU7
Ci0gICAgfSBtX3ZlY3RvcjsKK2VudW0gY2xhc3MgQmFzZTY0RGVjb2RlT3B0aW9ucyA6IHVpbnQ4
X3QgeworICAgIFZhbGlkYXRlUGFkZGluZyAgICAgICAgID0gMSA8PCAwLAorICAgIElnbm9yZVNw
YWNlc0FuZE5ld0xpbmVzID0gMSA8PCAxLAorICAgIERpc2NhcmRWZXJ0aWNhbFRhYiAgICAgID0g
MSA8PCAyLAogfTsKIAotY2xhc3MgQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgewotcHVibGljOgotICAgIENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVy
KGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9yKQotICAgICAgICA6IG1faXNTaWduZWQoZmFsc2Up
Ci0gICAgewotICAgICAgICBtX3ZlY3Rvci5jID0gJnZlY3RvcjsKLSAgICB9Ci0gICAgQ29uc3RT
aWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2
ZWN0b3IpCi0gICAgICAgIDogbV9pc1NpZ25lZCh0cnVlKQotICAgIHsKLSAgICAgICAgbV92ZWN0
b3IudSA9ICZ2ZWN0b3I7Ci0gICAgfQorZW51bSBjbGFzcyBCYXNlNjREZWNvZGVNYXAgeyBEZWZh
dWx0LCBVUkwgfTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgaWYgKG1faXNTaWduZWQpCi0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4obV92ZWN0b3IuYy0+ZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIG1f
dmVjdG9yLnUtPmRhdGEoKTsKLSAgICB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKG1faXNTaWduZWQpCi0gICAgICAgICAgICByZXR1cm4gbV92ZWN0b3IuYy0+
c2l6ZSgpOwotICAgICAgICByZXR1cm4gbV92ZWN0b3IudS0+c2l6ZSgpOwotICAgIH0KK3N0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVuSW5zZXJ0aW5n
TEZzID0gNzY7CiAKLXByaXZhdGU6Ci0gICAgYm9vbCBtX2lzU2lnbmVkOwotICAgIHVuaW9uIHsK
LSAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+KiBjOwotICAgICAgICBjb25zdCBWZWN0b3I8dWlu
dDhfdD4qIHU7Ci0gICAgfSBtX3ZlY3RvcjsKLX07CisvLyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlz
IHBhdGhvbG9naWNhbGx5IGxhcmdlLCBqdXN0IHJldHVybiBub3RoaW5nLgorLy8gUmF0aGVyIHRo
YW4gYmVpbmcgcGVyZmVjdGx5IHByZWNpc2UsIHRoaXMgaXMgYSBiaXQgY29uc2VydmF0aXZlLgor
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0RW5jb2RlcklucHV0QnVmZmVy
U2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIDc3ICogNzYgLyA0
ICogMyAtIDI7CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2
b2lkKiwgdW5zaWduZWQsIFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2
NERvTm90SW5zZXJ0TEZzKTsKLXZvaWQgYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25l
ZENoYXJWZWN0b3JBZGFwdGVyLCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBC
YXNlNjREb05vdEluc2VydExGcyk7Ci12b2lkIGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiwg
VmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMp
OwotV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVu
c2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExGcyk7Ci1TdHJp
bmcgYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBC
YXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExGcyk7Ci1TdHJpbmcgYmFzZTY0
RW5jb2RlKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdElu
c2VydExGcyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29k
ZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29k
ZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1h
cDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qg
dm9pZCosIHVuc2lnbmVkLCBVQ2hhciosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBC
YXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNl
NjRFbmNvZGVNYXA6OkRlZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5j
b2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgTENoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2Rl
UG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2Rl
TWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRF
bmNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5j
b2RlTWFwOjpEZWZhdWx0KTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGUoY29uc3QgVmVj
dG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05v
dEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsK
K1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29k
ZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBi
b29sIGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3Rv
ckFkYXB0ZXIsIHVuc2lnbmVkIG9wdGlvbnMgPSBCYXNlNjREZWZhdWx0KTsKLVdURl9FWFBPUlRf
UFJJVkFURSBib29sIGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIsIHVuc2lnbmVkIG9wdGlvbnMgPSBCYXNlNjREZWZhdWx0KTsKLVdURl9F
WFBPUlRfUFJJVkFURSBib29sIGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBTaWdu
ZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIsIHVuc2lnbmVkIG9wdGlvbnMgPSBCYXNlNjRE
ZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2NERlY29kZShjb25zdCBjaGFy
KiwgdW5zaWduZWQsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgdW5zaWduZWQg
b3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYsIE9wdGlvblNldDxCYXNl
NjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFw
OjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4g
PSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CitXVEZf
RVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9
LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOworV1RGX0VYUE9S
VF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFZl
Y3RvcjxjaGFyPiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0
RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFU
RSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCB1aW50OF90Kiwg
dW5zaWduZWQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVj
b2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBP
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiwgdW5zaWdu
ZWQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFw
ID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotaW5saW5lIHZvaWQgYmFzZTY0RW5jb2Rl
KENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4m
IG91dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8dWludDhfdD4g
YmFzZTY0RW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBv
bGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGlu
LmRhdGEoKSwgaW4uc2l6ZSgpLCBvdXQsIHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUg
dm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoraW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRF
bmNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBiYXNlNjRFbmNvZGUoaW4uZGF0YSgpLCBp
bi5sZW5ndGgoKSwgb3V0LCBwb2xpY3kpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW5wdXQu
ZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKIH0KIAotaW5saW5lIFN0cmluZyBi
YXNlNjRFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgaW4sIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVu
Y29kZShjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFz
ZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwg
aW4uc2l6ZSgpLCBwb2xpY3kpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW5wdXQuZGF0YSgp
LCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2
NEVuY29kZShjb25zdCBDU3RyaW5nJiBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKLXsK
LSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCksIHBvbGljeSk7
Ci19CiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBBbGwgdGhlIHNhbWUg
ZnVuY3Rpb25zIG1vZGlmaWVkIGZvciBiYXNlNjR1cmwsIGFzIGRlZmluZWQgaW4gUkZDIDQ2NDgu
CiAvLyBUaGlzIGZvcm1hdCB1c2VzICctJyBhbmQgJ18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycg
cmVzcGVjdGl2ZWx5LgogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwg
VmVjdG9yPGNoYXI+Jik7Ci12b2lkIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlciwgVmVjdG9yPGNoYXI+Jik7Ci12b2lkIGJhc2U2NFVSTEVuY29k
ZShjb25zdCBDU3RyaW5nJiwgVmVjdG9yPGNoYXI+Jik7Ci0KLVdURl9FWFBPUlRfUFJJVkFURSBT
dHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7Ci1TdHJpbmcgYmFz
ZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVN0
cmluZyBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYpOworVmVjdG9yPHVpbnQ4X3Q+IGJh
c2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQpOworVmVjdG9yPHVpbnQ4X3Q+IGJh
c2U2NFVSTEVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKK1ZlY3Rvcjx1aW50OF90PiBi
YXNlNjRVUkxFbmNvZGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7CitWZWN0b3I8dWludDhfdD4gYmFz
ZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
YmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9y
QWRhcHRlcik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoU3RyaW5n
VmlldywgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBTaWduZWRPclVu
c2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0
VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyKTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmKTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3KTsKK1dURl9F
WFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShj
b25zdCBWZWN0b3I8dWludDhfdD4mKTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mKTsKK1dURl9F
WFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShj
b25zdCB1aW50OF90KiwgdW5zaWduZWQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CiAK
LWlubGluZSB2b2lkIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVj
dG9yQWRhcHRlciBpbiwgVmVjdG9yPGNoYXI+JiBvdXQpCitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgbGVuZ3RoKQogewot
ICAgIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLnNpemUoKSwgb3V0KTsKKyAgICByZXR1
cm4gYmFzZTY0RW5jb2RlKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBC
YXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSB2b2lkIGJhc2U2NFVSTEVuY29kZShj
b25zdCBDU3RyaW5nJiBpbiwgVmVjdG9yPGNoYXI+JiBvdXQpCitpbmxpbmUgVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NFVSTEVuY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQogewotICAg
IGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0aCgpLCBvdXQpOworICAgIHJldHVy
biBiYXNlNjRFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFz
ZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluKQor
aW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGUoY29uc3QgVmVjdG9yPGNoYXI+
JiBpbnB1dCkKIHsKLSAgICByZXR1cm4gYmFzZTY0VVJMRW5jb2RlKGluLmRhdGEoKSwgaW4uc2l6
ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgp
LCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1p
bmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5nJiBpbikKK2lubGluZSBW
ZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGlucHV0KQogewot
ICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgpLCBpbi5sZW5ndGgoKSk7CisgICAg
cmV0dXJuIGJhc2U2NEVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRF
bmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNCYXNlNjRPckJhc2U2
NFVSTENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCkBAIC0yMTksMTUgKzEyOCwxMTcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogICAgIHJldHVybiBpc0FTQ0lJ
QWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJysnIHx8IGMgPT0gJy8nIHx8IGMgPT0gJy0nIHx8IGMg
PT0gJ18nOwogfQogCitpbmxpbmUgdW5zaWduZWQgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUo
dW5zaWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCit7CisgICAg
aWYgKCFpbnB1dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaW5wdXRMZW5n
dGggPiBtYXhpbXVtQmFzZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBhdXRvIGJhc2VQYWRkZWRFbmNvZGVkU2l6ZSA9IFsmXSB7CisgICAgICAgIHJl
dHVybiAoKGlucHV0TGVuZ3RoICsgMikgLyAzKSAqIDQ7CisgICAgfTsKKworICAgIGF1dG8gYmFz
ZVVucGFkZGVkRW5jb2RlZFNpemUgPSBbJl0geworICAgICAgICByZXR1cm4gKChpbnB1dExlbmd0
aCAqIDQpICsgMikgLyAzOworICAgIH07CisKKyAgICBzd2l0Y2ggKHBvbGljeSkgeworICAgIGNh
c2UgQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGczoKKyAgICAgICAgcmV0dXJuIGJh
c2VQYWRkZWRFbmNvZGVkU2l6ZSgpOworCisgICAgY2FzZSBCYXNlNjRFbmNvZGVQb2xpY3k6Oklu
c2VydExGczogeworICAgICAgICBhdXRvIHJlc3VsdCA9IGJhc2VQYWRkZWRFbmNvZGVkU2l6ZSgp
OworICAgICAgICByZXR1cm4gcmVzdWx0ICsgKChyZXN1bHQgLSAxKSAvIG1heGltdW1CYXNlNjRM
aW5lTGVuZ3RoV2hlbkluc2VydGluZ0xGcyk7CisgICAgfQorCisgICAgY2FzZSBCYXNlNjRFbmNv
ZGVQb2xpY3k6OlVSTDoKKyAgICAgICAgcmV0dXJuIGJhc2VVbnBhZGRlZEVuY29kZWRTaXplKCk7
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K3N0cnVjdCBCYXNlNjRTcGVjaWZpY2F0aW9uIHsKKyAgICBjb25zdCB2b2lkKiBpbnB1dERhdGE7
CisgICAgdW5zaWduZWQgaW5wdXRMZW5ndGg7CisgICAgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eTsKKyAgICBCYXNlNjRFbmNvZGVNYXAgbWFwOworfTsKKworaW5saW5lIEJhc2U2NFNwZWNpZmlj
YXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpE
b05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwIG1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCkKK3sKKyAgICByZXR1cm4geyBpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1h
cCB9OworfQorCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzKQoreworICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOworfQorCitpbmxpbmUgQmFz
ZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQs
IEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQu
c2l6ZSgpLCBwb2xpY3kpOworfQorCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRF
bmNvZGVkKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0g
QmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKK3sKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3kpOworfQorCitpbmxp
bmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0
RGF0YSwgdW5zaWduZWQgaW5wdXRMZW5ndGgpCit7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQo
aW5wdXREYXRhLCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVu
Y29kZU1hcDo6VVJMKTsKK30KKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJM
RW5jb2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQoreworICAgIHJldHVybiBiYXNl
NjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6
OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworfQorCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNh
dGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQpCit7CisgICAg
cmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7Cit9CisKK2lubGluZSBCYXNl
NjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit7
CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwg
QmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKK30KKwordGVt
cGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7Citw
dWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYg
YmFzZTY0KQorICAgICAgICA6IG1fYmFzZTY0IHsgYmFzZTY0IH0KKyAgICAgICAgLCBtX2VuY29k
ZWRMZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgs
IGJhc2U2NC5wb2xpY3kpIH0KKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9lbmNvZGVkTGVuZ3RoOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24pIGNvbnN0CisgICAgewor
ICAgICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBtX2Jhc2U2NC5pbnB1dExl
bmd0aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9iYXNlNjQucG9saWN5LCBtX2Jh
c2U2NC5tYXApOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCYXNlNjRTcGVjaWZpY2F0aW9uIG1f
YmFzZTY0OworICAgIHVuc2lnbmVkIG1fZW5jb2RlZExlbmd0aDsKK307CisKIH0gLy8gbmFtZXNw
YWNlIFdURgogCit1c2luZyBXVEY6OkJhc2U2NERlY29kZU9wdGlvbnM7CiB1c2luZyBXVEY6OkJh
c2U2NEVuY29kZVBvbGljeTsKLXVzaW5nIFdURjo6QmFzZTY0RG9Ob3RJbnNlcnRMRnM7Ci11c2lu
ZyBXVEY6OkJhc2U2NEluc2VydExGczsKLXVzaW5nIFdURjo6QmFzZTY0VmFsaWRhdGVQYWRkaW5n
OwotdXNpbmcgV1RGOjpCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lczsKLXVzaW5nIFdURjo6
QmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiOwotdXNpbmcgV1RGOjpiYXNlNjRFbmNvZGU7Cit1c2lu
ZyBXVEY6OkJhc2U2NFNwZWNpZmljYXRpb247CiB1c2luZyBXVEY6OmJhc2U2NERlY29kZTsKK3Vz
aW5nIFdURjo6YmFzZTY0RW5jb2RlOwordXNpbmcgV1RGOjpiYXNlNjRFbmNvZGVkOwordXNpbmcg
V1RGOjpiYXNlNjRVUkxEZWNvZGU7CiB1c2luZyBXVEY6OmJhc2U2NFVSTERlY29kZTsKK3VzaW5n
IFdURjo6YmFzZTY0VVJMRW5jb2RlOwordXNpbmcgV1RGOjpiYXNlNjRVUkxFbmNvZGVkOwogdXNp
bmcgV1RGOjppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyOwpJbmRleDogU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMjc3NzE0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjk0IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxl
LmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNo
IG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgLSBVcGRhdGVzIHRvIHVzZSBuZXcgc2lnbmF0dXJlcyBm
b3IgYmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIGluY2x1ZGluZworICAgICAgICAgIHV0aWxpemlu
ZyB0aGUgc3RyaW5nIHR5cGUgYWRhcHRvciBhbmQgbWFrZVN0cmluZy4KKyAgICAgICAgLSBSZXBs
YWNlIG91dCBwYXJhbWV0ZXIgYmFzZWQgZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpIHdp
dGggCisgICAgICAgICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRv
TWFzdGVyS2V5KCkuCisgICAgICAgIC0gVXBkYXRlIHN5bmNocm9ub3VzIGxvYWRpbmcgY29kZSBw
YXRoIHRvIHVzZSB1aW50OF90KiBjb25zaXN0ZW50bHkgZm9yCisgICAgICAgICAgZGF0YSBidWZm
ZXIgcmVwcmVzZW50YXRpb24uCisgICAgICAgIC0gUmVwbGFjZSBvdXQgcGFyYW1ldGVycyBpbiBx
dW90ZWRQcmludGFibGVFbmNvZGUvcXVvdGVkUHJpbnRhYmxlRGVjb2RlCisgICAgICAgICAgd2l0
aCBPcHRpb25hbC4KKworICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFS
ZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0S2V5SURzS2V5aWRzKToKKyAg
ICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlLgorCisgICAgICAgIChXZWJD
b3JlOjpzYW5pdGl6ZUtleWlkcyk6IAorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3Ry
aW5nKGJhc2U2NFVSTEVuY29kZWQoKSkKKworICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVk
aWEvbGVnYWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZSk6IAorICAgICAgICBVcGRhdGUgdG8gdXNlIG5l
dyBiYXNlNjREZWNvZGUoKS4KKworICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OmpzVmFsdWVXaXRoRGF0YUlu
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGVtSW5D
b250ZXh0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRFbmNv
ZGVkKCkpLiBSZXBsYWNlIHN0cmluZyBjb25jYXRlbnRhdGlvbgorICAgICAgICB1c2luZyBvcGVy
YXRvcisgd2l0aCBtYWtlU3RyaW5nKCkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL0F1
dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdXRoZW50aWNh
dG9yQ29vcmRpbmF0b3JJbnRlcm5hbDo6cHJvZHVjZUNsaWVudERhdGFKc29uKToKKyAgICAgICAg
VXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCkpLgorCisgICAg
ICAgICogTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwpOgorICAg
ICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoKSkuCisK
KyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlU2VjV2ViU29ja2V0S2V5KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQpOgorICAg
ICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoKSkuCisK
KyAgICAgICAgKiBjcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaDoKKyAgICAgICAgQ2hh
bmdlIGZyb20gb3V0cGFyYW1ldGVyIGJhc2VkIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXko
KSB0byBuZXcKKyAgICAgICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5
cHRvTWFzdGVyS2V5KCkuCisKKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0NyeXB0b0tleUVDR0Ny
eXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxk
RWxlbWVudHMgY29uc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJh
c2U2NFVSTEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwR0NyeXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3Rl
cktleSk6IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IGRlZmF1bHRXZWJDcnlwdG9N
YXN0ZXJLZXkoKSBzaWduYXR1cmUuCisKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlB
RVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjppbXBvcnRKd2spOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjpleHBvcnRKd2sgY29uc3QpOgorICAgICAgICBV
cGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoKSkuCisgICAgICAgIAorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUVDOjppbXBvcnRKd2spOgorICAgICAgICBV
cGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUuCisKKyAgICAgICAgKiBjcnlwdG8va2V5
cy9DcnlwdG9LZXlITUFDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6Omlt
cG9ydEp3ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjpleHBvcnRKd2sgY29u
c3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBtYWtlU3Ry
aW5nKGJhc2U2NFVSTEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9L
ZXlSU0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjppbXBvcnRKd2spOgor
ICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpleHBvcnRKd2sgY29uc3QpOgorICAgICAg
ICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBtYWtlU3RyaW5nKGJhc2U2NFVS
TEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVudHMg
Y29uc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoKSkuCisKKyAgICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFw
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkpOgorICAg
ICAgICAoV2ViQ29yZTo6ZmluZE1hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBkZWZhdWx0V2Vi
Q3J5cHRvTWFzdGVyS2V5KCkgc2lnbmF0dXJlLgorCisgICAgICAgICogY3J5cHRvL29wZW5zc2wv
U2VyaWFsaXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRl
ZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGVmYXVsdFdl
YkNyeXB0b01hc3RlcktleSk6IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IGRlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKSBzaWduYXR1cmUuCisKKyAgICAgICAgKiBmaWxlYXBpL0Zp
bGVSZWFkZXJMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcjo6
Y29udmVydFRvRGF0YVVSTCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IG1ha2VTdHJpbmco
YmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0OjpjcmVhdGVEaWdlc3QpOgor
ICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRlKToKKyAgICAg
ICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlIC8gbWFrZVN0cmluZyhiYXNlNjRV
UkxFbmNvZGVkKCkpLgorCisgICAgICAgICogaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURh
dGE6OmRlY29kZURhdGFUb0NvbnRlbnQpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtl
U3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDb250ZW50U2Vj
dXJpdHlQb2xpY3lTSEEyNTZIYXNoKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0
RGVjb2RlIC8gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yOjpidWlsZFdlYlNvY2tldE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXF1ZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJl
c3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJj
ZXB0UmVxdWVzdFdpdGhSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2Ug
bmV3IGJhc2U2NERlY29kZSAvIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUGFnZUFnZW50OjphcmNoaXZlKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBu
ZXcgbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90PiBi
dWZmZXIgdG8gbWF0Y2ggbmV3IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkKKyAgICAgICAgc2ln
bmF0dXJlLgorCisgICAgICAgICogbG9hZGVyL0xvYWRlclN0cmF0ZWd5Lmg6CisgICAgICAgIFN3
aXRjaCB0byB1c2luZyBWZWN0b3I8dWludDhfdD4gZm9yIHRoZSBkYXRhIGJ1ZmZlci4KKworICAg
ICAgICAqIGxvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6RXBoZW1lcmFsU291cmNlTm9uY2U6OmlzVmFs
aWQgY29uc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUuCisK
KyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCk6CisgICAgICAg
IFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NERlY29kZS4KKworICAgICAgICAqIGxvYWRlci9hcmNo
aXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSFRNTEFyY2hp
dmU6OmdlbmVyYXRlTUhUTUxEYXRhKToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIG5ldyBiYXNl
NjRFbmNvZGUgYW5kIG5ldyBxdW90ZWRQcmludGFibGVFbmNvZGUuCisKKyAgICAgICAgKiBsb2Fk
ZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSFRN
TFBhcnNlcjo6cGFyc2VOZXh0UGFydCk6CisgICAgICAgIFN3aXRjaCB0byB1c2luZyBuZXcgYmFz
ZTY0RGVjb2RlIGFuZCBuZXcgcXVvdGVkUHJpbnRhYmxlRGVjb2RlLgorCisgICAgICAgICogbG9h
ZGVyL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW06CisgICAgICAgIChXZWJD
b3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5s
aW5rYWJsZVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50
OjpjYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VTZWNyZXRUb2tlbik6CisgICAgICAgIFVwZGF0ZSB0
byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZSAvIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgp
KS4KKworICAgICAgICAqIHBhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJhc2U2NFV0aWxpdGllczo6YnRvYSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlNjRVdGls
aXRpZXM6OmF0b2IpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjREZWNvZGUgLyBt
YWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisgICAgCisgICAgICAgICogcGFnZS9QYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2Vk
KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlLgorCisgICAgICAgICog
cGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cjo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAg
QWRkIG92ZXJsb2FkIGZvciBhcHBlbmQgd2hpY2ggYWxsb3dzIHBhc3NpbmcgaW4gYSB1aW50OF90
Ki4KKworICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFy
S2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGljZW5zZUZvcm1hdCk6CisgICAgICAg
IChXZWJDb3JlOjpleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpleHRyYWN0S2V5SWRGcm9tV2ViTUluaXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6CisgICAgICAgIFVw
ZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZSAvIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5j
b2RlZCgpKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1G
YWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0U2luZkRhdGEp
OgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjREZWNvZGUuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZh
aXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6cmVxdWVzdExpY2Vuc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNl
bnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFt
aW5nQVZGT2JqQzo6ZGlkUHJvdmlkZVJlcXVlc3RzKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBu
ZXcgYmFzZTY0RGVjb2RlIC8gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25z
dCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgp
KS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIFVwZGF0ZSB0byB1
c2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZVVuaXF1ZUZvbnROYW1lKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVVbmlxdWVGb250TmFtZSk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IG1ha2VTdHJp
bmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9TU0xLZXlHZW5l
cmF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2VTdHJpbmcpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NEVu
Y29kZWQoKSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bG9hZEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgor
ICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlciB0byBtYXRjaCBu
ZXcgbG9hZFJlc291cmNlU3luY2hyb25vdXNseQorICAgICAgICBzaWduYXR1cmUuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkJsb2JSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAg
IFN3aXRjaCB0byB1c2luZyBWZWN0b3I8dWludDhfdD4gYnVmZmVyIHRvIG1hdGNoIG5ldyBsb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5CisgICAgICAgIHNpZ25hdHVyZS4KKworICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvQ3JlZGVudGlhbEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxCYXNl
OjpzZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyIGNvbnN0KToKKyAgICAg
ICAgQWRkIGhlbHBlciB0byBjb25zdHJ1Y3QgQmFzaWMgYXV0aCBoZWFkZXIgdG8gcmVwbGFjZSBk
dXBsaWNhdGVkIGxvZ2ljIGluCisgICAgICAgIGNhbGwgc2l0ZXMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFV
UkxEZWNvZGVyOjpkZWNvZGVCYXNlNjQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29k
ZXI6OmRlY29kZUVzY2FwZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRl
Y29kZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERl
Y29kZXIuaDoKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlLgorCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcg
VmVjdG9yPHVpbnQ4X3Q+IGZvciB0aGUgZGF0YSBidWZmZXIgaW4gdGhlIHN5bmNocm9ub3VzIGxv
YWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNl
aXZlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNs
aWVudC5oOgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlciB0
byBtYXRjaCBuZXcgbG9hZFJlc291cmNlU3luY2hyb25vdXNseQorICAgICAgICBzaWduYXR1cmUu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIpOgorICAg
ICAgICBVc2UgbmV3IHNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSBo
ZWxwZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVp
bnQ4X3Q+IGZvciB0aGUgZGF0YSBidWZmZXIgaW4gdGhlIHN5bmNocm9ub3VzIGxvYWQuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFV
UkwpOgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGZvciB0aGUgZGF0
YSBidWZmZXIgaW4gdGhlIHN5bmNocm9ub3VzIGxvYWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5
QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAgVXNlIG5ldyBzZXJpYWxpemF0aW9u
Rm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkgaGVscGVyLgorCisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAg
ICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90PiBmb3IgdGhlIGRhdGEgYnVmZmVy
IGluIHRoZSBzeW5jaHJvbm91cyBsb2FkLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgU3dpdGNo
IHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90PiBmb3IgdGhlIGRhdGEgYnVmZmVyIGluIHRoZSBzeW5j
aHJvbm91cyBsb2FkLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3
b3JrU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIb3N0VExTQ2VydGlmaWNhdGVTZXQ6
OmNvbXB1dGVDZXJ0aWZpY2F0ZUhhc2gpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtl
U3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0RlY29k
ZUVzY2FwZVNlcXVlbmNlcy5oOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlVVJMRXNjYXBlU2Vx
dWVuY2VzQXNEYXRhKToKKyAgICAgICAgU3dpdGNoIHRvIHJldHVybmluZyBWZWN0b3I8dWludDhf
dD4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
Omxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6cXVvdGVkUHJp
bnRhYmxlRW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnF1b3RlZFByaW50YWJsZURlY29kZSk6
CisgICAgICAgIFJlcGxhY2UgdXNlcyBvZiBWZWN0b3I8Y2hhcj4gd2l0aCBWZWN0b3I8dWludDhf
dD4gYW5kIHRoZSBvdXQgcGFyYW1ldGVycworICAgICAgICB3aXRoIE9wdGlvbmFsIHJldHVybiB2
YWx1ZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9yV2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6Cisg
ICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKwor
ICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2ggY29uc3QpOgorICAgICAg
ICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoKSkuCisKIDIw
MjEtMDUtMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2Ug
V1RGOjpMb2NrZXIgZm9yIGxvY2tpbmcgQmFzZUF1ZGlvQ29udGV4dCdzIGdyYXBoIGxvY2sKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3Ry
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODAsMTUgKzgwLDE0IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJl
ZEJ1ZmZlcj4KICAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIFZlY3RvcjxjaGFyPiBrZXlJRERhdGE7Ci0gICAgICAgIGlmICghV1RGOjpiYXNlNjRV
UkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pKQorICAgICAgICBhdXRvIGtleUlERGF0YSA9
IGJhc2U2NFVSTERlY29kZShrZXlJRCk7CisgICAgICAgIGlmICgha2V5SUREYXRhKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGtleUlERGF0YS5zaXplKCkgPCBrS2V5SWRz
TWluS2V5SWRTaXplSW5CeXRlcyB8fCBrZXlJRERhdGEuc2l6ZSgpID4ga0tleUlkc01heEtleUlk
U2l6ZUluQnl0ZXMpCisgICAgICAgIGlmIChrZXlJRERhdGEtPnNpemUoKSA8IGtLZXlJZHNNaW5L
ZXlJZFNpemVJbkJ5dGVzIHx8IGtleUlERGF0YS0+c2l6ZSgpID4ga0tleUlkc01heEtleUlkU2l6
ZUluQnl0ZXMpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIFJl
ZjxTaGFyZWRCdWZmZXI+IGtleUlEQnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92
ZShrZXlJRERhdGEpKTsKLSAgICAgICAga2V5SURzLmFwcGVuZChXVEZNb3ZlKGtleUlEQnVmZmVy
KSk7CisgICAgICAgIGtleUlEcy5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgq
a2V5SUREYXRhKSkpOwogICAgIH0KIAogICAgIHJldHVybiBrZXlJRHM7CkBAIC0xMDUsNyArMTA0
LDcgQEAgc3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNhbml0aXplS2V5aQogICAgIGF1dG8g
b2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGtpZHNBcnJheSA9IEpT
T046OkFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IGtleUlEQnVmZmVy
LnZhbHVlKCkpCi0gICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhXVEY6OmJhc2U2NFVSTEVu
Y29kZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpKTsKKyAgICAgICAga2lkc0FycmF5
LT5wdXNoU3RyaW5nKG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChidWZmZXItPmRhdGEoKSwg
YnVmZmVyLT5zaXplKCkpKSk7CiAgICAgb2JqZWN0LT5zZXRBcnJheSgia2lkcyIsIFdURk1vdmUo
a2lkc0FycmF5KSk7CiAKICAgICBDU3RyaW5nIGpzb25EYXRhID0gb2JqZWN0LT50b0pTT05TdHJp
bmcoKS51dGY4KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNlc3Npb25D
bGVhcktleS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2OSwxMyArMTY5LDEzIEBAIGJvb2wgQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1
cGRhdGUoVWludDhBcnIKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleURhdGE7Ci0gICAgICAgICAgICBpZiAo
IWJhc2U2NERlY29kZShyYXdLZXlEYXRhLCBrZXlEYXRhKSB8fCBrZXlEYXRhLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgYXV0byBrZXlEYXRhID0gYmFzZTY0RGVjb2RlKHJhd0tleURhdGEpOwor
ICAgICAgICAgICAgaWYgKCFrZXlEYXRhIHx8IGtleURhdGEtPmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKCVwKSAtIGZh
aWxlZDogdW5hYmxlIHRvIGJhc2U2NCBkZWNvZGUga2V5IiwgdGhpcyk7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fY2FjaGVkS2V5cy5z
ZXQoa2V5SWQsIFdURk1vdmUoa2V5RGF0YSkpOworICAgICAgICAgICAgbV9jYWNoZWRLZXlzLnNl
dChrZXlJZCwgV1RGTW92ZSgqa2V5RGF0YSkpOwogICAgICAgICAgICAgZm91bmRWYWxpZEtleSA9
IHRydWU7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5z
L1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsMTQgKzI0MywxMiBAQCB2
b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojpwb3N0RXZlCiAKIHN0YXRpYyBKU1ZhbHVl
ICpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQoTlNEYXRhICpkYXRhLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBKU0NvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERh
dGE7Ci0gICAgYmFzZTY0RW5jb2RlKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSwgYmFzZTY0
RGF0YSk7Ci0KKyAgICAvLyBGSVhNRTogQWRkIG1ha2VDRlN0cmluZy9tYWtlTlNTdHJpbmcgdG8g
YXZvaWQgdW5uZWNlc3NhcnkgU3RyaW5nIGFsbG9jYXRpb24uCiAgICAgU3RyaW5nIGRhdGE2NDsK
ICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgZGF0YTY0ID0gImRhdGE6IiAr
IG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgICAgIGRhdGE2NCA9IG1h
a2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2Rh
dGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKSk7CiAgICAgZWxzZQotICAgICAgICBkYXRhNjQgPSAi
ZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICAgICAgZGF0YTY0ID0g
bWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFtkYXRh
IGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOwogCiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0
aE9iamVjdDooaWQpZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRl
eHRdOwogfQpAQCAtMzQyLDkgKzM0MCw3IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFW
TWV0YWRhdGFJdGUKICAgICAgICAgaWQgdmFsdWUgPSBpdGVtLnZhbHVlOwogICAgICAgICBOU1N0
cmluZyAqbWltZVR5cGUgPSBbW2l0ZW0gZXh0cmFBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJN
SU1FdHlwZSJdOwogICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFz
c11dICYmIG1pbWVUeXBlKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsK
LSAgICAgICAgICAgIGJhc2U2NEVuY29kZShbdmFsdWUgYnl0ZXNdLCBbdmFsdWUgbGVuZ3RoXSwg
YmFzZTY0RGF0YSk7Ci0gICAgICAgICAgICBTdHJpbmcgZGF0YTY0ID0gImRhdGE6IiArIFN0cmlu
ZyhtaW1lVHlwZSkgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICAgICAgICAgIGF1dG8g
ZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToiLCBTdHJpbmcobWltZVR5cGUpLCAiO2Jhc2U2NCwi
LCBiYXNlNjRFbmNvZGVkKFt2YWx1ZSBieXRlc10sIFt2YWx1ZSBsZW5ndGhdKSk7CiAgICAgICAg
ICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6KF9fYnJpZGdlIE5TU3RyaW5nICopZGF0YTY0LmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5OkAidmFsdWUiXTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhu
L0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgUmVmPEFycmF5QnVmZmVyPiBw
cm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9iamVjdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2Vi
YXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIG9iamVjdC0+c2V0U3Ry
aW5nKCJjaGFsbGVuZ2UiX3MsIFdURjo6YmFzZTY0VVJMRW5jb2RlKGNoYWxsZW5nZS5kYXRhKCks
IGNoYWxsZW5nZS5sZW5ndGgoKSkpOworICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2Ui
X3MsIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChjaGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVu
Z2UubGVuZ3RoKCkpKSk7CiAgICAgb2JqZWN0LT5zZXRTdHJpbmcoIm9yaWdpbiJfcywgb3JpZ2lu
LnRvUmF3U3RyaW5nKCkpOwogCiAgICAgYXV0byB1dGY4SlNPTlN0cmluZyA9IG9iamVjdC0+dG9K
U09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRo
bi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEF1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudE91dHB1dHMgUHUKIH0KIAogUHVibGljS2V5Q3JlZGVudGlhbDo6UHVibGljS2V5
Q3JlZGVudGlhbChSZWY8QXV0aGVudGljYXRvclJlc3BvbnNlPiYmIHJlc3BvbnNlKQotICAgIDog
QmFzaWNDcmVkZW50aWFsKFdURjo6YmFzZTY0VVJMRW5jb2RlKHJlc3BvbnNlLT5yYXdJZCgpLT5k
YXRhKCksIHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlTGVuZ3RoKCkpLCBUeXBlOjpQdWJsaWNLZXks
IERpc2NvdmVyeTo6UmVtb3RlKQorICAgIDogQmFzaWNDcmVkZW50aWFsKG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChyZXNwb25zZS0+cmF3SWQoKS0+ZGF0YSgpLCByZXNwb25zZS0+cmF3SWQo
KS0+Ynl0ZUxlbmd0aCgpKSksIFR5cGU6OlB1YmxpY0tleSwgRGlzY292ZXJ5OjpSZW1vdGUpCiAg
ICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKQogewogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFr
ZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3
IEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZWNXZWJTb2NrZXRLZXkoKQogICAgIHN0YXRpYyBj
b25zdCBzaXplX3Qgbm9uY2VTaXplID0gMTY7CiAgICAgdW5zaWduZWQgY2hhciBrZXlbbm9uY2VT
aXplXTsKICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhrZXksIG5vbmNlU2l6ZSk7
Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShrZXksIG5vbmNlU2l6ZSk7CisgICAgcmV0dXJuIG1h
a2VTdHJpbmcoYmFzZTY0RW5jb2RlZChrZXksIG5vbmNlU2l6ZSkpOwogfQogCiBTdHJpbmcgV2Vi
U29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNvY2tldEFjY2VwdChjb25zdCBTdHJpbmcm
IHNlY1dlYlNvY2tldEtleSkKQEAgLTExMCw3ICsxMTAsNyBAQCBTdHJpbmcgV2ViU29ja2V0SGFu
ZHNoYWtlOjpnZXRFeHBlY3RlZFdlCiAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdV
SUQpKTsKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gp
OwotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsK
KyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGhhc2guZGF0YSgpLCBTSEExOjpo
YXNoU2l6ZSkpOwogfQogCiBXZWJTb2NrZXRIYW5kc2hha2U6OldlYlNvY2tldEhhbmRzaGFrZShj
b25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgY29uc3QgU3RyaW5nJiB1c2Vy
QWdlbnQsIGNvbnN0IFN0cmluZyYgY2xpZW50T3JpZ2luLCBib29sIGFsbG93Q29va2llcykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5o
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU2VyaWFsaXplZENy
eXB0b0tleVdyYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBvZiBwcm90ZWN0aW9uIGlzIG5vdCByZXF1aXJlZCBieSB0aGUgc3BlYyBh
cyBvZiAxMSBEZWNlbWJlciAyMDE0OgogLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1dlYkNyeXB0
b0FQSS8jc2VjdXJpdHktZGV2ZWxvcGVycwogCi1XRUJDT1JFX0VYUE9SVCBib29sIGdldERlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+Jik7CitXRUJDT1JFX0VYUE9SVCBP
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKIFdF
QkNPUkVfRVhQT1JUIGJvb2wgZGVsZXRlRGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOwogCiBX
RUJDT1JFX0VYUE9SVCBib29sIHdyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgbWFzdGVyS2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgVmVjdG9yPHVp
bnQ4X3Q+JiByZXN1bHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9Dcnlw
dG9LZXlFQ0dDcnlwdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MjMsMTEgKzUyMywxMSBAQCBib29sIENyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxk
RWxlbWVuCiAgICAgICAgIGlmIChxICYmIHEtPnNpemUoKSA9PSBjdXJ2ZVVuY29tcHJlc3NlZFBv
aW50U2l6ZShtX2N1cnZlKSkgewogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGE7CiAgICAg
ICAgICAgICBhLmFwcGVuZChxLT5kYXRhKCkgKyAxLCB1bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRT
aXplKTsKLSAgICAgICAgICAgIGp3ay54ID0gYmFzZTY0VVJMRW5jb2RlKGEpOworICAgICAgICAg
ICAgandrLnggPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoYSkpOwogCiAgICAgICAgICAg
ICBWZWN0b3I8dWludDhfdD4gYjsKICAgICAgICAgICAgIGIuYXBwZW5kKHEtPmRhdGEoKSArIDEg
KyB1bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplLCB1bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRT
aXplKTsKLSAgICAgICAgICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2RlKGIpOworICAgICAgICAg
ICAgandrLnkgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoYikpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC01NDMsNyArNTQzLDcgQEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRG
aWVsZEVsZW1lbgogICAgICAgICAgICAgICAgICAgICAqZCA9IFdURk1vdmUocGFkZGVkRGF0YSk7
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgandrLmQgPSBiYXNlNjRVUkxF
bmNvZGUoKmQpOworICAgICAgICAgICAgICAgIGp3ay5kID0gbWFrZVN0cmluZyhiYXNlNjRVUkxF
bmNvZGVkKCpkKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwR0NyeXB0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDE1ICsyOSwxNCBAQAogI2lmIEVOQUJMRShXRUJfQ1JZUFRPKQogCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXko
VmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRl
ZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
VU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIH0KIAogLy8gSW5pdGlhbGx5IHRoZXNlIGhlbHBlciBmdW5jdGlvbnMg
d2VyZSBpbnRlbmRlZCB0byBwZXJmb3JtIEtFSyB3cmFwcGluZyBhbmQgdW53cmFwcGluZywKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODgsMTAgKzg4LDEwIEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+
IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGtl
eURhdGEuay5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IG9jdGV0U2VxdWVuY2U7Ci0gICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5r
LCBvY3RldFNlcXVlbmNlKSkKKyAgICBhdXRvIG9jdGV0U2VxdWVuY2UgPSBiYXNlNjRVUkxEZWNv
ZGUoa2V5RGF0YS5rKTsKKyAgICBpZiAoIW9jdGV0U2VxdWVuY2UpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGlmICghY2FsbGJhY2sob2N0ZXRTZXF1ZW5jZS5zaXplKCkgKiA4LCBrZXlE
YXRhLmFsZykpCisgICAgaWYgKCFjYWxsYmFjayhvY3RldFNlcXVlbmNlLT5zaXplKCkgKiA4LCBr
ZXlEYXRhLmFsZykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICh1c2FnZXMgJiYg
IWtleURhdGEudXNlLmlzTnVsbCgpICYmIGtleURhdGEudXNlICE9ICJlbmMiKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTEwMCwxNCArMTAwLDE0IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+
IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICBpZiAoa2V5RGF0YS5leHQgJiYgIWtleURhdGEuZXh0
LnZhbHVlKCkgJiYgZXh0cmFjdGFibGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCBXVEZNb3ZlKG9jdGV0
U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCBXVEZNb3ZlKCpvY3RldFNlcXVlbmNlKSwgZXh0cmFj
dGFibGUsIHVzYWdlcykpOwogfQogCiBKc29uV2ViS2V5IENyeXB0b0tleUFFUzo6ZXhwb3J0Sndr
KCkgY29uc3QKIHsKICAgICBKc29uV2ViS2V5IHJlc3VsdDsKICAgICByZXN1bHQua3R5ID0gIm9j
dCI7Ci0gICAgcmVzdWx0LmsgPSBiYXNlNjRVUkxFbmNvZGUobV9rZXkpOworICAgIHJlc3VsdC5r
ID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKG1fa2V5KSk7CiAgICAgcmVzdWx0LmtleV9v
cHMgPSB1c2FnZXMoKTsKICAgICByZXN1bHQuZXh0ID0gZXh0cmFjdGFibGUoKTsKICAgICByZXR1
cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVD
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5RUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwyMiArOTgsMjIgQEAgUmVmUHRyPENy
eXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6aW1wb3J0SgogCiAgICAgaWYgKGtleURhdGEueC5pc051
bGwoKSB8fCBrZXlEYXRhLnkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IFZlY3Rvcjx1aW50OF90PiB4OwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0
YS54LCB4KSkKKyAgICBhdXRvIHggPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS54KTsKKyAgICBp
ZiAoIXgpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90PiB5Owot
ICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS55LCB5KSkKKyAgICBhdXRvIHkg
PSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS55KTsKKyAgICBpZiAoIXkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmQuaXNOdWxsKCkpIHsKICAgICAgICAgLy8gaW1w
b3J0IHB1YmxpYyBrZXkKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtSW1wb3J0SldLUHVibGljKGlk
ZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKHgpLCBXVEZNb3ZlKHkpLCBleHRyYWN0YWJs
ZSwgdXNhZ2VzKTsKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtSW1wb3J0SldLUHVibGljKGlkZW50
aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKCp4KSwgV1RGTW92ZSgqeSksIGV4dHJhY3RhYmxl
LCB1c2FnZXMpOwogICAgIH0KIAotICAgIFZlY3Rvcjx1aW50OF90PiBkOwotICAgIGlmICghV1RG
OjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kLCBkKSkKKyAgICBhdXRvIGQgPSBiYXNlNjRVUkxE
ZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBpZiAoIWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIC8vIGltcG9ydCBwcml2YXRlIGtleQotICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1By
aXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3VydmUsIFdURk1vdmUoeCksIFdURk1vdmUoeSksIFdU
Rk1vdmUoZCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgIHJldHVybiBwbGF0Zm9ybUltcG9y
dEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3VydmUsIFdURk1vdmUoKngpLCBXVEZNb3Zl
KCp5KSwgV1RGTW92ZSgqZCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQogCiBSZWZQdHI8Q3J5
cHRvS2V5RUM+IENyeXB0b0tleUVDOjppbXBvcnRTcGtpKENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBjdXJ2ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5
RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOCArMTAzLDggQEAgUmVmUHRyPENyeXB0b0tleUhN
QUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
a2V5RGF0YS5rLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8
dWludDhfdD4gb2N0ZXRTZXF1ZW5jZTsKLSAgICBpZiAoIWJhc2U2NFVSTERlY29kZShrZXlEYXRh
LmssIG9jdGV0U2VxdWVuY2UpKQorICAgIGF1dG8gb2N0ZXRTZXF1ZW5jZSA9IGJhc2U2NFVSTERl
Y29kZShrZXlEYXRhLmspOworICAgIGlmICghb2N0ZXRTZXF1ZW5jZSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgaWYgKCFjYWxsYmFjayhoYXNoLCBrZXlEYXRhLmFsZykpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtMTE1LDE0ICsxMTUsMTQgQEAgUmVmUHRyPENyeXB0b0tleUhN
QUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgIGlmIChrZXlEYXRhLmV4dCAmJiAha2V5RGF0YS5l
eHQudmFsdWUoKSAmJiBleHRyYWN0YWJsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICByZXR1cm4gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3KGxlbmd0aEJpdHMsIGhhc2gsIFdURk1v
dmUob2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgIHJldHVybiBDcnlw
dG9LZXlITUFDOjppbXBvcnRSYXcobGVuZ3RoQml0cywgaGFzaCwgV1RGTW92ZSgqb2N0ZXRTZXF1
ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQogCiBKc29uV2ViS2V5IENyeXB0b0tleUhN
QUM6OmV4cG9ydEp3aygpIGNvbnN0CiB7CiAgICAgSnNvbldlYktleSByZXN1bHQ7CiAgICAgcmVz
dWx0Lmt0eSA9ICJvY3QiOwotICAgIHJlc3VsdC5rID0gYmFzZTY0VVJMRW5jb2RlKG1fa2V5KTsK
KyAgICByZXN1bHQuayA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChtX2tleSkpOwogICAg
IHJlc3VsdC5rZXlfb3BzID0gdXNhZ2VzKCk7CiAgICAgcmVzdWx0LmV4dCA9IGV4dHJhY3RhYmxl
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlz
L0NyeXB0b0tleVJTQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5UlNBLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNjUgKzQ1
LDg3IEBAIFJlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0b0tleVJTQTo6aW1wb3IKIAogICAgIGlm
IChrZXlEYXRhLm4uaXNOdWxsKCkgfHwga2V5RGF0YS5lLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4gbW9kdWx1czsKLSAgICBpZiAoIVdURjo6
YmFzZTY0VVJMRGVjb2RlKGtleURhdGEubiwgbW9kdWx1cykpCisgICAgYXV0byBtb2R1bHVzID0g
YmFzZTY0VVJMRGVjb2RlKGtleURhdGEubik7CisgICAgaWYgKCFtb2R1bHVzKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAvLyBQZXIgUkZDIDc1MTggU2VjdGlvbiA2LjMuMS4xOiBodHRw
czovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUxOCNzZWN0aW9uLTYuMy4xLjEKLSAgICBpZiAo
IW1vZHVsdXMuaXNFbXB0eSgpICYmICFtb2R1bHVzWzBdKQotICAgICAgICBtb2R1bHVzLnJlbW92
ZSgwKTsKLSAgICBWZWN0b3I8dWludDhfdD4gZXhwb25lbnQ7Ci0gICAgaWYgKCFXVEY6OmJhc2U2
NFVSTERlY29kZShrZXlEYXRhLmUsIGV4cG9uZW50KSkKKyAgICBpZiAoIW1vZHVsdXMtPmlzRW1w
dHkoKSAmJiAhbW9kdWx1cy0+YXQoMCkpCisgICAgICAgIG1vZHVsdXMtPnJlbW92ZSgwKTsKKyAg
ICBhdXRvIGV4cG9uZW50ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZSk7CisgICAgaWYgKCFl
eHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEuZC5pc051
bGwoKSkgewogICAgICAgICAvLyBpbXBvcnQgcHVibGljIGtleQotICAgICAgICBhdXRvIHB1Ymxp
Y0tleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpjcmVhdGVQdWJsaWMoV1RG
TW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCkpOworICAgICAgICBhdXRvIHB1YmxpY0tl
eUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpjcmVhdGVQdWJsaWMoV1RGTW92
ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50KSk7CiAgICAgICAgIC8vIE5vdGljZTogQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEgaXMganVzdCBhIHBsYWNlaG9sZGVyLiBJdCBz
aG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBpZiBoYXNoIGlzIFdURjo6bnVsbG9wdC4KICAgICAg
ICAgcmV0dXJuIENyeXB0b0tleVJTQTo6Y3JlYXRlKGFsZ29yaXRobSwgaGFzaC52YWx1ZU9yKENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xKSwgISFoYXNoLCAqcHVibGljS2V5Q29tcG9u
ZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgfQogCiAgICAgLy8gaW1wb3J0IHByaXZh
dGUga2V5Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZhdGVFeHBvbmVudDsKLSAgICBpZiAoIVdU
Rjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZCwgcHJpdmF0ZUV4cG9uZW50KSkKKyAgICBhdXRv
IHByaXZhdGVFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmQpOworICAgIGlmICgh
cHJpdmF0ZUV4cG9uZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0
YS5wLmlzTnVsbCgpICYmIGtleURhdGEucS5pc051bGwoKSAmJiBrZXlEYXRhLmRwLmlzTnVsbCgp
ICYmIGtleURhdGEuZHAuaXNOdWxsKCkgJiYga2V5RGF0YS5xaS5pc051bGwoKSkgewotICAgICAg
ICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3Jl
YXRlUHJpdmF0ZShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZNb3ZlKGV4cG9uZW50KSwgV1RGTW92ZShw
cml2YXRlRXhwb25lbnQpKTsKKyAgICAgICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENy
eXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUoV1RGTW92ZSgqbW9kdWx1cyksIFdU
Rk1vdmUoKmV4cG9uZW50KSwgV1RGTW92ZSgqcHJpdmF0ZUV4cG9uZW50KSk7CiAgICAgICAgIC8v
IE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEgaXMganVzdCBhIHBsYWNl
aG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBpZiBoYXNoIGlzIFdURjo6bnVs
bG9wdC4KICAgICAgICAgcmV0dXJuIENyeXB0b0tleVJTQTo6Y3JlYXRlKGFsZ29yaXRobSwgaGFz
aC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xKSwgISFoYXNoLCAqcHJp
dmF0ZUtleUNvbXBvbmVudHMsIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgIH0KIAogICAgIGlm
IChrZXlEYXRhLnAuaXNOdWxsKCkgfHwga2V5RGF0YS5xLmlzTnVsbCgpIHx8IGtleURhdGEuZHAu
aXNOdWxsKCkgfHwga2V5RGF0YS5kcS5pc051bGwoKSB8fCBrZXlEYXRhLnFpLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpQcmlt
ZUluZm8gZmlyc3RQcmltZUluZm87Ci0gICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJ
bmZvIHNlY29uZFByaW1lSW5mbzsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURh
dGEucCwgZmlyc3RQcmltZUluZm8ucHJpbWVGYWN0b3IpKQorICAgIAorICAgIGF1dG8gZmlyc3RQ
cmltZUZhY3RvciA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLnApOworICAgIGlmICghZmlyc3RQ
cmltZUZhY3RvcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2
NFVSTERlY29kZShrZXlEYXRhLmRwLCBmaXJzdFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCkp
CisgICAgYXV0byBmaXJzdEZhY3RvckNSVEV4cG9uZW50ID0gYmFzZTY0VVJMRGVjb2RlKGtleURh
dGEuZHApOworICAgIGlmICghZmlyc3RGYWN0b3JDUlRFeHBvbmVudCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLnEsIHNlY29u
ZFByaW1lSW5mby5wcmltZUZhY3RvcikpCisgICAgYXV0byBzZWNvbmRQcmltZUZhY3RvciA9IGJh
c2U2NFVSTERlY29kZShrZXlEYXRhLnEpOworICAgIGlmICghc2Vjb25kUHJpbWVGYWN0b3IpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5
RGF0YS5kcSwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50KSkKKyAgICBhdXRvIHNl
Y29uZEZhY3RvckNSVEV4cG9uZW50ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZHEpOworICAg
IGlmICghc2Vjb25kRmFjdG9yQ1JURXhwb25lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5xaSwgc2Vjb25kUHJpbWVJbmZv
LmZhY3RvckNSVENvZWZmaWNpZW50KSkKKyAgICBhdXRvIHNlY29uZEZhY3RvckNSVENvZWZmaWNp
ZW50ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEucWkpOworICAgIGlmICghc2Vjb25kRmFjdG9y
Q1JUQ29lZmZpY2llbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ3J5cHRvS2V5
UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGZpcnN0UHJpbWVJbmZvOworICAgIGZpcnN0UHJpbWVJ
bmZvLnByaW1lRmFjdG9yID0gV1RGTW92ZSgqZmlyc3RQcmltZUZhY3Rvcik7CisgICAgZmlyc3RQ
cmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZNb3ZlKCpmaXJzdEZhY3RvckNSVEV4cG9u
ZW50KTsKKyAgICAKKyAgICBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpQcmltZUluZm8gc2Vjb25k
UHJpbWVJbmZvOworICAgIHNlY29uZFByaW1lSW5mby5wcmltZUZhY3RvciA9IFdURk1vdmUoKnNl
Y29uZFByaW1lRmFjdG9yKTsKKyAgICBzZWNvbmRQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQg
PSBXVEZNb3ZlKCpzZWNvbmRGYWN0b3JDUlRFeHBvbmVudCk7CisgICAgc2Vjb25kUHJpbWVJbmZv
LmZhY3RvckNSVENvZWZmaWNpZW50ID0gV1RGTW92ZSgqc2Vjb25kRmFjdG9yQ1JUQ29lZmZpY2ll
bnQpOworCiAgICAgaWYgKCFrZXlEYXRhLm90aCkgewotICAgICAgICBhdXRvIHByaXZhdGVLZXlD
b21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRp
dGlvbmFsRGF0YShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZNb3ZlKGV4cG9uZW50KSwgV1RGTW92ZShw
cml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQ
cmltZUluZm8pLCB7IH0pOworICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5
cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZN
b3ZlKCptb2R1bHVzKSwgV1RGTW92ZSgqZXhwb25lbnQpLCBXVEZNb3ZlKCpwcml2YXRlRXhwb25l
bnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCB7
IH0pOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8x
IGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxkIG5vdCBoYXZlIGFueSBlZmZlY3QgaWYg
aGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0
ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFf
MSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRzLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsK
ICAgICB9CiAKICAgICBWZWN0b3I8Q3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvPiBv
dGhlclByaW1lSW5mb3M7CiAgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6IGtleURhdGEub3Ro
LnZhbHVlKCkpIHsKLSAgICAgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGlu
Zm87Ci0gICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUodmFsdWUuciwgaW5mby5wcmlt
ZUZhY3RvcikpCisgICAgICAgIGF1dG8gcHJpbWVGYWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUodmFs
dWUucik7CisgICAgICAgIGlmICghcHJpbWVGYWN0b3IpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZSh2YWx1ZS5kLCBpbmZvLmZh
Y3RvckNSVEV4cG9uZW50KSkKKyAgICAgICAgYXV0byBmYWN0b3JDUlRFeHBvbmVudCA9IGJhc2U2
NFVSTERlY29kZSh2YWx1ZS5kKTsKKyAgICAgICAgaWYgKCFmYWN0b3JDUlRFeHBvbmVudCkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVj
b2RlKHZhbHVlLnQsIGluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQpKQorICAgICAgICBhdXRvIGZh
Y3RvckNSVENvZWZmaWNpZW50ID0gYmFzZTY0VVJMRGVjb2RlKHZhbHVlLnQpOworICAgICAgICBp
ZiAoIWZhY3RvckNSVENvZWZmaWNpZW50KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgIG90aGVyUHJpbWVJbmZvcy5hcHBlbmQoaW5mbyk7CisKKyAgICAgICAgQ3J5cHRvS2V5
UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87CisgICAgICAgIGluZm8ucHJpbWVGYWN0b3Ig
PSBXVEZNb3ZlKCpwcmltZUZhY3Rvcik7CisgICAgICAgIGluZm8uZmFjdG9yQ1JURXhwb25lbnQg
PSBXVEZNb3ZlKCpmYWN0b3JDUlRFeHBvbmVudCk7CisgICAgICAgIGluZm8uZmFjdG9yQ1JUQ29l
ZmZpY2llbnQgPSBXVEZNb3ZlKCpmYWN0b3JDUlRDb2VmZmljaWVudCk7CisKKyAgICAgICAgb3Ro
ZXJQcmltZUluZm9zLmFwcGVuZChXVEZNb3ZlKGluZm8pKTsKICAgICB9CiAKLSAgICBhdXRvIHBy
aXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0
ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZNb3ZlKGV4cG9uZW50KSwg
V1RGTW92ZShwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92
ZShzZWNvbmRQcmltZUluZm8pLCBXVEZNb3ZlKG90aGVyUHJpbWVJbmZvcykpOworICAgIGF1dG8g
cHJpdmF0ZUtleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2
YXRlV2l0aEFkZGl0aW9uYWxEYXRhKFdURk1vdmUoKm1vZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVu
dCksIFdURk1vdmUoKnByaXZhdGVFeHBvbmVudCksIFdURk1vdmUoZmlyc3RQcmltZUluZm8pLCBX
VEZNb3ZlKHNlY29uZFByaW1lSW5mbyksIFdURk1vdmUob3RoZXJQcmltZUluZm9zKSk7CiAgICAg
Ly8gTm90aWNlOiBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSBpcyBqdXN0IGEgcGxh
Y2Vob2xkZXIuIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkgZWZmZWN0IGlmIGhhc2ggaXMgV1RGOjpu
dWxsb3B0LgogICAgIHJldHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gu
dmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnByaXZh
dGVLZXlDb21wb25lbnRzLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKIH0KQEAgLTExOCwzMCArMTQw
LDMwIEBAIEpzb25XZWJLZXkgQ3J5cHRvS2V5UlNBOjpleHBvcnRKd2soKSBjb24KICAgICBhdXRv
IHJzYUNvbXBvbmVudHMgPSBleHBvcnREYXRhKCk7CiAKICAgICAvLyBwdWJsaWMga2V5Ci0gICAg
cmVzdWx0Lm4gPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+bW9kdWx1cygpKTsKLSAg
ICByZXN1bHQuZSA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5leHBvbmVudCgpKTsK
KyAgICByZXN1bHQubiA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRz
LT5tb2R1bHVzKCkpKTsKKyAgICByZXN1bHQuZSA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2Rl
ZChyc2FDb21wb25lbnRzLT5leHBvbmVudCgpKSk7CiAgICAgaWYgKHJzYUNvbXBvbmVudHMtPnR5
cGUoKSA9PSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpUeXBlOjpQdWJsaWMpCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAKICAgICAvLyBwcml2YXRlIGtleQotICAgIHJlc3VsdC5kID0gYmFzZTY0
VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnByaXZhdGVFeHBvbmVudCgpKTsKKyAgICByZXN1bHQu
ZCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5wcml2YXRlRXhw
b25lbnQoKSkpOwogICAgIGlmICghcnNhQ29tcG9uZW50cy0+aGFzQWRkaXRpb25hbFByaXZhdGVL
ZXlQYXJhbWV0ZXJzKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICByZXN1bHQucCA9
IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5maXJzdFByaW1lSW5mbygpLnByaW1lRmFj
dG9yKTsKLSAgICByZXN1bHQucSA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5zZWNv
bmRQcmltZUluZm8oKS5wcmltZUZhY3Rvcik7Ci0gICAgcmVzdWx0LmRwID0gYmFzZTY0VVJMRW5j
b2RlKHJzYUNvbXBvbmVudHMtPmZpcnN0UHJpbWVJbmZvKCkuZmFjdG9yQ1JURXhwb25lbnQpOwot
ICAgIHJlc3VsdC5kcSA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5zZWNvbmRQcmlt
ZUluZm8oKS5mYWN0b3JDUlRFeHBvbmVudCk7Ci0gICAgcmVzdWx0LnFpID0gYmFzZTY0VVJMRW5j
b2RlKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5mbygpLmZhY3RvckNSVENvZWZmaWNpZW50
KTsKKyAgICByZXN1bHQucCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FDb21wb25l
bnRzLT5maXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9yKSk7CisgICAgcmVzdWx0LnEgPSBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCku
cHJpbWVGYWN0b3IpKTsKKyAgICByZXN1bHQuZHAgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29k
ZWQocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBvbmVudCkpOwor
ICAgIHJlc3VsdC5kcSA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRz
LT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBvbmVudCkpOworICAgIHJlc3VsdC5xaSA9
IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUlu
Zm8oKS5mYWN0b3JDUlRDb2VmZmljaWVudCkpOwogICAgIGlmIChyc2FDb21wb25lbnRzLT5vdGhl
clByaW1lSW5mb3MoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICBW
ZWN0b3I8UnNhT3RoZXJQcmltZXNJbmZvPiBvdGg7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbmZv
IDogcnNhQ29tcG9uZW50cy0+b3RoZXJQcmltZUluZm9zKCkpIHsKICAgICAgICAgUnNhT3RoZXJQ
cmltZXNJbmZvIG90aGVySW5mbzsKLSAgICAgICAgb3RoZXJJbmZvLnIgPSBiYXNlNjRVUkxFbmNv
ZGUoaW5mby5wcmltZUZhY3Rvcik7Ci0gICAgICAgIG90aGVySW5mby5kID0gYmFzZTY0VVJMRW5j
b2RlKGluZm8uZmFjdG9yQ1JURXhwb25lbnQpOwotICAgICAgICBvdGhlckluZm8udCA9IGJhc2U2
NFVSTEVuY29kZShpbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KTsKKyAgICAgICAgb3RoZXJJbmZv
LnIgPSBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoaW5mby5wcmltZUZhY3RvcikpOworICAg
ICAgICBvdGhlckluZm8uZCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChpbmZvLmZhY3Rv
ckNSVEV4cG9uZW50KSk7CisgICAgICAgIG90aGVySW5mby50ID0gbWFrZVN0cmluZyhiYXNlNjRV
UkxFbmNvZGVkKGluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQpKTsKICAgICAgICAgb3RoLmFwcGVu
ZChXVEZNb3ZlKG90aGVySW5mbykpOwogICAgIH0KICAgICByZXN1bHQub3RoID0gV1RGTW92ZShv
dGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRv
S2V5RUNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTAgKzE5NywxMCBAQCBib29sIENy
eXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVuCiAKICAgICBpZiAoVU5MSUtFTFkoKHNp
emUgIT0gcHVibGljS2V5U2l6ZSkgJiYgKHNpemUgIT0gcHJpdmF0ZUtleVNpemUpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGp3ay54ID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUocmVzdWx0
LmRhdGEoKSArIDEsIGtleVNpemVJbkJ5dGVzKTsKLSAgICBqd2sueSA9IFdURjo6YmFzZTY0VVJM
RW5jb2RlKHJlc3VsdC5kYXRhKCkgKyBrZXlTaXplSW5CeXRlcyArIDEsIGtleVNpemVJbkJ5dGVz
KTsKKyAgICBqd2sueCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyZXN1bHQuZGF0YSgp
ICsgMSwga2V5U2l6ZUluQnl0ZXMpKTsKKyAgICBqd2sueSA9IG1ha2VTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlZChyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUluQnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRl
cykpOwogICAgIGlmIChzaXplID4gcHVibGljS2V5U2l6ZSkKLSAgICAgICAgandrLmQgPSBXVEY6
OmJhc2U2NFVSTEVuY29kZShyZXN1bHQuZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6ZUlu
Qnl0ZXMpOworICAgICAgICBqd2suZCA9IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChyZXN1
bHQuZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6ZUluQnl0ZXMpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5
cHRvS2V5V3JhcE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFj
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0IDxDb21tb25DcnlwdG8vQ29tbW9u
U3ltbWV0cmljS2V5d3JhcC5oPgogI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KICNpbXBvcnQgPHd0
Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CisjaW1wb3J0IDx3dGYvT3B0aW9uYWwuaD4KICNp
bXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+CkBAIC04MCwxMSArODEsMTEg
QEAgc3RhdGljIE5TU3RyaW5nKiBtYXN0ZXJLZXlBY2NvdW50TmFtZUZvcgogICAgIHJldHVybiBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImNvbS5hcHBsZS5XZWJLaXQuV2ViQ3J5cHRvLm1h
c3RlcislQCIsIGJ1bmRsZUlkZW50aWZpZXJdOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVBbmRT
dG9yZU1hc3RlcktleShWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleURhdGEpCitzdGF0aWMgT3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBjcmVhdGVBbmRTdG9yZU1hc3RlcktleSgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5B
Y2Nlc3NDcmVkZW50aWFscykpOwogCi0gICAgbWFzdGVyS2V5RGF0YS5yZXNpemUobWFzdGVyS2V5
U2l6ZUluQnl0ZXMpOworICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXlEYXRhKG1hc3Rlcktl
eVNpemVJbkJ5dGVzKTsKICAgICBhdXRvIHJjID0gQ0NSYW5kb21HZW5lcmF0ZUJ5dGVzKG1hc3Rl
cktleURhdGEuZGF0YSgpLCBtYXN0ZXJLZXlEYXRhLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NF
UlQocmMgPT0ga0NDU3VjY2Vzcyk7CiAKQEAgLTEwNyw3ICsxMDgsNyBAQCBzdGF0aWMgYm9vbCBj
cmVhdGVBbmRTdG9yZU1hc3RlcktleShWZWN0CiAgICAgc3RhdHVzID0gU2VjQWNjZXNzQ3JlYXRl
KChfX2JyaWRnZSBDRlN0cmluZ1JlZilsb2NhbGl6ZWRJdGVtTmFtZSwgbnVsbHB0ciwgJmFjY2Vz
c1JlZik7CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBj
cmVhdGUgYSBzZWN1cml0eSBhY2Nlc3Mgb2JqZWN0IGZvciBzdG9yaW5nIFdlYkNyeXB0byBtYXN0
ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KICAgICBSZXRhaW5QdHI8U2VjQWNj
ZXNzUmVmPiBhY2Nlc3MgPSBhZG9wdENGKGFjY2Vzc1JlZik7CiAKQEAgLTEyMCwxOSArMTIxLDE4
IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19FTkQKICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5
cygiQ2Fubm90IGNyZWF0ZSBhIHRydXN0ZWQgYXBwbGljYXRpb24gb2JqZWN0IGZvciBzdG9yaW5n
IFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KICAgICBS
ZXRhaW5QdHI8U2VjVHJ1c3RlZEFwcGxpY2F0aW9uUmVmPiB0cnVzdGVkQXBwID0gYWRvcHRDRih0
cnVzdGVkQXBwUmVmKTsKIAogICAgIHN0YXR1cyA9IFNlY0FDTFNldENvbnRlbnRzKGFjbCwgKF9f
YnJpZGdlIENGQXJyYXlSZWYpQFsgKF9fYnJpZGdlIGlkKXRydXN0ZWRBcHAuZ2V0KCkgXSwgKF9f
YnJpZGdlIENGU3RyaW5nUmVmKWxvY2FsaXplZEl0ZW1OYW1lLCBrU2VjS2V5Y2hhaW5Qcm9tcHRS
ZXF1aXJlUGFzc3BoYXNlKTsKICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5
cygiQ2Fubm90IHNldCBBQ0wgZm9yIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChp
bnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgIH0KICNlbmRpZgogCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZWRN
YXN0ZXJLZXlEYXRhOwotICAgIGJhc2U2NEVuY29kZShtYXN0ZXJLZXlEYXRhLCBiYXNlNjRFbmNv
ZGVkTWFzdGVyS2V5RGF0YSk7CisgICAgYXV0byBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YSA9
IGJhc2U2NEVuY29kZShtYXN0ZXJLZXlEYXRhKTsKIAogICAgIC8vIENhbm5vdCB1c2Uga1NlY0Ns
YXNzS2V5IGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVtLzE2MDY4MjA3Pi4KICAgICBOU0RpY3Rp
b25hcnkgKmF0dHJpYnV0ZXMgPSBAewpAQCAtMTUwLDEyICsxNTAsMTMgQEAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgc3RhdHVzID0gU2VjSXRlbUFkZCgoQ0ZEaWN0aW9u
YXJ5UmVmKWF0dHJpYnV0ZXMsIG51bGxwdHIpOwogICAgIGlmIChzdGF0dXMpIHsKICAgICAgICAg
V1RGTG9nQWx3YXlzKCJDYW5ub3Qgc3RvcmUgV2ViQ3J5cHRvIG1hc3RlciBrZXksIGVycm9yICVk
IiwgKGludClzdGF0dXMpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIG1hc3Rl
cktleURhdGE7CiB9CiAKLXN0YXRpYyBib29sIGZpbmRNYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+
JiBtYXN0ZXJLZXlEYXRhKQorc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZmluZE1h
c3RlcktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9j
ZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFscykpOwogCkBAIC0xNzAsMjAgKzE3MSwy
NSBAQCBzdGF0aWMgYm9vbCBmaW5kTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90CiAgICAgaWYgKHN0
YXR1cykgewogICAgICAgICBpZiAoc3RhdHVzICE9IGVyclNlY0l0ZW1Ob3RGb3VuZCAmJiBzdGF0
dXMgIT0gZXJyU2VjVXNlckNhbmNlbGVkKQogICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJDb3Vs
ZCBub3QgZmluZCBXZWJDcnlwdG8gbWFzdGVyIGtleSBpbiBLZXljaGFpbiwgZXJyb3IgJWQiLCAo
aW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4ga2V5RGF0YSA9IGFkb3B0
Q0Yoa2V5RGF0YVJlZik7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlZE1hc3Rl
cktleURhdGEgPSB2ZWN0b3JGcm9tTlNEYXRhKChfX2JyaWRnZSBOU0RhdGEgKilrZXlEYXRhLmdl
dCgpKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlKChjb25zdCBjaGFyKiliYXNlNjRFbmNvZGVk
TWFzdGVyS2V5RGF0YS5kYXRhKCksIGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhLnNpemUoKSwg
bWFzdGVyS2V5RGF0YSk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShyZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKGtleURhdGEuZ2V0KCkpKSwgQ0ZEYXRhR2V0
TGVuZ3RoKGtleURhdGEuZ2V0KCkpKTsKIH0KIAotYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFz
dGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKIHsKLSAgICBpZiAoIWZpbmRNYXN0ZXJL
ZXkobWFzdGVyS2V5KSAmJiAhY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkobWFzdGVyS2V5KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJFTEVBU0VfQVNTRVJUKG1hc3RlcktleS5zaXplKCkg
PT0gbWFzdGVyS2V5U2l6ZUluQnl0ZXMpOwotICAgIHJldHVybiB0cnVlOworICAgIGlmIChhdXRv
IG1hc3RlcktleSA9IGZpbmRNYXN0ZXJLZXkoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCht
YXN0ZXJLZXktPnNpemUoKSA9PSBtYXN0ZXJLZXlTaXplSW5CeXRlcyk7CisgICAgICAgIHJldHVy
biBtYXN0ZXJLZXk7CisgICAgfQorCisgICAgaWYgKGF1dG8gbWFzdGVyS2V5ID0gY3JlYXRlQW5k
U3RvcmVNYXN0ZXJLZXkoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtYXN0ZXJLZXktPnNp
emUoKSA9PSBtYXN0ZXJLZXlTaXplSW5CeXRlcyk7CisgICAgICAgIHJldHVybiBtYXN0ZXJLZXk7
CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogYm9vbCBkZWxldGVEZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9vcGVu
c3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2VyaWFsaXplZENyeXB0b0tleVdyYXBPcGVuU1NM
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wv
U2VyaWFsaXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTUgKzMxLDE0IEBACiAjaWYgRU5BQkxFKFdFQl9DUllQVE8pCiAKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShWZWN0b3I8dWludDhfdD4m
IG1hc3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBVTlVTRURfUEFSQU0obWFz
dGVyS2V5KTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
fQogCiAvLyBJbml0aWFsbHkgdGhlc2UgaGVscGVyIGZ1bmN0aW9ucyB3ZXJlIGludGVuZGVkIHRv
IHBlcmZvcm0gS0VLIHdyYXBwaW5nIGFuZCB1bndyYXBwaW5nLApJbmRleDogU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzMsMjYgKzMzMywxMiBAQCB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNvbnZlcnRUb1Rl
eHQoKQogCiB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNvbnZlcnRUb0RhdGFVUkwoKQogewotICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImRhdGE6
Iik7Ci0KICAgICBpZiAoIW1fYnl0ZXNMb2FkZWQpIHsKLSAgICAgICAgbV9zdHJpbmdSZXN1bHQg
PSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIG1fc3RyaW5nUmVzdWx0ID0gImRhdGE6Il9z
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fZGF0YVR5cGUuaXNFbXB0eSgp
KQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7Ci0g
ICAgZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVuZChtX2RhdGFUeXBlKTsKLSAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoIjtiYXNlNjQsIik7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAg
IGJhc2U2NEVuY29kZShtX3Jhd0RhdGEtPmRhdGEoKSwgbV9ieXRlc0xvYWRlZCwgb3V0KTsKLSAg
ICBvdXQuYXBwZW5kKCdcMCcpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG91dC5kYXRhKCkpOwotCi0g
ICAgbV9zdHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgbV9zdHJpbmdSZXN1
bHQgPSBtYWtlU3RyaW5nKCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0
aW9uL29jdGV0LXN0cmVhbSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVk
KG1fcmF3RGF0YS0+ZGF0YSgpLCBtX2J5dGVzTG9hZGVkKSk7CiB9CiAKIGJvb2wgRmlsZVJlYWRl
ckxvYWRlcjo6aXNDb21wbGV0ZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MjksMTQgKzQyOSwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNoOwogICAg
ICAgICAgICAgYXR0cnNTSEExLmNvbXB1dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAgICAgICBk
aWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZShhdHRyc0hhc2guZGF0YSgpLCAxMCk7Cisg
ICAgICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChh
dHRyc0hhc2guZGF0YSgpLCAxMCkpOwogICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNoYTEs
IGRpZ2VzdC0+YXR0cnNTSEExKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFNIQTE6OkRpZ2Vz
dCBoYXNoOwogICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZGlnZXN0LT5zaGExID0g
YmFzZTY0RW5jb2RlKGhhc2guZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gbWFrZVN0
cmluZyhiYXNlNjRFbmNvZGVkKGhhc2guZGF0YSgpLCAxMCkpOwogICAgIGlmICh1bnVzZWROb2Rl
c01hcCkKICAgICAgICAgdW51c2VkTm9kZXNNYXAtPmFkZChkaWdlc3QtPnNoYTEsIGRpZ2VzdC5n
ZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZEhvc3QuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk4
LDExICs1OTgsMTEgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwog
ICAgIGlmICghbV9jbGllbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhOwotICAgIGlmICghYmFzZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0
ZSwgZGF0YSkpCisgICAgYXV0byBkYXRhID0gYmFzZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZp
Y2F0ZSk7CisgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsK
KyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS0+ZGF0YSgpLCBkYXRh
LT5zaXplKCkpOwogICAgIE9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZv
OwogICAgIGRlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvOwogICAgIGlmICghY2VydGlmaWNhdGVJ
bmZvKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291
cmNlc0RhdGEuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2
LDcgQEAgdW5zaWduZWQgTmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRAogICAgICAgICBt
X2NvbnRlbnQgPSBtX2RlY29kZXItPmRlY29kZUFuZEZsdXNoKG1fZGF0YUJ1ZmZlci0+ZGF0YSgp
LCBkYXRhTGVuZ3RoKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2Jhc2U2NEVuY29kZWQgPSB0
cnVlOwotICAgICAgICBtX2NvbnRlbnQgPSBiYXNlNjRFbmNvZGUobV9kYXRhQnVmZmVyLT5kYXRh
KCksIGRhdGFMZW5ndGgpOworICAgICAgICBtX2NvbnRlbnQgPSBtYWtlU3RyaW5nKFdURjo6YmFz
ZTY0RW5jb2RlZChtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCkpOwogICAgIH0KIAog
ICAgIG1fZGF0YUJ1ZmZlciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDksNyArMTcwOSw3IEBAIHN0YXRpYyBTdHJpbmcg
Y29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGkKICAgICBhdXRvIGNyeXB0b0RpZ2VzdCA9IFBBTDo6
Q3J5cHRvRGlnZXN0OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1
Nik7CiAgICAgY3J5cHRvRGlnZXN0LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVudC5z
aXplKCkpOwogICAgIGF1dG8gZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOwot
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlKGRpZ2VzdC5kYXRh
KCksIGRpZ2VzdC5zaXplKCkpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygic2hhMjU2LSIsIGJh
c2U2NEVuY29kZWQoZGlnZXN0LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOwogfQogCiBSZWY8UHJv
dG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShO
b2RlKiBub2RlLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdv
cmtBZ2VudC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1
LDcgKzE3NSw3IEBAIFJlZjxQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGIKICAg
ICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0T3Bjb2RlKGZyYW1lLm9wQ29kZSkKICAgICAgICAgLnNldE1hc2soZnJhbWUubWFz
a2VkKQotICAgICAgICAuc2V0UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6
OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRM
ZW5ndGgpIDogYmFzZTY0RW5jb2RlKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgp
KQorICAgICAgICAuc2V0UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZy
b21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5n
dGgpIDogbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxv
YWRMZW5ndGgpKSkKICAgICAgICAgLnNldFBheWxvYWRMZW5ndGgoZnJhbWUucGF5bG9hZExlbmd0
aCkKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KQEAgLTU4Niw3ICs1ODYsNyBAQCB2b2lkIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZURhCiAgICAgICAgIC8vIE9mdGVuIHRoZSBkYXRh
IGlzIHRleHQgYW5kIHdlIHdvdWxkIGhhdmUgYSBkZWNvZGVyLCBidXQgZm9yIG5vbi10ZXh0IHdl
IHdvbid0IGhhdmUgYSBkZWNvZGVyLgogICAgICAgICAvLyBTeW5jIFhIUnMgbWF5IG5vdCBoYXZl
IGEgY2FjaGVkIHJlc291cmNlLCB3aGlsZSBub24tc3luYyBYSFJzIHVzdWFsbHkgdHJhbnNmZXIg
ZGF0YSBvdmVyIG9uIGNvbXBsZXRpb24uCiAgICAgICAgIGlmIChtX2xvYWRpbmdYSFJTeW5jaHJv
bm91c2x5ICYmIHJlc291cmNlRGF0YSAmJiAhcmVzb3VyY2VEYXRhLT5oYXNCdWZmZXJlZERhdGEo
KSAmJiAhcmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpKQotICAgICAgICAgICAgbV9yZXNv
dXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQocmVxdWVzdElkLCBiYXNlNjRFbmNvZGUoZGF0
YSwgZGF0YUxlbmd0aCksIHRydWUpOworICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRS
ZXNvdXJjZUNvbnRlbnQocmVxdWVzdElkLCBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoZGF0YSwg
ZGF0YUxlbmd0aCkpLCB0cnVlKTsKICAgICB9CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
ZGF0YVJlY2VpdmVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5ndGgsIGVuY29kZWRE
YXRhTGVuZ3RoKTsKQEAgLTEwMDQsNyArMTAwNCw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PFN0cmluZz4gSW5zcGVjdG8KIAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2Rl
cjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+
OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAgcmV0dXJuIGJhc2U2
NEVuY29kZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0
dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1
ZmZlclNpemUoKSkpOwogfQogCiBXZWJTb2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2Vi
U29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJl
cXVlc3RJZCkKQEAgLTEyMDIsMTEgKzEyMDIsMTEgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yTgogICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZHMoV1RG
TW92ZShleHBsaWNpdEhlYWRlcnMpKTsKICAgICB9CiAgICAgaWYgKCEhcG9zdERhdGEpIHsKLSAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUo
cG9zdERhdGEsIGJ1ZmZlcikpCisgICAgICAgIGF1dG8gYnVmZmVyID0gYmFzZTY0RGVjb2RlKHBv
c3REYXRhKTsKKyAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gcG9zdERhdGEiX3MpOwogCi0gICAgICAg
IHJlcXVlc3Quc2V0SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShidWZmZXIpKTsKKyAgICAgICAg
cmVxdWVzdC5zZXRIVFRQQm9keShGb3JtRGF0YTo6Y3JlYXRlKFdURk1vdmUoKmJ1ZmZlcikpKTsK
ICAgICB9CiAgICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgaG93IHRvIGlkZW50aWZ5IHdoZW4gYSBy
ZXF1ZXN0IGhhcyBiZWVuIG92ZXJyaWRkZW4gd2hlbiB3ZSBhZGQgdGhpcyB0byB0aGUgZnJvbnRl
bmQuCiAgICAgcGVuZGluZ1JlcXVlc3QtPmNvbnRpbnVlV2l0aFJlcXVlc3QocmVxdWVzdCk7CkBA
IC0xMjQyLDExICsxMjQyLDExIEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3Rvck4KIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG92ZXJyaWRlRGF0YTsKICAgICBpZiAo
YmFzZTY0RW5jb2RlZCkgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAg
ICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBidWZmZXIpKQorICAgICAgICBhdXRvIGJ1ZmZl
ciA9IGJhc2U2NERlY29kZShjb250ZW50KTsKKyAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVu
dCJfcyk7CiAKLSAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RG
TW92ZShidWZmZXIpKTsKKyAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVh
dGUoV1RGTW92ZSgqYnVmZmVyKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG92ZXJyaWRlRGF0YSA9
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwgY29udGVudC51dGY4
KCkubGVuZ3RoKCkpOwogCkBAIC0xMjY4LDExICsxMjY4LDExIEBAIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3Rvck4KIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7
CiAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZl
cjsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgYnVmZmVyKSkKKyAgICAgICAg
YXV0byBidWZmZXIgPSBiYXNlNjREZWNvZGUoY29udGVudCk7CisgICAgICAgIGlmICghYnVmZmVy
KQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZGVjb2RlIGdp
dmVuIGNvbnRlbnQiX3MpOwogCi0gICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShX
VEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RG
TW92ZSgqYnVmZmVyKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShjb250ZW50LnV0ZjgoKS5kYXRhKCksIGNvbnRlbnQudXRmOCgpLmxlbmd0aCgpKTsK
IApAQCAtMTQwNSw3ICsxNDA1LDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hl
ZFJlc291cgogICAgICAgICB9CiAKICAgICAgICAgKmJhc2U2NEVuY29kZWQgPSB0cnVlOwotICAg
ICAgICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUo
KSk7CisgICAgICAgICpyZXN1bHQgPSBtYWtlU3RyaW5nKFdURjo6YmFzZTY0RW5jb2RlZChidWZm
ZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdl
QWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yUGFnZUFnZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTMsNyArMTEzLDcgQEAgYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZl
ckNvbgogYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IGNoYXIqIGRh
dGEsIHVuc2lnbmVkIHNpemUsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3
aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2NEVu
Y29kZSkgewotICAgICAgICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlKGRhdGEsIHNpemUpOworICAg
ICAgICAqcmVzdWx0ID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGRhdGEsIHNpemUpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMTAyLDcgKzExMDIsNyBAQCBQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvCiAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiQ291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfcyk7
CiAKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5yYXdEYXRhUmVw
cmVzZW50YXRpb24oKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIo
YnVmZmVyLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOworICAgIHJldHVy
biBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkp
LCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEx
OCw3ICszMTE4LDcgQEAgdW5zaWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlUwog
ICAgICAgICBBU1NFUlQoIW5ld1JlcXVlc3QuaXNOdWxsKCkpOwogCiAgICAgICAgIGlmICghZG9j
dW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS5tYXliZUxvYWRTeW5jaHJvbm91
c2x5KG5ld1JlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSkpIHsKLSAgICAgICAgICAgIFZl
Y3RvcjxjaGFyPiBidWZmZXI7CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwog
ICAgICAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoKnRoaXMsIGlkZW50aWZpZXIsIG5ld1JlcXVlc3QsIGNsaWVu
dENyZWRlbnRpYWxQb2xpY3ksIG9wdGlvbnMsIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIGVycm9y
LCByZXNwb25zZSwgYnVmZmVyKTsKICAgICAgICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBw
bGljYXRpb25DYWNoZUhvc3QoKS5tYXliZUxvYWRGYWxsYmFja1N5bmNocm9ub3VzbHkobmV3UmVx
dWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Mb2FkZXJTdHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9M
b2FkZXJTdHJhdGVneS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvTG9hZGVyU3RyYXRlZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdHJ1
Y3QgRmV0Y2hPcHRpb25zOwogY2xhc3MgV0VCQ09SRV9FWFBPUlQgTG9hZGVyU3RyYXRlZ3kgewog
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRnJhbWUmLCBDYWNoZWRSZXNv
dXJjZSYsIFJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4mJik+JiYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRl
ciYsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ2xp
ZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgRmV0Y2hPcHRpb25zJiwgY29uc3QgSFRUUEhlYWRl
ck1hcCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBk
YXRhKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJh
bWVMb2FkZXImLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0aW9ucyYsIGNvbnN0IEhU
VFBIZWFkZXJNYXAmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1
aW50OF90PiYgZGF0YSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlTG9hZENvbXBsZXRlZChQ
YWdlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBicm93c2luZ0NvbnRleHRSZW1vdmVkKEZyYW1l
JikgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Qcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwx
MCArMTg5LDEwIEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkVwaGVtZXJhbFMKIHsK
ICAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaWYgd2UgY2FuIGRvIHdpdGggYSBzaW1wbGUgbGVu
Z3RoIGNoZWNrIGluc3RlYWQgb2YgZGVjb2RpbmcuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTk0NQotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7
Ci0gICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUobm9uY2UsIGRpZ2VzdCkpCisgICAgYXV0byBkaWdl
c3QgPSBiYXNlNjRVUkxEZWNvZGUobm9uY2UpOworICAgIGlmICghZGlnZXN0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGRpZ2VzdC5zaXplKCkgPT0gRXBoZW1lcmFsU291cmNl
Tm9uY2VSZXF1aXJlZE51bWJlck9mQnl0ZXM7CisgICAgcmV0dXJuIGRpZ2VzdC0+c2l6ZSgpID09
IEVwaGVtZXJhbFNvdXJjZU5vbmNlUmVxdWlyZWROdW1iZXJPZkJ5dGVzOwogfQogCiB2b2lkIFBy
aXZhdGVDbGlja01lYXN1cmVtZW50OjpzZXRFcGhlbWVyYWxTb3VyY2VOb25jZShFcGhlbWVyYWxT
b3VyY2VOb25jZSYmIG5vbmNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gc3RhdGljIAogICAgIGlmIChidWZmZXIucG9zaXRpb24oKSA9PSBiZWdpbkhhc2hW
YWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3Rvcjx1aW50OF90
PiBkaWdlc3Q7CiAgICAgU3RyaW5nVmlldyBoYXNoVmFsdWUoYmVnaW5IYXNoVmFsdWUsIGJ1ZmZl
ci5wb3NpdGlvbigpIC0gYmVnaW5IYXNoVmFsdWUpOwotICAgIGlmICghYmFzZTY0RGVjb2RlKGhh
c2hWYWx1ZSwgZGlnZXN0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKSB7Ci0gICAgICAgIGlmICgh
YmFzZTY0VVJMRGVjb2RlKGhhc2hWYWx1ZSwgZGlnZXN0KSkKLSAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0gICAgfQogCi0gICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdCB7ICphbGdvcml0aG0sIFdURk1vdmUoZGlnZXN0KSB9OworICAgIGlmIChhdXRvIGRpZ2Vz
dCA9IGJhc2U2NERlY29kZShoYXNoVmFsdWUsIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRl
UGFkZGluZykpCisgICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyAq
YWxnb3JpdGhtLCBXVEZNb3ZlKCpkaWdlc3QpIH07CisKKyAgICBpZiAoYXV0byBkaWdlc3QgPSBi
YXNlNjRVUkxEZWNvZGUoaGFzaFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsKKworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+
JiBidWZmZXIpCkBAIC0xMjQsMTMgKzEyNSwxMyBAQCBPcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnCiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4g
ZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0JiBlbmNvZGVkRGlnZXN0KQogewotICAgIFZlY3Rvcjx1
aW50OF90PiBkaWdlc3Q7Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdl
c3QsIGRpZ2VzdCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkgewotICAgICAgICBpZiAoIWJhc2U2
NFVSTERlY29kZShlbmNvZGVkRGlnZXN0LmRpZ2VzdCwgZGlnZXN0KSkKLSAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfQorICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NERl
Y29kZShlbmNvZGVkRGlnZXN0LmRpZ2VzdCwgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQ
YWRkaW5nKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGVu
Y29kZWREaWdlc3QuYWxnb3JpdGhtLCBXVEZNb3ZlKCpkaWdlc3QpIH07CisKKyAgICBpZiAoYXV0
byBkaWdlc3QgPSBiYXNlNjRVUkxEZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdlc3QpKQorICAgICAg
ICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERpZ2VzdC5hbGdv
cml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsKIAotICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3QgeyBlbmNvZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZShkaWdlc3QpIH07
CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogc3RhdGljIFBBTDo6Q3J5cHRvRGlnZXN0
OjpBbGdvcml0aG0gdG9DcnlwdG9EaWdlc3RBbGdvcml0aG0oUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0OjpBbGdvcml0aG0gYWxnb3JpdGhtKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsOSArMTY3LDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4g
TUhUTUxBcmNoaXZlOjpnZW5lcmF0ZQogCiAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IHJlc291
cmNlcykgewogICAgICAgICBzdHJpbmdCdWlsZGVyLmNsZWFyKCk7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGVuZE9mUmVzb3VyY2VCb3VuZGFyeSk7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJDb250ZW50LVR5cGU6ICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChyZXNvdXJjZS5taW1lVHlwZSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGVuZE9m
UmVzb3VyY2VCb3VuZGFyeSwgIkNvbnRlbnQtVHlwZTogIiwgcmVzb3VyY2UubWltZVR5cGUpOwog
CiAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRFbmNvZGluZyA9IG51bGxwdHI7CiAgICAgICAg
IGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShyZXNv
dXJjZS5taW1lVHlwZSkgfHwgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFnZU1J
TUVUeXBlKHJlc291cmNlLm1pbWVUeXBlKSkKQEAgLTE3NywyNyArMTc1LDIyIEBAIFJlZjxTaGFy
ZWRCdWZmZXI+IE1IVE1MQXJjaGl2ZTo6Z2VuZXJhdGUKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgY29udGVudEVuY29kaW5nID0gYmFzZTY0OwogCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJcclxuQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGNvbnRlbnRFbmNvZGluZyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJcclxuQ29udGVudC1Mb2NhdGlvbjogIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHJlc291cmNlLnVybC5zdHJpbmcoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJcclxuXHJcbiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQt
VHJhbnNmZXItRW5jb2Rpbmc6ICIsIGNvbnRlbnRFbmNvZGluZywgIlxyXG5Db250ZW50LUxvY2F0
aW9uOiAiLCByZXNvdXJjZS51cmwuc3RyaW5nKCksICJcclxuXHJcbiIpOwogCiAgICAgICAgIGFz
Y2lpU3RyaW5nID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKICAgICAgICAgbWh0
bWxEYXRhLT5hcHBlbmQoYXNjaWlTdHJpbmcuZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgoKSk7
CiAKICAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkgd2Ugd291bGQgZW5jb2RlIHRoZSBjb250ZW50
IGFzIGEgc3RyZWFtIHdpdGhvdXQgaGF2aW5nIHRvIGZldGNoIGl0IGFsbC4KLSAgICAgICAgY29u
c3QgY2hhciogZGF0YSA9IHJlc291cmNlLmRhdGEtPmRhdGEoKTsKKyAgICAgICAgYXV0byogZGF0
YSA9IHJlc291cmNlLmRhdGEtPmRhdGFBc1VJbnQ4UHRyKCk7CiAgICAgICAgIHNpemVfdCBkYXRh
TGVuZ3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgpOwotICAgICAgICBWZWN0b3I8Y2hhcj4gZW5j
b2RlZERhdGE7CiAgICAgICAgIGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgcXVvdGVkUHJp
bnRhYmxlKSkgewotICAgICAgICAgICAgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGRhdGEsIGRhdGFM
ZW5ndGgsIGVuY29kZWREYXRhKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBxdW90
ZWRQcmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCk7CiAgICAgICAgICAgICBtaHRtbERh
dGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUoKSk7CiAgICAg
ICAgICAgICBtaHRtbERhdGEtPmFwcGVuZCgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoY29udGVudEVuY29kaW5nLCBiYXNlNjQpKTsKICAg
ICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0cnVlIGJlbG93
IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGluZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJlcXVpcmVzIENS
TEZzLgotICAgICAgICAgICAgYmFzZTY0RW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgsIGVuY29kZWRE
YXRhKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGUoZGF0YSwg
ZGF0YUxlbmd0aCk7CiAgICAgICAgICAgICBjb25zdCBzaXplX3QgbWF4aW11bUxpbmVMZW5ndGgg
PSA3NjsKICAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IDA7CiAgICAgICAgICAgICBzaXplX3Qg
ZW5jb2RlZERhdGFMZW5ndGggPSBlbmNvZGVkRGF0YS5zaXplKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRN
TFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MiwxNiArMTkyLDE5IEBAIFJlZlB0cjxB
cmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCi0gICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRh
dGE7CiAgICAgc3dpdGNoIChtaW1lSGVhZGVyLmNvbnRlbnRUcmFuc2ZlckVuY29kaW5nKCkpIHsK
LSAgICBjYXNlIE1JTUVIZWFkZXI6OkJhc2U2NDoKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUo
Y29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCksIGRhdGEpKSB7CisgICAgY2FzZSBNSU1F
SGVhZGVyOjpCYXNlNjQ6IHsKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29k
ZShjb250ZW50LT5kYXRhQXNVSW50OFB0cigpICAgLCBjb250ZW50LT5zaXplKCkpOworICAgICAg
ICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgYmFz
ZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgfQorICAgICAgICBkYXRhID0gV1RGTW92ZSgqZGVjb2RlZERhdGEpOwogICAg
ICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpRdW90ZWRQcmludGFibGU6
Ci0gICAgICAgIHF1b3RlZFByaW50YWJsZURlY29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQt
PnNpemUoKSwgZGF0YSk7CisgICAgICAgIGRhdGEgPSBxdW90ZWRQcmludGFibGVEZWNvZGUoY29u
dGVudC0+ZGF0YUFzVUludDhQdHIoKSwgY29udGVudC0+c2l6ZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpTZXZlbkJpdDoKICAgICBjYXNlIE1JTUVIZWFkZXI6OkJp
bmFyeToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFz
dXJlbWVudENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jb2Nv
YS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEwIEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ6OmNhbGN1bGF0ZUEKIHsKICNpZiBIQVZFKFJTQV9CU1NBKQogICAgIHsKLSAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcnZlclB1YmxpY0tleURhdGE7Ci0gICAgICAgIGlmICghYmFz
ZTY0VVJMRGVjb2RlKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCwgc2VydmVyUHVibGljS2V5RGF0
YSkpCisgICAgICAgIGF1dG8gc2VydmVyUHVibGljS2V5RGF0YSA9IGJhc2U2NFVSTERlY29kZShz
ZXJ2ZXJQdWJsaWNLZXlCYXNlNjRVUkwpOworICAgICAgICBpZiAoIXNlcnZlclB1YmxpY0tleURh
dGEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gc2VydmVyUHVibGlj
S2V5ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzZXJ2ZXJQdWJsaWNL
ZXlEYXRhLmRhdGEoKSBsZW5ndGg6c2VydmVyUHVibGljS2V5RGF0YS5zaXplKCldKTsKKyAgICAg
ICAgYXV0byBzZXJ2ZXJQdWJsaWNLZXkgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0
aEJ5dGVzOnNlcnZlclB1YmxpY0tleURhdGEtPmRhdGEoKSBsZW5ndGg6c2VydmVyUHVibGljS2V5
RGF0YS0+c2l6ZSgpXSk7CiAKICAgICAgICAgLy8gRklYTUUoMjIyMDE4KTogQ2hlY2sgZXJyb3Iu
CiAgICAgICAgIG1fc291cmNlVW5saW5rYWJsZVRva2VuLmJsaW5kZXIgPSBhZG9wdE5TKFtQQUw6
OmFsbG9jUlNBQlNTQVRva2VuQmxpbmRlckluc3RhbmNlKCkgaW5pdFdpdGhQdWJsaWNLZXk6c2Vy
dmVyUHVibGljS2V5LmdldCgpIGVycm9yOm51bGxwdHJdKTsKQEAgLTUwLDcgKzUwLDcgQEAgYm9v
bCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogICAgIGlmICghbV9zb3VyY2VV
bmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBtX3NvdXJjZVVubGlua2FibGVUb2tlbi52YWx1ZUJhc2U2NFVSTCA9IFdURjo6YmFzZTY0VVJM
RW5jb2RlKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4gYmxpbmRlZE1lc3Nh
Z2VdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuIGJsaW5kZWRN
ZXNzYWdlXS5sZW5ndGgpOworICAgIG1fc291cmNlVW5saW5rYWJsZVRva2VuLnZhbHVlQmFzZTY0
VVJMID0gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKFttX3NvdXJjZVVubGlua2FibGVUb2tl
bi53YWl0aW5nVG9rZW4gYmxpbmRlZE1lc3NhZ2VdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxl
VG9rZW4ud2FpdGluZ1Rva2VuIGJsaW5kZWRNZXNzYWdlXS5sZW5ndGgpKTsKICAgICByZXR1cm4g
dHJ1ZTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCk7
CkBAIC02NSwxMCArNjUsMTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3Vs
YXRlQQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB7Ci0gICAgICAgIFZlY3Rvcjx1aW50
OF90PiBzZXJ2ZXJSZXNwb25zZURhdGE7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKHNl
cnZlclJlc3BvbnNlQmFzZTY0VVJMLCBzZXJ2ZXJSZXNwb25zZURhdGEpKQorICAgICAgICBhdXRv
IHNlcnZlclJlc3BvbnNlRGF0YSA9IGJhc2U2NFVSTERlY29kZShzZXJ2ZXJSZXNwb25zZUJhc2U2
NFVSTCk7CisgICAgICAgIGlmICghc2VydmVyUmVzcG9uc2VEYXRhKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBhdXRvIHNlcnZlclJlc3BvbnNlID0gYWRvcHROUyhbW05TRGF0
YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzZXJ2ZXJSZXNwb25zZURhdGEuZGF0YSgpIGxlbmd0aDpz
ZXJ2ZXJSZXNwb25zZURhdGEuc2l6ZSgpXSk7CisgICAgICAgIGF1dG8gc2VydmVyUmVzcG9uc2Ug
PSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZlclJlc3BvbnNlRGF0
YS0+ZGF0YSgpIGxlbmd0aDpzZXJ2ZXJSZXNwb25zZURhdGEtPnNpemUoKV0pOwogCiAgICAgICAg
IC8vIEZJWE1FKDIyMjAxOCk6IENoZWNrIGVycm9yLgogICAgICAgICBtX3NvdXJjZVVubGlua2Fi
bGVUb2tlbi5yZWFkeVRva2VuID0gW21fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tl
biBhY3RpdmF0ZVRva2VuV2l0aFNlcnZlclJlc3BvbnNlOnNlcnZlclJlc3BvbnNlLmdldCgpIGVy
cm9yOm51bGxwdHJdOwpAQCAtNzcsOSArNzcsOSBAQCBib29sIFByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpjYWxjdWxhdGVBCiAgICAgfQogCiAgICAgU291cmNlU2VjcmV0VG9rZW4gdG9rZW47Ci0g
ICAgdG9rZW4udG9rZW5CYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VV
bmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmJ5dGVzLCBbbV9zb3VyY2VV
bmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmxlbmd0aCk7Ci0gICAgdG9r
ZW4ua2V5SURCYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxpbmth
YmxlVG9rZW4ucmVhZHlUb2tlbiBrZXlJZF0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tl
bi5yZWFkeVRva2VuIGtleUlkXS5sZW5ndGgpOwotICAgIHRva2VuLnNpZ25hdHVyZUJhc2U2NFVS
TCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRv
a2VuIHNpZ25hdHVyZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2Vu
IHNpZ25hdHVyZV0ubGVuZ3RoKTsKKyAgICB0b2tlbi50b2tlbkJhc2U2NFVSTCA9IG1ha2VTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlZChbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiB0
b2tlbkNvbnRlbnRdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiB0
b2tlbkNvbnRlbnRdLmxlbmd0aCkpOworICAgIHRva2VuLmtleUlEQmFzZTY0VVJMID0gbWFrZVN0
cmluZyhiYXNlNjRVUkxFbmNvZGVkKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2Vu
IGtleUlkXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRd
Lmxlbmd0aCkpOworICAgIHRva2VuLnNpZ25hdHVyZUJhc2U2NFVSTCA9IG1ha2VTdHJpbmcoYmFz
ZTY0VVJMRW5jb2RlZChbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1
cmVdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1cmVd
Lmxlbmd0aCkpOwogCiAgICAgbV9zb3VyY2VTZWNyZXRUb2tlbiA9IFdURk1vdmUodG9rZW4pOwog
ICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVz
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGls
aXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEV4Y2VwdGlvbk9yPFN0
cmluZz4gQmFzZTY0VXRpbGl0aWVzOjpidG8KICAgICBpZiAoIXN0cmluZ1RvRW5jb2RlLmlzQWxs
TGF0aW4xKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJy
b3IgfTsKIAotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkp
OworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoc3RyaW5nVG9FbmNvZGUubGF0
aW4xKCkpKTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0b2Io
Y29uc3QgU3RyaW5nJiBlbmNvZGVkU3RyaW5nKQpAQCAtNDYsMTEgKzQ2LDExIEBAIEV4Y2VwdGlv
bk9yPFN0cmluZz4gQmFzZTY0VXRpbGl0aWVzOjphdG8KICAgICBpZiAoZW5jb2RlZFN0cmluZy5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgVmVjdG9yPGNoYXI+IG91
dDsKLSAgICBpZiAoIWJhc2U2NERlY29kZShlbmNvZGVkU3RyaW5nLCBvdXQsIEJhc2U2NFZhbGlk
YXRlUGFkZGluZyB8IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzIHwgQmFzZTY0RGlzY2Fy
ZFZlcnRpY2FsVGFiKSkKKyAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGVuY29k
ZWRTdHJpbmcsIHsgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nLCBCYXNlNjRE
ZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcywgQmFzZTY0RGVjb2RlT3B0aW9u
czo6RGlzY2FyZFZlcnRpY2FsVGFiIH0pOworICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAotICAgIHJldHVy
biBTdHJpbmcob3V0LmRhdGEoKSwgb3V0LnNpemUoKSk7CisgICAgcmV0dXJuIFN0cmluZyhkZWNv
ZGVkRGF0YS0+ZGF0YSgpLCBkZWNvZGVkRGF0YS0+c2l6ZSgpKTsKIH0KIAogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQ4LDkgKzE4NDgsOCBAQCB2b2lkIFBhZ2U6OnVz
ZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkCiAgICAgaWYgKHVybC5wcm90b2NvbElzRGF0YSgp
ICYmIHVybC5zdHJpbmcoKS5zdGFydHNXaXRoKCJkYXRhOnRleHQvY3NzO2NoYXJzZXQ9dXRmLTg7
YmFzZTY0LCIpKSB7CiAgICAgICAgIG1fZGlkTG9hZFVzZXJTdHlsZVNoZWV0ID0gdHJ1ZTsKIAot
ICAgICAgICBWZWN0b3I8Y2hhcj4gc3R5bGVTaGVldEFzVVRGODsKLSAgICAgICAgaWYgKGJhc2U2
NERlY29kZShkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnN0cmluZygpLnN1YnN0cmluZygz
NSkpLCBzdHlsZVNoZWV0QXNVVEY4LCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykpCi0g
ICAgICAgICAgICBtX3VzZXJTdHlsZVNoZWV0ID0gU3RyaW5nOjpmcm9tVVRGOChzdHlsZVNoZWV0
QXNVVEY4LmRhdGEoKSwgc3R5bGVTaGVldEFzVVRGOC5zaXplKCkpOworICAgICAgICBpZiAoYXV0
byBzdHlsZVNoZWV0QXNVVEY4ID0gYmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2FwZVNlcXVlbmNl
cyh1cmwuc3RyaW5nKCkuc3Vic3RyaW5nKDM1KSksIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9y
ZVNwYWNlc0FuZE5ld0xpbmVzKSkKKyAgICAgICAgICAgIG1fdXNlclN0eWxlU2hlZXQgPSBTdHJp
bmc6OmZyb21VVEY4KHN0eWxlU2hlZXRBc1VURjgtPmRhdGEoKSwgc3R5bGVTaGVldEFzVVRGOC0+
c2l6ZSgpKTsKICAgICB9CiAKICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1
bWVudCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNiArMTg4LDExIEBAIHZvaWQgU2hhcmVkQnVmZmVy
OjphcHBlbmQoY29uc3QgY2hhciogZGEKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQo
KSk7CiB9CiAKK3ZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IGxlbmd0aCkKK3sKKyAgICBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oZGF0YSksIGxlbmd0aCk7Cit9CisKIHZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoVmVjdG9y
PGNoYXI+JiYgZGF0YSkKIHsKICAgICBBU1NFUlQoIW1faGFzQmVlbkNvbWJpbmVkSW50b09uZVNl
Z21lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhcHBl
bmQoY29uc3QgU2hhcmVkQnVmZmVyJik7CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciosIHNp
emVfdCk7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgdWludDhfdCosIHNpemVfdCk7CiAgICAgdm9p
ZCBhcHBlbmQoVmVjdG9yPGNoYXI+JiYpOwogCiAgICAgdm9pZCBjbGVhcigpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OSwxMiArNzksMTUgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxS
ZWZQdHI8S2V5SGFuZGxlPgogICAgICAgICAgICAgaWYgKCFrZXlWYWx1ZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIEtleUlEVHlwZSBrZXlJRERhdGE7Ci0g
ICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SGFuZGxlVmFsdWVEYXRhOwotICAgICAgICAg
ICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlJRCwgeyBrZXlJRERhdGEgfSkgfHwgIVdU
Rjo6YmFzZTY0VVJMRGVjb2RlKGtleVZhbHVlLCB7IGtleUhhbmRsZVZhbHVlRGF0YSB9KSkKKyAg
ICAgICAgICAgIGF1dG8ga2V5SUREYXRhID0gYmFzZTY0VVJMRGVjb2RlKGtleUlEKTsKKyAgICAg
ICAgICAgIGlmICgha2V5SUREYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgICAgICBhdXRvIGtleUhhbmRsZVZhbHVlRGF0YSA9IGJhc2U2NFVSTERl
Y29kZShrZXlWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIWtleUhhbmRsZVZhbHVlRGF0YSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGRlY29kZWRLZXlzLmFw
cGVuZChLZXlIYW5kbGU6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNh
YmxlLCBXVEZNb3ZlKGtleUlERGF0YSksIFdURk1vdmUoa2V5SGFuZGxlVmFsdWVEYXRhKSkpOwor
ICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtleUhhbmRsZTo6Y3JlYXRlKENETUluc3Rh
bmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFdURk1vdmUoKmtleUlERGF0YSksIFdURk1v
dmUoKmtleUhhbmRsZVZhbHVlRGF0YSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9KTsKICAgICBpZiAoIXZhbGlkRm9ybWF0KQpAQCAtMjE1LDggKzIxOCw3IEBAIHN0YXRp
YyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5aWRzRnIKICAgICAvLyAia2lkcyIKICAgICAv
LyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSBi
YXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtl
eSBJRCB2YWx1ZS4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5SWRDb3VudDsgaSsr
KSB7Ci0gICAgICAgIFN0cmluZyBrZXlJZCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKCZkYXRhW2lu
ZGV4XSwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpOwotICAgICAgICBrZXlJZHNBcnJheS0+
cHVzaFN0cmluZyhrZXlJZCk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKG1ha2VT
dHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJ
bkJ5dGVzKSkpOwogICAgICAgICBpbmRleCArPSBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlczsK
ICAgICB9CiAKQEAgLTI0Myw4ICsyNDUsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0
cmFjdEtleUlkRnJvCiAgICAgLy8gVGhlIGZvcm1hdCBpcyBhIEpTT04gb2JqZWN0IGNvbnRhaW5p
bmcgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFycmF5
IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVybCBl
bmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZhbHVl
LgotICAgIFN0cmluZyBrZXlJZCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKGluaXREYXRhLmRhdGEo
KSwgaW5pdERhdGEuc2l6ZSgpKTsKLSAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhrZXlJZCk7
CisgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcobWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVk
KGluaXREYXRhLmRhdGEoKSwgaW5pdERhdGEuc2l6ZSgpKSkpOwogCiAgICAgb2JqZWN0LT5zZXRB
cnJheSgia2lkcyIsIFdURk1vdmUoa2V5SWRzQXJyYXkpKTsKICAgICBDU3RyaW5nIGpzb25EYXRh
ID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkBAIC01ODcsNyArNTg4LDcgQEAgdm9p
ZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAgICAgYXV0byBh
cnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0
byYga2V5IDogbV9rZXlTdG9yZSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChrZXktPmlkKCku
c2l6ZSgpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Ci0gICAgICAg
ICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNvZGUoa2V5LT5pZCgp
LmRhdGEoKSwga2V5LT5pZCgpLnNpemUoKSkpOworICAgICAgICAgICAgICAgIGFycmF5LT5wdXNo
U3RyaW5nKG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChrZXktPmlkKCkuZGF0YSgpLCBrZXkt
PmlkKCkuc2l6ZSgpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcm9vdE9iamVjdC0+
c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGFycmF5KSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVh
bWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQ
bGF5U3RyZWFtaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDExICsxMTMsMTEgQEAgc3Rh
dGljIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4gZXh0cmFjdAogICAgICAgICBpZiAoIWtleUlE
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgVmVjdG9yPGNoYXI+IHNpbmZEYXRh
OwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0RGVjb2RlKGtleUlELCB7IHNpbmZEYXRhIH0sIFdU
Rjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpKQorICAgICAgICBhdXRvIHNpbmZEYXRh
ID0gYmFzZTY0RGVjb2RlKGtleUlELCBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNB
bmROZXdMaW5lcyk7CisgICAgICAgIGlmICghc2luZkRhdGEpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICBzaW5mcy51bmNoZWNrZWRBcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUo
V1RGTW92ZShzaW5mRGF0YSkpKTsKKyAgICAgICAgc2luZnMudW5jaGVja2VkQXBwZW5kKFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKnNpbmZEYXRhKSkpOwogICAgIH0KIAogICAgIHJldHVy
biBzaW5mczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9D
RE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NzE1LDcgKzcxNSw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcK
ICAgICAgICAgaWRlbnRpZmllciA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhE
YXRhOmluaXREYXRhLT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBlbmNvZGluZzpOU1VURjhTdHJpbmdF
bmNvZGluZ10pOwogI2lmIEhBVkUoRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19JTklUREFUQSkKICAg
ICBlbHNlIGlmIChpbml0RGF0YVR5cGUgPT0gSW5pdERhdGFSZWdpc3RyeTo6Y2VuY05hbWUoKSkg
ewotICAgICAgICBTdHJpbmcgcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZShpbml0RGF0YS0+ZGF0
YSgpLCBpbml0RGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgYXV0byBwc3NoU3RyaW5nID0gbWFrZVN0
cmluZyhiYXNlNjRFbmNvZGVkKGluaXREYXRhLT5kYXRhKCksIGluaXREYXRhLT5zaXplKCkpKTsK
ICAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdp
dGhKU09OT2JqZWN0OkB7IEAicHNzaCI6IChOU1N0cmluZyopcHNzaFN0cmluZyB9IG9wdGlvbnM6
TlNKU09OV3JpdGluZ1ByZXR0eVByaW50ZWQgZXJyb3I6bmlsXTsKICAgICB9CiAjZW5kaWYKQEAg
LTg1MCwxMSArODUwLDExIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1p
bmcKICAgICAgICAgICAgIGlmICgha2V5SURTdHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SURWZWN0b3I7Ci0gICAg
ICAgICAgICBpZiAoIWJhc2U2NERlY29kZShrZXlJRFN0cmluZywga2V5SURWZWN0b3IpKQorICAg
ICAgICAgICAgYXV0byBrZXlJRFZlY3RvciA9IGJhc2U2NERlY29kZShrZXlJRFN0cmluZyk7Cisg
ICAgICAgICAgICBpZiAoa2V5SURWZWN0b3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICBhdXRvIGtleUlEID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92
ZShrZXlJRFZlY3RvcikpOworICAgICAgICAgICAgYXV0byBrZXlJRCA9IFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKFdURk1vdmUoKmtleUlEVmVjdG9yKSk7CiAgICAgICAgICAgICBhdXRvIGZvdW5kSW5k
ZXggPSBtX2N1cnJlbnRSZXF1ZXN0LnZhbHVlKCkucmVxdWVzdHMuZmluZE1hdGNoaW5nKFsmXSAo
YXV0byYgcmVxdWVzdCkgewogICAgICAgICAgICAgICAgIGF1dG8ga2V5SURzID0ga2V5SURzRm9y
UmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4ga2V5SURzLmZp
bmRNYXRjaGluZyhbJl0oY29uc3QgUmVmPFNoYXJlZEJ1ZmZlcj4mIGlkKSB7CkBAIC04ODUsMTAg
Kzg4NSwxMCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAg
ICAgICAgICAgICAgYXV0byBwYXlsb2FkU3RyaW5nID0gcGF5bG9hZEZpbmRSZXN1bHRzLT52YWx1
ZS0+YXNTdHJpbmcoKTsKICAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWRTdHJpbmcpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gcGF5bG9hZFZlY3RvcjsKLSAgICAgICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShw
YXlsb2FkU3RyaW5nLCBwYXlsb2FkVmVjdG9yKSkKKyAgICAgICAgICAgICAgICBhdXRvIHBheWxv
YWRWZWN0b3IgPSBiYXNlNjREZWNvZGUocGF5bG9hZFN0cmluZyk7CisgICAgICAgICAgICAgICAg
aWYgKCFwYXlsb2FkVmVjdG9yKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgYXV0byBwYXlsb2FkRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdU
Rk1vdmUocGF5bG9hZFZlY3RvcikpOworICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZERhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpwYXlsb2FkVmVjdG9yKSk7CiAgICAgICAg
ICAgICAgICAgW3JlcXVlc3QgcHJvY2Vzc0NvbnRlbnRLZXlSZXNwb25zZTpbUEFMOjpnZXRBVkNv
bnRlbnRLZXlSZXNwb25zZUNsYXNzKCkgY29udGVudEtleVJlc3BvbnNlV2l0aEZhaXJQbGF5U3Ry
ZWFtaW5nS2V5UmVzcG9uc2VEYXRhOnBheWxvYWREYXRhLT5jcmVhdGVOU0RhdGEoKS5nZXQoKV1d
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTk1LDggKzEx
OTUsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAg
ICAgICBhdXRvIGVudHJ5ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGF1
dG8mIGtleUlEID0gcmVxdWVzdERhdGEuZmlyc3Q7CiAgICAgICAgICAgICBhdXRvJiBwYXlsb2Fk
ID0gcmVxdWVzdERhdGEuc2Vjb25kOwotICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygia2V5
SUQiLCBiYXNlNjRFbmNvZGUoa2V5SUQtPmRhdGEoKSwga2V5SUQtPnNpemUoKSkpOwotICAgICAg
ICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZShwYXlsb2FkLmdl
dCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOworICAgICAgICAgICAgZW50cnktPnNl
dFN0cmluZygia2V5SUQiLCBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoa2V5SUQtPmRhdGEoKSwg
a2V5SUQtPnNpemUoKSkpKTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoInBheWxvYWQi
LCBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocGF5bG9hZC5nZXQoKS5ieXRlcywgcGF5bG9hZC5n
ZXQoKS5sZW5ndGgpKSk7CiAgICAgICAgICAgICByZXF1ZXN0SlNPTi0+cHVzaE9iamVjdChXVEZN
b3ZlKGVudHJ5KSk7CiAgICAgICAgIH0KICAgICAgICAgYXV0byByZXF1ZXN0QnVmZmVyID0gdXRm
OEJ1ZmZlcihyZXF1ZXN0SlNPTi0+dG9KU09OU3RyaW5nKCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzAsMTAgKzEzMCw3IEBAIFN0cmluZyBJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6dG9EYXRhVVIKICAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuICJkYXRhOiwiOwogCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAg
YmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJh
c2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIg
KyBiYXNlNjREYXRhOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAi
O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFn
ZS5zaXplKCkpKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
Ojp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTAgKzE3NCw3IEBAIHN0YXRpYyBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QKIAogU3RyaW5nIGRhdGFVUkwoQ0ZEYXRh
UmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgVmVjdG9yPGNoYXI+IGJh
c2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0
YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1p
bWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgcmV0dXJuIG1ha2VTdHJpbmco
ImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoQ0ZEYXRhR2V0Qnl0
ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpKSk7CiB9CiAKIFN0cmluZyBkYXRhVVJM
KGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEw
MCw3IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVlRm9udE5hbWUoKQogICAgIEdVSUQgZm9u
dFV1aWQ7CiAgICAgQ29DcmVhdGVHdWlkKCZmb250VXVpZCk7CiAKLSAgICBTdHJpbmcgZm9udE5h
bWUgPSBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlkKSwgc2l6
ZW9mKGZvbnRVdWlkKSk7CisgICAgYXV0byBmb250TmFtZSA9IG1ha2VTdHJpbmcoYmFzZTY0RW5j
b2RlZChyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQp
KSk7CiAgICAgQVNTRVJUKGZvbnROYW1lLmxlbmd0aCgpIDwgTEZfRkFDRVNJWkUpOwogICAgIHJl
dHVybiBmb250TmFtZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fp
cm8uY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODEsNyArODEsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnROYW1lKCkKICAg
ICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQpOwogCi0gICAgU3Ry
aW5nIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250
VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBtYWtlU3RyaW5n
KGJhc2U2NEVuY29kZWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlkKSwgc2l6ZW9m
KGZvbnRVdWlkKSkpOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpF
KTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTIxOSw3ICsyMTksNyBAQCBzdGF0aWMgU3RyaW5nIHNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nCiAgICAgaWYgKFNlY0FzbjFFbmNvZGVJdGVtKGNvZGVyLCAmc2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmdlLCBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VUZW1wbGF0ZSwg
JmVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UpICE9IG5vRXJyKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29kZWRTaWduZWRQ
dWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxs
ZW5nZS5MZW5ndGgpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoZW5jb2Rl
ZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVibGljS2V5
QW5kQ2hhbGxlbmdlLkxlbmd0aCkpOwogfQogCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19FTkQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9C
bG9iUmVnaXN0cnlJbXBsLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYsNyArNTYsNyBAQCBzdGF0aWMgUmVmPFJlc291cmNlSGFuZGxlPiBjcmVhdGVCbG9iUmVzCiAg
ICAgcmV0dXJuIGJsb2JSZWdpc3RyeSgpLmJsb2JSZWdpc3RyeUltcGwoKS0+Y3JlYXRlUmVzb3Vy
Y2VIYW5kbGUocmVxdWVzdCwgY2xpZW50KTsKIH0KIAotc3RhdGljIHZvaWQgbG9hZEJsb2JSZXNv
dXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJv
ciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3N0YXRp
YyB2b2lkIGxvYWRCbG9iUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0Kiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwg
UmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8
dWludDhfdD4mIGRhdGEpCiB7CiAgICAgYXV0byogYmxvYkRhdGEgPSBibG9iUmVnaXN0cnkoKS5i
bG9iUmVnaXN0cnlJbXBsKCktPmdldEJsb2JEYXRhRnJvbVVSTChyZXF1ZXN0LnVybCgpKTsKICAg
ICBCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoYmxvYkRhdGEs
IHJlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNv
dXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgbmFtZXNwYWNl
IHsKIAogY2xhc3MgQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIgOiBwdWJsaWMgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQgewogcHVibGljOgotICAgIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9h
ZGVyKFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+Jik7Cisg
ICAgQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mKTsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJlc3BvbnNlJiYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJikgZmluYWw7CiAgICAgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIGZpbmFsOwpAQCAtODUsMTAgKzg1LDEwIEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgUmVzb3VyY2VFcnJvciYgbV9lcnJvcjsKICAgICBSZXNvdXJjZVJl
c3BvbnNlJiBtX3Jlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFyPiYgbV9kYXRhOworICAgIFZlY3Rv
cjx1aW50OF90PiYgbV9kYXRhOwogfTsKIAotQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXI6
OkJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQorQmxvYlJlc291cmNl
U3luY2hyb25vdXNMb2FkZXI6OkJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNl
RXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQogICAgIDogbV9lcnJvcihlcnJvcikKICAgICAsIG1fcmVzcG9uc2UocmVzcG9uc2Up
CiAgICAgLCBtX2RhdGEoZGF0YSkKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIEJsb2JSZXNvdXJj
ZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRSCiAKICAgICAvLyBSZWFkIGFsbCB0aGUgZGF0YS4KICAg
ICBtX2RhdGEucmVzaXplKHN0YXRpY19jYXN0PHNpemVfdD4ocmVzcG9uc2UuZXhwZWN0ZWRDb250
ZW50TGVuZ3RoKCkpKTsKLSAgICBzdGF0aWNfY2FzdDxCbG9iUmVzb3VyY2VIYW5kbGUqPihoYW5k
bGUpLT5yZWFkU3luYyhtX2RhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fZGF0YS5zaXpl
KCkpKTsKKyAgICBzdGF0aWNfY2FzdDxCbG9iUmVzb3VyY2VIYW5kbGUqPihoYW5kbGUpLT5yZWFk
U3luYyhyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2RhdGEuZGF0YSgpKSwgc3RhdGljX2Nhc3Q8
aW50PihtX2RhdGEuc2l6ZSgpKSk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIApAQCAt
MTQxLDcgKzE0MSw3IEBAIFJlZjxCbG9iUmVzb3VyY2VIYW5kbGU+IEJsb2JSZXNvdXJjZUhhbmQK
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCbG9iUmVzb3VyY2VIYW5kbGUoYmxvYkRhdGEsIHJl
cXVlc3QsIGNsaWVudCwgdHJ1ZSkpOwogfQogCi12b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSogYmxvYkRhdGEsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSogYmxvYkRhdGEsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgaWYgKCFlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgImdldCIpKSB7CiAg
ICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJvcih3ZWJLaXRCbG9iUmVzb3VyY2VEb21haW4sIHN0
YXRpY19jYXN0PGludD4oRXJyb3I6Ok1ldGhvZE5vdEFsbG93ZWQpLCByZXNwb25zZS51cmwoKSwg
IlJlcXVlc3QgbWV0aG9kIG11c3QgYmUgR0VUIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFu
ZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgQmxvYlJlc291cmNl
SGFuZGxlIGZpbmFsIDogcHVibGljIAogcHVibGljOgogICAgIHN0YXRpYyBSZWY8QmxvYlJlc291
cmNlSGFuZGxlPiBjcmVhdGVBc3luYyhCbG9iRGF0YSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFJlc291cmNlSGFuZGxlQ2xpZW50Kik7CiAKLSAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KEJsb2JEYXRhKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VF
cnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIHN0YXRp
YyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQmxvYkRhdGEqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50
OF90PiYgZGF0YSk7CiAKICAgICB2b2lkIHN0YXJ0KCk7CiAgICAgaW50IHJlYWRTeW5jKGNoYXIq
LCBpbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFs
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9D
cmVkZW50aWFsQmFzZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAjaW5jbHVkZSAiQ3JlZGVudGlhbEJhc2UuaCIKIAogI2luY2x1ZGUgIkNyZWRl
bnRpYWwuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC05NCw0ICs5NSwxMCBAQCBib29sIENyZWRlbnRpYWxCYXNlOjpjb21wYXJlKGNv
bnN0IENyZWRlCiAgICAgcmV0dXJuIENyZWRlbnRpYWw6OnBsYXRmb3JtQ29tcGFyZShhLCBiKTsK
IH0KIAorU3RyaW5nIENyZWRlbnRpYWxCYXNlOjpzZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3Jp
emF0aW9uSGVhZGVyKCkgY29uc3QKK3sKKyAgICBhdXRvIGNyZWRlbnRpYWxTdHJpbmdEYXRhID0g
bWFrZVN0cmluZyhtX3VzZXIsICc6JywgbV9wYXNzd29yZCkudXRmOCgpOworICAgIHJldHVybiBt
YWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNyZWRlbnRpYWxTdHJpbmdEYXRhKSk7
Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlh
bEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Ny
ZWRlbnRpYWxCYXNlLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzks
NiBAQCBlbnVtIENyZWRlbnRpYWxQZXJzaXN0ZW5jZSB7CiB9OwogCiBjbGFzcyBDcmVkZW50aWFs
QmFzZSB7Ci0KIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRW1wdHkoKSBjb25z
dDsKICAgICAKQEAgLTUyLDYgKzUxLDggQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIGJvb2wgY29tcGFyZShjb25zdCBDcmVkZW50aWFsJiwgY29uc3QgQ3JlZGVudGlhbCYp
OwogCisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhv
cml6YXRpb25IZWFkZXIoKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIFdFQkNPUkVfRVhQT1JU
IENyZWRlbnRpYWxCYXNlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ3JlZGVudGlhbEJhc2UoY29u
c3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkLCBDcmVkZW50aWFsUGVyc2lz
dGVuY2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9E
YXRhVVJMRGVjb2Rlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgs
MzYgKzE0OCwyNiBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPERlY29kZVRhc2s+IGNyZWF0CiAg
ICAgKTsKIH0KIAotc3RhdGljIGJvb2wgZGVjb2RlQmFzZTY0KERlY29kZVRhc2smIHRhc2ssIE1v
ZGUgbW9kZSkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlY29kZUJhc2U2NChj
b25zdCBEZWNvZGVUYXNrJiB0YXNrLCBNb2RlIG1vZGUpCiB7Ci0gICAgVmVjdG9yPGNoYXI+IGJ1
ZmZlcjsKLSAgICBpZiAobW9kZSA9PSBNb2RlOjpGb3JnaXZpbmdCYXNlNjQpIHsKLSAgICAgICAg
YXV0byB1bmVzY2FwZWRTdHJpbmcgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModGFzay5lbmNv
ZGVkRGF0YS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpOwotICAgICAgICBpZiAoIWJhc2U2NERl
Y29kZSh1bmVzY2FwZWRTdHJpbmcsIGJ1ZmZlciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nIHwgQmFz
ZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgfCBCYXNlNjREaXNjYXJkVmVydGljYWxUYWIpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7CisgICAgc3dpdGNoIChtb2Rl
KSB7CisgICAgY2FzZSBNb2RlOjpGb3JnaXZpbmdCYXNlNjQ6CisgICAgICAgIHJldHVybiBiYXNl
NjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRhc2suZW5jb2RlZERhdGEpLCB7IEJh
c2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZywgQmFzZTY0RGVjb2RlT3B0aW9uczo6
SWdub3JlU3BhY2VzQW5kTmV3TGluZXMsIEJhc2U2NERlY29kZU9wdGlvbnM6OkRpc2NhcmRWZXJ0
aWNhbFRhYn0pOworCisgICAgY2FzZSBNb2RlOjpMZWdhY3k6CiAgICAgICAgIC8vIEZpcnN0IHRy
eSBiYXNlNjR1cmwuCi0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKHRhc2suZW5jb2RlZERh
dGEudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBidWZmZXIpKSB7Ci0gICAgICAgICAgICAvLyBE
aWRuJ3Qgd29yaywgdHJ5IHVuZXNjYXBpbmcgYW5kIGRlY29kaW5nIGFzIGJhc2U2NC4KLSAgICAg
ICAgICAgIGF1dG8gdW5lc2NhcGVkU3RyaW5nID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRh
c2suZW5jb2RlZERhdGEudG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKLSAgICAgICAgICAgIGlm
ICghYmFzZTY0RGVjb2RlKHVuZXNjYXBlZFN0cmluZywgYnVmZmVyLCBCYXNlNjRJZ25vcmVTcGFj
ZXNBbmROZXdMaW5lcyB8IEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIGRlY29kZWREYXRh
ID0gYmFzZTY0VVJMRGVjb2RlKHRhc2suZW5jb2RlZERhdGEpKQorICAgICAgICAgICAgcmV0dXJu
IGRlY29kZWREYXRhOworICAgICAgICAvLyBEaWRuJ3Qgd29yaywgdHJ5IHVuZXNjYXBpbmcgYW5k
IGRlY29kaW5nIGFzIGJhc2U2NC4KKyAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZShkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXModGFzay5lbmNvZGVkRGF0YSksIHsgQmFzZTY0RGVjb2RlT3B0aW9u
czo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMsIEJhc2U2NERlY29kZU9wdGlvbnM6OkRpc2NhcmRW
ZXJ0aWNhbFRhYiB9KTsKICAgICB9Ci0gICAgYnVmZmVyLnNocmlua1RvRml0KCk7Ci0gICAgdGFz
ay5yZXN1bHQuZGF0YSA9IFdURk1vdmUoYnVmZmVyKTsKLQotICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgdm9pZCBkZWNvZGVFc2NhcGVkKERlY29kZVRhc2smIHRhc2spCitzdGF0aWMgVmVj
dG9yPHVpbnQ4X3Q+IGRlY29kZUVzY2FwZWQoY29uc3QgRGVjb2RlVGFzayYgdGFzaykKIHsKICAg
ICBUZXh0RW5jb2RpbmcgZW5jb2RpbmdGcm9tQ2hhcnNldCh0YXNrLnJlc3VsdC5jaGFyc2V0KTsK
ICAgICBhdXRvJiBlbmNvZGluZyA9IGVuY29kaW5nRnJvbUNoYXJzZXQuaXNWYWxpZCgpID8gZW5j
b2RpbmdGcm9tQ2hhcnNldCA6IFVURjhFbmNvZGluZygpOwotICAgIGF1dG8gYnVmZmVyID0gZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKHRhc2suZW5jb2RlZERhdGEsIGVuY29kaW5nKTsK
LQotICAgIGJ1ZmZlci5zaHJpbmtUb0ZpdCgpOwotICAgIHRhc2sucmVzdWx0LmRhdGEgPSBXVEZN
b3ZlKGJ1ZmZlcik7CisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0YSh0
YXNrLmVuY29kZWREYXRhLCBlbmNvZGluZyk7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxSZXN1bHQ+
IGRlY29kZVN5bmNocm9ub3VzbHkoRGVjb2RlVGFzayYgdGFzaywgTW9kZSBtb2RlKQpAQCAtMTg2
LDExICsxNzYsMTQgQEAgc3RhdGljIE9wdGlvbmFsPFJlc3VsdD4gZGVjb2RlU3luY2hyb25vdQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKHRhc2suaXNCYXNlNjQpIHsK
LSAgICAgICAgaWYgKCFkZWNvZGVCYXNlNjQodGFzaywgbW9kZSkpCisgICAgICAgIGF1dG8gZGVj
b2RlZERhdGEgPSBkZWNvZGVCYXNlNjQodGFzaywgbW9kZSk7CisgICAgICAgIGlmICghZGVjb2Rl
ZERhdGEpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB0YXNrLnJl
c3VsdC5kYXRhID0gV1RGTW92ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxzZQotICAgICAgICBk
ZWNvZGVFc2NhcGVkKHRhc2spOworICAgICAgICB0YXNrLnJlc3VsdC5kYXRhID0gZGVjb2RlRXNj
YXBlZCh0YXNrKTsKIAorICAgIHRhc2sucmVzdWx0LmRhdGEuc2hyaW5rVG9GaXQoKTsKICAgICBy
ZXR1cm4gV1RGTW92ZSh0YXNrLnJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmgJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBzdHJ1Y3QgUmVzdWx0IHsKICAgICBTdHJpbmcg
bWltZVR5cGU7CiAgICAgU3RyaW5nIGNoYXJzZXQ7CiAgICAgU3RyaW5nIGNvbnRlbnRUeXBlOwot
ICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogfTsKIAog
dXNpbmcgRGVjb2RlQ29tcGxldGlvbkhhbmRsZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQgKE9wdGlv
bmFsPFJlc3VsdD4pPjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmZhaWx1cmVUaW1lckZpcmVk
KCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291cmNlSGFuZGxlOjps
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBpZiAoYXV0byBjb25z
dHJ1Y3RvciA9IGJ1aWx0aW5SZXNvdXJjZUhhbmRsZVN5bmNocm9ub3VzTG9hZGVyTWFwKCkuZ2V0
KHJlcXVlc3QudXJsKCkucHJvdG9jb2woKS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpKSB7CiAg
ICAgICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIGNsYXNzIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRl
OwogY2xhc3MgUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRs
ZT4sIHB1YmxpYyBBdXRoZW50aWNhdGlvbkNsaWVudCB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlKE5ldHdvcmtpbmdDb250
ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqLCBib29s
IGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZENvbnRl
bnRFbmNvZGluZ1NuaWZmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJl
c3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3Im
LCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5SZXNvdXJjZUhhbmRsZSgpOwogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
IHx8IFVTRShDRlVSTENPTk5FQ1RJT04pCkBAIC0xOTMsNyArMTkzLDcgQEAgcHVibGljOgogICAg
IHR5cGVkZWYgUmVmPFJlc291cmNlSGFuZGxlPiAoKkJ1aWx0aW5Db25zdHJ1Y3RvcikoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KTsK
ICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJ1aWx0aW5Db25zdHJ1Y3Rvcihjb25zdCBBdG9tU3Ry
aW5nJiBwcm90b2NvbCwgQnVpbHRpbkNvbnN0cnVjdG9yKTsKIAotICAgIHR5cGVkZWYgdm9pZCAo
KkJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlcikoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJl
c291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIHR5cGVkZWYgdm9pZCAo
KkJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlcikoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJl
c291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogICAgIHN0YXRpYyB2b2lk
IHJlZ2lzdGVyQnVpbHRpblN5bmNocm9ub3VzTG9hZGVyKGNvbnN0IEF0b21TdHJpbmcmIHByb3Rv
Y29sLCBCdWlsdGluU3luY2hyb25vdXNMb2FkZXIpOwogCiBwcm90ZWN0ZWQ6CkBAIC0yMTMsNyAr
MjEzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjaGVkdWxlRmFpbHVyZShGYWlsdXJlVHlwZSk7
CiAKICAgICBib29sIHN0YXJ0KCk7Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1Mb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3Bv
bnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgdm9pZCByZWZBdXRoZW50
aWNhdGlvbkNsaWVudCgpIG92ZXJyaWRlIHsgcmVmKCk7IH0KICAgICB2b2lkIGRlcmVmQXV0aGVu
dGljYXRpb25DbGllbnQoKSBvdmVycmlkZSB7IGRlcmVmKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJD
bGllbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMs
NyArNzMsNyBAQCB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlCiAKIHZv
aWQgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBpbnQgLyplbmNvZGVkRGF0YUxl
bmd0aCovKQogewotICAgIG1fZGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKKyAgICBtX2RhdGEu
YXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOwog
fQogCiB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRGaW5pc2hMb2FkaW5nKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVy
Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBzZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKGJvb2wgYWxsb3cpIHsgbV9hbGxvd1N0b3Jl
ZENyZWRlbnRpYWxzID0gYWxsb3c7IH0KICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KLSAgICBWZWN0b3I8Y2hhcj4mIG11
dGFibGVEYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgVmVjdG9yPHVpbnQ4X3Q+JiBtdXRh
YmxlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIGNvbnN0IFJlc291cmNlRXJyb3ImIGVy
cm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvcjsgfQogICAgIFN5bmNocm9ub3VzTG9hZGVyTWVz
c2FnZVF1ZXVlJiBtZXNzYWdlUXVldWUoKSB7IHJldHVybiBtX21lc3NhZ2VRdWV1ZS5nZXQoKTsg
fQogCkBAIC03NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fYWxsb3dTdG9yZWRD
cmVkZW50aWFscyB7IGZhbHNlIH07CiAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwot
ICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fZGF0YTsKICAg
ICBSZXNvdXJjZUVycm9yIG1fZXJyb3I7CiAgICAgUmVmPFN5bmNocm9ub3VzTG9hZGVyTWVzc2Fn
ZVF1ZXVlPiBtX21lc3NhZ2VRdWV1ZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VIYW5kbGVDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDkgKzg1LDcgQEAgc3Rh
dGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZEYXRhUgogCiBzdGF0aWMgdm9pZCBhcHBs
eUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcihSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7Ci0gICAgU3RyaW5nIGF1dGhlbnRpY2F0aW9uSGVh
ZGVyID0gIkJhc2ljICIgKyBiYXNlNjRFbmNvZGUoU3RyaW5nKGNyZWRlbnRpYWwudXNlcigpICsg
IjoiICsgY3JlZGVudGlhbC5wYXNzd29yZCgpKS51dGY4KCkpOwotCi0gICAgcmVxdWVzdC5zZXRI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGF1dGhlbnRpY2F0
aW9uSGVhZGVyKTsKKyAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6QXV0aG9yaXphdGlvbiwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3Jp
emF0aW9uSGVhZGVyKCkpOwogfQogCiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VI
YW5kbGVJbnRlcm5hbCgpCkBAIC01MjQsNyArNTIyLDcgQEAgc3RhdGljIHZvaWQgZW1wdHlQZXJm
b3JtKHZvaWQqKQogewogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1M
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBMT0coTmV0d29yaywg
IlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHk6JXMgc3N0
b3JlZENyZWRlbnRpYWxzUG9saWN5OiV1IiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjgsNyArMzY4LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVz
dGFydFJlcXVlc3RXaXRoQwogICAgIGQtPm1fY3VybFJlcXVlc3QtPnN0YXJ0KCk7CiB9CiAKLXZv
aWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VF
cnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRh
dGEpCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJl
c291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVp
bnQ4X3Q+JiBkYXRhKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJU
KCFyZXF1ZXN0LmlzRW1wdHkoKSk7CkBAIC01NjIsOSArNTYyLDkgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6aGFuZGxlRGF0YVVSTCgpCiAKICAgICAgICAgLy8gZGlkUmVjZWl2ZVJlc3BvbnNlIG1p
Z2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRlZC4KICAgICAgICAgaWYgKGNsaWVudCgp
KSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYgKGJhc2U2
NERlY29kZShkYXRhLCBvdXQsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSAmJiBvdXQu
c2l6ZSgpID4gMCkKLSAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcih0
aGlzLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpKSwgb3JpZ2lu
YWxTaXplKTsKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoZGF0
YSwgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpOworICAgICAg
ICAgICAgaWYgKGRlY29kZWREYXRhICYmIGRlY29kZWREYXRhLT5zaXplKCkgPiAwKQorICAgICAg
ICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKHRoaXMsIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKGRlY29kZWREYXRhLT5kYXRhKCksIGRlY29kZWREYXRhLT5zaXplKCkpLCBvcmlnaW5h
bFNpemUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgVGV4dEVuY29kaW5nIGVu
Y29kaW5nKGNoYXJzZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvUmVzb3VyY2VIYW5kbGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw5ICs2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAKIHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKLSAgICBT
dHJpbmcgYXV0aGVudGljYXRpb25IZWFkZXIgPSAiQmFzaWMgIiArIGJhc2U2NEVuY29kZShTdHJp
bmcoY3JlZGVudGlhbC51c2VyKCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3b3JkKCkpLnV0Zjgo
KSk7Ci0KLSAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QXV0
aG9yaXphdGlvbiwgYXV0aGVudGljYXRpb25IZWFkZXIpOworICAgIHJlcXVlc3Quc2V0SFRUUEhl
YWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uLCBjcmVkZW50aWFsLnNlcmlh
bGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSk7CiB9CiAKIHN0YXRpYyBOU09w
ZXJhdGlvblF1ZXVlICpvcGVyYXRpb25RdWV1ZUZvckFzeW5jQ2xpZW50cygpCkBAIC0zNTIsNyAr
MzUwLDcgQEAgQ0ZTdHJpbmdSZWYgUmVzb3VyY2VIYW5kbGU6OnN5bmNocm9ub3VzTAogICAgIHJl
dHVybiBDRlNUUigiV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUiKTsKIH0KIAot
dm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5l
dHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYg
ZGF0YSkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25v
dXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwg
UmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8
dWludDhfdD4mIGRhdGEpCiB7CiAgICAgTE9HKE5ldHdvcmssICJSZXNvdXJjZUhhbmRsZTo6cGxh
dGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5OiVAIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5
OiV1IiwgcmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBk
YXRlSFRUUEJvZHkpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3kpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlSGFuZGxlU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cGxhdGZvcm1TZXREZWZlcnNMbwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12
b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0
d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFs
c1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4m
KQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVp
bnQ4X3Q+JikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29y
a1Nlc3Npb24uY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgICAgICBkaWdlc3QtPmFkZEJ5dGVzKGNlcnRpZmlj
YXRlRGF0YS0+ZGF0YSwgY2VydGlmaWNhdGVEYXRhLT5sZW4pOwogCiAgICAgICAgIGF1dG8gaGFz
aCA9IGRpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKLSAgICAgICAgcmV0dXJuIGJhc2U2NEVuY29kZShy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihoYXNoLmRhdGEoKSksIGhhc2guc2l6ZSgpKTsK
KyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZChyZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihoYXNoLmRhdGEoKSksIGhhc2guc2l6ZSgpKSk7CiAgICAgfQogCiAgICAg
SGFzaFNldDxTdHJpbmc+IG1fY2VydGlmaWNhdGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVl
bmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTEgKzE1NCwxMSBAQCBTdHJpbmcgZGVjb2Rl
RXNjYXBlU2VxdWVuY2VzKFN0cmluZ1ZpZXcgCiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygp
OwogfQogCi1pbmxpbmUgVmVjdG9yPGNoYXI+IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0
YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK2lubGlu
ZSBWZWN0b3I8dWludDhfdD4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKFN0cmluZ1Zp
ZXcgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewogICAgIEFTU0VSVChl
bmNvZGluZy5pc1ZhbGlkKCkpOwogCi0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBWZWN0
b3I8dWludDhfdD4gcmVzdWx0OwogICAgIHNpemVfdCBkZWNvZGVkUG9zaXRpb24gPSAwOwogICAg
IHNpemVfdCBzZWFyY2hQb3NpdGlvbiA9IDA7CiAgICAgd2hpbGUgKHRydWUpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJp
bnRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBzdGF0aWMgY29uc3Qg
c2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gCiAKIHN0YXRpYyBjb25zdCBjaGFyIGNybGZMaW5l
RW5kaW5nW10gPSAiXHJcbiI7CiAKLXN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJ
bmRleChjb25zdCBjaGFyKiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoLCBzaXplX3QgaW5kZXgp
CitzdGF0aWMgc2l6ZV90IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoY29uc3QgdWludDhfdCog
aW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCwgc2l6ZV90IGluZGV4KQogewogICAgIEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgaW5wdXRMZW5ndGgpOwogICAgIGlmIChp
bnB1dFtpbmRleF0gPT0gJ1xuJykKQEAgLTU1LDE5ICs1NSwxOSBAQCBzdGF0aWMgc2l6ZV90IGxl
bmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgcXVvdGVk
UHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0
KQorVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGlucHV0KQogewotICAgIHF1b3RlZFByaW50YWJsZUVuY29kZShpbi5kYXRhKCksIGlu
LnNpemUoKSwgb3V0KTsKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGlucHV0LmRh
dGEoKSwgaW5wdXQuc2l6ZSgpKTsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVFbmNvZGUoY29u
c3QgY2hhciogaW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCwgVmVjdG9yPGNoYXI+JiBvdXQpCitW
ZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqIGlucHV0
LCBzaXplX3QgaW5wdXRMZW5ndGgpCiB7Ci0gICAgb3V0LmNsZWFyKCk7Ci0gICAgb3V0LnJlc2Vy
dmVDYXBhY2l0eShpbnB1dExlbmd0aCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dDsKKyAgICBv
dXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnB1dExlbmd0aCk7CiAgICAgc2l6ZV90IGN1cnJl
bnRMaW5lTGVuZ3RoID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlucHV0TGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgYm9vbCBpc0xhc3RDaGFyYWN0ZXIgPSAoaSA9PSBpbnB1dExlbmd0
aCAtIDEpOwotICAgICAgICBjaGFyIGN1cnJlbnRDaGFyYWN0ZXIgPSBpbnB1dFtpXTsKKyAgICAg
ICAgdWludDhfdCBjdXJyZW50Q2hhcmFjdGVyID0gaW5wdXRbaV07CiAgICAgICAgIGJvb2wgcmVx
dWlyZXNFbmNvZGluZyA9IGZhbHNlOwogICAgICAgICAvLyBBbGwgbm9uLXByaW50YWJsZSBBU0NJ
SSBjaGFyYWN0ZXJzIGFuZCA9IHJlcXVpcmUgZW5jb2RpbmcuCiAgICAgICAgIGlmICgoY3VycmVu
dENoYXJhY3RlciA8ICcgJyB8fCBjdXJyZW50Q2hhcmFjdGVyID4gJ34nIHx8IGN1cnJlbnRDaGFy
YWN0ZXIgPT0gJz0nKSAmJiBjdXJyZW50Q2hhcmFjdGVyICE9ICdcdCcpCkBAIC0xMTIsMTggKzEx
MiwyMCBAQCB2b2lkIHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBjaGFyKiBpCiAgICAgICAg
ICAgICBjdXJyZW50TGluZUxlbmd0aCsrOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJu
IG91dDsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+
JiBpbiwgVmVjdG9yPGNoYXI+JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxl
RGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCiB7Ci0gICAgcXVvdGVkUHJpbnRh
YmxlRGVjb2RlKGluLmRhdGEoKSwgaW4uc2l6ZSgpLCBvdXQpOworICAgIHJldHVybiBxdW90ZWRQ
cmludGFibGVEZWNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwogfQogCi12b2lkIHF1
b3RlZFByaW50YWJsZURlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwg
VmVjdG9yPGNoYXI+JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2Rl
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQogewotICAgIG91dC5jbGVh
cigpOworICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgaWYgKCFkYXRhTGVuZ3RoKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBvdXQ7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGRhdGFMZW5ndGg7ICsraSkgewogICAgICAgICBjaGFyIGN1cnJlbnRDaGFyYWN0ZXIg
PSBkYXRhW2ldOwpAQCAtMTQ5LDggKzE1MSw5IEBAIHZvaWQgcXVvdGVkUHJpbnRhYmxlRGVjb2Rl
KGNvbnN0IGNoYXIqIGQKICAgICAgICAgICAgIG91dC5hcHBlbmQobG93ZXJDaGFyYWN0ZXIpOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgb3V0LmFwcGVuZChzdGF0
aWNfY2FzdDxjaGFyPih0b0FTQ0lJSGV4VmFsdWUodXBwZXJDaGFyYWN0ZXIsIGxvd2VyQ2hhcmFj
dGVyKSkpOworICAgICAgICBvdXQuYXBwZW5kKHRvQVNDSUlIZXhWYWx1ZSh1cHBlckNoYXJhY3Rl
ciwgbG93ZXJDaGFyYWN0ZXIpKTsKICAgICB9CisgICAgcmV0dXJuIG91dDsKIH0KIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFBy
aW50YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxOSArMjgsMTYgQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBRdW90ZWRQcmludGFibGVfaAotI2RlZmluZSBRdW90ZWRQcmlu
dGFibGVfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rv
cjxjaGFyPiYsIFZlY3RvcjxjaGFyPiYpOwotdm9pZCBxdW90ZWRQcmludGFibGVFbmNvZGUoY29u
c3QgY2hhciosIHNpemVfdCwgVmVjdG9yPGNoYXI+Jik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVk
UHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworVmVjdG9yPHVpbnQ4X3Q+
IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIAotdm9pZCBx
dW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgVmVjdG9yPGNoYXI+Jik7
Ci12b2lkIHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90LCBWZWN0b3I8
Y2hhcj4mKTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+Jik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBRdW90ZWRQcmludGFibGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1NTTEtleUdlbmVyYXRvcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2VTdHJpbmcKICAgICAgICAgaWYgKCFDcnlwdFNpZ25BbmRFbmNvZGVDZXJ0aWZpY2F0ZShoQ29u
dGV4dCwgQVRfS0VZRVhDSEFOR0UsIFg1MDlfQVNOX0VOQ09ESU5HLCBYNTA5X0tFWUdFTl9SRVFV
RVNUX1RPX0JFX1NJR05FRCwgJnJlcXVlc3RJbmZvLCAmc2lnbkFsZ28sIDAsIHJlaW50ZXJwcmV0
X2Nhc3Q8TFBCWVRFPihiaW5hcnkuZGF0YSgpKSwgJmR3RW5jb2RlZExlbmd0aCkpCiAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICBrZXlTdHJpbmcgPSBiYXNlNjRFbmNvZGUoYmluYXJ5KTsK
KyAgICAgICAga2V5U3RyaW5nID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGJpbmFyeSkpOwog
ICAgIH0gd2hpbGUoMCk7CiAKICAgICBpZiAocFB1YkluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2Uu
Y3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uv
c2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcg
QEAgU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgUwogICAgIGF1dG8gaW5w
dXRVdGY4ID0gaW5wdXQudXRmOCgpOwogICAgIGNyeXB0by0+YWRkQnl0ZXMoaW5wdXRVdGY4LmRh
dGEoKSwgaW5wdXRVdGY4Lmxlbmd0aCgpKTsKICAgICBhdXRvIGhhc2ggPSBjcnlwdG8tPmNvbXB1
dGVIYXNoKCk7Ci0gICAgcmV0dXJuIFdURjo6YmFzZTY0VVJMRW5jb2RlKGhhc2guZGF0YSgpLCBo
YXNoLnNpemUoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZChoYXNo
LmRhdGEoKSwgaGFzaC5zaXplKCkpKTsKIH0KIAogU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hh
Mkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc3
MTUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDk5IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAg
ICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUgbW9kZXJu
IFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAg
ICAgICAgKFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVUkxT
Y2hlbWVIYW5kbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVUYXNrOjpkaWRDb21wbGV0ZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMb2Fk
ZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6bG9hZFN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuaDoKKyAgICAgICAgVXBk
YXRlIHRvIHVzZSB1aW50OF90KiBkYXRhIGJ1ZmZlcnMgbW9yZSBjb25zaXN0ZW50bHkgZm9yIHN5
bmNocm9ub3VzIGxvYWRzLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6c2VuZFJlcGx5VG9TeW5jaHJvbm91c1Jl
cXVlc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIHVpbnQ4X3QqIGRhdGEgYnVmZmVycyBtb3Jl
IGNvbnNpc3RlbnRseSBmb3Igc3luY2hyb25vdXMgbG9hZHMuCisKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcmVDb252ZXJzaW9uUmVxdWVz
dCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZSAvIG1ha2VTdHJp
bmcoYmFzZTY0VVJMRW5jb2RlZCgpKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29h
L05ldHdvcmtEYXRhVGFza0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjphcHBseUJhc2ljQXV0
aG9yaXphdGlvbkhlYWRlcik6CisgICAgICAgIFVzZSBuZXcgc2VyaWFsaXphdGlvbkZvckJhc2lj
QXV0aG9yaXphdGlvbkhlYWRlcigpIGhlbHBlci4KKworICAgICAgICAqIFNoYXJlZC9BUEkvQVBJ
RGF0YS5oOgorICAgICAgICAoQVBJOjpEYXRhOjpjcmVhdGUpOgorICAgICAgICAoQVBJOjpEYXRh
OjpmYXN0RnJlZUJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgQWRkIG5ldyBjcmVhdGUgZnVuY3Rp
b24gdGhhdCB0YWtlcyBvd25lcnNoaXAgb2YgYSBWZWN0b3IncyBidWZmZXIgcmF0aGVyCisgICAg
ICAgIHRoYW4gY29weWluZyBpdC4gUmVwbGFjZSB1c2Ugb2Ygc3RhdGljIGZ1bmN0aW9ucyB3aXRo
IGlubGluZSBsYW1iZGFzIGZvcgorICAgICAgICBmcmVlLWZ1bmN0aW9ucy4KKworICAgICAgICAq
IFNoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbToKKyAgICAgICAgKFdlYktpdDo6c2Fu
ZGJveEZpbGVQYXRoKToKKyAgICAgICAgVXNlIG1ha2VTdHJpbmcgYW5kIG5ldyBiYXNlNjRVUkxF
bmNvZGVkKCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwubW06CisgICAgICAgIChwcm9kdWNlQ2xpZW50RGF0YUpzb24pOgorICAgICAg
ICBVc2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgpKS4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwOgor
ICAgICAgICAoV2ViS2l0OjpiYXNlNjRFbmNvZGVkUE5HRGF0YSk6CisgICAgICAgIFVzZSBuZXcg
bWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogVUlQcm9jZXNzL0NvY29h
L05hdmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpO
YXZpZ2F0aW9uQ2xpZW50Ojp3ZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICBVc2UgbmV3IGRl
ZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKSBhbmQgbmV3IGFkb3B0aW5nIEFQSTo6RGF0YTo6Y3Jl
YXRlIGZ1bmN0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90
ZUluc3BlY3RvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUluc3BlY3RvckNs
aWVudDo6c2V0QmFja2VuZENvbW1hbmRzKToKKyAgICAgICAgVXNlIG5ldyBtYWtlU3RyaW5nKGJh
c2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAgVXNlIG5ldyBiYXNlNjRE
ZWNvZGUoKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3Rv
clVJUHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpw
bGF0Zm9ybVNhdmUpOgorICAgICAgICBVc2UgbmV3IGJhc2U2NERlY29kZSgpLgorCisgICAgICAg
ICogVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5t
bToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1T
YXZlKToKKyAgICAgICAgVXNlIG5ldyBiYXNlNjREZWNvZGUoKS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6CisgICAgICAgIFVzZSBu
ZXcgYmFzZTY0RGVjb2RlKCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tl
dC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbnNw
ZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcyk6CisgICAgICAgIFVzZSBuZXcgbWFrZVN0
cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbToKKyAgICAgICAgKFdlYktpdDo6TG9j
YWxBdXRoZW50aWNhdG9ySW50ZXJuYWw6OnByb2R1Y2VIYXNoU2V0KToKKyAgICAgICAgKFdlYktp
dDo6TG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6
OkxvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgVXNlIG5ldyBtYWtl
U3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1v
Y2tIaWRDb25uZWN0aW9uOjpmZWVkUmVwb3J0cyk6CisgICAgICAgIFVzZSBuZXcgYmFzZTY0RGVj
b2RlKCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2Nr
TG9jYWxDb25uZWN0aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpNb2NrTG9jYWxDb25uZWN0aW9u
OjpmaWx0ZXJSZXNwb25zZXMgY29uc3QpOgorICAgICAgICBVc2UgbmV3IG1ha2VTdHJpbmcoYmFz
ZTY0RW5jb2RlZCgpKS4KKwogMjAyMS0wNS0xOCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9u
QGFwcGxlLmNvbT4KIAogICAgICAgICBhbGxvd3NDb250ZW50SmF2YVNjcmlwdCBBUEkgbm90IGFw
cGxpZWQgZnJvbSBkZWZhdWx0V2VicGFnZVByZWZlcmVuY2VzCkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVz
c2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIG1lc3NhZ2VzIC0+IE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKIAogICAgIFNjaGVk
dWxlUmVzb3VyY2VMb2FkKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVz
b3VyY2VMb2FkUGFyYW1ldGVycykKLSAgICBQZXJmb3JtU3luY2hyb25vdXNMb2FkKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykgLT4g
KFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Ug
cmVzcG9uc2UsIFZlY3RvcjxjaGFyPiBkYXRhKSBTeW5jaHJvbm91cworICAgIFBlcmZvcm1TeW5j
aHJvbm91c0xvYWQoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJj
ZUxvYWRQYXJhbWV0ZXJzKSAtPiAoV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNo
cm9ub3VzCiAgICAgVGVzdFByb2Nlc3NJbmNvbWluZ1N5bmNNZXNzYWdlc1doZW5XYWl0aW5nRm9y
U3luY1JlcGx5KFdlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQpIC0+IChib29s
IGhhbmRsZWQpIFN5bmNocm9ub3VzCiAgICAgTG9hZFBpbmcoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKQogICAgIFJlbW92ZUxvYWRJ
ZGVudGlmaWVyKHVpbnQ2NF90IHJlc291cmNlTG9hZElkZW50aWZpZXIpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAg
c3RhdGljIHZvaWQgc2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlcwogICAgIEFTU0VSVChkYXRh
LmRlbGF5ZWRSZXBseSk7CiAgICAgQVNTRVJUKCFkYXRhLnJlc3BvbnNlLmlzTnVsbCgpIHx8ICFk
YXRhLmVycm9yLmlzTnVsbCgpKTsKIAotICAgIFZlY3RvcjxjaGFyPiByZXNwb25zZUJ1ZmZlcjsK
KyAgICBWZWN0b3I8dWludDhfdD4gcmVzcG9uc2VCdWZmZXI7CiAgICAgaWYgKGJ1ZmZlciAmJiBi
dWZmZXItPnNpemUoKSkKICAgICAgICAgcmVzcG9uc2VCdWZmZXIuYXBwZW5kKGJ1ZmZlci0+ZGF0
YSgpLCBidWZmZXItPnNpemUoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE0
ICszMTUsMTUgQEAgdm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcgogICAg
ICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiBwdWJsaWNLZXlEYXRhOwotICAgICAgICBXVEY6OmJhc2U2NFVSTERlY29kZShw
dWJsaWNLZXlCYXNlNjRVUkwsIHB1YmxpY0tleURhdGEpOworICAgICAgICBhdXRvIHB1YmxpY0tl
eURhdGEgPSBiYXNlNjRVUkxEZWNvZGUocHVibGljS2V5QmFzZTY0VVJMKTsKKyAgICAgICAgaWYg
KCFwdWJsaWNLZXlEYXRhKQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gY3J5
cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3Jp
dGhtOjpTSEFfMjU2KTsKLSAgICAgICAgY3J5cHRvLT5hZGRCeXRlcyhwdWJsaWNLZXlEYXRhLmRh
dGEoKSwgcHVibGljS2V5RGF0YS5zaXplKCkpOworICAgICAgICBjcnlwdG8tPmFkZEJ5dGVzKHB1
YmxpY0tleURhdGEtPmRhdGEoKSwgcHVibGljS2V5RGF0YS0+c2l6ZSgpKTsKICAgICAgICAgYXV0
byBwdWJsaWNLZXlEYXRhSGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKIAotICAgICAgICBh
dXRvIGtleUlEID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUocHVibGljS2V5RGF0YUhhc2guZGF0YSgp
LCBwdWJsaWNLZXlEYXRhSGFzaC5zaXplKCkpOworICAgICAgICBhdXRvIGtleUlEID0gbWFrZVN0
cmluZyhiYXNlNjRVUkxFbmNvZGVkKHB1YmxpY0tleURhdGFIYXNoLmRhdGEoKSwgcHVibGljS2V5
RGF0YUhhc2guc2l6ZSgpKSk7CiAgICAgICAgIGlmIChrZXlJRCAhPSBhdHRyaWJ1dGlvbi5zb3Vy
Y2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURCYXNlNjRVUkwpCiAgICAgICAgICAgICByZXR1cm47
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFU
YXNrQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQkod29y
a2luZyBjb3B5KQpAQCAtNjUsOCArNjUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICNpZiBVU0Uo
Q1JFREVOVElBTF9TVE9SQUdFX1dJVEhfTkVUV09SS19TRVNTSU9OKQogc3RhdGljIHZvaWQgYXBw
bHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogewotICAgIFN0cmlu
ZyBhdXRoZW50aWNhdGlvbkhlYWRlciA9ICJCYXNpYyAiICsgYmFzZTY0RW5jb2RlKFN0cmluZyhj
cmVkZW50aWFsLnVzZXIoKSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKSkudXRmOCgpKTsK
LSAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6
QXV0aG9yaXphdGlvbiwgYXV0aGVudGljYXRpb25IZWFkZXIpOworICAgIHJlcXVlc3Quc2V0SFRU
UEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uLCBjcmVk
ZW50aWFsLnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSk7CiB9CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJRGF0YS5oCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw3ICs2MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtZW1jcHkoY29waWVkQnl0
ZXMsIGJ5dGVzLCBzaXplKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBjcmVhdGVXaXRo
b3V0Q29weWluZyhjb3BpZWRCeXRlcywgc2l6ZSwgZmFzdEZyZWVCeXRlcywgbnVsbHB0cik7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVXaXRob3V0Q29weWluZyhjb3BpZWRCeXRlcywgc2l6ZSwgW10g
KHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBjb25zdCB2b2lkKikgeworICAgICAgICAgICAgaWYgKGJ5
dGVzKQorICAgICAgICAgICAgICAgIGZhc3RGcmVlKHN0YXRpY19jYXN0PHZvaWQqPihieXRlcykp
OworICAgICAgICB9LCBudWxscHRyKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFJlZjxEYXRh
PiBjcmVhdGUoY29uc3QgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiBidWZmZXIpCkBAIC02OCw2ICs3
MSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLmRhdGEoKSwgYnVm
ZmVyLnNpemUoKSk7CiAgICAgfQogCisgICAgc3RhdGljIFJlZjxEYXRhPiBjcmVhdGUoVmVjdG9y
PHVuc2lnbmVkIGNoYXI+JiYgYnVmZmVyKQorICAgIHsKKyAgICAgICAgYXV0byBidWZmZXJTaXpl
ID0gYnVmZmVyLnNpemUoKTsKKyAgICAgICAgYXV0byBidWZmZXJQb2ludGVyID0gYnVmZmVyLnJl
bGVhc2VCdWZmZXIoKS5sZWFrUHRyKCk7CisgICAgICAgIHJldHVybiBjcmVhdGVXaXRob3V0Q29w
eWluZyhidWZmZXJQb2ludGVyLCBidWZmZXJTaXplLCBbXSAodW5zaWduZWQgY2hhciogYnl0ZXMs
IGNvbnN0IHZvaWQqKSB7CisgICAgICAgICAgICBpZiAoYnl0ZXMpCisgICAgICAgICAgICAgICAg
V1RGOjpWZWN0b3JNYWxsb2M6OmZyZWUoYnl0ZXMpOworICAgICAgICB9LCBudWxscHRyKTsKKyAg
ICB9CisKICAgICBzdGF0aWMgUmVmUHRyPERhdGE+IGNyZWF0ZShjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmKTsKICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTk2LDEyICsxMDksNiBAQCBw
cml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBmYXN0RnJlZUJ5dGVzKHVu
c2lnbmVkIGNoYXIqIGJ5dGVzLCBjb25zdCB2b2lkKikKLSAgICB7Ci0gICAgICAgIGlmIChieXRl
cykKLSAgICAgICAgICAgIGZhc3RGcmVlKHN0YXRpY19jYXN0PHZvaWQqPihieXRlcykpOwotICAg
IH0KLQogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1fYnl0ZXMgeyBudWxscHRyIH07CiAgICAg
c2l6ZV90IG1fc2l6ZSB7IDAgfTsKIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1
eGlsaWFyeVByb2Nlc3NNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTUsMTggKzMxNSwxMyBAQCBzdGF0aWMgU3RyaW5nIHNhbmRib3hEaXJlY3RvcnkoV2ViQ29y
ZTo6CiAKIHN0YXRpYyBTdHJpbmcgc2FuZGJveEZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0
b3J5UGF0aCwgY29uc3QgQ1N0cmluZyYgaGVhZGVyKQogewotICAgIFN0cmluZ0J1aWxkZXIgc2Fu
ZGJveEZpbGU7Ci0gICAgc2FuZGJveEZpbGUuYXBwZW5kKGRpcmVjdG9yeVBhdGgpOwotICAgIHNh
bmRib3hGaWxlLmFwcGVuZCgiL0NvbXBpbGVkU2FuZGJveCsiKTsKLQogICAgIC8vIE1ha2UgdGhl
IGZpbGVuYW1lIHNlbWktdW5pcXVlIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgaGVhZGVy
LgorCiAgICAgYXV0byBjcnlwdG8gPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6Q3J5
cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwogICAgIGNyeXB0by0+YWRkQnl0ZXMoaGVh
ZGVyLmRhdGEoKSwgaGVhZGVyLmxlbmd0aCgpKTsKLSAgICBWZWN0b3I8dWludDhfdD4gaGFzaCA9
IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKLSAgICBTdHJpbmcgcmVhZGFibGVIYXNoID0gV1RGOjpi
YXNlNjRVUkxFbmNvZGUoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICBhdXRvIGhhc2gg
PSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAgICBzYW5kYm94RmlsZS5hcHBlbmQocmVhZGFi
bGVIYXNoKTsKLSAgICByZXR1cm4gc2FuZGJveEZpbGUudG9TdHJpbmcoKTsKKyAgICByZXR1cm4g
bWFrZVN0cmluZyhkaXJlY3RvcnlQYXRoLCAiL0NvbXBpbGVkU2FuZGJveCsiLCBiYXNlNjRVUkxF
bmNvZGVkKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSkpOwogfQogCiBzdGF0aWMgYm9vbCBlbnN1
cmVTYW5kYm94Q2FjaGVEaXJlY3RvcnkoY29uc3QgU2FuZGJveEluZm8mIGluZm8pCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTUyMCw3ICs1MjAsNyBAQCBtZXNzYWdlcyAt
PiBXZWJQYWdlUHJveHkgewogCiAgICAgU3RhcnRVUkxTY2hlbWVUYXNrKHN0cnVjdCBXZWJLaXQ6
OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpCiAgICAgU3RvcFVSTFNjaGVtZVRh
c2sodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKQot
ICAgIExvYWRTeW5jaHJvbm91c1VSTFNjaGVtZVRhc2soc3RydWN0IFdlYktpdDo6VVJMU2NoZW1l
VGFza1BhcmFtZXRlcnMgcGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Ug
cmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFZlY3RvcjxjaGFyPiBkYXRh
KSBTeW5jaHJvbm91cworICAgIExvYWRTeW5jaHJvbm91c1VSTFNjaGVtZVRhc2soc3RydWN0IFdl
YktpdDo6VVJMU2NoZW1lVGFza1BhcmFtZXRlcnMgcGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFZl
Y3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwogCiAjaWYgRU5BQkxFKERFVklDRV9PUklF
TlRBVElPTikKICAgICBTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNz
KFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBzdHJ1Y3QgV2ViS2l0OjpGcmFtZUlu
Zm9EYXRhIGZyYW1lSW5mbywgYm9vbCBtYXlQcm9tcHQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29y
ZTo6RGV2aWNlT3JpZW50YXRpb25Pck1vdGlvblBlcm1pc3Npb25TdGF0ZSBwZXJtaXNzaW9uU3Rh
dGUpIEFzeW5jCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5k
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1l
SGFuZGxlci5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJVUkxTY2hlbWVIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgc3Ry
dWN0IFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzOwogY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3Mg
V2ViUHJvY2Vzc1Byb3h5OwogCi11c2luZyBTeW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0gQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3RvcjxjaGFyPiYpPjsKK3VzaW5n
IFN5bmNMb2FkQ29tcGxldGlvbkhhbmRsZXIgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik+OwogCiBjbGFzcyBXZWJVUkxTY2hlbWVIYW5kbGVy
IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVVJMU2NoZW1lSGFuZGxlcj4gewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFdlYlVSTFNjaGVtZUhhbmRsZXIpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTIsMTAgKzIxMiwxMCBAQCBhdXRvIFdlYlVSTFNjaGVtZVRhc2s6OmRpZENvbXBsZXRl
KGNvbnN0CiAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwogICAgIAogICAgIGlmIChpc1N5bmMoKSkg
ewotICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRh
dGE7CiAgICAgICAgIGlmIChtX3N5bmNEYXRhKSB7CiAgICAgICAgICAgICBkYXRhLnJlc2l6ZSht
X3N5bmNEYXRhLT5zaXplKCkpOwotICAgICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX3N5bmNEYXRhLT5kYXRhKCkpLCBtX3N5bmNEYXRh
LT5zaXplKCkpOworICAgICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihtX3N5bmNEYXRhLT5kYXRhKCkpLCBtX3N5bmNEYXRhLT5zaXpl
KCkpOwogICAgICAgICB9CiAKICAgICAgICAgbV9zeW5jQ29tcGxldGlvbkhhbmRsZXIobV9zeW5j
UmVzcG9uc2UsIGVycm9yLCBXVEZNb3ZlKGRhdGEpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NyArNTEsNyBAQCBzdHJ1Y3QgVVJMU2NoZW1lVGFza1BhcmFtZXRlcnM7CiBjbGFzcyBXZWJVUkxT
Y2hlbWVIYW5kbGVyOwogY2xhc3MgV2ViUGFnZVByb3h5OwogCi11c2luZyBTeW5jTG9hZENvbXBs
ZXRpb25IYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3Rv
cjxjaGFyPiYpPjsKK3VzaW5nIFN5bmNMb2FkQ29tcGxldGlvbkhhbmRsZXIgPSBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik+OwogCiBjbGFzcyBX
ZWJVUkxTY2hlbWVUYXNrIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlw
ZTo6VVJMU2NoZW1lVGFzaz4sIHB1YmxpYyBJbnN0YW5jZUNvdW50ZWQ8V2ViVVJMU2NoZW1lVGFz
az4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlVSTFNjaGVtZVRhc2spOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzM4LDEzICsyMzM4LDE0IEBAIHZvaWQgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25D
bGllbnQoV0tQYWcKICAgICAgICAgICAgIGlmIChtX2NsaWVudC5jb3B5V2ViQ3J5cHRvTWFzdGVy
S2V5KQogICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZih0b0ltcGwobV9jbGllbnQuY29w
eVdlYkNyeXB0b01hc3RlcktleSh0b0FQSSgmcGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
bykpKTsKIAotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICNpZiBFTkFC
TEUoV0VCX0NSWVBUTykKLSAgICAgICAgICAgIGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3Rl
cktleShtYXN0ZXJLZXkpKQorICAgICAgICAgICAgYXV0byBtYXN0ZXJLZXkgPSBkZWZhdWx0V2Vi
Q3J5cHRvTWFzdGVyS2V5KCk7CisgICAgICAgICAgICBpZiAoIW1hc3RlcktleSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNy
ZWF0ZShXVEZNb3ZlKCptYXN0ZXJLZXkpKTsKKyNlbHNlCisgICAgICAgICAgICByZXR1cm4gQVBJ
OjpEYXRhOjpjcmVhdGUobnVsbHB0ciwgMCk7CiAjZW5kaWYKLQotICAgICAgICAgICAgcmV0dXJu
IEFQSTo6RGF0YTo6Y3JlYXRlKG1hc3RlcktleS5kYXRhKCksIG1hc3RlcktleS5zaXplKCkpOwog
ICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPEFQSTo6U3RyaW5nPiBzaWduZWRQdWJsaWNLZXlB
bmRDaGFsbGVuZ2VTdHJpbmcoV2ViUGFnZVByb3h5JiBwYWdlLCB1bnNpZ25lZCBrZXlTaXplSW5k
ZXgsIGNvbnN0IFJlZlB0cjxBUEk6OlN0cmluZz4mIGNoYWxsZW5nZVN0cmluZywgY29uc3QgVVJM
JiB1cmwpIG92ZXJyaWRlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgc3Rh
dGljIFJldGFpblB0cjxOU0RhdGE+IHByb2R1Y2VDbGllbnREYQogICAgICAgICBbZGljdGlvbmFy
eSBzZXRPYmplY3Q6QCJ3ZWJhdXRobi5nZXQiIGZvcktleTpAInR5cGUiXTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpXVEY6OmJhc2U2NFVSTEVuY29k
ZShjaGFsbGVuZ2UuYnl0ZXMsIGNoYWxsZW5nZS5sZW5ndGgpIGZvcktleTpAImNoYWxsZW5nZSJd
OworICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDptYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQo
Y2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2UubGVuZ3RoKSkgZm9yS2V5OkAiY2hhbGxlbmdlIl07
CiAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om9yaWdpbiBmb3JLZXk6QCJvcmlnaW4iXTsKIAog
ICAgIHJldHVybiBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6ZGljdGlv
bmFyeS5nZXQoKSBvcHRpb25zOk5TSlNPTldyaXRpbmdTb3J0ZWRLZXlzIGVycm9yOm5pbF07Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRp
b25TZXNzaW9uQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vY2Fpcm8vV2ViQXV0b21hdGlvblNlc3Npb25DYWlyby5jcHAJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2Vi
QXV0b21hdGlvblNlc3Npb25DYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcg
QEAgc3RhdGljIE9wdGlvbmFsPFN0cmluZz4gYmFzZTY0RW5jb2RlZFBORwogICAgIGlmIChwbmdE
YXRhLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVy
biBiYXNlNjRFbmNvZGUocG5nRGF0YSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYmFzZTY0RW5j
b2RlZChwbmdEYXRhKSk7CiB9CiAKIE9wdGlvbmFsPFN0cmluZz4gV2ViQXV0b21hdGlvblNlc3Np
b246OnBsYXRmb3JtR2V0QmFzZTY0RW5jb2RlZFBOR0RhdGEoY29uc3QgU2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmIGhhbmRsZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05h
dmlnYXRpb25TdGF0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTEzNSwxMSArMTEzNSwxMSBAQCBSZWZQdHI8QVBJOjpEYXRhPiBOYXZpZ2F0aW9uU3RhdGU6Ok5h
dmlnCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0
ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYkNyeXB0b01hc3RlcktleUZvcldlYlZp
ZXcpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKLSAgICAgICAgaWYgKCFn
ZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkpCisgICAgICAgIGF1dG8gbWFz
dGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgICAgICBpZiAoIW1hc3Rl
cktleSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIHJldHVybiBBUEk6
OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0YSgpLCBtYXN0ZXJLZXkuc2l6ZSgpKTsKKyAgICAg
ICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKFdURk1vdmUoKm1hc3RlcktleSkpOwogICAgIH0K
IAogICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQu
Y3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQs
MTMgKzE5NCwxMSBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0dXBDb25uZWN0CiB2
b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IGNoYXIq
IGJhY2tlbmRDb21tYW5kcykKIHsKICAgICBpZiAoIWJhY2tlbmRDb21tYW5kcyB8fCAhYmFja2Vu
ZENvbW1hbmRzWzBdKSB7Ci0gICAgICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gU3RyaW5nKCk7
CisgICAgICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0geyB9OwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGJh
Y2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tlbmRDb21tYW5kcyksIGJhc2U2NERhdGEpOwotICAg
IG1fYmFja2VuZENvbW1hbmRzVVJMID0gImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiICsg
YmFzZTY0RGF0YTsKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1ha2VTdHJpbmcoImRhdGE6
dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKGJhY2tlbmRDb21tYW5kcywg
c3RybGVuKGJhY2tlbmRDb21tYW5kcykpKTsKIH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGll
bnQ6OmNvbm5lY3Rpb25EaWRDbG9zZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eUd0ay5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzOSwxNiArMTM5LDE4IEBAIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm0KICAgICBpZiAoZ3RrX25hdGl2ZV9kaWFsb2dfcnVuKEdUS19OQVRJ
VkVfRElBTE9HKGRpYWxvZy5nZXQoKSkpICE9IEdUS19SRVNQT05TRV9BQ0NFUFQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFZlY3RvcjxjaGFyPiBkYXRhVmVjdG9yOworICAgIFZlY3Rvcjx1aW50
OF90PiBkYXRhVmVjdG9yOwogICAgIENTdHJpbmcgZGF0YVN0cmluZzsKICAgICBpZiAoYmFzZTY0
RW5jb2RlZCkgewotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBkYXRhVmVjdG9y
LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFz
ZTY0RGVjb2RlKGNvbnRlbnQsIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7
CisgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgZGVjb2RlZERhdGEtPnNocmlua1Rv
Rml0KCk7CisgICAgICAgIGRhdGFWZWN0b3IgPSBXVEZNb3ZlKCpkZWNvZGVkRGF0YSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGRhdGFTdHJpbmcgPSBjb250ZW50LnV0ZjgoKTsKIAotICAgIGNvbnN0
IGNoYXIqIGRhdGEgPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcuZGF0YSgpIDog
ZGF0YVZlY3Rvci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZGF0YSA9ICFkYXRhU3RyaW5nLmlz
TnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiByZWludGVycHJldF9jYXN0PGNoYXIqPihkYXRh
VmVjdG9yLmRhdGEoKSk7CiAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAhZGF0YVN0cmluZy5pc051
bGwoKSA/IGRhdGFTdHJpbmcubGVuZ3RoKCkgOiBkYXRhVmVjdG9yLnNpemUoKTsKICAgICBHUmVm
UHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGUoY2hv
b3NlcikpOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2ZpbGVfZ2V0X3BhdGgoZmlsZS5n
ZXQoKSkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJ
bnNwZWN0b3JVSVByb3h5R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3Bl
Y3RvclVJUHJveHlHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzgsMTYgKzUzOCwxOCBAQCB2
b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZShjCiAgICAgaWYgKGd0a19uYXRp
dmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAhPSBHVEtfUkVT
UE9OU0VfQUNDRVBUKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YVZl
Y3RvcjsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcjsKICAgICBDU3RyaW5nIGRhdGFT
dHJpbmc7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNv
ZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAg
YXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50LCBCYXNlNjREZWNvZGVPcHRp
b25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBkYXRhVmVjdG9yLnNocmlua1RvRml0KCk7CisgICAgICAg
IGRlY29kZWREYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgICAgICBkYXRhVmVjdG9yID0gV1RGTW92
ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxzZQogICAgICAgICBkYXRhU3RyaW5nID0gY29udGVu
dC51dGY4KCk7CiAKLSAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkg
PyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOworICAgIGNvbnN0IGNoYXIq
IGRhdGEgPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcuZGF0YSgpIDogcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oZGF0YVZlY3Rvci5kYXRhKCkpOwogICAgIHNpemVfdCBkYXRhTGVu
Z3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgpIDogZGF0YVZl
Y3Rvci5zaXplKCk7CiAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihndGtfZmls
ZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgo
Z19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYklu
c3BlY3RvclVJUHJveHlNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTc0LDEwICsxNzQsMTAgQEAgdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5OjpwbGF0Zm9ybQogICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNl
dChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwogCiAgICAgICAgIGlmIChiYXNlNjRFbmNv
ZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYgKCFi
YXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAg
ICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudENvcHksIEJh
c2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFpblB0
cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhC
eXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAgICBhdXRvIGRh
dGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpkZWNvZGVk
RGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0YS0+c2l6ZSgpXSk7CiAgICAgICAgICAgICBb
ZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBh
dG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9y
VUlQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94
eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTA5LDEwICs1MDksMTAgQEAgdm9pZCBXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUoYwogICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFs
VVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwogCiAgICAgICAgIGlmIChi
YXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAg
ICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRk
aW5nKSkKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVu
dENvcHksIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAg
ICBhdXRvIGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRl
czpkZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0YS0+c2l6ZSgpXSk7CiAgICAg
ICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNd
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFj
dHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJv
cjpOVUxMXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiw3
IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ28KICAgICBpZiAoIWV2
ZW50Lm1lc3NhZ2UgfHwgZXZlbnQubWVzc2FnZS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9qYXZh
c2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGUoZXZlbnQubWVzc2FnZS0+dXRmOCgpKSk7Cisg
ICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvamF2YXNjcmlw
dDtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChldmVudC5tZXNzYWdlLT51dGY4KCkpKTsKIH0KIAog
dm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2
ZW50KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29j
b2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMCAr
ODIsOCBAQCBzdGF0aWMgaW5saW5lIEhhc2hTZXQ8U3RyaW5nPiBwcm9kdWNlSGFzCiB7CiAgICAg
SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKICAgICBmb3IgKGF1dG8mIGNyZWRlbnRpYWxEZXNjcmlw
dG9yIDogY3JlZGVudGlhbERlc2NyaXB0b3JzKSB7Ci0gICAgICAgIGlmIChlbXB0eVRyYW5zcG9y
dHNPckNvbnRhaW4oY3JlZGVudGlhbERlc2NyaXB0b3IudHJhbnNwb3J0cywgQXV0aGVudGljYXRv
clRyYW5zcG9ydDo6SW50ZXJuYWwpCi0gICAgICAgICAgICAmJiBjcmVkZW50aWFsRGVzY3JpcHRv
ci50eXBlID09IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkKLSAgICAgICAgICAg
ICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRM
ZW5ndGgpCi0gICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZShjcmVkZW50aWFsRGVz
Y3JpcHRvci5pZFZlY3Rvci5kYXRhKCksIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNp
emUoKSkpOworICAgICAgICBpZiAoZW1wdHlUcmFuc3BvcnRzT3JDb250YWluKGNyZWRlbnRpYWxE
ZXNjcmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKSAm
JiBjcmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQ
dWJsaWNLZXkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpID09IGNyZWRl
bnRpYWxJZExlbmd0aCkKKyAgICAgICAgICAgIHJlc3VsdC5hZGQobWFrZVN0cmluZyhiYXNlNjRF
bmNvZGVkKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLmRhdGEoKSwgY3JlZGVudGlhbERl
c2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpKSkpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0Owog
fQpAQCAtMjQxLDcgKzIzOSw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVu
dGlhbCgKICAgICAgICAgaWYgKG5vdEZvdW5kICE9IG1fZXhpc3RpbmdDcmVkZW50aWFscy5maW5k
TWF0Y2hpbmcoWyZleGNsdWRlQ3JlZGVudGlhbElkc10gKGF1dG8mIGNyZWRlbnRpYWwpIHsKICAg
ICAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+cmF3SWQoKTsKICAgICAgICAgICAg
IEFTU0VSVChyYXdJZCk7Ci0gICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMu
Y29udGFpbnMoYmFzZTY0RW5jb2RlKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkp
KTsKKyAgICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhtYWtl
U3RyaW5nKGJhc2U2NEVuY29kZWQocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkp
KTsKICAgICAgICAgfSkpIHsKICAgICAgICAgICAgIHJlY2VpdmVFeGNlcHRpb24oeyBOb3RBbGxv
d2VkRXJyb3IsICJBdCBsZWFzdCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRo
ZSBleGNsdWRlQ3JlZGVudGlhbHMgbGlzdCBpbiB0aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVu
dGljYXRvci4iX3MgfSwgV2ViQXV0aGVudGljYXRpb25TdGF0dXM6OkxBRXhjbHVkZUNyZWRlbnRp
YWxzTWF0Y2hlZCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01MTgsNyArNTE2LDcgQEAgdm9p
ZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCiAgICAgICAgIH0KIAogICAgICAg
ICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7Ci0gICAgICAgIGlmIChhbGxvd0Ny
ZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5i
eXRlTGVuZ3RoKCkpKSkKKyAgICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlucyht
YWtlU3RyaW5nKGJhc2U2NEVuY29kZWQocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgo
KSkpKSkKICAgICAgICAgICAgIGFzc2VydGlvblJlc3BvbnNlcy51bmNoZWNrZWRBcHBlbmQoY3Jl
ZGVudGlhbC5jb3B5UmVmKCkpOwogICAgIH0KICAgICBpZiAoYXNzZXJ0aW9uUmVzcG9uc2VzLmlz
RW1wdHkoKSkgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEs
MTUgKzI2MSwxMyBAQCB2b2lkIE1vY2tIaWRDb25uZWN0aW9uOjpmZWVkUmVwb3J0cygpCiAgICAg
ICAgIGlmIChzdGFnZXNNYXRjaCgpICYmIG1fY29uZmlndXJhdGlvbi5oaWQtPmVycm9yID09IE1v
Y2s6OkhpZEVycm9yOjpVbnN1cHBvcnRlZE9wdGlvbnMgJiYgKG1fcmVxdWlyZVJlc2lkZW50S2V5
IHx8IG1fcmVxdWlyZVVzZXJWZXJpZmljYXRpb24pKQogICAgICAgICAgICAgbWVzc2FnZSA9IEZp
ZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNvbW1h
bmQ6OmtDYm9yLCB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEN0YXBEZXZpY2VSZXNwb25zZUNvZGU6
OmtDdGFwMkVyclVuc3VwcG9ydGVkT3B0aW9uKSB9KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBWZWN0b3I8dWludDhfdD4gcGF5bG9hZDsKICAgICAgICAgICAgIEFTU0VSVCghbV9jb25m
aWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgYXV0
byBzdGF0dXMgPSBiYXNlNjREZWNvZGUobV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2
NFswXSwgcGF5bG9hZCk7CisgICAgICAgICAgICBhdXRvIHBheWxvYWQgPSBiYXNlNjREZWNvZGUo
bV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NFswXSk7CiAgICAgICAgICAgICBtX2Nv
bmZpZ3VyYXRpb24uaGlkLT5wYXlsb2FkQmFzZTY0LnJlbW92ZSgwKTsKLSAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQoc3RhdHVzLCBzdGF0dXMpOwogICAgICAgICAgICAgaWYgKCFtX2NvbmZpZ3Vy
YXRpb24uaGlkLT5pc1UyZikKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3Nh
Z2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a0Nib3Is
IHBheWxvYWQpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3Jl
YXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21tYW5kOjprQ2JvciwgV1RGTW92
ZSgqcGF5bG9hZCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lc3NhZ2Ug
PSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VD
b21tYW5kOjprTXNnLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hp
ZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6
a01zZywgV1RGTW92ZSgqcGF5bG9hZCkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5l
Y3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2Nh
bENvbm5lY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIE1v
Y2tMb2NhbENvbm5lY3Rpb246OmZpbHRlclJlc3BvbnNlCiAgICAgZm9yICg7IGl0ciAhPSByZXNw
b25zZXMuZW5kKCk7ICsraXRyKSB7CiAgICAgICAgIGF1dG8qIHJhd0lkID0gaXRyLT5nZXQoKS5y
YXdJZCgpOwogICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAgICBhdXRvIHJhd0lkQmFzZTY0
ID0gYmFzZTY0RW5jb2RlKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpOworICAg
ICAgICBhdXRvIHJhd0lkQmFzZTY0ID0gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKHJhd0lkLT5k
YXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKTsKICAgICAgICAgaWYgKHJhd0lkQmFzZTY0ID09
IHByZWZlcnJlZENyZWRlbnRpYWxJZEJhc2U2NCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJM
b2FkZXJTdHJhdGVneS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTc4LDcgKzU3OCw3IEBAIE9wdGlvbmFsPFdlYkxvYWRlclN0cmF0ZWd5OjpTeW5jTG9hZFJlc3UK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFdlYkxvYWRlclN0cmF0ZWd5Ojpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciwgdW5zaWduZWQgbG9u
ZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IENsaWVudENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgIGNvbnN0IEZl
dGNoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYgb3JpZ2luYWxSZXF1ZXN0
SGVhZGVycywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYkxvYWRlclN0cmF0ZWd5Ojpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciwgdW5zaWduZWQgbG9uZyBy
ZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENs
aWVudENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgIGNvbnN0IEZldGNo
T3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYgb3JpZ2luYWxSZXF1ZXN0SGVh
ZGVycywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBW
ZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgYXV0byogd2ViRnJhbWVMb2FkZXJDbGllbnQg
PSB0b1dlYkZyYW1lTG9hZGVyQ2xpZW50KGZyYW1lTG9hZGVyLmNsaWVudCgpKTsKICAgICBhdXRv
KiB3ZWJGcmFtZSA9IHdlYkZyYW1lTG9hZGVyQ2xpZW50ID8gJndlYkZyYW1lTG9hZGVyQ2xpZW50
LT53ZWJGcmFtZSgpIDogbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuaAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuaAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfldlYkxvYWRlclN0
cmF0ZWd5KCkgZmluYWw7CiAgICAgCiAgICAgdm9pZCBsb2FkUmVzb3VyY2UoV2ViQ29yZTo6RnJh
bWUmLCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYm
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcj4mJik+JiYpIGZpbmFsOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpGcmFtZUxvYWRlciYs
IHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgV2Vi
Q29yZTo6RmV0Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYsIFdlYkNv
cmU6OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNo
YXI+JiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2Vi
Q29yZTo6RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OkNsaWVudENyZWRlbnRp
YWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhU
VFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgZmluYWw7CiAgICAgdm9pZCBwYWdlTG9h
ZENvbXBsZXRlZChXZWJDb3JlOjpQYWdlJikgZmluYWw7CiAgICAgdm9pZCBicm93c2luZ0NvbnRl
eHRSZW1vdmVkKFdlYkNvcmU6OkZyYW1lJikgZmluYWw7CiAKQEAgLTEwMSw3ICsxMDEsNyBAQCBw
cml2YXRlOgogICAgIHN0cnVjdCBTeW5jTG9hZFJlc3VsdCB7CiAgICAgICAgIFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNlRXJyb3Ig
ZXJyb3I7Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgICAgICBWZWN0b3I8dWludDhf
dD4gZGF0YTsKICAgICB9OwogICAgIE9wdGlvbmFsPFN5bmNMb2FkUmVzdWx0PiB0cnlMb2FkaW5n
U3luY2hyb25vdXNseVVzaW5nVVJMU2NoZW1lSGFuZGxlcihXZWJDb3JlOjpGcmFtZUxvYWRlciYs
IFJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
OwogICAgIFN5bmNMb2FkUmVzdWx0IGxvYWREYXRhVVJMU3luY2hyb25vdXNseShjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNwcAko
cmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
VVJMU2NoZW1lSGFuZGxlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBA
QCB2b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6c3RhcnROZXdUCiAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+c3RhcnRMb2FkaW5nKCk7CiB9CiAKLXZvaWQgV2ViVVJMU2NoZW1lSGFu
ZGxlclByb3h5Ojpsb2FkU3luY2hyb25vdXNseShSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGxvYWRJ
ZGVudGlmaWVyLCBXZWJGcmFtZSYgd2ViRnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291cmNlRXJyb3ImIGVycm9yLCBW
ZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6bG9hZFN5
bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBsb2FkSWRlbnRpZmllciwgV2ViRnJh
bWUmIHdlYkZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgVmVjdG9yPHVpbnQ4X3Q+JiBk
YXRhKQogewogICAgIGRhdGEuc2hyaW5rKDApOwogICAgIGlmICghbV93ZWJQYWdlLnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxvYWRTeW5jaHJvbm91c1VSTFNjaGVtZVRhc2soVVJM
U2NoZW1lVGFza1BhcmFtZXRlcnMgeyBtX2lkZW50aWZpZXIsIGxvYWRJZGVudGlmaWVyLCByZXF1
ZXN0LCB3ZWJGcmFtZS5pbmZvKCkgfSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxvYWRTeW5j
aHJvbm91c1VSTFNjaGVtZVRhc2s6OlJlcGx5KHJlc3BvbnNlLCBlcnJvciwgZGF0YSkpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVy
UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnROZXdUYXNr
KFdlYkNvcmU6OlJlc291cmNlTG9hZGVyJiwgV2ViRnJhbWUmKTsKICAgICB2b2lkIHN0b3BBbGxU
YXNrcygpOwogCi0gICAgdm9pZCBsb2FkU3luY2hyb25vdXNseShSZXNvdXJjZUxvYWRJZGVudGlm
aWVyLCBXZWJGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgVmVjdG9yPGNoYXI+
Jik7CisgICAgdm9pZCBsb2FkU3luY2hyb25vdXNseShSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBX
ZWJGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgVmVjdG9yPHVpbnQ4X3Q+Jik7
CiAKICAgICB1aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVy
OyB9CiAgICAgV2ViUGFnZSYgcGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFnZTsgfQpJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExl
Z2FjeS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDUtMTggIFNh
bSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5j
b2RpbmcvZGVjb2RpbmcgdG8gbWF0Y2ggbW9yZSBtb2Rlcm4gV2ViS2l0IGNvbnZlbnRpb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5MjAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oOgorICAgICAgICBVcGRhdGUg
dG8gbWF0Y2ggbmV3IHNpZ25hdHVyZS4gY2hhciAtPiB1aW50OF90LgorCiAyMDIxLTA1LTE0ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEZpbGVTeXN0
ZW06OmdldEZpbGVTaXplKCkgdG8gRmlsZVN5c3RlbTo6ZmlsZVNpemUoKQpJbmRleDogU291cmNl
L1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktp
dExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OmxvYWRSZXNvdQogICAgIH0pOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVu
c2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2xpZW50Q3JlZGVu
dGlhbFBvbGljeSwgY29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zLCBjb25zdCBIVFRQSGVhZGVy
TWFwJiwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBW
ZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxv
bmcsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2xpZW50Q3JlZGVudGlhbFBvbGlj
eSwgY29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgUmVz
b3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWlu
dDhfdD4mIGRhdGEpCiB7CiAgICAgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoZnJhbWVMb2FkZXIubmV0d29ya2luZ0NvbnRleHQoKSwgcmVxdWVzdCwgb3B0aW9ucy5j
cmVkZW50aWFscyA9PSBGZXRjaE9wdGlvbnM6OkNyZWRlbnRpYWxzOjpPbWl0ID8gU3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlIDogU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSwg
ZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvV2Vi
Q29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9y
dC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUs
NyBAQCBwdWJsaWM6CiAgICAgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAKICAgICB2b2lk
IGxvYWRSZXNvdXJjZShXZWJDb3JlOjpGcmFtZSYsIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlJiwg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZGVy
T3B0aW9ucyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdlYkNvcmU6OlN1YnJlc291
cmNlTG9hZGVyPiYmKT4mJikgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KFdlYkNvcmU6OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZywgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3Qg
V2ViQ29yZTo6RmV0Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYsIFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PGNoYXI+JikgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNv
cmU6OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZywgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgV2ViQ29yZTo6
RmV0Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYsIFdlYkNvcmU6OlJl
c291cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+
JikgZmluYWw7CiAgICAgdm9pZCBwYWdlTG9hZENvbXBsZXRlZChXZWJDb3JlOjpQYWdlJikgZmlu
YWw7CiAgICAgdm9pZCBicm93c2luZ0NvbnRleHRSZW1vdmVkKFdlYkNvcmU6OkZyYW1lJikgZmlu
YWw7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE5IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4K
KworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUg
bW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06Cisg
ICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OndyYXBDcnlwdG9LZXkgY29uc3QpOgorICAgICAgICAo
V2ViQ2hyb21lQ2xpZW50Ojp1bndyYXBDcnlwdG9LZXkgY29uc3QpOgorICAgICAgICBVcGRhdGUg
dG8gdXNlIG5ldyBPcHRpb25hbCByZXR1cm5pbmcgZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgp
LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNhdmUpOgorICAgICAgICBVcGRhdGUg
dG8gdXNlIG5ldyBPcHRpb25hbCByZXR1cm5pbmcgYmFzZTY0RGVjb2RlKCkuCisKIDIwMjEtMDUt
MTUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRGVsZXRlIFdl
YlNRTCBjb2RlIGZyb20gV2ViS2l0MgpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY2LDI4ICsxMDY2LDM0IEBAIHZvaWQg
V2ViQ2hyb21lQ2xpZW50OjpleGl0RnVsbFNjcmVlbkZvckUKIAogYm9vbCBXZWJDaHJvbWVDbGll
bnQ6OndyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1aW50
OF90PiYgd3JhcHBlZEtleSkgY29uc3QKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5
OwogICAgIFNFTCBzZWxlY3RvciA9IEBzZWxlY3Rvcih3ZWJDcnlwdG9NYXN0ZXJLZXlGb3JXZWJW
aWV3Oik7CiAgICAgaWYgKFtbbV93ZWJWaWV3IFVJRGVsZWdhdGVdIHJlc3BvbmRzVG9TZWxlY3Rv
cjpzZWxlY3Rvcl0pIHsKICAgICAgICAgTlNEYXRhICprZXlEYXRhID0gQ2FsbFVJRGVsZWdhdGUo
bV93ZWJWaWV3LCBzZWxlY3Rvcik7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7
CiAgICAgICAgIG1hc3RlcktleS5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGNvbnN0X2Nh
c3Q8dm9pZCo+KFtrZXlEYXRhIGJ5dGVzXSkpLCBba2V5RGF0YSBsZW5ndGhdKTsKLSAgICB9IGVs
c2UgaWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkpCisgICAgICAg
IHJldHVybiB3cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIGtleSwgd3JhcHBlZEtl
eSk7CisgICAgfQorICAgIAorICAgIGF1dG8gbWFzdGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleSgpOworICAgIGlmICghbWFzdGVyS2V5KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gd3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCBrZXksIHdyYXBw
ZWRLZXkpOworICAgIHJldHVybiB3cmFwU2VyaWFsaXplZENyeXB0b0tleShXVEZNb3ZlKCptYXN0
ZXJLZXkpLCBrZXksIHdyYXBwZWRLZXkpOwogfQogCiBib29sIFdlYkNocm9tZUNsaWVudDo6dW53
cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSwgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXkpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICAg
ICBTRUwgc2VsZWN0b3IgPSBAc2VsZWN0b3Iod2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmlldzop
OwogICAgIGlmIChbW21fd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6c2Vs
ZWN0b3JdKSB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAgICAgICAgIE5T
RGF0YSAqa2V5RGF0YSA9IENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgc2VsZWN0b3IpOwogICAg
ICAgICBtYXN0ZXJLZXkuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihjb25zdF9jYXN0PHZv
aWQqPihba2V5RGF0YSBieXRlc10pKSwgW2tleURhdGEgbGVuZ3RoXSk7Ci0gICAgfSBlbHNlIGlm
ICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3Rl
cktleSwgd3JhcHBlZEtleSwga2V5KTsKKyAgICB9CiAKLSAgICByZXR1cm4gdW53cmFwU2VyaWFs
aXplZENyeXB0b0tleShtYXN0ZXJLZXksIHdyYXBwZWRLZXksIGtleSk7CisgICAgYXV0byBtYXN0
ZXJLZXkgPSBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgaWYgKCFtYXN0ZXJLZXkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdW53cmFwU2VyaWFsaXplZENyeXB0
b0tleShXVEZNb3ZlKCptYXN0ZXJLZXkpLCB3cmFwcGVkS2V5LCBrZXkpOwogfQogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3Rv
ckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDA4LDEwICs0MDgsMTAgQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6c2F2ZShjbwogICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNl
dChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwogCiAgICAgICAgIGlmIChiYXNlNjRFbmNv
ZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYgKCFi
YXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAg
ICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudCwgQmFzZTY0
RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ZERhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgUmV0YWluUHRyPE5T
RGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVz
Om91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxO
U0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRl
czpkZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0YS0+c2l6ZSgpXSk7CiAgICAg
ICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNd
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFj
dHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJv
cjpOVUxMXTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI3NzcxNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDMyIEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxl
LmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNo
IG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHRvIHVzZSB1cGRhdGVkIGJhc2U2NCBhbmQg
ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpIHJlbGF0ZWQKKyAgICAgICAgZnVuY3Rpb25zLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VENQU2VydmVyOjpzdGFydFNlY3VyZUNvbm5lY3Rpb24pOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VENQU2VydmVyOjp0ZXN0Q2VydGlmaWNhdGUpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VENQU2VydmVyOjp0ZXN0UHJpdmF0ZUtleSk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
RVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9TZXJpYWxpemVk
Q3J5cHRvS2V5V3JhcC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW06CisgICAg
ICAgICh0ZXN0SWRlbnRpdHkyKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0V2ZW50QXR0cmlidXRpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW06
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvY29jb2EvSFRUUFNlcnZlci5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNvbm5lY3Rp
b246OndlYlNvY2tldEhhbmRzaGFrZSk6CisKIDIwMjEtMDUtMTggIFJvYmluIE1vcmlzc2V0ICA8
cm1vcmlzc2V0QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEFpckFsbG9jYXRlUmVnaXN0ZXJz
QnlHcmFwaENvbG9yaW5nIHVzZSBsZXNzIG1lbW9yeQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UQ1BTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2Vy
dmVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UQ1BTZXJ2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsOSArMTU1LDggQEAgdm9pZCBUQ1BTZXJ2ZXI6
OnN0YXJ0U2VjdXJlQ29ubmVjdGlvbihTbwogICAgICJsZFk5YXZjVEdTd2J3b2l1SXF2MGpUTDFm
SEZuenkzUkhNTERoK0xwdm9sYzVEU3JTSkhDUDVXdUswZWVKWGhyIgogICAgICJUNW9RcEhMOXov
Y0NETEFLQ0tSYTR1VjBmaEVkT1dCcXlSOXA4eTVqSnR5ZTcydDZDdUZVVjVpcWNwRjRCSDRmIgog
ICAgICJqMlZOSHdzU3JKd2tENFFVR2xVdEg3dnduUW15Q0Z4Wk1tV0FKZz09Iik7Ci0gICAgVmVj
dG9yPHVpbnQ4X3Q+IGNlcnRERVI7Ci0gICAgYmFzZTY0RGVjb2RlKGNlcnRQRU0sIGNlcnRERVIs
IFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6QmFzZTY0RGVmYXVsdCk7Ci0gICAgc3NsOjp1bmlx
dWVfcHRyPENSWVBUT19CVUZGRVI+IGNlcnQoQ1JZUFRPX0JVRkZFUl9uZXcoY2VydERFUi5kYXRh
KCksIGNlcnRERVIuc2l6ZSgpLCBudWxscHRyKSk7CisgICAgYXV0byBjZXJ0REVSID0gYmFzZTY0
RGVjb2RlKGNlcnRQRU0pOworICAgIHNzbDo6dW5pcXVlX3B0cjxDUllQVE9fQlVGRkVSPiBjZXJ0
KENSWVBUT19CVUZGRVJfbmV3KGNlcnRERVItPmRhdGEoKSwgY2VydERFUi0+c2l6ZSgpLCBudWxs
cHRyKSk7CiAgICAgQVNTRVJUKGNlcnQpOwogCiAgICAgLy8gVGhpcyBpcyBhIHRlc3Qga2V5IGZy
b20gQm9yaW5nU1NMLgpAQCAtNDEyLDkgKzQxMSw4IEBAIFZlY3Rvcjx1aW50OF90PiBUQ1BTZXJ2
ZXI6OnRlc3RDZXJ0aWZpY2EKICAgICAiRzNQRm5ZYlc4dXJIME5TSkcvVysvOURBK1k3QWEwY3M0
VFBwdUJHWjBOVTFXOTRPb0NNbzRsa082SC95NkxldSIKICAgICAiM3ZqWkQzeTlrWms3bXJlOVhI
d2tJOE1kSzVzPSIpOwogICAgIAotICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7Ci0gICAgYmFz
ZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSwgdmVjdG9yLCBXVEY6OkJhc2U2NERlY29k
ZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwotICAgIHJldHVybiB2ZWN0b3I7CisgICAgYXV0byBk
ZWNvZGVkQ2VydGlmaWNhdGUgPSBiYXNlNjREZWNvZGUocGVtRW5jb2RlZENlcnRpZmljYXRlKTsK
KyAgICByZXR1cm4gV1RGTW92ZSgqZGVjb2RlZENlcnRpZmljYXRlKTsKIH0KIAogVmVjdG9yPHVp
bnQ4X3Q+IFRDUFNlcnZlcjo6dGVzdFByaXZhdGVLZXkoKQpAQCAtNDcxLDkgKzQ2OSw4IEBAIFZl
Y3Rvcjx1aW50OF90PiBUQ1BTZXJ2ZXI6OnRlc3RQcml2YXRlS2UKICAgICAiZEVPYnZjcFNoUDIy
SXRPVmpTYW1wUnVBdVJHMjZaZW1FYkdDSTNKNk1xeDN5Nm0rNkh3dWx0c2d0ZHpEZ3JGZSIKICAg
ICAicUpmVThiYmRidTJwaTQ3WTRGZEpLMEhMZmZsNVJ3PT0iKTsKIAotICAgIFZlY3Rvcjx1aW50
OF90PiB2ZWN0b3I7Ci0gICAgYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRQcml2YXRlS2V5LCB2ZWN0
b3IsIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6QmFzZTY0RGVmYXVsdCk7Ci0gICAgcmV0dXJu
IHZlY3RvcjsKKyAgICBhdXRvIGRlY29kZWRQcml2YXRlS2V5ID0gYmFzZTY0RGVjb2RlKHBlbUVu
Y29kZWRQcml2YXRlS2V5KTsKKyAgICByZXR1cm4gV1RGTW92ZSgqZGVjb2RlZFByaXZhdGVLZXkp
OwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwxMSArNDIsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGJhc2U2NEVuY29k
ZWRTaW5mV2l0aAogCiBURVNUKElTT0JveCwgSVNPUHJvdGVjdGlvblNjaGVtZUluZm9Cb3gpCiB7
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHNpbmZBcnJheTsKLSAgICBBU1NFUlRfVFJVRShiYXNlNjRE
ZWNvZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNvZGVkU2luZldpdGhLZXlJRDMpLCBzaW5mQXJyYXkp
KTsKLSAgICBBU1NFUlRfRVEoOTdVTCwgc2luZkFycmF5LnNpemUoKSk7CisgICAgYXV0byBzaW5m
QXJyYXkgPSBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNvZGVkU2luZldpdGhLZXlJ
RDMpKTsKKyAgICBBU1NFUlRfVFJVRShzaW5mQXJyYXkpOworICAgIEFTU0VSVF9FUSg5N1VMLCBz
aW5mQXJyYXktPnNpemUoKSk7CiAKLSAgICBhdXRvIHZpZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVh
dGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShzaW5mQXJyYXkuZGF0YSgpLCBzaW5mQXJyYXkuc2l6ZSgp
KSwgMCwgc2luZkFycmF5LnNpemUoKSk7CisgICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6
Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUoc2luZkFycmF5LT5kYXRhKCksIHNpbmZBcnJheS0+
c2l6ZSgpKSwgMCwgc2luZkFycmF5LT5zaXplKCkpOwogCiAgICAgSVNPUHJvdGVjdGlvblNjaGVt
ZUluZm9Cb3ggc2luZkJveDsKICAgICBBU1NFUlRfVFJVRShzaW5mQm94LnJlYWQodmlldykpOwpA
QCAtNzgsMTEgKzc4LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBiYXNlNjRFbmNvZGVkUHNzaFdp
dGgKIAogVEVTVChJU09Cb3gsIElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveCkKIHsKLSAgICBW
ZWN0b3I8dWludDhfdD4gcHNzaEFycmF5OwotICAgIEFTU0VSVF9UUlVFKGJhc2U2NERlY29kZShT
dHJpbmdWaWV3KGJhc2U2NEVuY29kZWRQc3NoV2l0aEFzc2V0SWQpLCBwc3NoQXJyYXkpKTsKLSAg
ICBBU1NFUlRfRVEoMTc2VUwsIHBzc2hBcnJheS5zaXplKCkpOworICAgIGF1dG8gcHNzaEFycmF5
ID0gYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2RlZFBzc2hXaXRoQXNzZXRJZCkp
OworICAgIEFTU0VSVF9UUlVFKHBzc2hBcnJheSk7CisgICAgQVNTRVJUX0VRKDE3NlVMLCBwc3No
QXJyYXktPnNpemUoKSk7CiAKLSAgICBhdXRvIHZpZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUo
QXJyYXlCdWZmZXI6OmNyZWF0ZShwc3NoQXJyYXkuZGF0YSgpLCBwc3NoQXJyYXkuc2l6ZSgpKSwg
MCwgcHNzaEFycmF5LnNpemUoKSk7CisgICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3Jl
YXRlKEFycmF5QnVmZmVyOjpjcmVhdGUocHNzaEFycmF5LT5kYXRhKCksIHBzc2hBcnJheS0+c2l6
ZSgpKSwgMCwgcHNzaEFycmF5LT5zaXplKCkpOwogCiAgICAgSVNPRmFpclBsYXlTdHJlYW1pbmdQ
c3NoQm94IHBzc2hCb3g7CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJl
bWVudENvY29hLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBURVNUKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCBW
YWxpZEJsaW5kCiAgICAgYXV0byAqbnNTcGtpRGF0YSA9IChfX2JyaWRnZSBOU0RhdGEgKilzcGtp
RGF0YS5nZXQoKTsKIAogICAgIC8vIENvbnRpbnVlIHRoZSB0ZXN0LgotICAgIEVYUEVDVF9UUlVF
KHBjbS5jYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VVbmxpbmthYmxlVG9rZW4oV1RGOjpiYXNlNjRV
UkxFbmNvZGUobnNTcGtpRGF0YS5ieXRlcywgbnNTcGtpRGF0YS5sZW5ndGgpKSk7CisgICAgRVhQ
RUNUX1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVVubGlua2FibGVUb2tlbihtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQobnNTcGtpRGF0YS5ieXRlcywgbnNTcGtpRGF0YS5sZW5n
dGgpKSkpOwogICAgIGF1dG8gc291cmNlU2VjcmV0VG9rZW4gPSBwY20udG9rZW5TaWduYXR1cmVK
U09OKCk7CiAgICAgRVhQRUNUX0VRKHNvdXJjZVNlY3JldFRva2VuLT5hc09iamVjdCgpLT5zaXpl
KCksIDR1bCk7CiAgICAgRVhQRUNUX1NUUkVRKHNvdXJjZVNlY3JldFRva2VuLT5nZXRTdHJpbmco
InNvdXJjZV9lbmdhZ2VtZW50X3R5cGUiX3MpLnV0ZjgoKS5kYXRhKCksICJjbGljayIpOwpAQCAt
OTAsMTQgKzkwLDEzIEBAIFRFU1QoUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIFZhbGlkQmxpbmQK
ICAgICBFWFBFQ1RfRVEoc291cmNlU2VjcmV0VG9rZW4tPmdldEludGVnZXIoInZlcnNpb24iX3Mp
LCAyKTsKIAogICAgIC8vIEdlbmVyYXRlIHRoZSBzaWduYXR1cmUuCi0gICAgVmVjdG9yPHVpbnQ4
X3Q+IGJsaW5kZWRNZXNzYWdlOwotICAgIGJhc2U2NFVSTERlY29kZShzb3VyY2VTZWNyZXRUb2tl
bi0+Z2V0U3RyaW5nKCJzb3VyY2Vfc2VjcmV0X3Rva2VuIl9zKSwgYmxpbmRlZE1lc3NhZ2UpOwor
ICAgIGF1dG8gYmxpbmRlZE1lc3NhZ2UgPSBiYXNlNjRVUkxEZWNvZGUoc291cmNlU2VjcmV0VG9r
ZW4tPmdldFN0cmluZygic291cmNlX3NlY3JldF90b2tlbiJfcykpOwogCi0gICAgYXV0byBibGlu
ZGVkU2lnbmF0dXJlID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRXaXRoTGVu
Z3RoOiBtb2R1bHVzTkJ5dGVzXSk7Ci0gICAgY2Nyc2Fic3NhX3NpZ25fYmxpbmRlZF9tZXNzYWdl
KGNpcGhlcnN1aXRlLCByc2FQcml2YXRlS2V5LCBibGluZGVkTWVzc2FnZS5kYXRhKCksIGJsaW5k
ZWRNZXNzYWdlLnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAqPihbYmxpbmRlZFNpZ25hdHVy
ZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSwgcm5nKTsKKyAgICBh
dXRvIGJsaW5kZWRTaWduYXR1cmUgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5p
dFdpdGhMZW5ndGg6bW9kdWx1c05CeXRlc10pOworICAgIGNjcnNhYnNzYV9zaWduX2JsaW5kZWRf
bWVzc2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJpdmF0ZUtleSwgYmxpbmRlZE1lc3NhZ2UtPmRhdGEo
KSwgYmxpbmRlZE1lc3NhZ2UtPnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAqPihbYmxpbmRl
ZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSwgcm5n
KTsKIAogICAgIC8vIENvbnRpbnVlIHRoZSB0ZXN0LgotICAgIEVYUEVDVF9UUlVFKHBjbS5jYWxj
dWxhdGVBbmRVcGRhdGVTb3VyY2VTZWNyZXRUb2tlbihXVEY6OmJhc2U2NFVSTEVuY29kZShbYmxp
bmRlZFNpZ25hdHVyZSBieXRlc10sIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0pKSk7CisgICAg
RVhQRUNUX1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVNlY3JldFRva2VuKG1ha2VT
dHJpbmcoYmFzZTY0VVJMRW5jb2RlZChbYmxpbmRlZFNpZ25hdHVyZSBieXRlc10sIFtibGluZGVk
U2lnbmF0dXJlIGxlbmd0aF0pKSkpOwogICAgIGF1dG8mIHBlcnNpc3RlbnRUb2tlbiA9IHBjbS5z
b3VyY2VVbmxpbmthYmxlVG9rZW4oKTsKICAgICBFWFBFQ1RfVFJVRShwZXJzaXN0ZW50VG9rZW4p
OwogICAgIEVYUEVDVF9GQUxTRShwZXJzaXN0ZW50VG9rZW4tPnRva2VuQmFzZTY0VVJMLmlzRW1w
dHkoKSk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvU2Vy
aWFsaXplZENyeXB0b0tleVdyYXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL2NvY29hL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tCShyZXZpc2lv
biAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvU2Vy
aWFsaXplZENyeXB0b0tleVdyYXAubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDM3ICs0NCwzNyBA
QCBwdWJsaWM6CiAgICAgfQogfTsKIAotVEVTVF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVz
dCwgR2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSkKK1RFU1RfRihTZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcFRlc3QsIERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpCiB7Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IG1hc3RlcktleTE7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdl
YkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkxKSk7CisgICAgYXV0byBtYXN0ZXJLZXkxID0gV2Vi
Q29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIEVYUEVDVF9UUlVFKG1hc3Rl
cktleTEpOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTI7Ci0gICAgRVhQRUNUX1RS
VUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkyKSk7Cisg
ICAgYXV0byBtYXN0ZXJLZXkyID0gV2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgp
OworICAgIEVYUEVDVF9UUlVFKG1hc3RlcktleTIpOwogCiAgICAgRVhQRUNUX1RSVUUobWFzdGVy
S2V5MSA9PSBtYXN0ZXJLZXkyKTsKIH0KIAogVEVTVF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFw
VGVzdCwgRGVsZXRlRGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSkKIHsKLSAgICBWZWN0b3I8dWlu
dDhfdD4gbWFzdGVyS2V5MTsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpnZXREZWZhdWx0V2Vi
Q3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleTEpKTsKKyAgICBhdXRvIG1hc3RlcktleTEgPSBXZWJD
b3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQRUNUX1RSVUUobWFzdGVy
S2V5MSk7CiAgICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6ZGVsZXRlRGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleSgpKTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXkyOwotICAgIEVYUEVD
VF9UUlVFKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5Mikp
OworICAgIGF1dG8gbWFzdGVyS2V5MiA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJL
ZXkoKTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkyKTsKIAogICAgIEVYUEVDVF9UUlVFKG1h
c3RlcktleTEgIT0gbWFzdGVyS2V5Mik7CiB9CiAKIFRFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5
V3JhcFRlc3QsIFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVW53cmFwKQogewotICAgIFZlY3Rvcjx1
aW50OF90PiBtYXN0ZXJLZXk7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdl
YkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKTsKKyAgICBhdXRvIG1hc3RlcktleSA9IFdlYkNv
cmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJL
ZXkpOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGNyeXB0b0tleSgxNiwgMSk7CiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHdyYXBwZWRLZXk7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6d3JhcFNlcmlh
bGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCBjcnlwdG9LZXksIHdyYXBwZWRLZXkpKTsKKyAgICBF
WFBFQ1RfVFJVRShXZWJDb3JlOjp3cmFwU2VyaWFsaXplZENyeXB0b0tleSgqbWFzdGVyS2V5LCBj
cnlwdG9LZXksIHdyYXBwZWRLZXkpKTsKICAgICBFWFBFQ1RfVFJVRShjcnlwdG9LZXkgIT0gd3Jh
cHBlZEtleSk7CiAgICAgLy8gZW5zdXJlIHdyYXBwZWRLZXkgZG9lc24ndCBjb250YWluIGNyeXB0
b0tleQogICAgIGJvb2wgbm90Q29udGFpbmVkID0gdHJ1ZTsKQEAgLTkwLDcgKzkwLDcgQEAgVEVT
VF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVzdCwgU2VyaQogICAgIEVYUEVDVF9UUlVFKG5v
dENvbnRhaW5lZCk7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdW53cmFwcGVkS2V5OwotICAgIEVY
UEVDVF9UUlVFKFdlYkNvcmU6OnVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCB3
cmFwcGVkS2V5LCB1bndyYXBwZWRLZXkpKTsKKyAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjp1bndy
YXBTZXJpYWxpemVkQ3J5cHRvS2V5KCptYXN0ZXJLZXksIHdyYXBwZWRLZXksIHVud3JhcHBlZEtl
eSkpOwogICAgIEVYUEVDVF9UUlVFKHVud3JhcHBlZEtleSA9PSBjcnlwdG9LZXkpOwogfQogCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxs
ZW5nZS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMyArMTc2LDEw
IEBAIFJldGFpblB0cjxTZWNJZGVudGl0eVJlZj4gdGVzdElkZW50aXR5MigKICAgICAiSkFIMm54
S0d1cXRBSzJoV2JBQ3U2MVJUNWdBcUF2L2hCOUpZbmMyT2lRMlZtallrT2syR0VkSWpuMHhTZ1g3
VyIKICAgICAibUkvaEhieEtNRzNSa3Y5cTFDeCtXQi92MXQ4PSIpOwogCi0gICAgVmVjdG9yPHVp
bnQ4X3Q+IHByaXZhdGVLZXlCeXRlczsKLSAgICBiYXNlNjREZWNvZGUocGVtRW5jb2RlZFByaXZh
dGVLZXksIHByaXZhdGVLZXlCeXRlcywgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjRE
ZWZhdWx0KTsKKyAgICBhdXRvIHByaXZhdGVLZXlCeXRlcyA9IGJhc2U2NERlY29kZShwZW1FbmNv
ZGVkUHJpdmF0ZUtleSk7CisgICAgYXV0byBjZXJ0aWZpY2F0ZUJ5dGVzID0gYmFzZTY0RGVjb2Rl
KHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gY2VydGlmaWNh
dGVCeXRlczsKLSAgICBiYXNlNjREZWNvZGUocGVtRW5jb2RlZENlcnRpZmljYXRlLCBjZXJ0aWZp
Y2F0ZUJ5dGVzLCBXVEY6OkJhc2U2NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwotCi0g
ICAgcmV0dXJuIGNyZWF0ZVRlc3RJZGVudGl0eShwcml2YXRlS2V5Qnl0ZXMsIGNlcnRpZmljYXRl
Qnl0ZXMpOworICAgIHJldHVybiBjcmVhdGVUZXN0SWRlbnRpdHkoV1RGTW92ZSgqcHJpdmF0ZUtl
eUJ5dGVzKSwgV1RGTW92ZSgqY2VydGlmaWNhdGVCeXRlcykpOwogfQogCiBzdGF0aWMgUmV0YWlu
UHRyPE5TVVJMQ3JlZGVudGlhbD4gY3JlZGVudGlhbFdpdGhJZGVudGl0eSgpCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0V2ZW50QXR0cmlidXRpb24ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVudEF0
dHJpYnV0aW9uLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0V2ZW50QXR0cmlidXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4
NCwxMyArMTg0LDEyIEBAIFRFU1QoRXZlbnRBdHRyaWJ1dGlvbiwgRnJhdWRQcmV2ZW50aW9uKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBlbmQgPSByZXF1ZXN0MlN0cmluZy5maW5kKCci
Jywgc3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0b2tlbiA9IHJlcXVlc3Qy
U3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4gYmxpbmRlZE1lc3NhZ2U7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlNjRVUkxEZWNvZGUodG9rZW4sIGJsaW5kZWRNZXNzYWdlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gYmxpbmRlZE1lc3NhZ2UgPSBiYXNlNjRVUkxEZWNvZGUodG9r
ZW4pOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY2Nyc2Fic3NhX2Np
cGhlcnN1aXRlICpjaXBoZXJzdWl0ZSA9ICZjY3JzYWJzc2FfY2lwaGVyc3VpdGVfcnNhNDA5Nl9z
aGEzODQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGJsaW5kZWRTaWduYXR1cmUgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdFdpdGhMZW5ndGg6IG1vZHVsdXNOQnl0
ZXNdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNjcnNhYnNzYV9zaWduX2JsaW5kZWRfbWVz
c2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJpdmF0ZUtleSwgYmxpbmRlZE1lc3NhZ2UuZGF0YSgpLCBi
bGluZGVkTWVzc2FnZS5zaXplKCksIHN0YXRpY19jYXN0PHVpbnQ4X3QgKj4oW2JsaW5kZWRTaWdu
YXR1cmUgbXV0YWJsZUJ5dGVzXSksIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0sIHJuZyk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVubGlua2FibGVUb2tlbiA9IFdURjo6YmFzZTY0
VVJMRW5jb2RlKFtibGluZGVkU2lnbmF0dXJlIGJ5dGVzXSwgW2JsaW5kZWRTaWduYXR1cmUgbGVu
Z3RoXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGJsaW5kZWRTaWduYXR1cmUgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdFdpdGhMZW5ndGg6bW9kdWx1c05CeXRl
c10pOworICAgICAgICAgICAgICAgICAgICAgICAgY2Nyc2Fic3NhX3NpZ25fYmxpbmRlZF9tZXNz
YWdlKGNpcGhlcnN1aXRlLCByc2FQcml2YXRlS2V5LCBibGluZGVkTWVzc2FnZS0+ZGF0YSgpLCBi
bGluZGVkTWVzc2FnZS0+c2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50OF90ICo+KFtibGluZGVkU2ln
bmF0dXJlIG11dGFibGVCeXRlc10pLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdLCBybmcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmxpbmthYmxlVG9rZW4gPSBtYWtlU3RyaW5n
KGJhc2U2NFVSTEVuY29kZWQoW2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBbYmxpbmRlZFNpZ25h
dHVyZSBsZW5ndGhdKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4YW1wbGUgcmVz
cG9uc2U6IHsgInVubGlua2FibGVfdG9rZW4iOiAiQUJDRCIgfS4gIkFCQ0QiIHNob3VsZCBiZSBC
YXNlNjRVUkwgZW5jb2RlZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVzcG9uc2Ug
PSBtYWtlU3RyaW5nKCJIVFRQLzEuMSAyMDAgT0tcclxuIgpAQCAtMjIyLDE4ICsyMjEsMTYgQEAg
VEVTVChFdmVudEF0dHJpYnV0aW9uLCBGcmF1ZFByZXZlbnRpb24pCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKz0ga2V5Lmxlbmd0aCgpICsgMzsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGVuZCA9IHJlcXVlc3Q0U3Ry
aW5nLmZpbmQoJyInLCBzdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byB0b2tlbiA9IHJlcXVlc3Q0U3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5kIC0g
c3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiB0b2tlblZlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiYXNlNjRVUkxEZWNvZGUodG9rZW4sIHRva2VuVmVjdG9yKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRva2VuRGF0YSA9IGFkb3B0TlMoW1tOU0Rh
dGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6dG9rZW5WZWN0b3IuZGF0YSgpIGxlbmd0aDp0b2tlblZl
Y3Rvci5zaXplKCldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIHRva2VuVmVjdG9yID0gYmFzZTY0VVJMRGVjb2RlKHRva2VuKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRva2VuRGF0YSA9IGFkb3B0TlMoW1tOU0Rh
dGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6dG9rZW5WZWN0b3ItPmRhdGEoKSBsZW5ndGg6dG9rZW5W
ZWN0b3ItPnNpemUoKV0pOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAga2V5ID0gU3RyaW5nKCJzb3VyY2Vfc2VjcmV0X3Rva2VuX3NpZ25hdHVyZSIpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gcmVxdWVzdDRTdHJpbmcu
ZmluZChrZXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
ICs9IGtleS5sZW5ndGgoKSArIDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kID0gcmVxdWVzdDRTdHJpbmcuZmluZCgnIicsIHN0YXJ0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHNpZ25hdHVyZSA9IHJlcXVlc3Q0U3Ry
aW5nLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1cmVWZWN0b3I7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0VVJMRGVjb2RlKHNpZ25h
dHVyZSwgc2lnbmF0dXJlVmVjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIHNpZ25hdHVyZURhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0
V2l0aEJ5dGVzOnNpZ25hdHVyZVZlY3Rvci5kYXRhKCkgbGVuZ3RoOnNpZ25hdHVyZVZlY3Rvci5z
aXplKCldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHNp
Z25hdHVyZVZlY3RvciA9IGJhc2U2NFVSTERlY29kZShzaWduYXR1cmUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2lnbmF0dXJlRGF0YSA9IGFkb3B0TlMo
W1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2lnbmF0dXJlVmVjdG9yLT5kYXRhKCkgbGVu
Z3RoOnNpZ25hdHVyZVZlY3Rvci0+c2l6ZSgpXSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShTZWNLZXlWZXJpZnlTaWduYXR1cmUoc2VjS2V5
LmdldCgpLCBrU2VjS2V5QWxnb3JpdGhtUlNBU2lnbmF0dXJlTWVzc2FnZVBTU1NIQTM4NCwgKF9f
YnJpZGdlIENGRGF0YVJlZil0b2tlbkRhdGEuZ2V0KCksIChfX2JyaWRnZSBDRkRhdGFSZWYpc2ln
bmF0dXJlRGF0YS5nZXQoKSwgTlVMTCkpOwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTk4LDggKzk4LDggQEAgVEVTVF9GKFNTTEtleUdlbmVyYXRvclRlc3QsIERlZmF1
bHRUZXN0KQogICAgIGNoYXIgY2hhbGxlbmdlW10gPSAiMDEyMzQ1Njc4OSI7CiAgICAgYXV0byBy
YXdSZXN1bHQgPSBXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoMCwg
Y2hhbGxlbmdlLCB1cmwpOwogICAgIEFTU0VSVF9GQUxTRShyYXdSZXN1bHQuaXNFbXB0eSgpKTsK
LSAgICBWZWN0b3I8dWludDhfdD4gZGVyUmVzdWx0OwotICAgIEFTU0VSVF9UUlVFKGJhc2U2NERl
Y29kZShyYXdSZXN1bHQsIGRlclJlc3VsdCkpOworICAgIGF1dG8gZGVyUmVzdWx0ID0gYmFzZTY0
RGVjb2RlKHJhd1Jlc3VsdCk7CisgICAgQVNTRVJUX1RSVUUoZGVyUmVzdWx0KTsKIAogICAgIFNl
Y0FzbjFDb2RlclJlZiBjb2RlciA9IG51bGxwdHI7CiAgICAgQVNTRVJUX0VRKGVyclNlY1N1Y2Nl
c3MsIFNlY0FzbjFDb2RlckNyZWF0ZSgmY29kZXIpKTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBURVNU
X0YoU1NMS2V5R2VuZXJhdG9yVGVzdCwgRGVmYXVsdFRlc3QpCiAgICAgfSk7CiAKICAgICBTaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UgZGVjb2RlZFJlc3VsdCB7IH07Ci0gICAgU2VjQXNuMUl0
ZW0gZGVyUmVzdWx0SXRlbSB7IGRlclJlc3VsdC5zaXplKCksIGRlclJlc3VsdC5kYXRhKCkgfTsK
KyAgICBTZWNBc24xSXRlbSBkZXJSZXN1bHRJdGVtIHsgZGVyUmVzdWx0LT5zaXplKCksIGRlclJl
c3VsdC0+ZGF0YSgpIH07CiAgICAgQVNTRVJUX0VRKGVyclNlY1N1Y2Nlc3MsIFNlY0FzbjFEZWNv
ZGVEYXRhKGNvZGVyLCAmZGVyUmVzdWx0SXRlbSwgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdl
VGVtcGxhdGUsICZkZWNvZGVkUmVzdWx0KSk7CiAKICAgICAvLyBDaGVjayBjaGFsbGVuZ2UKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0JKHJldmlzaW9uIDI3NzU2
OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6d2ViU29ja2V0SGFuZHNo
YWtlKENvbXAKICAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4od2ViU29ja2V0S2V5R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSk7
CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAgIHNoYTEuY29tcHV0
ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGhhc2guZGF0YSgp
LCBTSEExOjpoYXNoU2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRF
bmNvZGVkKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSkpOwogICAgICAgICB9OwogCiAgICAg
ICAgIGNvbm5lY3Rpb24uc2VuZChIVFRQUmVzcG9uc2UoMTAxLCB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429060</attachid>
            <date>2021-05-19 10:14:12 -0700</date>
            <delta_ts>2021-05-19 10:14:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210519101411.patch</filename>
            <type>text/plain</type>
            <size>206035</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnJpbmcgYmFzZTY0IGVuY29kaW5nL2RlY29k
aW5nIHVwIHRvIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZXRpb25zIGJ5OgorICAgICAgICAtIFJl
cGxhY2UgdXNlIG9mICJvdXQgcGFyYW1ldGVyICsgYm9vbCIgd2l0aCBPcHRpb25hbCByZXR1cm4g
dmFsdWVzLgorICAgICAgICAtIFVzaW5nIGVudW0gY2xhc3MgZm9yIGVudW1lcmF0aW9ucy4KKyAg
ICAgICAgLSBSZXBsYWNpbmcgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyL0NvbnN0
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyCisgICAgICAgICAgd2l0aCBhcHByb3By
aWF0ZSBmdW5jdGlvbiBvdmVybG9hZHMuCisKKyAgICAgICAgQWxzbyBhZGRzIGEgbmV3IFN0cmlu
Z1R5cGVBZGFwdGVyIGZvciBpbmxpbmUgYmFzZTY0IGVuY29kaW5nIGRhdGEgaW4gZWl0aGVyIG1h
a2VTdHJpbmcoKQorICAgICAgICBvciBTdHJpbmdCdWlsZGVyLiBUbyBtYWtlIHRoaXMgd29yaywg
YSBmZXcgbW9kaWZpY2F0aW9ucyB3ZXJlIG5lZWQgdG8gdGhlIGJhc2U2NEVuY29kZSgpCisgICAg
ICAgIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBmaXhlZCBzaXplIHdyaXRlVG8oKSBmdW5jdGlv
bi4KKworICAgICAgICBGaXJzdCwgdGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBkYXRhIGlzIG5v
dyBjb21wdXRlZCB1cCBmcm9udCBkZXBlbmRpbmcgb24gdGhlIHBvbGljeS4KKyAgICAgICAgVGhp
cyBoYXMgYmVlbiBleHRyYWN0ZWQgaW50byBhIG5ldyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6
ZSgpIGZ1bmN0aW9uIHVzZWQgYnkgYm90aAorICAgICAgICB0aGUgYWRhcHRvciBhbmQgYnkgYmFz
ZTY0RW5jb2RlIHdoZW4gcGFzc2VkIGEgVmVjdG9yLiBQcmV2aW91c2x5LCB3aGVuIGVuY29kaW5n
IHVzaW5nCisgICAgICAgIHNvbWUgcG9saWNpZXMsIHRoZSBzaXplIHdhcyBhbiBvdmVyZXN0aW1h
dGUgYW5kIHRoZSByZXN1bHRpbmcgVmVjdG9yIHdvdWxkIGJlIHJlc2l6ZWQKKyAgICAgICAgZG93
biBhZnRlciBlbmNvZGluZy4KKworICAgICAgICBTZWNvbmQsIGJhc2U2NEVuY29kZUludGVybmFs
IHdhcyBtYWRlIGludG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbiB0byBhbGxvdyBmb3IgdHdvIG5ldyAK
KyAgICAgICAgYmFzZTY0RW5jb2RlIGZ1bmN0aW9ucywgb25lIG9mIHdoaWNoIGhhcyBhIFVDaGFy
KiBkZXN0aW5hdGlvbi4gVGhlc2UgYXJlIHVzZWQgYnkgdGhlCisgICAgICAgIGFkYXB0b3IgdG8g
d3JpdGUgdGhlIGVuY29kZWQgZGF0YS4KKworICAgICAgICBPbmUgYWRkaXRpb25hbCBzbWFsbCBj
aGFuZ2UgaXMgdGhhdCBub3cgYSBvcHRpb25hbCBtYXAgdHlwZSBwYXJhbWV0ZXIgaGFzIGJlZW4g
YWRkZWQKKyAgICAgICAgdG8gYWxsIHRoZSBlbmNvZGVycyB0byBhbGxvdyB1c2luZyBlaXRoZXIg
dGhlIGRlZmF1bHQgbWFwIG9yIHRoZSBVUkwgb25lIGFzIGRlZmluZWQgCisgICAgICAgIGluIFJG
QyA0NjQ4LiBUaGlzIHNpbXBsaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJpbmdU
eXBlQWRhcHRlciBhbmQgbWFrZXMgdGhlCisgICAgICAgIGJhc2U2NFVSTEVuY29kZS9iYXNlNjRV
UkxEZWNvZGUgZnVuY3Rpb25zIGludG8gc2ltcGxlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0
IHVzZQorICAgICAgICB0aGUgcmlnaHQgZGVmYXVsdHMgZm9yIHRoZSBnZW5lcmljIGVuY29kZS9k
ZWNvZGUgZnVuY3Rpb25zLiAKKworICAgICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5jcHA6CisgICAg
ICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVybmFsKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5j
b2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlSW50ZXJuYWwpOgorICAgICAgICAoV1RG
OjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxEZWNvZGUpOgorICAgICAg
ICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L0Jh
c2U2NC5oOgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoV1RGOjpiYXNl
NjRFbmNvZGUpOgorICAgICAgICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOgorICAgICAgICAoV1RG
Ojppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKToKKyAgICAgICAgKFdURjo6Y2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGVkKToKKyAgICAg
ICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlZCk6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFw
dGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpTdHJpbmdUeXBlQWRhcHRlcik6CisgICAgICAgIChX
VEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjpsZW5ndGggY29uc3Qp
OgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6
aXM4Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3Bl
Y2lmaWNhdGlvbj46OndyaXRlVG8gY29uc3QpOgorCiAyMDIxLTA1LTE2ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRl
U3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9CYXNlNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAgIENvcHlyaWdodCAoQykgMjAw
MC0yMDAxIERhd2l0IEFsZW1heWVodSA8YWRhd2l0QGtkZS5vcmc+CiAgICBDb3B5cmlnaHQgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KLSAgIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJv
Z2EuY29tPgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMTMgKzI1LDE2IEBACiAjaW5jbHVkZSA8
d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKLWNvbnN0IGNoYXIgbm9uQWxwaGFiZXQgPSAtMTsKK2NvbnN0ZXhwciBjb25zdCBj
aGFyIG5vbkFscGhhYmV0ID0gLTE7CiAKLXN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVuY01hcFs2
NF0gPSB7Citjb25zdGV4cHIgdW5zaWduZWQgZW5jb2RlTWFwU2l6ZSA9IDY0OworY29uc3RleHBy
IHVuc2lnbmVkIGRlY29kZU1hcFNpemUgPSAxMjg7CisKK3N0YXRpYyBjb25zdCBjaGFyIGJhc2U2
NEVuY01hcFtlbmNvZGVNYXBTaXplXSA9IHsKICAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAw
eDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAogICAgIDB4NDksIDB4NEEsIDB4NEIsIDB4NEMsIDB4NEQs
IDB4NEUsIDB4NEYsIDB4NTAsCiAgICAgMHg1MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1
NiwgMHg1NywgMHg1OCwKQEAgLTQyLDcgKzQ1LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0
RW5jTWFwWzY0XSA9IHsKICAgICAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAw
eDJCLCAweDJGCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciBiYXNlNjREZWNNYXBbMTI4XSA9IHsK
K3N0YXRpYyBjb25zdCBjaGFyIGJhc2U2NERlY01hcFtkZWNvZGVNYXBTaXplXSA9IHsKICAgICBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCiAgICAgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9u
QWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKQEAgLTYxLDcgKzY0LDcgQEAgc3Rh
dGljIGNvbnN0IGNoYXIgYmFzZTY0RGVjTWFwWzEyOF0gPSB7CiAgICAgMHgzMSwgMHgzMiwgMHgz
Mywgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5v
bkFscGhhYmV0CiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciBiYXNlNjRVUkxFbmNNYXBbNjRdID0g
eworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwW2VuY29kZU1hcFNpemVdID0gewog
ICAgIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsCiAgICAg
MHg0OSwgMHg0QSwgMHg0QiwgMHg0QywgMHg0RCwgMHg0RSwgMHg0RiwgMHg1MCwKICAgICAweDUx
LCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LApAQCAtNzIsNyArNzUs
NyBAQCBzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRVUkxFbmNNYXBbNjRdID0gCiAgICAgMHgzNCwg
MHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyRCwgMHg1RgogfTsKIAotc3RhdGljIGNv
bnN0IGNoYXIgYmFzZTY0VVJMRGVjTWFwWzEyOF0gPSB7CitzdGF0aWMgY29uc3QgY2hhciBiYXNl
NjRVUkxEZWNNYXBbZGVjb2RlTWFwU2l6ZV0gPSB7CiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhh
YmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJl
dCwgbm9uQWxwaGFiZXQsCkBAIC05MSwyNDMgKzk0LDI0NSBAQCBzdGF0aWMgY29uc3QgY2hhciBi
YXNlNjRVUkxEZWNNYXBbMTI4XSA9CiAgICAgMHgzMSwgMHgzMiwgMHgzMywgbm9uQWxwaGFiZXQs
IG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0CiB9Owog
Ci1zdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29uc3QgdW5zaWduZWQg
Y2hhciogZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hhcj4mIG91dCwgQmFzZTY0RW5jb2Rl
UG9saWN5IHBvbGljeSwgY29uc3QgY2hhciAoJmVuY29kZU1hcClbNjRdKQordGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIHZvaWQgYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29u
c3QgdWludDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQ2hhcmFj
dGVyVHlwZSogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxlbmd0
aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAg
ICBvdXQuY2xlYXIoKTsKLSAgICBpZiAoIWxlbikKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VS
VChkZXN0aW5hdGlvbkxlbmd0aCA+IDApOworICAgIEFTU0VSVChjYWxjdWxhdGVCYXNlNjRFbmNv
ZGVkU2l6ZShpbnB1dExlbmd0aCwgcG9saWN5KSA9PSBkZXN0aW5hdGlvbkxlbmd0aCk7CiAKLSAg
ICAvLyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdlLCBqdXN0IHJl
dHVybiBub3RoaW5nLgotICAgIC8vIE5vdGU6IEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhlICJv
dXRMZW5ndGgiIGNvbXB1dGF0aW9uIGJlbG93LgotICAgIC8vIFJhdGhlciB0aGFuIGJlaW5nIHBl
cmZlY3RseSBwcmVjaXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZhdGl2ZS4KLSAgICBjb25zdCB1
bnNpZ25lZCBtYXhJbnB1dEJ1ZmZlclNpemUgPSBVSU5UX01BWCAvIDc3ICogNzYgLyA0ICogMyAt
IDI7Ci0gICAgaWYgKGxlbiA+IG1heElucHV0QnVmZmVyU2l6ZSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIGF1dG8gZW5jb2RlTWFwID0gKG1hcCA9PSBCYXNlNjRFbmNvZGVNYXA6OlVSTCkgPyBiYXNl
NjRVUkxFbmNNYXAgOiBiYXNlNjRFbmNNYXA7CiAKICAgICB1bnNpZ25lZCBzaWR4ID0gMDsKICAg
ICB1bnNpZ25lZCBkaWR4ID0gMDsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAKLSAgICB1bnNp
Z25lZCBvdXRMZW5ndGggPSAoKGxlbiArIDIpIC8gMykgKiA0OworICAgIGJvb2wgaW5zZXJ0TEZz
ID0gKHBvbGljeSA9PSBCYXNlNjRFbmNvZGVQb2xpY3k6Okluc2VydExGcyAmJiBkZXN0aW5hdGlv
bkxlbmd0aCA+IG1heGltdW1CYXNlNjRMaW5lTGVuZ3RoV2hlbkluc2VydGluZ0xGcyk7CiAKLSAg
ICAvLyBEZWFsIHdpdGggdGhlIDc2IGNoYXJhY3RlciBwZXIgbGluZSBsaW1pdCBzcGVjaWZpZWQg
aW4gUkZDIDIwNDUuCi0gICAgYm9vbCBpbnNlcnRMRnMgPSAocG9saWN5ID09IEJhc2U2NEluc2Vy
dExGcyAmJiBvdXRMZW5ndGggPiA3Nik7Ci0gICAgaWYgKGluc2VydExGcykKLSAgICAgICAgb3V0
TGVuZ3RoICs9ICgob3V0TGVuZ3RoIC0gMSkgLyA3Nik7Ci0KLSAgICBpbnQgY291bnQgPSAwOwot
ICAgIG91dC5ncm93KG91dExlbmd0aCk7Ci0KLSAgICAvLyAzLWJ5dGUgdG8gNC1ieXRlIGNvbnZl
cnNpb24gKyAwLTYzIHRvIGFzY2lpIHByaW50YWJsZSBjb252ZXJzaW9uCi0gICAgaWYgKGxlbiA+
IDEpIHsKLSAgICAgICAgd2hpbGUgKHNpZHggPCBsZW4gLSAyKSB7CisgICAgaWYgKGlucHV0TGVu
Z3RoID4gMSkgeworICAgICAgICB3aGlsZSAoc2lkeCA8IGlucHV0TGVuZ3RoIC0gMikgewogICAg
ICAgICAgICAgaWYgKGluc2VydExGcykgewotICAgICAgICAgICAgICAgIGlmIChjb3VudCAmJiAh
KGNvdW50ICUgNzYpKQotICAgICAgICAgICAgICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7Cisg
ICAgICAgICAgICAgICAgaWYgKGNvdW50ICYmICEoY291bnQgJSBtYXhpbXVtQmFzZTY0TGluZUxl
bmd0aFdoZW5JbnNlcnRpbmdMRnMpKQorICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkRh
dGFCdWZmZXJbZGlkeCsrXSA9ICdcbic7CiAgICAgICAgICAgICAgICAgY291bnQgKz0gNDsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWyhkYXRhW3Np
ZHhdID4+IDIpICYgMDc3XTsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWygo
ZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYgMDc3KV07
Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lkeCArIDJdID4+
IDYpICYgMDAzKSB8ICgoZGF0YVtzaWR4ICsgMV0gPDwgMikgJiAwNzcpXTsKLSAgICAgICAgICAg
IG91dFtkaWR4KytdID0gZW5jb2RlTWFwW2RhdGFbc2lkeCArIDJdICYgMDc3XTsKKworICAgICAg
ICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBbIChpbnB1dERh
dGFCdWZmZXJbc2lkeCAgICBdID4+IDIpICYgMDc3XTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
RGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHggKyAx
XSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzcp
XTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFw
WygoaW5wdXREYXRhQnVmZmVyW3NpZHggKyAyXSA+PiA2KSAmIDAwMykgfCAoKGlucHV0RGF0YUJ1
ZmZlcltzaWR4ICsgMV0gPDwgMikgJiAwNzcpXTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0
YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyAgaW5wdXREYXRhQnVmZmVyW3NpZHggKyAyXSAg
ICAgICAmIDA3N107CiAgICAgICAgICAgICBzaWR4ICs9IDM7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAoc2lkeCA8IGxlbikgewotICAgICAgICBpZiAoaW5zZXJ0TEZzICYmIChjb3VudCA+
IDApICYmICEoY291bnQgJSA3NikpCi0gICAgICAgICAgIG91dFtkaWR4KytdID0gJ1xuJzsKLQot
ICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA+PiAyKSAmIDA3N107
Ci0gICAgICAgIGlmIChzaWR4IDwgbGVuIC0gMSkgewotICAgICAgICAgICAgb3V0W2RpZHgrK10g
PSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAxXSA+PiA0KSAmIDAxNykgfCAoKGRhdGFbc2lkeF0g
PDwgNCkgJiAwNzcpXTsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWyhkYXRh
W3NpZHggKyAxXSA8PCAyKSAmIDA3N107CisgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCkgewor
ICAgICAgICBpZiAoaW5zZXJ0TEZzICYmIChjb3VudCA+IDApICYmICEoY291bnQgJSBtYXhpbXVt
QmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpKQorICAgICAgICAgICAgZGVzdGluYXRp
b25EYXRhQnVmZmVyW2RpZHgrK10gPSAnXG4nOworCisgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyhpbnB1dERhdGFCdWZmZXJbc2lkeF0gPj4gMikgJiAw
NzddOworICAgICAgICBpZiAoc2lkeCA8IGlucHV0TGVuZ3RoIC0gMSkgeworICAgICAgICAgICAg
ZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBbKChpbnB1dERhdGFCdWZm
ZXJbc2lkeCArIDFdID4+IDQpICYgMDE3KSB8ICgoaW5wdXREYXRhQnVmZmVyW3NpZHhdIDw8IDQp
ICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVu
Y29kZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPDwgMikgJiAwNzddOwogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWyhkYXRhW3NpZHhd
IDw8IDQpICYgMDc3XTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4Kytd
ID0gZW5jb2RlTWFwWyAoaW5wdXREYXRhQnVmZmVyW3NpZHggICAgXSA8PCA0KSAmIDA3N107CiAg
ICAgfQogCi0gICAgLy8gQWRkIHBhZGRpbmcKLSAgICBpZiAocG9saWN5ID09IEJhc2U2NFVSTFBv
bGljeSkKLSAgICAgICAgb3V0LnJlc2l6ZShkaWR4KTsKLSAgICBlbHNlIHsKLSAgICAgICAgd2hp
bGUgKGRpZHggPCBvdXQuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBvdXRbZGlkeF0gPSAnPSc7Ci0g
ICAgICAgICAgICArK2RpZHg7Ci0gICAgICAgIH0KLSAgICB9CisgICAgQVNTRVJUKHBvbGljeSAh
PSBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCB8fCBkaWR4ID09IGRlc3RpbmF0aW9uTGVuZ3RoKTsK
KworICAgIHdoaWxlIChkaWR4IDwgZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gJz0nOwogfQogCi1TdHJpbmcgYmFzZTY0RW5jb2RlKGNv
bnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29uc3QgdWlu
dDhfdCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2Rl
UG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBWZWN0b3I8Y2hhcj4g
cmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsK
LSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOworICAgIGF1
dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dExl
bmd0aCwgcG9saWN5KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1
cm4geyB9OworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRlc3RpbmF0aW9uVmVjdG9yKGRlc3RpbmF0
aW9uTGVuZ3RoKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChpbnB1dERhdGFCdWZmZXIsIGlu
cHV0TGVuZ3RoLCBkZXN0aW5hdGlvblZlY3Rvci5kYXRhKCksIGRlc3RpbmF0aW9uTGVuZ3RoLCBw
b2xpY3ksIG1hcCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uVmVjdG9yOworfQorCit2b2lkIGJh
c2U2NEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVu
Z3RoLCBVQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkxl
bmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3sK
KyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm47CisgICAgYmFzZTY0
RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZl
ciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBwb2xpY3ksIG1hcCk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEs
IHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCit2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2ln
bmVkIGlucHV0TGVuZ3RoLCBMQ2hhciogZGVzdGluYXRpb25EYXRhQnVmZmVyLCB1bnNpZ25lZCBk
ZXN0aW5hdGlvbkxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2Rl
TWFwIG1hcCkKIHsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBwb2xpY3ksIGJhc2U2NEVuY01hcCk7Cisg
ICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGJhc2U2NEVu
Y29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZmZXIp
LCBpbnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwg
cG9saWN5LCBtYXApOwogfQogCi1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqIGRh
dGEsIHVuc2lnbmVkIGxlbmd0aCkKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rv
cihjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIFZlY3Rv
cjxjaGFyPiByZXN1bHQ7Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGRhdGEpLCBsZW5ndGgsIHJlc3VsdCwgQmFzZTY0VVJMUG9saWN5
LCBiYXNlNjRVUkxFbmNNYXApOwotICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVz
dWx0LnNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZmZXIpLCBpbnB1dExlbmd0aCwgcG9saWN5LCBt
YXApOwogfQogCi12b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25l
ZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0KQorU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNv
bnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgYmFzZTY0RW5j
b2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGRhdGEpLCBsZW4s
IG91dCwgQmFzZTY0VVJMUG9saWN5LCBiYXNlNjRVUkxFbmNNYXApOworICAgIHJldHVybiBtYWtl
U3RyaW5nKGJhc2U2NEVuY29kZWQoaW5wdXREYXRhQnVmZmVyLCBpbnB1dExlbmd0aCwgcG9saWN5
LCBtYXApKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgYm9vbCBi
YXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIFNpZ25l
ZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciYgb3V0LCB1bnNpZ25lZCBvcHRpb25zLCBjb25z
dCBjaGFyICgmZGVjb2RlTWFwKVsxMjhdKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIE9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoY29uc3QgVCogaW5w
dXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNsZWFy
KCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghaW5w
dXRMZW5ndGgpCisgICAgICAgIHJldHVybiBWZWN0b3I8dWludDhfdD4geyB9OwogCi0gICAgb3V0
Lmdyb3cobGVuZ3RoKTsKKyAgICBhdXRvIGRlY29kZU1hcCA9IChtYXAgPT0gQmFzZTY0RGVjb2Rl
TWFwOjpVUkwpID8gYmFzZTY0VVJMRGVjTWFwIDogYmFzZTY0RGVjTWFwOworCisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGRlc3RpbmF0aW9uKGlucHV0TGVuZ3RoKTsKIAogICAgIHVuc2lnbmVkIGVxdWFs
c1NpZ25Db3VudCA9IDA7Ci0gICAgdW5zaWduZWQgb3V0TGVuZ3RoID0gMDsKLSAgICBib29sIGhh
ZEVycm9yID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpZHggPSAwOyBpZHggPCBsZW5ndGg7
ICsraWR4KSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoID0gZGF0YVtpZHhdOworICAgIHVuc2lnbmVk
IGRlc3RpbmF0aW9uTGVuZ3RoID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8
IGlucHV0TGVuZ3RoOyArK2lkeCkgeworICAgICAgICB1bnNpZ25lZCBjaCA9IGlucHV0RGF0YUJ1
ZmZlcltpZHhdOwogICAgICAgICBpZiAoY2ggPT0gJz0nKSB7CiAgICAgICAgICAgICArK2VxdWFs
c1NpZ25Db3VudDsKICAgICAgICAgICAgIC8vIFRoZXJlIHNob3VsZCBuZXZlciBiZSBtb3JlIHRo
YW4gMiBwYWRkaW5nIGNoYXJhY3RlcnMuCi0gICAgICAgICAgICBpZiAob3B0aW9ucyAmIEJhc2U2
NFZhbGlkYXRlUGFkZGluZyAmJiBlcXVhbHNTaWduQ291bnQgPiAyKSB7Ci0gICAgICAgICAgICAg
ICAgaGFkRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
aWYgKG9wdGlvbnMuY29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5n
KSAmJiBlcXVhbHNTaWduQ291bnQgPiAyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNo
YXIgZGVjb2RlZENoYXJhY3RlciA9IGNoIDwgV1RGX0FSUkFZX0xFTkdUSChkZWNvZGVNYXApID8g
ZGVjb2RlTWFwW2NoXSA6IG5vbkFscGhhYmV0OworICAgICAgICAgICAgY2hhciBkZWNvZGVkQ2hh
cmFjdGVyID0gY2ggPCBkZWNvZGVNYXBTaXplID8gZGVjb2RlTWFwW2NoXSA6IG5vbkFscGhhYmV0
OwogICAgICAgICAgICAgaWYgKGRlY29kZWRDaGFyYWN0ZXIgIT0gbm9uQWxwaGFiZXQpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoZXF1YWxzU2lnbkNvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGhhZEVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIG91dFtvdXRMZW5ndGgrK10gPSBkZWNvZGVkQ2hhcmFj
dGVyOwotICAgICAgICAgICAgfSBlbHNlIGlmICghKG9wdGlvbnMgJiBCYXNlNjRJZ25vcmVTcGFj
ZXNBbmROZXdMaW5lcykKLSAgICAgICAgICAgICAgICB8fCAoIWlzTGF0aW4xKGNoKSB8fCAhaXNB
U0NJSVNwYWNlKGNoKSB8fCAoKG9wdGlvbnMgJiBCYXNlNjREaXNjYXJkVmVydGljYWxUYWIpICYm
IGNoID09ICdcdicpKSkgewotICAgICAgICAgICAgICAgIGhhZEVycm9yID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoZXF1YWxzU2lnbkNvdW50KQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uW2Rlc3RpbmF0aW9uTGVuZ3RoKytdID0gZGVjb2RlZENoYXJhY3RlcjsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuY29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9u
czo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpIHx8ICghaXNMYXRpbjEoY2gpIHx8ICFpc0FTQ0lJ
U3BhY2UoY2gpIHx8IChvcHRpb25zLmNvbnRhaW5zKEJhc2U2NERlY29kZU9wdGlvbnM6OkRpc2Nh
cmRWZXJ0aWNhbFRhYikgJiYgY2ggPT0gJ1x2JykpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIC8v
IE1ha2Ugc3VyZSB3ZSBzaHJpbmsgYmFjayB0aGUgVmVjdG9yIGJlZm9yZSByZXR1cm5pbmcuIG91
dExlbmd0aCBtYXkgYmUgc2hvcnRlciB0aGFuIGV4cGVjdGVkCisgICAgLy8gTWFrZSBzdXJlIHdl
IHNocmluayBiYWNrIHRoZSBWZWN0b3IgYmVmb3JlIHJldHVybmluZy4gZGVzdGluYXRpb25MZW5n
dGggbWF5IGJlIHNob3J0ZXIgdGhhbiBleHBlY3RlZAogICAgIC8vIGluIGNhc2Ugb2YgZXJyb3Ig
b3IgaW4gY2FzZSBvZiBpZ25vcmVkIHNwYWNlcy4KLSAgICBpZiAob3V0TGVuZ3RoIDwgb3V0LnNp
emUoKSkKLSAgICAgICAgb3V0LnNocmluayhvdXRMZW5ndGgpOwotCi0gICAgaWYgKGhhZEVycm9y
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGRlc3RpbmF0aW9uTGVuZ3RoIDwgZGVz
dGluYXRpb24uc2l6ZSgpKQorICAgICAgICBkZXN0aW5hdGlvbi5zaHJpbmsoZGVzdGluYXRpb25M
ZW5ndGgpOwogCi0gICAgaWYgKCFvdXRMZW5ndGgpCi0gICAgICAgIHJldHVybiAhZXF1YWxzU2ln
bkNvdW50OworICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpIHsKKyAgICAgICAgaWYgKGVxdWFs
c1NpZ25Db3VudCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJl
dHVybiBWZWN0b3I8dWludDhfdD4geyB9OworICAgIH0KIAogICAgIC8vIFRoZSBzaG91bGQgYmUg
bm8gcGFkZGluZyBpZiBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiA0LgotICAgIC8vIFdlIHVzZSAo
b3V0TGVuZ3RoICsgZXF1YWxzU2lnbkNvdW50KSBpbnN0ZWFkIG9mIGxlbmd0aCBiZWNhdXNlIHdl
IGRvbid0IHdhbnQgdG8gYWNjb3VudCBmb3IgaWdub3JlZCBjaGFyYWN0ZXJzIChpLmUuIHNwYWNl
cykuCi0gICAgaWYgKG9wdGlvbnMgJiBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgJiYgZXF1YWxzU2ln
bkNvdW50ICYmIChvdXRMZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIC8vIFdlIHVzZSAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNTaWdu
Q291bnQpIGluc3RlYWQgb2YgbGVuZ3RoIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhY2NvdW50
IGZvciBpZ25vcmVkIGNoYXJhY3RlcnMgKGkuZS4gc3BhY2VzKS4KKyAgICBpZiAob3B0aW9ucy5j
b250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpICYmIGVxdWFsc1Np
Z25Db3VudCAmJiAoZGVzdGluYXRpb25MZW5ndGggKyBlcXVhbHNTaWduQ291bnQpICUgNCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFZhbGlkIGRhdGEgaXMgKG4gKiA0
ICsgWzAsMiwzXSkgY2hhcmFjdGVycyBsb25nLgotICAgIGlmICgob3V0TGVuZ3RoICUgNCkgPT0g
MSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoZGVzdGluYXRpb25MZW5ndGggJSA0
KSA9PSAxKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIC8vIDQtYnl0
ZSB0byAzLWJ5dGUgY29udmVyc2lvbgotICAgIG91dExlbmd0aCAtPSAob3V0TGVuZ3RoICsgMykg
LyA0OwotICAgIGlmICghb3V0TGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVz
dGluYXRpb25MZW5ndGggLT0gKGRlc3RpbmF0aW9uTGVuZ3RoICsgMykgLyA0OworICAgIGlmICgh
ZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICB1
bnNpZ25lZCBzaWR4ID0gMDsKICAgICB1bnNpZ25lZCBkaWR4ID0gMDsKLSAgICBpZiAob3V0TGVu
Z3RoID4gMSkgewotICAgICAgICB3aGlsZSAoZGlkeCA8IG91dExlbmd0aCAtIDIpIHsKLSAgICAg
ICAgICAgIG91dFtkaWR4XSA9ICgoKG91dFtzaWR4XSA8PCAyKSAmIDI1NSkgfCAoKG91dFtzaWR4
ICsgMV0gPj4gNCkgJiAwMDMpKTsKLSAgICAgICAgICAgIG91dFtkaWR4ICsgMV0gPSAoKChvdXRb
c2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgob3V0W3NpZHggKyAyXSA+PiAyKSAmIDAxNykpOwot
ICAgICAgICAgICAgb3V0W2RpZHggKyAyXSA9ICgoKG91dFtzaWR4ICsgMl0gPDwgNikgJiAyNTUp
IHwgKG91dFtzaWR4ICsgM10gJiAwNzcpKTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGggPiAx
KSB7CisgICAgICAgIHdoaWxlIChkaWR4IDwgZGVzdGluYXRpb25MZW5ndGggLSAyKSB7CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbltkaWR4ICAgIF0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICAgIF0g
PDwgMikgJiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsKKyAg
ICAgICAgICAgIGRlc3RpbmF0aW9uW2RpZHggKyAxXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggKyAx
XSA8PCA0KSAmIDI1NSkgfCAoKGRlc3RpbmF0aW9uW3NpZHggKyAyXSA+PiAyKSAmIDAxNykpOwor
ICAgICAgICAgICAgZGVzdGluYXRpb25bZGlkeCArIDJdID0gKCgoZGVzdGluYXRpb25bc2lkeCAr
IDJdIDw8IDYpICYgMjU1KSB8ICAoZGVzdGluYXRpb25bc2lkeCArIDNdICAgICAgICYgMDc3KSk7
CiAgICAgICAgICAgICBzaWR4ICs9IDQ7CiAgICAgICAgICAgICBkaWR4ICs9IDM7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0W2RpZHhd
ID0gKCgob3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHggKyAxXSA+PiA0KSAmIDAw
MykpOworICAgIGlmIChkaWR4IDwgZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0
aW9uW2RpZHhdID0gKCgoZGVzdGluYXRpb25bc2lkeCAgICBdIDw8IDIpICYgMjU1KSB8ICgoZGVz
dGluYXRpb25bc2lkeCArIDFdID4+IDQpICYgMDAzKSk7CiAKLSAgICBpZiAoKytkaWR4IDwgb3V0
TGVuZ3RoKQotICAgICAgICBvdXRbZGlkeF0gPSAoKChvdXRbc2lkeCArIDFdIDw8IDQpICYgMjU1
KSB8ICgob3V0W3NpZHggKyAyXSA+PiAyKSAmIDAxNykpOworICAgIGlmICgrK2RpZHggPCBkZXN0
aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgZGVzdGluYXRpb25bZGlkeF0gPSAoKChkZXN0aW5hdGlv
bltzaWR4ICsgMV0gPDwgNCkgJiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMl0gPj4gMikg
JiAwMTcpKTsKIAotICAgIGlmIChvdXRMZW5ndGggPCBvdXQuc2l6ZSgpKQotICAgICAgICBvdXQu
c2hyaW5rKG91dExlbmd0aCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGVzdGluYXRp
b25MZW5ndGggPCBkZXN0aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNocmlu
ayhkZXN0aW5hdGlvbkxlbmd0aCk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwogfQogCi1ib29s
IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3Rv
ckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgdW5zaWduZWQg
bGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0g
ICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5n
dGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2Rl
SW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBvcHRpb25zLCBiYXNlNjRE
ZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICgh
bGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOworICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBv
cHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29kZShTdHJpbmdWaWV3IGluLCBTaWdu
ZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbnB1dCwgT3B0
aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXAp
CiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgg
fHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5j
aGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKLSAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3V0
LCBvcHRpb25zLCBiYXNlNjREZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxl
bmd0aCgpOworICAgIGlmICghbGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1
cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvcHRp
b25zLCBtYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1ib29sIGJhc2U2NERlY29kZShj
b25zdCBWZWN0b3I8Y2hhcj4mIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIg
b3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRE
ZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29k
ZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCiB7Ci0gICAgb3V0LmNsZWFy
KCk7CisgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gYmFzZTY0
RGVjb2RlSW50ZXJuYWwoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIG9wdGlvbnMsIG1hcCk7
Cit9CiAKLSAgICAvLyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdl
LCBqdXN0IHJldHVybiBub3RoaW5nLgotICAgIGlmIChpbi5zaXplKCkgPiBVSU5UX01BWCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNv
ZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlv
bnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCit7CisgICAgaWYgKGlucHV0LnNpemUo
KSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCBvcHRp
b25zLCBtYXApOworfQogCi0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihpbi5kYXRhKCkpLCBpbi5zaXplKCksIG91dCwgb3B0aW9u
cywgYmFzZTY0RGVjTWFwKTsKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2Rl
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERl
Y29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2NERlY29kZU1hcCBtYXApCit7CisgICAgcmV0dXJu
IGJhc2U2NERlY29kZUludGVybmFsKGRhdGEsIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKIH0KIAot
Ym9vbCBiYXNlNjREZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuLCBTaWduZWRP
clVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCB1bnNpZ25lZCBvcHRpb25zKQorT3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWdu
ZWQgbGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0
RGVjb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGRhdGEpLCBsZW4sIG91dCwgb3B0aW9ucywgYmFzZTY0
RGVjTWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KGRhdGEpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKLWJvb2wg
YmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVj
dG9yQWRhcHRlciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBTdHJpbmcmIGlucHV0KQogewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGluLmxlbmd0
aCgpOwotICAgIGlmICghbGVuZ3RoIHx8IGluLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFz
ZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERl
ZmF1bHQsIGJhc2U2NFVSTERlY01hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFs
KGluLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwgYmFzZTY0VVJM
RGVjTWFwKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKKyAgICBpZiAo
IWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6
OlVSTCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMx
NigpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwogfQogCi1ib29sIGJhc2U2
NFVSTERlY29kZShTdHJpbmdWaWV3IGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgb3V0KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoU3RyaW5n
VmlldyBpbnB1dCkKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbi5sZW5ndGgoKTsKLSAgICBp
ZiAoIWxlbmd0aCB8fCBpbi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKGluLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNl
NjRVUkxEZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2NFVSTERlY01hcCk7Cisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAgaWYgKCFsZW5ndGggfHwg
aW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1
dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOworICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3Ro
LCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBiYXNlNjRVUkxEZWNvZGUo
Y29uc3QgVmVjdG9yPGNoYXI+JiBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVy
IG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgaW5wdXQpCiB7Ci0gICAgb3V0LmNsZWFyKCk7CisgICAgaWYgKGlucHV0
LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOworfQog
Ci0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVz
dCByZXR1cm4gbm90aGluZy4KLSAgICBpZiAoaW4uc2l6ZSgpID4gVUlOVF9NQVgpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQpCit7CisgICAgaWYgKGlucHV0LnNpemUoKSA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2
NERlY29kZU1hcDo6VVJMKTsKK30KIAotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oaW4uZGF0YSgpKSwgaW4uc2l6ZSgpLCBvdXQs
IEJhc2U2NERlZmF1bHQsIGJhc2U2NFVSTERlY01hcCk7CitPcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgp
Cit7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGRhdGEsIGxlbmd0aCwgeyB9LCBC
YXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNo
YXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVy
IG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IGNo
YXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGRhdGEpLCBsZW4sIG91dCwgQmFz
ZTY0RGVmYXVsdCwgYmFzZTY0VVJMRGVjTWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCwgeyB9
LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDog
U291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L0Jhc2U2NC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0Jhc2U2NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxOTEgKzI3LDE0NiBAQAogCiAjcHJhZ21h
IG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLWVudW0gQmFzZTY0RW5j
b2RlUG9saWN5IHsKLSAgICBCYXNlNjREb05vdEluc2VydExGcywKLSAgICBCYXNlNjRJbnNlcnRM
RnMsCi0gICAgQmFzZTY0VVJMUG9saWN5IC8vIE5vIHBhZGRpbmcsIG5vIExGcy4KK2VudW0gY2xh
c3MgQmFzZTY0RW5jb2RlUG9saWN5IHsKKyAgICBEb05vdEluc2VydExGcywKKyAgICBJbnNlcnRM
RnMsCisgICAgVVJMIC8vIE5vIHBhZGRpbmcsIG5vIExGcy4KIH07CiAKLWVudW0gQmFzZTY0RGVj
b2RlT3B0aW9ucyB7Ci0gICAgQmFzZTY0RGVmYXVsdCA9IDAsCi0gICAgQmFzZTY0VmFsaWRhdGVQ
YWRkaW5nID0gMSA8PCAwLAotICAgIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzID0gMSA8
PCAxLAotICAgIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYiA9IDEgPDwgMiwKLX07Ci0KLWNsYXNz
IFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciB7Ci1wdWJsaWM6Ci0gICAgU2lnbmVk
T3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKFZlY3RvcjxjaGFyPiYgdmVjdG9yKQotICAgICAg
ICA6IG1faXNTaWduZWQodHJ1ZSkKLSAgICB7Ci0gICAgICAgIG1fdmVjdG9yLmMgPSAmdmVjdG9y
OwotICAgIH0KLSAgICBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIoVmVjdG9yPHVp
bnQ4X3Q+JiB2ZWN0b3IpCi0gICAgICAgIDogbV9pc1NpZ25lZChmYWxzZSkKLSAgICB7Ci0gICAg
ICAgIG1fdmVjdG9yLnUgPSAmdmVjdG9yOwotICAgIH0KLQotICAgIHVpbnQ4X3QqIGRhdGEoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1faXNTaWduZWQpCi0gICAgICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4obV92ZWN0b3IuYy0+ZGF0YSgpKTsKLSAgICAgICAgcmV0dXJu
IG1fdmVjdG9yLnUtPmRhdGEoKTsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IHNpemUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgaWYgKG1faXNTaWduZWQpCi0gICAgICAgICAgICByZXR1cm4gbV92
ZWN0b3IuYy0+c2l6ZSgpOwotICAgICAgICByZXR1cm4gbV92ZWN0b3IudS0+c2l6ZSgpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzU2lnbmVk
KSB7Ci0gICAgICAgICAgICBtX3ZlY3Rvci5jLT5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG1fdmVjdG9yLnUtPmNsZWFyKCk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgZ3JvdyhzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzU2lnbmVk
KSB7Ci0gICAgICAgICAgICBtX3ZlY3Rvci5jLT5ncm93KHNpemUpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1fdmVjdG9yLnUtPmdyb3coc2l6ZSk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgc2hyaW5rKHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgaWYgKG1f
aXNTaWduZWQpIHsKLSAgICAgICAgICAgIG1fdmVjdG9yLmMtPnNocmluayhzaXplKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX3ZlY3Rvci51LT5zaHJpbmsoc2l6
ZSk7Ci0gICAgfQotICAgIAotICAgIHVpbnQ4X3QmIG9wZXJhdG9yW10oc2l6ZV90IHBvc2l0aW9u
KSB7IHJldHVybiBkYXRhKClbcG9zaXRpb25dOyB9CitlbnVtIGNsYXNzIEJhc2U2NEVuY29kZU1h
cCB7IERlZmF1bHQsIFVSTCB9OwogCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc1NpZ25lZDsKLSAg
ICB1bmlvbiB7Ci0gICAgICAgIFZlY3RvcjxjaGFyPiogYzsKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+KiB1OwotICAgIH0gbV92ZWN0b3I7CitlbnVtIGNsYXNzIEJhc2U2NERlY29kZU9wdGlvbnMg
OiB1aW50OF90IHsKKyAgICBWYWxpZGF0ZVBhZGRpbmcgICAgICAgICA9IDEgPDwgMCwKKyAgICBJ
Z25vcmVTcGFjZXNBbmROZXdMaW5lcyA9IDEgPDwgMSwKKyAgICBEaXNjYXJkVmVydGljYWxUYWIg
ICAgICA9IDEgPDwgMiwKIH07CiAKLWNsYXNzIENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIHsKLXB1YmxpYzoKLSAgICBDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9y
QWRhcHRlcihjb25zdCBWZWN0b3I8Y2hhcj4mIHZlY3RvcikKLSAgICAgICAgOiBtX2lzU2lnbmVk
KGZhbHNlKQotICAgIHsKLSAgICAgICAgbV92ZWN0b3IuYyA9ICZ2ZWN0b3I7Ci0gICAgfQotICAg
IENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgdmVjdG9yKQotICAgICAgICA6IG1faXNTaWduZWQodHJ1ZSkKLSAgICB7Ci0gICAgICAg
IG1fdmVjdG9yLnUgPSAmdmVjdG9yOwotICAgIH0KK2VudW0gY2xhc3MgQmFzZTY0RGVjb2RlTWFw
IHsgRGVmYXVsdCwgVVJMIH07CiAKLSAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2lzU2lnbmVkKQotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fdmVjdG9yLmMtPmRhdGEoKSk7Ci0gICAgICAgIHJl
dHVybiBtX3ZlY3Rvci51LT5kYXRhKCk7Ci0gICAgfQotICAgIHNpemVfdCBzaXplKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIGlmIChtX2lzU2lnbmVkKQotICAgICAgICAgICAgcmV0dXJuIG1fdmVj
dG9yLmMtPnNpemUoKTsKLSAgICAgICAgcmV0dXJuIG1fdmVjdG9yLnUtPnNpemUoKTsKLSAgICB9
CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRMaW5lTGVuZ3RoV2hlbklu
c2VydGluZ0xGcyA9IDc2OwogCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc1NpZ25lZDsKLSAgICB1
bmlvbiB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxjaGFyPiogYzsKLSAgICAgICAgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+KiB1OwotICAgIH0gbV92ZWN0b3I7Ci19OworLy8gSWYgdGhlIGlucHV0IHN0
cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCByZXR1cm4gbm90aGluZy4KKy8vIFJh
dGhlciB0aGFuIGJlaW5nIHBlcmZlY3RseSBwcmVjaXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZh
dGl2ZS4KK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1
dEJ1ZmZlclNpemUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyA3NyAq
IDc2IC8gNCAqIDMgLSAyOworCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUo
Y29uc3Qgdm9pZCosIHVuc2lnbmVkLCBVQ2hhciosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xp
Y3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAg
PSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFz
ZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgTENoYXIqLCB1bnNpZ25lZCwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0
RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklW
QVRFIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiwgdW5z
aWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNl
cnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitWZWN0
b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1ZlY3Rvcjx1aW50
OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNv
ZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNv
ZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRF
bmNvZGVNYXA6OkRlZmF1bHQpOworCitXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NEVu
Y29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0g
QmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFz
ZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1N0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25z
dCBWZWN0b3I8dWludDhfdD4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xp
Y3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRl
ZmF1bHQpOworU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMs
IEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitTdHJpbmcgYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJh
c2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2
NEVuY29kZU1hcDo6RGVmYXVsdCk7CisKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8QmFzZTY0
RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6
RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBi
YXNlNjREZWNvZGUoU3RyaW5nVmlldywgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0g
eyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOworV1RGX0VY
UE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwg
QmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRf
UFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBWZWN0
b3I8Y2hhcj4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERl
Y29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUg
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgdWludDhfdCosIHVu
c2lnbmVkLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29k
ZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgY2hhciosIHVuc2lnbmVk
LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0sIEJhc2U2NERlY29kZU1hcCA9
IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJh
c2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVu
Y29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLXZvaWQgYmFzZTY0RW5jb2RlKENv
bnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBWZWN0b3I8Y2hhcj4mLCBCYXNl
NjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExGcyk7Ci12b2lkIGJhc2U2NEVuY29k
ZShjb25zdCBDU3RyaW5nJiwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RG9Ob3RJbnNlcnRMRnMpOwotV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRFbmNv
ZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05v
dEluc2VydExGcyk7Ci1TdHJpbmcgYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENo
YXJWZWN0b3JBZGFwdGVyLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExG
cyk7Ci1TdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xp
Y3kgPSBCYXNlNjREb05vdEluc2VydExGcyk7CitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29k
ZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCit7CisgICAgcmV0dXJuIGJhc2U2
NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7
Cit9CiAKLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcm
LCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIsIHVuc2lnbmVkIG9wdGlvbnMgPSBC
YXNlNjREZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2NERlY29kZShTdHJp
bmdWaWV3LCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIsIHVuc2lnbmVkIG9wdGlv
bnMgPSBCYXNlNjREZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2NERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIs
IHVuc2lnbmVkIG9wdGlvbnMgPSBCYXNlNjREZWZhdWx0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBi
b29sIGJhc2U2NERlY29kZShjb25zdCBjaGFyKiwgdW5zaWduZWQsIFNpZ25lZE9yVW5zaWduZWRD
aGFyVmVjdG9yQWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOworaW5s
aW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hh
cj4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFw
KQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0
LnNpemUoKSwgcG9saWN5LCBtYXApOworfQogCi1pbmxpbmUgdm9pZCBiYXNlNjRFbmNvZGUoQ29u
c3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgaW4sIFZlY3RvcjxjaGFyPiYgb3V0
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoraW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNl
NjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBiYXNlNjRFbmNvZGUoaW4uZGF0
YSgpLCBpbi5zaXplKCksIG91dCwgcG9saWN5KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9W
ZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOwogfQogCi1p
bmxpbmUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3RvcjxjaGFyPiYg
b3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoraW5saW5lIFN0cmluZyBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xp
Y3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJhc2U2NEVuY29kZShpbi5k
YXRhKCksIGluLmxlbmd0aCgpLCBvdXQsIHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7CiB9CiAK
LWlubGluZSBTdHJpbmcgYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIGluLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoraW5saW5lIFN0cmluZyBi
YXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBiYXNl
NjRFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2
NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3ksIG1hcCk7
CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcmIGluLCBCYXNl
NjRFbmNvZGVQb2xpY3kgcG9saWN5KQoraW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmlu
Zyhjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0
RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4u
bGVuZ3RoKCksIHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0
LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSwgbWFwKTsKIH0KIAorCiAvLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQogLy8gQWxsIHRoZSBzYW1lIGZ1bmN0aW9ucyBtb2RpZmll
ZCBmb3IgYmFzZTY0dXJsLCBhcyBkZWZpbmVkIGluIFJGQyA0NjQ4LgogLy8gVGhpcyBmb3JtYXQg
dXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcrJyBhbmQgJy8nIHJlc3BlY3RpdmVseS4KIC8v
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFZlY3RvcjxjaGFyPiYpOwot
dm9pZCBiYXNlNjRVUkxFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIsIFZlY3RvcjxjaGFyPiYpOwotdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYs
IFZlY3RvcjxjaGFyPiYpOworVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9y
KGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7CitWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2Rl
VG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CitWZWN0b3I8dWludDhfdD4gYmFzZTY0
VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+Jik7CitWZWN0b3I8dWludDhfdD4g
YmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYpOworCitTdHJpbmcgYmFzZTY0
VVJMRW5jb2RlVG9TdHJpbmcoY29uc3Qgdm9pZCosIHVuc2lnbmVkKTsKK1N0cmluZyBiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKK1N0cmluZyBiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mKTsKK1N0cmluZyBiYXNlNjRVUkxF
bmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJik7CisKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmKTsKK1dU
Rl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShTdHJpbmdWaWV3KTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKK1dURl9FWFBPUlRf
UFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBW
ZWN0b3I8Y2hhcj4mKTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGJhc2U2NFVSTERlY29kZShjb25zdCB1aW50OF90KiwgdW5zaWduZWQpOworV1RGX0VYUE9S
VF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0
IGNoYXIqLCB1bnNpZ25lZCk7CisKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5j
b2RlVG9WZWN0b3IoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBy
ZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQsIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9s
aWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKK30KKworaW5saW5lIFZlY3Rvcjx1aW50
OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0
KQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0
LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsK
K30KIAotV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9p
ZCosIHVuc2lnbmVkKTsKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUoQ29uc3RTaWduZWRPclVuc2ln
bmVkQ2hhclZlY3RvckFkYXB0ZXIpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3Ry
aW5nJik7CitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNv
bnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQpCit7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVj
dG9yKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwg
QmFzZTY0RW5jb2RlTWFwOjpVUkwpOworfQogCi1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNl
NjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyKTsKLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2NFVSTERlY29kZShTdHJpbmdWaWV3
LCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYsIFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlcik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxE
ZWNvZGUoY29uc3QgY2hhciosIHVuc2lnbmVkLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFk
YXB0ZXIpOworaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBDU3RyaW5nJiBpbnB1dCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3Io
aW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJh
c2U2NEVuY29kZU1hcDo6VVJMKTsKK30KIAotaW5saW5lIHZvaWQgYmFzZTY0VVJMRW5jb2RlKENv
bnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91
dCkKK2lubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3Qgdm9pZCogaW5w
dXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBiYXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgpLCBp
bi5zaXplKCksIG91dCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LCBs
ZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9
CiAKLWlubGluZSB2b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5nJiBpbiwgVmVjdG9y
PGNoYXI+JiBvdXQpCitpbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCiB7Ci0gICAgYmFzZTY0VVJMRW5jb2RlKGluLmRhdGEo
KSwgaW4ubGVuZ3RoKCksIG91dCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0
RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShDb25z
dFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbikKK2lubGluZSBTdHJpbmcgYmFz
ZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKIHsKLSAgICBy
ZXR1cm4gYmFzZTY0VVJMRW5jb2RlKGluLmRhdGEoKSwgaW4uc2l6ZSgpKTsKKyAgICByZXR1cm4g
YmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVu
Y29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJp
bmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGluKQoraW5saW5lIFN0cmluZyBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiBpbnB1dCkKIHsKLSAgICByZXR1cm4g
YmFzZTY0VVJMRW5jb2RlKGluLmRhdGEoKSwgaW4ubGVuZ3RoKCkpOworICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNv
ZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNCYXNlNjRPckJhc2U2NFVS
TENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCkBAIC0yMTksMTUgKzE3NCwxMTggQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogICAgIHJldHVybiBpc0FTQ0lJQWxw
aGFudW1lcmljKGMpIHx8IGMgPT0gJysnIHx8IGMgPT0gJy8nIHx8IGMgPT0gJy0nIHx8IGMgPT0g
J18nOwogfQogCitpbmxpbmUgdW5zaWduZWQgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUodW5z
aWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCit7CisgICAgaWYg
KCFpbnB1dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaW5wdXRMZW5ndGgg
PiBtYXhpbXVtQmFzZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBhdXRvIGJhc2VQYWRkZWRFbmNvZGVkU2l6ZSA9IFsmXSB7CisgICAgICAgIHJldHVy
biAoKGlucHV0TGVuZ3RoICsgMikgLyAzKSAqIDQ7CisgICAgfTsKKworICAgIGF1dG8gYmFzZVVu
cGFkZGVkRW5jb2RlZFNpemUgPSBbJl0geworICAgICAgICByZXR1cm4gKChpbnB1dExlbmd0aCAq
IDQpICsgMikgLyAzOworICAgIH07CisKKyAgICBzd2l0Y2ggKHBvbGljeSkgeworICAgIGNhc2Ug
QmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGczoKKyAgICAgICAgcmV0dXJuIGJhc2VQ
YWRkZWRFbmNvZGVkU2l6ZSgpOworCisgICAgY2FzZSBCYXNlNjRFbmNvZGVQb2xpY3k6Okluc2Vy
dExGczogeworICAgICAgICBhdXRvIHJlc3VsdCA9IGJhc2VQYWRkZWRFbmNvZGVkU2l6ZSgpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0ICsgKChyZXN1bHQgLSAxKSAvIG1heGltdW1CYXNlNjRMaW5l
TGVuZ3RoV2hlbkluc2VydGluZ0xGcyk7CisgICAgfQorCisgICAgY2FzZSBCYXNlNjRFbmNvZGVQ
b2xpY3k6OlVSTDoKKyAgICAgICAgcmV0dXJuIGJhc2VVbnBhZGRlZEVuY29kZWRTaXplKCk7Cisg
ICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0
cnVjdCBCYXNlNjRTcGVjaWZpY2F0aW9uIHsKKyAgICBjb25zdCB2b2lkKiBpbnB1dERhdGE7Cisg
ICAgdW5zaWduZWQgaW5wdXRMZW5ndGg7CisgICAgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeTsK
KyAgICBCYXNlNjRFbmNvZGVNYXAgbWFwOworfTsKKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRp
b24gYmFzZTY0RW5jb2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVu
Z3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05v
dEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwIG1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVs
dCkKK3sKKyAgICByZXR1cm4geyBpbnB1dERhdGEsIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1hcCB9
OworfQorCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRF
bmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGVk
KGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBwb2xpY3kpOworfQorCitpbmxpbmUgQmFzZTY0
U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNvZGVkKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0
TEZzKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6
ZSgpLCBwb2xpY3kpOworfQorCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRFbmNv
ZGVkKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5j
b2RlZChpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3kpOworfQorCitpbmxpbmUg
QmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0
YSwgdW5zaWduZWQgaW5wdXRMZW5ndGgpCit7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5w
dXREYXRhLCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29k
ZU1hcDo6VVJMKTsKK30KKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5j
b2RlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQoreworICAgIHJldHVybiBiYXNlNjRF
bmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVS
TCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworfQorCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQpCit7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29k
ZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7Cit9CisKK2lubGluZSBCYXNlNjRT
cGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQpCit7Cisg
ICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgQmFz
ZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKK30KKwordGVtcGxh
dGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPiB7CitwdWJs
aWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgQmFzZTY0U3BlY2lmaWNhdGlvbiYgYmFz
ZTY0KQorICAgICAgICA6IG1fYmFzZTY0IHsgYmFzZTY0IH0KKyAgICAgICAgLCBtX2VuY29kZWRM
ZW5ndGggeyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShiYXNlNjQuaW5wdXRMZW5ndGgsIGJh
c2U2NC5wb2xpY3kpIH0KKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9lbmNvZGVkTGVuZ3RoOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2
b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24pIGNvbnN0CisgICAgeworICAg
ICAgICBiYXNlNjRFbmNvZGUobV9iYXNlNjQuaW5wdXREYXRhLCBtX2Jhc2U2NC5pbnB1dExlbmd0
aCwgZGVzdGluYXRpb24sIG1fZW5jb2RlZExlbmd0aCwgbV9iYXNlNjQucG9saWN5LCBtX2Jhc2U2
NC5tYXApOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCYXNlNjRTcGVjaWZpY2F0aW9uIG1fYmFz
ZTY0OworICAgIHVuc2lnbmVkIG1fZW5jb2RlZExlbmd0aDsKK307CisKIH0gLy8gbmFtZXNwYWNl
IFdURgogCit1c2luZyBXVEY6OkJhc2U2NERlY29kZU9wdGlvbnM7CiB1c2luZyBXVEY6OkJhc2U2
NEVuY29kZVBvbGljeTsKLXVzaW5nIFdURjo6QmFzZTY0RG9Ob3RJbnNlcnRMRnM7Ci11c2luZyBX
VEY6OkJhc2U2NEluc2VydExGczsKLXVzaW5nIFdURjo6QmFzZTY0VmFsaWRhdGVQYWRkaW5nOwot
dXNpbmcgV1RGOjpCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lczsKLXVzaW5nIFdURjo6QmFz
ZTY0RGlzY2FyZFZlcnRpY2FsVGFiOwotdXNpbmcgV1RGOjpiYXNlNjRFbmNvZGU7CiB1c2luZyBX
VEY6OmJhc2U2NERlY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0RW5jb2RlVG9TdHJpbmc7Cit1c2lu
ZyBXVEY6OmJhc2U2NEVuY29kZVRvVmVjdG9yOwordXNpbmcgV1RGOjpiYXNlNjRFbmNvZGVkOwor
dXNpbmcgV1RGOjpiYXNlNjRVUkxEZWNvZGU7CiB1c2luZyBXVEY6OmJhc2U2NFVSTERlY29kZTsK
K3VzaW5nIFdURjo6YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmc7Cit1c2luZyBXVEY6OmJhc2U2NFVS
TEVuY29kZVRvVmVjdG9yOwordXNpbmcgV1RGOjpiYXNlNjRVUkxFbmNvZGVkOwogdXNpbmcgV1RG
Ojppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
Mjc3NzE0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjk0IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4K
KworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUg
bW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgLSBVcGRhdGVzIHRvIHVzZSBuZXcgc2lnbmF0dXJlcyBmb3IgYmFz
ZTY0IGVuY29kaW5nL2RlY29kaW5nIGluY2x1ZGluZworICAgICAgICAgIHV0aWxpemluZyB0aGUg
c3RyaW5nIHR5cGUgYWRhcHRvciBhbmQgbWFrZVN0cmluZy4KKyAgICAgICAgLSBSZXBsYWNlIG91
dCBwYXJhbWV0ZXIgYmFzZWQgZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpIHdpdGggCisg
ICAgICAgICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVy
S2V5KCkuCisgICAgICAgIC0gVXBkYXRlIHN5bmNocm9ub3VzIGxvYWRpbmcgY29kZSBwYXRoIHRv
IHVzZSB1aW50OF90KiBjb25zaXN0ZW50bHkgZm9yCisgICAgICAgICAgZGF0YSBidWZmZXIgcmVw
cmVzZW50YXRpb24uCisgICAgICAgIC0gUmVwbGFjZSBvdXQgcGFyYW1ldGVycyBpbiBxdW90ZWRQ
cmludGFibGVFbmNvZGUvcXVvdGVkUHJpbnRhYmxlRGVjb2RlCisgICAgICAgICAgd2l0aCBPcHRp
b25hbC4KKworICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3Ry
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0S2V5SURzS2V5aWRzKToKKyAgICAgICAg
VXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlLgorCisgICAgICAgIChXZWJDb3JlOjpz
YW5pdGl6ZUtleWlkcyk6IAorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJh
c2U2NFVSTEVuY29kZWQoKSkKKworICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVn
YWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1T
ZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZSk6IAorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNl
NjREZWNvZGUoKS4KKworICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OmpzVmFsdWVXaXRoRGF0YUluQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGVtSW5Db250ZXh0
KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkp
LiBSZXBsYWNlIHN0cmluZyBjb25jYXRlbnRhdGlvbgorICAgICAgICB1c2luZyBvcGVyYXRvcisg
d2l0aCBtYWtlU3RyaW5nKCkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRp
Y2F0b3JDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdXRoZW50aWNhdG9yQ29v
cmRpbmF0b3JJbnRlcm5hbDo6cHJvZHVjZUNsaWVudERhdGFKc29uKToKKyAgICAgICAgVXBkYXRl
IHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCkpLgorCisgICAgICAgICog
TW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlB1YmxpY0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwpOgorICAgICAgICBV
cGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoKSkuCisKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdlbmVyYXRlU2VjV2ViU29ja2V0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQpOgorICAgICAgICBV
cGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoKSkuCisKKyAgICAg
ICAgKiBjcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaDoKKyAgICAgICAgQ2hhbmdlIGZy
b20gb3V0cGFyYW1ldGVyIGJhc2VkIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKSB0byBu
ZXcKKyAgICAgICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFz
dGVyS2V5KCkuCisKKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0NyeXB0b0tleUVDR0NyeXB0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVu
dHMgY29uc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NFVS
TEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9L
ZXlXcmFwR0NyeXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0
ZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6
IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJL
ZXkoKSBzaWduYXR1cmUuCisKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjppbXBvcnRKd2spOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjpleHBvcnRKd2sgY29uc3QpOgorICAgICAgICBVcGRhdGUg
dG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQo
KSkuCisgICAgICAgIAorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUVDOjppbXBvcnRKd2spOgorICAgICAgICBVcGRhdGUg
dG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUuCisKKyAgICAgICAgKiBjcnlwdG8va2V5cy9Dcnlw
dG9LZXlITUFDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmltcG9ydEp3
ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjpleHBvcnRKd2sgY29uc3QpOgor
ICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBtYWtlU3RyaW5nKGJh
c2U2NFVSTEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlSU0Eu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjppbXBvcnRKd2spOgorICAgICAg
ICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpleHBvcnRKd2sgY29uc3QpOgorICAgICAgICBVcGRh
dGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29k
ZWQoKSkuCisKKyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVudHMgY29uc3Qp
OgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQo
KSkuCisKKyAgICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZE1hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5
cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0
ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBkZWZhdWx0V2ViQ3J5cHRv
TWFzdGVyS2V5KCkgc2lnbmF0dXJlLgorCisgICAgICAgICogY3J5cHRvL29wZW5zc2wvU2VyaWFs
aXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSk6IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IGRlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkoKSBzaWduYXR1cmUuCisKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFk
ZXJMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcjo6Y29udmVy
dFRvRGF0YVVSTCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0
RW5jb2RlZCgpKS4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0OjpjcmVhdGVEaWdlc3QpOgorICAgICAg
ICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRlKToKKyAgICAgICAgVXBk
YXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlIC8gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNv
ZGVkKCkpLgorCisgICAgICAgICogaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGE6OmRl
Y29kZURhdGFUb0NvbnRlbnQpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5n
KGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDb250ZW50U2VjdXJpdHlQ
b2xpY3lTSEEyNTZIYXNoKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2Rl
IC8gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yOjpidWlsZFdlYlNvY2tldE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
TmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJlc3BvbnNl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0UmVx
dWVzdFdpdGhSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdl
bnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJh
c2U2NERlY29kZSAvIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUGFnZUFnZW50OjphcmNoaXZlKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90PiBidWZmZXIg
dG8gbWF0Y2ggbmV3IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkKKyAgICAgICAgc2lnbmF0dXJl
LgorCisgICAgICAgICogbG9hZGVyL0xvYWRlclN0cmF0ZWd5Lmg6CisgICAgICAgIFN3aXRjaCB0
byB1c2luZyBWZWN0b3I8dWludDhfdD4gZm9yIHRoZSBkYXRhIGJ1ZmZlci4KKworICAgICAgICAq
IGxvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6RXBoZW1lcmFsU291cmNlTm9uY2U6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUuCisKKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCk6CisgICAgICAgIFVwZGF0
ZSB0byB1c2UgbmV3IGJhc2U2NERlY29kZS4KKworICAgICAgICAqIGxvYWRlci9hcmNoaXZlL21o
dG1sL01IVE1MQXJjaGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSFRNTEFyY2hpdmU6Omdl
bmVyYXRlTUhUTUxEYXRhKToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIG5ldyBiYXNlNjRFbmNv
ZGUgYW5kIG5ldyBxdW90ZWRQcmludGFibGVFbmNvZGUuCisKKyAgICAgICAgKiBsb2FkZXIvYXJj
aGl2ZS9taHRtbC9NSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSFRNTFBhcnNl
cjo6cGFyc2VOZXh0UGFydCk6CisgICAgICAgIFN3aXRjaCB0byB1c2luZyBuZXcgYmFzZTY0RGVj
b2RlIGFuZCBuZXcgcXVvdGVkUHJpbnRhYmxlRGVjb2RlLgorCisgICAgICAgICogbG9hZGVyL2Nv
Y29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJs
ZVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxj
dWxhdGVBbmRVcGRhdGVTb3VyY2VTZWNyZXRUb2tlbik6CisgICAgICAgIFVwZGF0ZSB0byB1c2Ug
bmV3IGJhc2U2NFVSTERlY29kZSAvIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgpKS4KKwor
ICAgICAgICAqIHBhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2U2NFV0aWxpdGllczo6YnRvYSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlNjRVdGlsaXRpZXM6
OmF0b2IpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjREZWNvZGUgLyBtYWtlU3Ry
aW5nKGJhc2U2NEVuY29kZWQoKSkuCisgICAgCisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAg
ICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlLgorCisgICAgICAgICogcGxhdGZv
cm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6YXBw
ZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgQWRkIG92
ZXJsb2FkIGZvciBhcHBlbmQgd2hpY2ggYWxsb3dzIHBhc3NpbmcgaW4gYSB1aW50OF90Ki4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGljZW5zZUZvcm1hdCk6CisgICAgICAgIChXZWJD
b3JlOjpleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpl
eHRyYWN0S2V5SWRGcm9tV2ViTUluaXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3Rh
bmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6CisgICAgICAgIFVwZGF0ZSB0
byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZSAvIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgp
KS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxh
eVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAg
ICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjREZWNvZGUuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5
U3RyZWFtaW5nQVZGT2JqQzo6cmVxdWVzdExpY2Vuc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RN
SW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZG
T2JqQzo6ZGlkUHJvdmlkZVJlcXVlc3RzKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFz
ZTY0RGVjb2RlIC8gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6Cisg
ICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3
IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZVVuaXF1ZUZvbnROYW1lKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmlu
ZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVV
bmlxdWVGb250TmFtZSk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IG1ha2VTdHJpbmcoYmFz
ZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJp
bmcpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQo
KSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bG9hZEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAg
ICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlciB0byBtYXRjaCBuZXcgbG9h
ZFJlc291cmNlU3luY2hyb25vdXNseQorICAgICAgICBzaWduYXR1cmUuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JS
ZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIFN3aXRj
aCB0byB1c2luZyBWZWN0b3I8dWludDhfdD4gYnVmZmVyIHRvIG1hdGNoIG5ldyBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5CisgICAgICAgIHNpZ25hdHVyZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxCYXNlOjpzZXJp
YWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyIGNvbnN0KToKKyAgICAgICAgQWRk
IGhlbHBlciB0byBjb25zdHJ1Y3QgQmFzaWMgYXV0aCBoZWFkZXIgdG8gcmVwbGFjZSBkdXBsaWNh
dGVkIGxvZ2ljIGluCisgICAgICAgIGNhbGwgc2l0ZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNv
ZGVyOjpkZWNvZGVCYXNlNjQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRl
Y29kZUVzY2FwZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRlY29kZVN5
bmNocm9ub3VzbHkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIu
aDoKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlLgorCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9y
PHVpbnQ4X3Q+IGZvciB0aGUgZGF0YSBidWZmZXIgaW4gdGhlIHN5bmNocm9ub3VzIGxvYWQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5o
OgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlciB0byBtYXRj
aCBuZXcgbG9hZFJlc291cmNlU3luY2hyb25vdXNseQorICAgICAgICBzaWduYXR1cmUuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIpOgorICAgICAgICBV
c2UgbmV3IHNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSBoZWxwZXIu
CisKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkpOgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+
IGZvciB0aGUgZGF0YSBidWZmZXIgaW4gdGhlIHN5bmNocm9ub3VzIGxvYWQuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwpOgor
ICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGZvciB0aGUgZGF0YSBidWZm
ZXIgaW4gdGhlIHN5bmNocm9ub3VzIGxvYWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5QmFzaWNB
dXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAgVXNlIG5ldyBzZXJpYWxpemF0aW9uRm9yQmFz
aWNBdXRob3JpemF0aW9uSGVhZGVyKCkgaGVscGVyLgorCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAg
U3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90PiBmb3IgdGhlIGRhdGEgYnVmZmVyIGluIHRo
ZSBzeW5jaHJvbm91cyBsb2FkLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6
cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgU3dpdGNoIHRvIHVz
aW5nIFZlY3Rvcjx1aW50OF90PiBmb3IgdGhlIGRhdGEgYnVmZmVyIGluIHRoZSBzeW5jaHJvbm91
cyBsb2FkLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vz
c2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIb3N0VExTQ2VydGlmaWNhdGVTZXQ6OmNvbXB1
dGVDZXJ0aWZpY2F0ZUhhc2gpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5n
KGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2Fw
ZVNlcXVlbmNlcy5oOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2Vz
QXNEYXRhKToKKyAgICAgICAgU3dpdGNoIHRvIHJldHVybmluZyBWZWN0b3I8dWludDhfdD4uCisK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Omxlbmd0
aE9mTGluZUVuZGluZ0F0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6cXVvdGVkUHJpbnRhYmxl
RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnF1b3RlZFByaW50YWJsZURlY29kZSk6CisgICAg
ICAgIFJlcGxhY2UgdXNlcyBvZiBWZWN0b3I8Y2hhcj4gd2l0aCBWZWN0b3I8dWludDhfdD4gYW5k
IHRoZSBvdXQgcGFyYW1ldGVycworICAgICAgICB3aXRoIE9wdGlvbmFsIHJldHVybiB2YWx1ZXMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9yV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAg
IFVwZGF0ZSB0byB1c2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAg
ICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2ggY29uc3QpOgorICAgICAgICBVcGRh
dGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoKSkuCisKIDIwMjEtMDUt
MTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgV1RGOjpM
b2NrZXIgZm9yIGxvY2tpbmcgQmFzZUF1ZGlvQ29udGV4dCdzIGdyYXBoIGxvY2sKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0
RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODAsMTUgKzgwLDE0IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZl
cj4KICAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IFZlY3RvcjxjaGFyPiBrZXlJRERhdGE7Ci0gICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNv
ZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pKQorICAgICAgICBhdXRvIGtleUlERGF0YSA9IGJhc2U2
NFVSTERlY29kZShrZXlJRCk7CisgICAgICAgIGlmICgha2V5SUREYXRhKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgaWYgKGtleUlERGF0YS5zaXplKCkgPCBrS2V5SWRzTWluS2V5
SWRTaXplSW5CeXRlcyB8fCBrZXlJRERhdGEuc2l6ZSgpID4ga0tleUlkc01heEtleUlkU2l6ZUlu
Qnl0ZXMpCisgICAgICAgIGlmIChrZXlJRERhdGEtPnNpemUoKSA8IGtLZXlJZHNNaW5LZXlJZFNp
emVJbkJ5dGVzIHx8IGtleUlERGF0YS0+c2l6ZSgpID4ga0tleUlkc01heEtleUlkU2l6ZUluQnl0
ZXMpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIFJlZjxTaGFy
ZWRCdWZmZXI+IGtleUlEQnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlJ
RERhdGEpKTsKLSAgICAgICAga2V5SURzLmFwcGVuZChXVEZNb3ZlKGtleUlEQnVmZmVyKSk7Cisg
ICAgICAgIGtleUlEcy5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqa2V5SURE
YXRhKSkpOwogICAgIH0KIAogICAgIHJldHVybiBrZXlJRHM7CkBAIC0xMDUsNyArMTA0LDcgQEAg
c3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNhbml0aXplS2V5aQogICAgIGF1dG8gb2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGtpZHNBcnJheSA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IGtleUlEQnVmZmVyLnZhbHVl
KCkpCi0gICAgICAgIGtpZHNBcnJheS0+cHVzaFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShi
dWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpKTsKKyAgICAgICAga2lkc0FycmF5LT5wdXNo
U3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNp
emUoKSkpOwogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtpZHNBcnJheSkp
OwogCiAgICAgQ1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVn
YWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1l
ZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjksMTMgKzE2OSwxMyBAQCBib29sIENETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKFVpbnQ4
QXJyCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiBrZXlEYXRhOwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNv
ZGUocmF3S2V5RGF0YSwga2V5RGF0YSkgfHwga2V5RGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIGF1dG8ga2V5RGF0YSA9IGJhc2U2NERlY29kZShyYXdLZXlEYXRhKTsKKyAgICAgICAgICAg
IGlmICgha2V5RGF0YSB8fCBrZXlEYXRhLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBM
T0coTWVkaWEsICJDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZSglcCkgLSBmYWlsZWQ6IHVuYWJs
ZSB0byBiYXNlNjQgZGVjb2RlIGtleSIsIHRoaXMpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX2NhY2hlZEtleXMuc2V0KGtleUlkLCBX
VEZNb3ZlKGtleURhdGEpKTsKKyAgICAgICAgICAgIG1fY2FjaGVkS2V5cy5zZXQoa2V5SWQsIFdU
Rk1vdmUoKmtleURhdGEpKTsKICAgICAgICAgICAgIGZvdW5kVmFsaWRLZXkgPSB0cnVlOwogICAg
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQzLDE0ICsyNDMsMTIgQEAgdm9pZCBRdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudDo6cG9zdEV2ZQogCiBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdp
dGhEYXRhSW5Db250ZXh0KE5TRGF0YSAqZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgSlND
b250ZXh0ICpjb250ZXh0KQogewotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJh
c2U2NEVuY29kZShbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0sIGJhc2U2NERhdGEpOwotCisg
ICAgLy8gRklYTUU6IEFkZCBtYWtlQ0ZTdHJpbmcvbWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVj
ZXNzYXJ5IFN0cmluZyBhbGxvY2F0aW9uLgogICAgIFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFt
aW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIGRhdGE2NCA9ICJkYXRhOiIgKyBtaW1lVHlwZSAr
ICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAgICAgICBkYXRhNjQgPSBtYWtlU3RyaW5nKCJk
YXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwg
W2RhdGEgbGVuZ3RoXSkpOwogICAgIGVsc2UKLSAgICAgICAgZGF0YTY0ID0gImRhdGE6dGV4dC9w
bGFpbjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmco
ImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbZGF0YSBieXRlc10sIFtk
YXRhIGxlbmd0aF0pKTsKIAogICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6KGlk
KWRhdGE2NC5jcmVhdGVDRlN0cmluZygpLmdldCgpIGluQ29udGV4dDpjb250ZXh0XTsKIH0KQEAg
LTM0Miw5ICszNDAsNyBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRl
CiAgICAgICAgIGlkIHZhbHVlID0gaXRlbS52YWx1ZTsKICAgICAgICAgTlNTdHJpbmcgKm1pbWVU
eXBlID0gW1tpdGVtIGV4dHJhQXR0cmlidXRlc10gb2JqZWN0Rm9yS2V5OkAiTUlNRXR5cGUiXTsK
ICAgICAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXSAmJiBtaW1l
VHlwZSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgICAgICAg
ICBiYXNlNjRFbmNvZGUoW3ZhbHVlIGJ5dGVzXSwgW3ZhbHVlIGxlbmd0aF0sIGJhc2U2NERhdGEp
OwotICAgICAgICAgICAgU3RyaW5nIGRhdGE2NCA9ICJkYXRhOiIgKyBTdHJpbmcobWltZVR5cGUp
ICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1h
a2VTdHJpbmcoImRhdGE6IiwgU3RyaW5nKG1pbWVUeXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5j
b2RlZChbdmFsdWUgYnl0ZXNdLCBbdmFsdWUgbGVuZ3RoXSkpOwogICAgICAgICAgICAgW2RpY3Rp
b25hcnkgc2V0T2JqZWN0OihfX2JyaWRnZSBOU1N0cmluZyAqKWRhdGE2NC5jcmVhdGVDRlN0cmlu
ZygpLmdldCgpIGZvcktleTpAInZhbHVlIl07CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
W2RpY3Rpb25hcnkgc2V0T2JqZWN0OnZhbHVlIGZvcktleTpAInZhbHVlIl07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNh
dG9yQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDcgKzY0LDcgQEAgc3RhdGljIFJlZjxBcnJheUJ1ZmZlcj4gcHJvZHVjZUNsaWVu
dERhdAogICAgICAgICBvYmplY3QtPnNldFN0cmluZygidHlwZSJfcywgIndlYmF1dGhuLmdldCJf
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBvYmplY3QtPnNldFN0cmluZygiY2hhbGxl
bmdlIl9zLCBXVEY6OmJhc2U2NFVSTEVuY29kZShjaGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVuZ2Uu
bGVuZ3RoKCkpKTsKKyAgICBvYmplY3QtPnNldFN0cmluZygiY2hhbGxlbmdlIl9zLCBiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZyhjaGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVuZ2UubGVuZ3RoKCkpKTsK
ICAgICBvYmplY3QtPnNldFN0cmluZygib3JpZ2luIl9zLCBvcmlnaW4udG9SYXdTdHJpbmcoKSk7
CiAKICAgICBhdXRvIHV0ZjhKU09OU3RyaW5nID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRl
bnRpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
UHVibGljS2V5Q3JlZGVudGlhbC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDcgKzU0LDcgQEAgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0
cyBQdQogfQogCiBQdWJsaWNLZXlDcmVkZW50aWFsOjpQdWJsaWNLZXlDcmVkZW50aWFsKFJlZjxB
dXRoZW50aWNhdG9yUmVzcG9uc2U+JiYgcmVzcG9uc2UpCi0gICAgOiBCYXNpY0NyZWRlbnRpYWwo
V1RGOjpiYXNlNjRVUkxFbmNvZGUocmVzcG9uc2UtPnJhd0lkKCktPmRhdGEoKSwgcmVzcG9uc2Ut
PnJhd0lkKCktPmJ5dGVMZW5ndGgoKSksIFR5cGU6OlB1YmxpY0tleSwgRGlzY292ZXJ5OjpSZW1v
dGUpCisgICAgOiBCYXNpY0NyZWRlbnRpYWwoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzcG9u
c2UtPnJhd0lkKCktPmRhdGEoKSwgcmVzcG9uc2UtPnJhd0lkKCktPmJ5dGVMZW5ndGgoKSksIFR5
cGU6OlB1YmxpY0tleSwgRGlzY292ZXJ5OjpSZW1vdGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1v
dmUocmVzcG9uc2UpKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hh
a2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyBTdHJpbmcgZ2Vu
ZXJhdGVTZWNXZWJTb2NrZXRLZXkoKQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uY2VTaXpl
ID0gMTY7CiAgICAgdW5zaWduZWQgY2hhciBrZXlbbm9uY2VTaXplXTsKICAgICBjcnlwdG9ncmFw
aGljYWxseVJhbmRvbVZhbHVlcyhrZXksIG5vbmNlU2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVu
Y29kZShrZXksIG5vbmNlU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtl
eSwgbm9uY2VTaXplKTsKIH0KIAogU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0
ZWRXZWJTb2NrZXRBY2NlcHQoY29uc3QgU3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCkBAIC0xMTAs
NyArMTEwLDcgQEAgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZQogICAg
IHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4od2ViU29ja2V0
S2V5R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSk7CiAgICAgU0hBMTo6RGlnZXN0IGhh
c2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
KGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
U3RyaW5nKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7CiB9CiAKIFdlYlNvY2tldEhhbmRz
aGFrZTo6V2ViU29ja2V0SGFuZHNoYWtlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBy
b3RvY29sLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBjbGllbnRPcmln
aW4sIGJvb2wgYWxsb3dDb29raWVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL1Nlcmlh
bGl6ZWRDcnlwdG9LZXlXcmFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRv
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIG9mIHByb3RlY3Rpb24gaXMg
bm90IHJlcXVpcmVkIGJ5IHRoZSBzcGVjIGFzIG9mIDExIERlY2VtYmVyIDIwMTQ6CiAvLyBodHRw
czovL3d3dy53My5vcmcvVFIvV2ViQ3J5cHRvQVBJLyNzZWN1cml0eS1kZXZlbG9wZXJzCiAKLVdF
QkNPUkVfRVhQT1JUIGJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShWZWN0b3I8dWlu
dDhfdD4mKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVs
dFdlYkNyeXB0b01hc3RlcktleSgpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCBkZWxldGVEZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CiAKIFdFQkNPUkVfRVhQT1JUIGJvb2wgd3JhcFNlcmlhbGl6
ZWRDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXksIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5LCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tleUVDR0NyeXB0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tleUVDR0NyeXB0LmNwcAkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlF
Q0dDcnlwdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMywxMSArNTIzLDExIEBAIGJvb2wgQ3J5
cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KICAgICAgICAgaWYgKHEgJiYgcS0+c2l6
ZSgpID09IGN1cnZlVW5jb21wcmVzc2VkUG9pbnRTaXplKG1fY3VydmUpKSB7CiAgICAgICAgICAg
ICBWZWN0b3I8dWludDhfdD4gYTsKICAgICAgICAgICAgIGEuYXBwZW5kKHEtPmRhdGEoKSArIDEs
IHVuY29tcHJlc3NlZEZpZWxkRWxlbWVudFNpemUpOwotICAgICAgICAgICAgandrLnggPSBiYXNl
NjRVUkxFbmNvZGUoYSk7CisgICAgICAgICAgICBqd2sueCA9IGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKGEpOwogCiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYjsKICAgICAgICAgICAgIGIu
YXBwZW5kKHEtPmRhdGEoKSArIDEgKyB1bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplLCB1bmNv
bXByZXNzZWRGaWVsZEVsZW1lbnRTaXplKTsKLSAgICAgICAgICAgIGp3ay55ID0gYmFzZTY0VVJM
RW5jb2RlKGIpOworICAgICAgICAgICAgandrLnkgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhi
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTQzLDcgKzU0Myw3IEBAIGJvb2wgQ3J5cHRvS2V5
RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KICAgICAgICAgICAgICAgICAgICAgKmQgPSBXVEZN
b3ZlKHBhZGRlZERhdGEpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGp3
ay5kID0gYmFzZTY0VVJMRW5jb2RlKCpkKTsKKyAgICAgICAgICAgICAgICBqd2suZCA9IGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKCpkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvU2VyaWFsaXplZENyeXB0b0tleVdy
YXBHQ3J5cHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQv
U2VyaWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTUgKzI5LDE0IEBACiAjaWYgRU5BQkxFKFdFQl9D
UllQVE8pCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleShWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1
aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICBVTlVTRURfUEFSQU0obWFzdGVyS2V5KTsKLQotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiAvLyBJbml0aWFsbHkgdGhlc2UgaGVscGVy
IGZ1bmN0aW9ucyB3ZXJlIGludGVuZGVkIHRvIHBlcmZvcm0gS0VLIHdyYXBwaW5nIGFuZCB1bndy
YXBwaW5nLApJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMu
Y3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9Dcnlw
dG9LZXlBRVMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMCArODgsMTAgQEAgUmVmUHRyPENy
eXB0b0tleUFFUz4gQ3J5cHRvS2V5QUVTOjppbXBvcgogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBpZiAoa2V5RGF0YS5rLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBWZWN0b3I8dWludDhfdD4gb2N0ZXRTZXF1ZW5jZTsKLSAgICBpZiAoIWJhc2U2NFVSTERlY29k
ZShrZXlEYXRhLmssIG9jdGV0U2VxdWVuY2UpKQorICAgIGF1dG8gb2N0ZXRTZXF1ZW5jZSA9IGJh
c2U2NFVSTERlY29kZShrZXlEYXRhLmspOworICAgIGlmICghb2N0ZXRTZXF1ZW5jZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFjYWxsYmFjayhvY3RldFNlcXVlbmNlLnNpemUo
KSAqIDgsIGtleURhdGEuYWxnKSkKKyAgICBpZiAoIWNhbGxiYWNrKG9jdGV0U2VxdWVuY2UtPnNp
emUoKSAqIDgsIGtleURhdGEuYWxnKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYg
KHVzYWdlcyAmJiAha2V5RGF0YS51c2UuaXNOdWxsKCkgJiYga2V5RGF0YS51c2UgIT0gImVuYyIp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTAwLDE0ICsxMDAsMTQgQEAgUmVmUHRyPENy
eXB0b0tleUFFUz4gQ3J5cHRvS2V5QUVTOjppbXBvcgogICAgIGlmIChrZXlEYXRhLmV4dCAmJiAh
a2V5RGF0YS5leHQudmFsdWUoKSAmJiBleHRyYWN0YWJsZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyeXB0b0tleUFFUyhhbGdvcml0aG0sIFdU
Rk1vdmUob2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENyeXB0b0tleUFFUyhhbGdvcml0aG0sIFdURk1vdmUoKm9jdGV0U2VxdWVu
Y2UpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7CiB9CiAKIEpzb25XZWJLZXkgQ3J5cHRvS2V5QUVT
OjpleHBvcnRKd2soKSBjb25zdAogewogICAgIEpzb25XZWJLZXkgcmVzdWx0OwogICAgIHJlc3Vs
dC5rdHkgPSAib2N0IjsKLSAgICByZXN1bHQuayA9IGJhc2U2NFVSTEVuY29kZShtX2tleSk7Cisg
ICAgcmVzdWx0LmsgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhtX2tleSk7CiAgICAgcmVzdWx0
LmtleV9vcHMgPSB1c2FnZXMoKTsKICAgICByZXN1bHQuZXh0ID0gZXh0cmFjdGFibGUoKTsKICAg
ICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRv
S2V5RUMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0
b0tleUVDLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5RUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwyMiArOTgsMjIgQEAgUmVm
UHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6aW1wb3J0SgogCiAgICAgaWYgKGtleURhdGEu
eC5pc051bGwoKSB8fCBrZXlEYXRhLnkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIFZlY3Rvcjx1aW50OF90PiB4OwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUo
a2V5RGF0YS54LCB4KSkKKyAgICBhdXRvIHggPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS54KTsK
KyAgICBpZiAoIXgpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90
PiB5OwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS55LCB5KSkKKyAgICBh
dXRvIHkgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS55KTsKKyAgICBpZiAoIXkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmQuaXNOdWxsKCkpIHsKICAgICAgICAg
Ly8gaW1wb3J0IHB1YmxpYyBrZXkKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtSW1wb3J0SldLUHVi
bGljKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKHgpLCBXVEZNb3ZlKHkpLCBleHRy
YWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtSW1wb3J0SldLUHVibGlj
KGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKCp4KSwgV1RGTW92ZSgqeSksIGV4dHJh
Y3RhYmxlLCB1c2FnZXMpOwogICAgIH0KIAotICAgIFZlY3Rvcjx1aW50OF90PiBkOwotICAgIGlm
ICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kLCBkKSkKKyAgICBhdXRvIGQgPSBiYXNl
NjRVUkxEZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBpZiAoIWQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIC8vIGltcG9ydCBwcml2YXRlIGtleQotICAgIHJldHVybiBwbGF0Zm9ybUltcG9y
dEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3VydmUsIFdURk1vdmUoeCksIFdURk1vdmUo
eSksIFdURk1vdmUoZCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgIHJldHVybiBwbGF0Zm9y
bUltcG9ydEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVkQ3VydmUsIFdURk1vdmUoKngpLCBX
VEZNb3ZlKCp5KSwgV1RGTW92ZSgqZCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQogCiBSZWZQ
dHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjppbXBvcnRTcGtpKENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBjdXJ2ZSwgVmVjdG9yPHVpbnQ4X3Q+
JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2Vz
KQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tl
eUhNQUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOCArMTAzLDggQEAgUmVmUHRyPENyeXB0
b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBpZiAoa2V5RGF0YS5rLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBW
ZWN0b3I8dWludDhfdD4gb2N0ZXRTZXF1ZW5jZTsKLSAgICBpZiAoIWJhc2U2NFVSTERlY29kZShr
ZXlEYXRhLmssIG9jdGV0U2VxdWVuY2UpKQorICAgIGF1dG8gb2N0ZXRTZXF1ZW5jZSA9IGJhc2U2
NFVSTERlY29kZShrZXlEYXRhLmspOworICAgIGlmICghb2N0ZXRTZXF1ZW5jZSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFjYWxsYmFjayhoYXNoLCBrZXlEYXRhLmFsZykpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTE1LDE0ICsxMTUsMTQgQEAgUmVmUHRyPENyeXB0
b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgIGlmIChrZXlEYXRhLmV4dCAmJiAha2V5
RGF0YS5leHQudmFsdWUoKSAmJiBleHRyYWN0YWJsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICByZXR1cm4gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3KGxlbmd0aEJpdHMsIGhhc2gs
IFdURk1vdmUob2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgIHJldHVy
biBDcnlwdG9LZXlITUFDOjppbXBvcnRSYXcobGVuZ3RoQml0cywgaGFzaCwgV1RGTW92ZSgqb2N0
ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQogCiBKc29uV2ViS2V5IENyeXB0
b0tleUhNQUM6OmV4cG9ydEp3aygpIGNvbnN0CiB7CiAgICAgSnNvbldlYktleSByZXN1bHQ7CiAg
ICAgcmVzdWx0Lmt0eSA9ICJvY3QiOwotICAgIHJlc3VsdC5rID0gYmFzZTY0VVJMRW5jb2RlKG1f
a2V5KTsKKyAgICByZXN1bHQuayA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKG1fa2V5KTsKICAg
ICByZXN1bHQua2V5X29wcyA9IHVzYWdlcygpOwogICAgIHJlc3VsdC5leHQgPSBleHRyYWN0YWJs
ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5
cy9DcnlwdG9LZXlSU0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleVJTQS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDY1ICs0
NSw4NyBAQCBSZWZQdHI8Q3J5cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6OmltcG9yCiAKICAgICBp
ZiAoa2V5RGF0YS5uLmlzTnVsbCgpIHx8IGtleURhdGEuZS5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1vZHVsdXM7Ci0gICAgaWYgKCFXVEY6
OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLm4sIG1vZHVsdXMpKQorICAgIGF1dG8gbW9kdWx1cyA9
IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLm4pOworICAgIGlmICghbW9kdWx1cykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgLy8gUGVyIFJGQyA3NTE4IFNlY3Rpb24gNi4zLjEuMTogaHR0
cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MTgjc2VjdGlvbi02LjMuMS4xCi0gICAgaWYg
KCFtb2R1bHVzLmlzRW1wdHkoKSAmJiAhbW9kdWx1c1swXSkKLSAgICAgICAgbW9kdWx1cy5yZW1v
dmUoMCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGV4cG9uZW50OwotICAgIGlmICghV1RGOjpiYXNl
NjRVUkxEZWNvZGUoa2V5RGF0YS5lLCBleHBvbmVudCkpCisgICAgaWYgKCFtb2R1bHVzLT5pc0Vt
cHR5KCkgJiYgIW1vZHVsdXMtPmF0KDApKQorICAgICAgICBtb2R1bHVzLT5yZW1vdmUoMCk7Cisg
ICAgYXV0byBleHBvbmVudCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmUpOworICAgIGlmICgh
ZXhwb25lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmQuaXNO
dWxsKCkpIHsKICAgICAgICAgLy8gaW1wb3J0IHB1YmxpYyBrZXkKLSAgICAgICAgYXV0byBwdWJs
aWNLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKFdU
Rk1vdmUobW9kdWx1cyksIFdURk1vdmUoZXhwb25lbnQpKTsKKyAgICAgICAgYXV0byBwdWJsaWNL
ZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKFdURk1v
dmUoKm1vZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVudCkpOwogICAgICAgICAvLyBOb3RpY2U6IENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQg
c2hvdWxkIG5vdCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAg
ICAgIHJldHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnB1YmxpY0tleUNvbXBv
bmVudHMsIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgIH0KIAogICAgIC8vIGltcG9ydCBwcml2
YXRlIGtleQotICAgIFZlY3Rvcjx1aW50OF90PiBwcml2YXRlRXhwb25lbnQ7Ci0gICAgaWYgKCFX
VEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLmQsIHByaXZhdGVFeHBvbmVudCkpCisgICAgYXV0
byBwcml2YXRlRXhwb25lbnQgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBpZiAo
IXByaXZhdGVFeHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURh
dGEucC5pc051bGwoKSAmJiBrZXlEYXRhLnEuaXNOdWxsKCkgJiYga2V5RGF0YS5kcC5pc051bGwo
KSAmJiBrZXlEYXRhLmRwLmlzTnVsbCgpICYmIGtleURhdGEucWkuaXNOdWxsKCkpIHsKLSAgICAg
ICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNy
ZWF0ZVByaXZhdGUoV1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUo
cHJpdmF0ZUV4cG9uZW50KSk7CisgICAgICAgIGF1dG8gcHJpdmF0ZUtleUNvbXBvbmVudHMgPSBD
cnlwdG9LZXlSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlKFdURk1vdmUoKm1vZHVsdXMpLCBX
VEZNb3ZlKCpleHBvbmVudCksIFdURk1vdmUoKnByaXZhdGVFeHBvbmVudCkpOwogICAgICAgICAv
LyBOb3RpY2U6IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFj
ZWhvbGRlci4gSXQgc2hvdWxkIG5vdCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51
bGxvcHQuCiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhh
c2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnBy
aXZhdGVLZXlDb21wb25lbnRzLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAKICAgICBp
ZiAoa2V5RGF0YS5wLmlzTnVsbCgpIHx8IGtleURhdGEucS5pc051bGwoKSB8fCBrZXlEYXRhLmRw
LmlzTnVsbCgpIHx8IGtleURhdGEuZHEuaXNOdWxsKCkgfHwga2V5RGF0YS5xaS5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJp
bWVJbmZvIGZpcnN0UHJpbWVJbmZvOwotICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1l
SW5mbyBzZWNvbmRQcmltZUluZm87Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlE
YXRhLnAsIGZpcnN0UHJpbWVJbmZvLnByaW1lRmFjdG9yKSkKKyAgICAKKyAgICBhdXRvIGZpcnN0
UHJpbWVGYWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5wKTsKKyAgICBpZiAoIWZpcnN0
UHJpbWVGYWN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNl
NjRVUkxEZWNvZGUoa2V5RGF0YS5kcCwgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQp
KQorICAgIGF1dG8gZmlyc3RGYWN0b3JDUlRFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZShrZXlE
YXRhLmRwKTsKKyAgICBpZiAoIWZpcnN0RmFjdG9yQ1JURXhwb25lbnQpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5xLCBzZWNv
bmRQcmltZUluZm8ucHJpbWVGYWN0b3IpKQorICAgIGF1dG8gc2Vjb25kUHJpbWVGYWN0b3IgPSBi
YXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5xKTsKKyAgICBpZiAoIXNlY29uZFByaW1lRmFjdG9yKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtl
eURhdGEuZHEsIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisgICAgYXV0byBz
ZWNvbmRGYWN0b3JDUlRFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRxKTsKKyAg
ICBpZiAoIXNlY29uZEZhY3RvckNSVEV4cG9uZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEucWksIHNlY29uZFByaW1lSW5m
by5mYWN0b3JDUlRDb2VmZmljaWVudCkpCisgICAgYXV0byBzZWNvbmRGYWN0b3JDUlRDb2VmZmlj
aWVudCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLnFpKTsKKyAgICBpZiAoIXNlY29uZEZhY3Rv
ckNSVENvZWZmaWNpZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENyeXB0b0tl
eVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBmaXJzdFByaW1lSW5mbzsKKyAgICBmaXJzdFByaW1l
SW5mby5wcmltZUZhY3RvciA9IFdURk1vdmUoKmZpcnN0UHJpbWVGYWN0b3IpOworICAgIGZpcnN0
UHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50ID0gV1RGTW92ZSgqZmlyc3RGYWN0b3JDUlRFeHBv
bmVudCk7CisgICAgCisgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29u
ZFByaW1lSW5mbzsKKyAgICBzZWNvbmRQcmltZUluZm8ucHJpbWVGYWN0b3IgPSBXVEZNb3ZlKCpz
ZWNvbmRQcmltZUZhY3Rvcik7CisgICAgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50
ID0gV1RGTW92ZSgqc2Vjb25kRmFjdG9yQ1JURXhwb25lbnQpOworICAgIHNlY29uZFByaW1lSW5m
by5mYWN0b3JDUlRDb2VmZmljaWVudCA9IFdURk1vdmUoKnNlY29uZEZhY3RvckNSVENvZWZmaWNp
ZW50KTsKKwogICAgIGlmICgha2V5RGF0YS5vdGgpIHsKLSAgICAgICAgYXV0byBwcml2YXRlS2V5
Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRk
aXRpb25hbERhdGEoV1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUo
cHJpdmF0ZUV4cG9uZW50KSwgV1RGTW92ZShmaXJzdFByaW1lSW5mbyksIFdURk1vdmUoc2Vjb25k
UHJpbWVJbmZvKSwgeyB9KTsKKyAgICAgICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENy
eXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEoV1RG
TW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50KSwgV1RGTW92ZSgqcHJpdmF0ZUV4cG9u
ZW50KSwgV1RGTW92ZShmaXJzdFByaW1lSW5mbyksIFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwg
eyB9KTsKICAgICAgICAgLy8gTm90aWNlOiBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFf
MSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkgZWZmZWN0IGlm
IGhhc2ggaXMgV1RGOjpudWxsb3B0LgogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5UlNBOjpjcmVh
dGUoYWxnb3JpdGhtLCBoYXNoLnZhbHVlT3IoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hB
XzEpLCAhIWhhc2gsICpwcml2YXRlS2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7
CiAgICAgfQogCiAgICAgVmVjdG9yPENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbz4g
b3RoZXJQcmltZUluZm9zOwogICAgIGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiBrZXlEYXRhLm90
aC52YWx1ZSgpKSB7Ci0gICAgICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBp
bmZvOwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKHZhbHVlLnIsIGluZm8ucHJp
bWVGYWN0b3IpKQorICAgICAgICBhdXRvIHByaW1lRmFjdG9yID0gYmFzZTY0VVJMRGVjb2RlKHZh
bHVlLnIpOworICAgICAgICBpZiAoIXByaW1lRmFjdG9yKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUodmFsdWUuZCwgaW5mby5m
YWN0b3JDUlRFeHBvbmVudCkpCisgICAgICAgIGF1dG8gZmFjdG9yQ1JURXhwb25lbnQgPSBiYXNl
NjRVUkxEZWNvZGUodmFsdWUuZCk7CisgICAgICAgIGlmICghZmFjdG9yQ1JURXhwb25lbnQpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERl
Y29kZSh2YWx1ZS50LCBpbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KSkKKyAgICAgICAgYXV0byBm
YWN0b3JDUlRDb2VmZmljaWVudCA9IGJhc2U2NFVSTERlY29kZSh2YWx1ZS50KTsKKyAgICAgICAg
aWYgKCFmYWN0b3JDUlRDb2VmZmljaWVudCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICBvdGhlclByaW1lSW5mb3MuYXBwZW5kKGluZm8pOworCisgICAgICAgIENyeXB0b0tl
eVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBpbmZvOworICAgICAgICBpbmZvLnByaW1lRmFjdG9y
ID0gV1RGTW92ZSgqcHJpbWVGYWN0b3IpOworICAgICAgICBpbmZvLmZhY3RvckNSVEV4cG9uZW50
ID0gV1RGTW92ZSgqZmFjdG9yQ1JURXhwb25lbnQpOworICAgICAgICBpbmZvLmZhY3RvckNSVENv
ZWZmaWNpZW50ID0gV1RGTW92ZSgqZmFjdG9yQ1JUQ29lZmZpY2llbnQpOworCisgICAgICAgIG90
aGVyUHJpbWVJbmZvcy5hcHBlbmQoV1RGTW92ZShpbmZvKSk7CiAgICAgfQogCi0gICAgYXV0byBw
cml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZh
dGVXaXRoQWRkaXRpb25hbERhdGEoV1RGTW92ZShtb2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCks
IFdURk1vdmUocHJpdmF0ZUV4cG9uZW50KSwgV1RGTW92ZShmaXJzdFByaW1lSW5mbyksIFdURk1v
dmUoc2Vjb25kUHJpbWVJbmZvKSwgV1RGTW92ZShvdGhlclByaW1lSW5mb3MpKTsKKyAgICBhdXRv
IHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJp
dmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKCptb2R1bHVzKSwgV1RGTW92ZSgqZXhwb25l
bnQpLCBXVEZNb3ZlKCpwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwg
V1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCBXVEZNb3ZlKG90aGVyUHJpbWVJbmZvcykpOwogICAg
IC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEgaXMganVzdCBhIHBs
YWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBpZiBoYXNoIGlzIFdURjo6
bnVsbG9wdC4KICAgICByZXR1cm4gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBoYXNo
LnZhbHVlT3IoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsICpwcml2
YXRlS2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiB9CkBAIC0xMTgsMzAgKzE0
MCwzMCBAQCBKc29uV2ViS2V5IENyeXB0b0tleVJTQTo6ZXhwb3J0SndrKCkgY29uCiAgICAgYXV0
byByc2FDb21wb25lbnRzID0gZXhwb3J0RGF0YSgpOwogCiAgICAgLy8gcHVibGljIGtleQotICAg
IHJlc3VsdC5uID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPm1vZHVsdXMoKSk7Ci0g
ICAgcmVzdWx0LmUgPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+ZXhwb25lbnQoKSk7
CisgICAgcmVzdWx0Lm4gPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyc2FDb21wb25lbnRzLT5t
b2R1bHVzKCkpOworICAgIHJlc3VsdC5lID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocnNhQ29t
cG9uZW50cy0+ZXhwb25lbnQoKSk7CiAgICAgaWYgKHJzYUNvbXBvbmVudHMtPnR5cGUoKSA9PSBD
cnlwdG9LZXlSU0FDb21wb25lbnRzOjpUeXBlOjpQdWJsaWMpCiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAKICAgICAvLyBwcml2YXRlIGtleQotICAgIHJlc3VsdC5kID0gYmFzZTY0VVJMRW5jb2Rl
KHJzYUNvbXBvbmVudHMtPnByaXZhdGVFeHBvbmVudCgpKTsKKyAgICByZXN1bHQuZCA9IGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKHJzYUNvbXBvbmVudHMtPnByaXZhdGVFeHBvbmVudCgpKTsKICAg
ICBpZiAoIXJzYUNvbXBvbmVudHMtPmhhc0FkZGl0aW9uYWxQcml2YXRlS2V5UGFyYW1ldGVycygp
KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmVzdWx0LnAgPSBiYXNlNjRVUkxFbmNv
ZGUocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmltZUluZm8oKS5wcmltZUZhY3Rvcik7Ci0gICAgcmVz
dWx0LnEgPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCku
cHJpbWVGYWN0b3IpOwotICAgIHJlc3VsdC5kcCA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25l
bnRzLT5maXJzdFByaW1lSW5mbygpLmZhY3RvckNSVEV4cG9uZW50KTsKLSAgICByZXN1bHQuZHEg
PSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkuZmFjdG9y
Q1JURXhwb25lbnQpOwotICAgIHJlc3VsdC5xaSA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25l
bnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRDb2VmZmljaWVudCk7CisgICAgcmVzdWx0
LnAgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyc2FDb21wb25lbnRzLT5maXJzdFByaW1lSW5m
bygpLnByaW1lRmFjdG9yKTsKKyAgICByZXN1bHQucSA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5n
KHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5mbygpLnByaW1lRmFjdG9yKTsKKyAgICByZXN1
bHQuZHAgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyc2FDb21wb25lbnRzLT5maXJzdFByaW1l
SW5mbygpLmZhY3RvckNSVEV4cG9uZW50KTsKKyAgICByZXN1bHQuZHEgPSBiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBv
bmVudCk7CisgICAgcmVzdWx0LnFpID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocnNhQ29tcG9u
ZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkuZmFjdG9yQ1JUQ29lZmZpY2llbnQpOwogICAgIGlmIChy
c2FDb21wb25lbnRzLT5vdGhlclByaW1lSW5mb3MoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAKICAgICBWZWN0b3I8UnNhT3RoZXJQcmltZXNJbmZvPiBvdGg7CiAgICAgZm9y
IChjb25zdCBhdXRvJiBpbmZvIDogcnNhQ29tcG9uZW50cy0+b3RoZXJQcmltZUluZm9zKCkpIHsK
ICAgICAgICAgUnNhT3RoZXJQcmltZXNJbmZvIG90aGVySW5mbzsKLSAgICAgICAgb3RoZXJJbmZv
LnIgPSBiYXNlNjRVUkxFbmNvZGUoaW5mby5wcmltZUZhY3Rvcik7Ci0gICAgICAgIG90aGVySW5m
by5kID0gYmFzZTY0VVJMRW5jb2RlKGluZm8uZmFjdG9yQ1JURXhwb25lbnQpOwotICAgICAgICBv
dGhlckluZm8udCA9IGJhc2U2NFVSTEVuY29kZShpbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KTsK
KyAgICAgICAgb3RoZXJJbmZvLnIgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhpbmZvLnByaW1l
RmFjdG9yKTsKKyAgICAgICAgb3RoZXJJbmZvLmQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhp
bmZvLmZhY3RvckNSVEV4cG9uZW50KTsKKyAgICAgICAgb3RoZXJJbmZvLnQgPSBiYXNlNjRVUkxF
bmNvZGVUb1N0cmluZyhpbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KTsKICAgICAgICAgb3RoLmFw
cGVuZChXVEZNb3ZlKG90aGVySW5mbykpOwogICAgIH0KICAgICByZXN1bHQub3RoID0gV1RGTW92
ZShvdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01h
Yy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5
cHRvS2V5RUNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTAgKzE5NywxMCBAQCBib29s
IENyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVuCiAKICAgICBpZiAoVU5MSUtFTFko
KHNpemUgIT0gcHVibGljS2V5U2l6ZSkgJiYgKHNpemUgIT0gcHJpdmF0ZUtleVNpemUpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGp3ay54ID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUocmVz
dWx0LmRhdGEoKSArIDEsIGtleVNpemVJbkJ5dGVzKTsKLSAgICBqd2sueSA9IFdURjo6YmFzZTY0
VVJMRW5jb2RlKHJlc3VsdC5kYXRhKCkgKyBrZXlTaXplSW5CeXRlcyArIDEsIGtleVNpemVJbkJ5
dGVzKTsKKyAgICBqd2sueCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3VsdC5kYXRhKCkg
KyAxLCBrZXlTaXplSW5CeXRlcyk7CisgICAgandrLnkgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
ZyhyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUluQnl0ZXMgKyAxLCBrZXlTaXplSW5CeXRlcyk7CiAg
ICAgaWYgKHNpemUgPiBwdWJsaWNLZXlTaXplKQotICAgICAgICBqd2suZCA9IFdURjo6YmFzZTY0
VVJMRW5jb2RlKHJlc3VsdC5kYXRhKCkgKyBwdWJsaWNLZXlTaXplLCBrZXlTaXplSW5CeXRlcyk7
CisgICAgICAgIGp3ay5kID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSAr
IHB1YmxpY0tleVNpemUsIGtleVNpemVJbkJ5dGVzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwTWFjLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW1wb3J0IDxDb21tb25DcnlwdG8vQ29tbW9uU3ltbWV0cmljS2V5
d3JhcC5oPgogI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KICNpbXBvcnQgPHd0Zi9DcnlwdG9ncmFw
aGljVXRpbGl0aWVzLmg+CisjaW1wb3J0IDx3dGYvT3B0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9Q
cm9jZXNzUHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3
dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+CkBAIC04MCwxMSArODEsMTEgQEAgc3RhdGljIE5T
U3RyaW5nKiBtYXN0ZXJLZXlBY2NvdW50TmFtZUZvcgogICAgIHJldHVybiBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAImNvbS5hcHBsZS5XZWJLaXQuV2ViQ3J5cHRvLm1hc3RlcislQCIsIGJ1
bmRsZUlkZW50aWZpZXJdOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVBbmRTdG9yZU1hc3Rlcktl
eShWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleURhdGEpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBjcmVhdGVBbmRTdG9yZU1hc3RlcktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50
aWFscykpOwogCi0gICAgbWFzdGVyS2V5RGF0YS5yZXNpemUobWFzdGVyS2V5U2l6ZUluQnl0ZXMp
OworICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXlEYXRhKG1hc3RlcktleVNpemVJbkJ5dGVz
KTsKICAgICBhdXRvIHJjID0gQ0NSYW5kb21HZW5lcmF0ZUJ5dGVzKG1hc3RlcktleURhdGEuZGF0
YSgpLCBtYXN0ZXJLZXlEYXRhLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmMgPT0ga0ND
U3VjY2Vzcyk7CiAKQEAgLTEwNyw3ICsxMDgsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVBbmRTdG9y
ZU1hc3RlcktleShWZWN0CiAgICAgc3RhdHVzID0gU2VjQWNjZXNzQ3JlYXRlKChfX2JyaWRnZSBD
RlN0cmluZ1JlZilsb2NhbGl6ZWRJdGVtTmFtZSwgbnVsbHB0ciwgJmFjY2Vzc1JlZik7CiAgICAg
aWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBjcmVhdGUgYSBzZWN1
cml0eSBhY2Nlc3Mgb2JqZWN0IGZvciBzdG9yaW5nIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJv
ciAlZCIsIChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIH0KICAgICBSZXRhaW5QdHI8U2VjQWNjZXNzUmVmPiBhY2Nl
c3MgPSBhZG9wdENGKGFjY2Vzc1JlZik7CiAKQEAgLTEyMCwxOSArMTIxLDE4IEBAIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19FTkQKICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IGNy
ZWF0ZSBhIHRydXN0ZWQgYXBwbGljYXRpb24gb2JqZWN0IGZvciBzdG9yaW5nIFdlYkNyeXB0byBt
YXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KICAgICBSZXRhaW5QdHI8U2Vj
VHJ1c3RlZEFwcGxpY2F0aW9uUmVmPiB0cnVzdGVkQXBwID0gYWRvcHRDRih0cnVzdGVkQXBwUmVm
KTsKIAogICAgIHN0YXR1cyA9IFNlY0FDTFNldENvbnRlbnRzKGFjbCwgKF9fYnJpZGdlIENGQXJy
YXlSZWYpQFsgKF9fYnJpZGdlIGlkKXRydXN0ZWRBcHAuZ2V0KCkgXSwgKF9fYnJpZGdlIENGU3Ry
aW5nUmVmKWxvY2FsaXplZEl0ZW1OYW1lLCBrU2VjS2V5Y2hhaW5Qcm9tcHRSZXF1aXJlUGFzc3Bo
YXNlKTsKICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IHNl
dCBBQ0wgZm9yIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IH0KICNlbmRpZgogCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRh
OwotICAgIGJhc2U2NEVuY29kZShtYXN0ZXJLZXlEYXRhLCBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5
RGF0YSk7CisgICAgYXV0byBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YSA9IGJhc2U2NEVuY29k
ZVRvVmVjdG9yKG1hc3RlcktleURhdGEpOwogCiAgICAgLy8gQ2Fubm90IHVzZSBrU2VjQ2xhc3NL
ZXkgYmVjYXVzZSBvZiA8cmRhcjovL3Byb2JsZW0vMTYwNjgyMDc+LgogICAgIE5TRGljdGlvbmFy
eSAqYXR0cmlidXRlcyA9IEB7CkBAIC0xNTAsMTIgKzE1MCwxMyBAQCBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19FTkQKICAgICBzdGF0dXMgPSBTZWNJdGVtQWRkKChDRkRpY3Rpb25hcnlS
ZWYpYXR0cmlidXRlcywgbnVsbHB0cik7CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBXVEZM
b2dBbHdheXMoIkNhbm5vdCBzdG9yZSBXZWJDcnlwdG8gbWFzdGVyIGtleSwgZXJyb3IgJWQiLCAo
aW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gbWFzdGVyS2V5
RGF0YTsKIH0KIAotc3RhdGljIGJvb2wgZmluZE1hc3RlcktleShWZWN0b3I8dWludDhfdD4mIG1h
c3RlcktleURhdGEpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBmaW5kTWFzdGVy
S2V5KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQ
cml2aWxlZ2U6OkNhbkFjY2Vzc0NyZWRlbnRpYWxzKSk7CiAKQEAgLTE3MCwyMCArMTcxLDI1IEBA
IHN0YXRpYyBib29sIGZpbmRNYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3QKICAgICBpZiAoc3RhdHVz
KSB7CiAgICAgICAgIGlmIChzdGF0dXMgIT0gZXJyU2VjSXRlbU5vdEZvdW5kICYmIHN0YXR1cyAh
PSBlcnJTZWNVc2VyQ2FuY2VsZWQpCiAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkNvdWxkIG5v
dCBmaW5kIFdlYkNyeXB0byBtYXN0ZXIga2V5IGluIEtleWNoYWluLCBlcnJvciAlZCIsIChpbnQp
c3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIH0KICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBrZXlEYXRhID0gYWRvcHRDRihr
ZXlEYXRhUmVmKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5
RGF0YSA9IHZlY3RvckZyb21OU0RhdGEoKF9fYnJpZGdlIE5TRGF0YSAqKWtleURhdGEuZ2V0KCkp
OwotICAgIHJldHVybiBiYXNlNjREZWNvZGUoKGNvbnN0IGNoYXIqKWJhc2U2NEVuY29kZWRNYXN0
ZXJLZXlEYXRhLmRhdGEoKSwgYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEuc2l6ZSgpLCBtYXN0
ZXJLZXlEYXRhKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KENGRGF0YUdldEJ5dGVQdHIoa2V5RGF0YS5nZXQoKSkpLCBDRkRhdGFHZXRMZW5n
dGgoa2V5RGF0YS5nZXQoKSkpOwogfQogCi1ib29sIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJL
ZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQogewotICAgIGlmICghZmluZE1hc3RlcktleSht
YXN0ZXJLZXkpICYmICFjcmVhdGVBbmRTdG9yZU1hc3RlcktleShtYXN0ZXJLZXkpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgUkVMRUFTRV9BU1NFUlQobWFzdGVyS2V5LnNpemUoKSA9PSBt
YXN0ZXJLZXlTaXplSW5CeXRlcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGF1dG8gbWFz
dGVyS2V5ID0gZmluZE1hc3RlcktleSgpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1hc3Rl
cktleS0+c2l6ZSgpID09IG1hc3RlcktleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIG1h
c3RlcktleTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBtYXN0ZXJLZXkgPSBjcmVhdGVBbmRTdG9y
ZU1hc3RlcktleSgpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1hc3RlcktleS0+c2l6ZSgp
ID09IG1hc3RlcktleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIG1hc3RlcktleTsKKyAg
ICB9CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiBib29sIGRlbGV0ZURlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkoKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wv
U2VyaWFsaXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE9wZW5TU0wuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9TZXJp
YWxpemVkQ3J5cHRvS2V5V3JhcE9wZW5TU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSAr
MzEsMTQgQEAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFz
dGVyS2V5KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVy
S2V5KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFVOVVNFRF9QQVJBTShtYXN0ZXJL
ZXkpOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAK
IC8vIEluaXRpYWxseSB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zIHdlcmUgaW50ZW5kZWQgdG8gcGVy
Zm9ybSBLRUsgd3JhcHBpbmcgYW5kIHVud3JhcHBpbmcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzMywyNiArMzMzLDEyIEBAIHZvaWQgRmlsZVJlYWRlckxvYWRlcjo6Y29udmVydFRvVGV4dCgp
CiAKIHZvaWQgRmlsZVJlYWRlckxvYWRlcjo6Y29udmVydFRvRGF0YVVSTCgpCiB7Ci0gICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZGF0YToiKTsK
LQogICAgIGlmICghbV9ieXRlc0xvYWRlZCkgewotICAgICAgICBtX3N0cmluZ1Jlc3VsdCA9IGJ1
aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgbV9zdHJpbmdSZXN1bHQgPSAiZGF0YToiX3M7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9kYXRhVHlwZS5pc0VtcHR5KCkpCi0g
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKLSAgICBl
bHNlCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fZGF0YVR5cGUpOwotICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiO2Jhc2U2NCwiKTsKLQotICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgYmFz
ZTY0RW5jb2RlKG1fcmF3RGF0YS0+ZGF0YSgpLCBtX2J5dGVzTG9hZGVkLCBvdXQpOwotICAgIG91
dC5hcHBlbmQoJ1wwJyk7Ci0gICAgYnVpbGRlci5hcHBlbmQob3V0LmRhdGEoKSk7Ci0KLSAgICBt
X3N0cmluZ1Jlc3VsdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBtX3N0cmluZ1Jlc3VsdCA9
IG1ha2VTdHJpbmcoImRhdGE6IiwgbV9kYXRhVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24v
b2N0ZXQtc3RyZWFtIiA6IG1fZGF0YVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQobV9y
YXdEYXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQpKTsKIH0KIAogYm9vbCBGaWxlUmVhZGVyTG9h
ZGVyOjppc0NvbXBsZXRlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
RE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOSwx
NCArNDI5LDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIFNIQTE6OkRpZ2VzdCBhdHRyc0hhc2g7CiAgICAgICAg
ICAgICBhdHRyc1NIQTEuY29tcHV0ZUhhc2goYXR0cnNIYXNoKTsKLSAgICAgICAgICAgIGRpZ2Vz
dC0+YXR0cnNTSEExID0gYmFzZTY0RW5jb2RlKGF0dHJzSGFzaC5kYXRhKCksIDEwKTsKKyAgICAg
ICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYXR0cnNIYXNo
LmRhdGEoKSwgMTApOwogICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIGRpZ2VzdC0+
YXR0cnNTSEExKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwog
ICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5j
b2RlKGhhc2guZGF0YSgpLCAxMCk7CisgICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9T
dHJpbmcoaGFzaC5kYXRhKCksIDEwKTsKICAgICBpZiAodW51c2VkTm9kZXNNYXApCiAgICAgICAg
IHVudXNlZE5vZGVzTWFwLT5hZGQoZGlnZXN0LT5zaGExLCBkaWdlc3QuZ2V0KCkpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5OCwxMSArNTk4LDExIEBA
IGJvb2wgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q2VydGlmaWMKICAgICBpZiAoIW1fY2xp
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsK
LSAgICBpZiAoIWJhc2U2NERlY29kZShzZXJpYWxpemVkQ2VydGlmaWNhdGUsIGRhdGEpKQorICAg
IGF1dG8gZGF0YSA9IGJhc2U2NERlY29kZShzZXJpYWxpemVkQ2VydGlmaWNhdGUpOworICAgIGlm
ICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKICAg
ICBPcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKICAgICBkZWNvZGVy
ID4+IGNlcnRpZmljYXRlSW5mbzsKICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAko
cmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNv
dXJjZXNEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHVuc2lnbmVk
IE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZUQKICAgICAgICAgbV9jb250ZW50ID0gbV9k
ZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9iYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAg
bV9jb250ZW50ID0gYmFzZTY0RW5jb2RlKG1fZGF0YUJ1ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3Ro
KTsKKyAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5jb2RlZFRvU3RyaW5nKG1fZGF0YUJ1ZmZl
ci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKICAgICB9CiAKICAgICBtX2RhdGFCdWZmZXIgPSBudWxs
cHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01B
Z2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzA5LDcgKzE3MDksNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250ZW50U2VjdXJpdHlQ
b2xpCiAgICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBB
TDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwogICAgIGNyeXB0b0RpZ2VzdC0+
YWRkQnl0ZXMoY29udGVudC5kYXRhKCksIGNvbnRlbnQuc2l6ZSgpKTsKICAgICBhdXRvIGRpZ2Vz
dCA9IGNyeXB0b0RpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygi
c2hhMjU2LSIsIGJhc2U2NEVuY29kZShkaWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgpKSk7Cisg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1Ni0iLCBiYXNlNjRFbmNvZGVkKGRpZ2VzdC5kYXRh
KCksIGRpZ2VzdC5zaXplKCkpKTsKIH0KIAogUmVmPFByb3RvY29sOjpET006Ok5vZGU+IEluc3Bl
Y3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBO
b2RlVG9JZE1hcCogbm9kZXNNYXApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdv
cmtBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw3ICsxNzUsNyBAQCBSZWY8UHJvdG9j
b2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lPiBiCiAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3
b3JrOjpXZWJTb2NrZXRGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE9wY29kZShmcmFtZS5v
cENvZGUpCiAgICAgICAgIC5zZXRNYXNrKGZyYW1lLm1hc2tlZCkKLSAgICAgICAgLnNldFBheWxv
YWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxs
YmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZShm
cmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSkKKyAgICAgICAgLnNldFBheWxvYWRE
YXRhKGZyYW1lLm9wQ29kZSA9PSAxID8gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFj
ayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKQogICAgICAgICAuc2V0UGF5
bG9hZExlbmd0aChmcmFtZS5wYXlsb2FkTGVuZ3RoKQogICAgICAgICAucmVsZWFzZSgpOwogfQpA
QCAtNTg2LDcgKzU4Niw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZl
RGEKICAgICAgICAgLy8gT2Z0ZW4gdGhlIGRhdGEgaXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBh
IGRlY29kZXIsIGJ1dCBmb3Igbm9uLXRleHQgd2Ugd29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAg
ICAgIC8vIFN5bmMgWEhScyBtYXkgbm90IGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5v
bi1zeW5jIFhIUnMgdXN1YWxseSB0cmFuc2ZlciBkYXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAg
ICAgICAgaWYgKG1fbG9hZGluZ1hIUlN5bmNocm9ub3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFy
ZXNvdXJjZURhdGEtPmhhc0J1ZmZlcmVkRGF0YSgpICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJl
c291cmNlKCkpCi0gICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVu
dChyZXF1ZXN0SWQsIGJhc2U2NEVuY29kZShkYXRhLCBkYXRhTGVuZ3RoKSwgdHJ1ZSk7CisgICAg
ICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGRhdGEsIGRhdGFMZW5ndGgpLCB0cnVlKTsKICAgICB9CiAKICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGF0YVJlY2VpdmVkKHJlcXVlc3RJZCwgdGltZXN0YW1w
KCksIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKQEAgLTEwMDQsNyArMTAwNCw3IEBA
IFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KIAogICAgIFdURjo6UGVy
c2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUudmFs
dWUoKSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVy
LmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIu
YnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKIH0KIAogV2ViU29ja2V0KiBJbnNwZWN0
b3JOZXR3b3JrQWdlbnQ6OndlYlNvY2tldEZvclJlcXVlc3RJZChjb25zdCBQcm90b2NvbDo6TmV0
d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQpCkBAIC0xMjAyLDExICsxMjAyLDExIEBAIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck4KICAgICAgICAgcmVxdWVzdC5zZXRI
VFRQSGVhZGVyRmllbGRzKFdURk1vdmUoZXhwbGljaXRIZWFkZXJzKSk7CiAgICAgfQogICAgIGlm
ICghIXBvc3REYXRhKSB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAg
IGlmICghYmFzZTY0RGVjb2RlKHBvc3REYXRhLCBidWZmZXIpKQorICAgICAgICBhdXRvIGJ1ZmZl
ciA9IGJhc2U2NERlY29kZShwb3N0RGF0YSk7CisgICAgICAgIGlmICghYnVmZmVyKQogICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZGVjb2RlIGdpdmVuIHBvc3RE
YXRhIl9zKTsKIAotICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KEZvcm1EYXRhOjpjcmVhdGUo
YnVmZmVyKSk7CisgICAgICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShX
VEZNb3ZlKCpidWZmZXIpKSk7CiAgICAgfQogICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IGhvdyB0
byBpZGVudGlmeSB3aGVuIGEgcmVxdWVzdCBoYXMgYmVlbiBvdmVycmlkZGVuIHdoZW4gd2UgYWRk
IHRoaXMgdG8gdGhlIGZyb250ZW5kLgogICAgIHBlbmRpbmdSZXF1ZXN0LT5jb250aW51ZVdpdGhS
ZXF1ZXN0KHJlcXVlc3QpOwpAQCAtMTI0MiwxMSArMTI0MiwxMSBAQCBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOCiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBvdmVy
cmlkZURhdGE7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgYnVmZmVyKSkK
KyAgICAgICAgYXV0byBidWZmZXIgPSBiYXNlNjREZWNvZGUoY29udGVudCk7CisgICAgICAgIGlm
ICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8g
ZGVjb2RlIGdpdmVuIGNvbnRlbnQiX3MpOwogCi0gICAgICAgIG92ZXJyaWRlRGF0YSA9IFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIG92ZXJyaWRlRGF0YSA9
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKmJ1ZmZlcikpOwogICAgIH0gZWxzZQogICAg
ICAgICBvdmVycmlkZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LnV0ZjgoKS5k
YXRhKCksIGNvbnRlbnQudXRmOCgpLmxlbmd0aCgpKTsKIApAQCAtMTI2OCwxMSArMTI2OCwxMSBA
QCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOCiAKICAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBkYXRhOwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQs
IGJ1ZmZlcikpCisgICAgICAgIGF1dG8gYnVmZmVyID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQpOwor
ICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
VW5hYmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zKTsKIAotICAgICAgICBkYXRhID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgZGF0YSA9IFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKmJ1ZmZlcikpOwogICAgIH0gZWxzZQogICAgICAgICBk
YXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC51dGY4KCkuZGF0YSgpLCBjb250ZW50
LnV0ZjgoKS5sZW5ndGgoKSk7CiAKQEAgLTE0MDUsNyArMTQwNSw3IEBAIGJvb2wgSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXIKICAgICAgICAgfQogCiAgICAgICAgICpiYXNlNjRF
bmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZShidWZmZXItPmRh
dGEoKSwgYnVmZmVyLT5zaXplKCkpOworICAgICAgICAqcmVzdWx0ID0gbWFrZVN0cmluZyhXVEY6
OmJhc2U2NEVuY29kZWQoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIGJvb2wgSW5zcGVjdG9yUGFn
ZUFnZW50OjpzaGFyZWRCdWZmZXJDb24KIGJvb2wgSW5zcGVjdG9yUGFnZUFnZW50OjpkYXRhQ29u
dGVudChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBzaXplLCBjb25zdCBTdHJpbmcmIHRleHRF
bmNvZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiByZXN1bHQpCiB7CiAg
ICAgaWYgKHdpdGhCYXNlNjRFbmNvZGUpIHsKLSAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29k
ZShkYXRhLCBzaXplKTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGRh
dGEsIHNpemUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTExMDIsNyArMTEw
Miw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG8KICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZvciBt
YWluIGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hp
dmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoQ0ZE
YXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgp
KSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKENGRGF0YUdldEJ5dGVQdHIoYnVm
ZmVyLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOwogfQogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzExOCw3ICszMTE4LDcgQEAgdW5zaWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJl
c291cmNlUwogICAgICAgICBBU1NFUlQoIW5ld1JlcXVlc3QuaXNOdWxsKCkpOwogCiAgICAgICAg
IGlmICghZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS5tYXliZUxvYWRT
eW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSkpIHsKLSAgICAg
ICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4g
YnVmZmVyOwogICAgICAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5
KCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoKnRoaXMsIGlkZW50aWZpZXIsIG5ld1JlcXVl
c3QsIGNsaWVudENyZWRlbnRpYWxQb2xpY3ksIG9wdGlvbnMsIG9yaWdpbmFsUmVxdWVzdEhlYWRl
cnMsIGVycm9yLCByZXNwb25zZSwgYnVmZmVyKTsKICAgICAgICAgICAgIGRhdGEgPSBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgICAgICAgICAgZG9jdW1lbnRMb2Fk
ZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS5tYXliZUxvYWRGYWxsYmFja1N5bmNocm9ub3Vz
bHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgs
NyBAQCBzdHJ1Y3QgRmV0Y2hPcHRpb25zOwogY2xhc3MgV0VCQ09SRV9FWFBPUlQgTG9hZGVyU3Ry
YXRlZ3kgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRnJhbWUmLCBD
YWNoZWRSZXNvdXJjZSYsIFJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBSZXNvdXJjZUxvYWRlck9w
dGlvbnMmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4m
Jik+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShG
cmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgRmV0Y2hPcHRpb25zJiwgY29uc3Qg
SFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PGNoYXI+JiBkYXRhKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoRnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0aW9ucyYs
IGNvbnN0IEhUVFBIZWFkZXJNYXAmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYs
IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlTG9hZENv
bXBsZXRlZChQYWdlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBicm93c2luZ0NvbnRleHRSZW1v
dmVkKEZyYW1lJikgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Q
cml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4OSwxMCArMTg5LDEwIEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkVwaGVt
ZXJhbFMKIHsKICAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaWYgd2UgY2FuIGRvIHdpdGggYSBz
aW1wbGUgbGVuZ3RoIGNoZWNrIGluc3RlYWQgb2YgZGVjb2RpbmcuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTk0NQotICAgIFZlY3Rvcjx1aW50OF90
PiBkaWdlc3Q7Ci0gICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUobm9uY2UsIGRpZ2VzdCkpCisgICAg
YXV0byBkaWdlc3QgPSBiYXNlNjRVUkxEZWNvZGUobm9uY2UpOworICAgIGlmICghZGlnZXN0KQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGRpZ2VzdC5zaXplKCkgPT0gRXBoZW1l
cmFsU291cmNlTm9uY2VSZXF1aXJlZE51bWJlck9mQnl0ZXM7CisgICAgcmV0dXJuIGRpZ2VzdC0+
c2l6ZSgpID09IEVwaGVtZXJhbFNvdXJjZU5vbmNlUmVxdWlyZWROdW1iZXJPZkJ5dGVzOwogfQog
CiB2b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpzZXRFcGhlbWVyYWxTb3VyY2VOb25jZShF
cGhlbWVyYWxTb3VyY2VOb25jZSYmIG5vbmNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdl
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTUgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogICAgIGlmIChidWZmZXIucG9zaXRpb24oKSA9PSBi
ZWdpbkhhc2hWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3Rv
cjx1aW50OF90PiBkaWdlc3Q7CiAgICAgU3RyaW5nVmlldyBoYXNoVmFsdWUoYmVnaW5IYXNoVmFs
dWUsIGJ1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW5IYXNoVmFsdWUpOwotICAgIGlmICghYmFzZTY0
RGVjb2RlKGhhc2hWYWx1ZSwgZGlnZXN0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKSB7Ci0gICAg
ICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGhhc2hWYWx1ZSwgZGlnZXN0KSkKLSAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfQogCi0gICAgcmV0dXJuIFJlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFdURk1vdmUoZGlnZXN0KSB9OworICAgIGlmIChh
dXRvIGRpZ2VzdCA9IGJhc2U2NERlY29kZShoYXNoVmFsdWUsIEJhc2U2NERlY29kZU9wdGlvbnM6
OlZhbGlkYXRlUGFkZGluZykpCisgICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QgeyAqYWxnb3JpdGhtLCBXVEZNb3ZlKCpkaWdlc3QpIH07CisKKyAgICBpZiAoYXV0byBk
aWdlc3QgPSBiYXNlNjRVUkxEZWNvZGUoaGFzaFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsK
KworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZm
ZXI8VUNoYXI+JiBidWZmZXIpCkBAIC0xMjQsMTMgKzEyNSwxMyBAQCBPcHRpb25hbDxFbmNvZGVk
UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnCiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBF
bmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0JiBlbmNvZGVkRGlnZXN0KQogewotICAg
IFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoZW5jb2RlZERp
Z2VzdC5kaWdlc3QsIGRpZ2VzdCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkgewotICAgICAgICBp
ZiAoIWJhc2U2NFVSTERlY29kZShlbmNvZGVkRGlnZXN0LmRpZ2VzdCwgZGlnZXN0KSkKLSAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfQorICAgIGlmIChhdXRvIGRpZ2VzdCA9
IGJhc2U2NERlY29kZShlbmNvZGVkRGlnZXN0LmRpZ2VzdCwgQmFzZTY0RGVjb2RlT3B0aW9uczo6
VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdCB7IGVuY29kZWREaWdlc3QuYWxnb3JpdGhtLCBXVEZNb3ZlKCpkaWdlc3QpIH07CisKKyAg
ICBpZiAoYXV0byBkaWdlc3QgPSBiYXNlNjRVUkxEZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdlc3Qp
KQorICAgICAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERp
Z2VzdC5hbGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsKIAotICAgIHJldHVybiBSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyBlbmNvZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZShk
aWdlc3QpIH07CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogc3RhdGljIFBBTDo6Q3J5
cHRvRGlnZXN0OjpBbGdvcml0aG0gdG9DcnlwdG9EaWdlc3RBbGdvcml0aG0oUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0gYWxnb3JpdGhtKQpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRN
TEFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsOSArMTY3LDcgQEAgUmVmPFNoYXJl
ZEJ1ZmZlcj4gTUhUTUxBcmNoaXZlOjpnZW5lcmF0ZQogCiAgICAgZm9yIChhdXRvJiByZXNvdXJj
ZSA6IHJlc291cmNlcykgewogICAgICAgICBzdHJpbmdCdWlsZGVyLmNsZWFyKCk7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGVuZE9mUmVzb3VyY2VCb3VuZGFyeSk7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCJDb250ZW50LVR5cGU6ICIpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChyZXNvdXJjZS5taW1lVHlwZSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGVuZE9mUmVzb3VyY2VCb3VuZGFyeSwgIkNvbnRlbnQtVHlwZTogIiwgcmVzb3VyY2UubWlt
ZVR5cGUpOwogCiAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRFbmNvZGluZyA9IG51bGxwdHI7
CiAgICAgICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1F
VHlwZShyZXNvdXJjZS5taW1lVHlwZSkgfHwgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRO
b25JbWFnZU1JTUVUeXBlKHJlc291cmNlLm1pbWVUeXBlKSkKQEAgLTE3NywyNyArMTc1LDIyIEBA
IFJlZjxTaGFyZWRCdWZmZXI+IE1IVE1MQXJjaGl2ZTo6Z2VuZXJhdGUKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgY29udGVudEVuY29kaW5nID0gYmFzZTY0OwogCi0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCJcclxuQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIik7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGNvbnRlbnRFbmNvZGluZyk7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCJcclxuQ29udGVudC1Mb2NhdGlvbjogIik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHJlc291cmNlLnVybC5zdHJpbmcoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJcclxuXHJcbiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJc
bkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6ICIsIGNvbnRlbnRFbmNvZGluZywgIlxyXG5Db250
ZW50LUxvY2F0aW9uOiAiLCByZXNvdXJjZS51cmwuc3RyaW5nKCksICJcclxuXHJcbiIpOwogCiAg
ICAgICAgIGFzY2lpU3RyaW5nID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKICAg
ICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlTdHJpbmcuZGF0YSgpLCBhc2NpaVN0cmluZy5s
ZW5ndGgoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkgd2Ugd291bGQgZW5jb2RlIHRo
ZSBjb250ZW50IGFzIGEgc3RyZWFtIHdpdGhvdXQgaGF2aW5nIHRvIGZldGNoIGl0IGFsbC4KLSAg
ICAgICAgY29uc3QgY2hhciogZGF0YSA9IHJlc291cmNlLmRhdGEtPmRhdGEoKTsKKyAgICAgICAg
YXV0byogZGF0YSA9IHJlc291cmNlLmRhdGEtPmRhdGFBc1VJbnQ4UHRyKCk7CiAgICAgICAgIHNp
emVfdCBkYXRhTGVuZ3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgpOwotICAgICAgICBWZWN0b3I8
Y2hhcj4gZW5jb2RlZERhdGE7CiAgICAgICAgIGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGluZywg
cXVvdGVkUHJpbnRhYmxlKSkgewotICAgICAgICAgICAgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGRh
dGEsIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERh
dGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCk7CiAgICAgICAgICAg
ICBtaHRtbERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUo
KSk7CiAgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZCgiXHJcbiIsIDIpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoY29udGVudEVuY29kaW5nLCBiYXNl
NjQpKTsKICAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0
cnVlIGJlbG93IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGluZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJl
cXVpcmVzIENSTEZzLgotICAgICAgICAgICAgYmFzZTY0RW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgs
IGVuY29kZWREYXRhKTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNv
ZGVUb1ZlY3RvcihkYXRhLCBkYXRhTGVuZ3RoKTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBt
YXhpbXVtTGluZUxlbmd0aCA9IDc2OwogICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKICAg
ICAgICAgICAgIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRN
TFBhcnNlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDE2ICsx
OTIsMTkgQEAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gTUhUTUxQYXJzZXI6OnBhcgogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBW
ZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBzd2l0Y2ggKG1pbWVIZWFkZXIuY29udGVudFRyYW5z
ZmVyRW5jb2RpbmcoKSkgewotICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OgotICAgICAgICBp
ZiAoIWJhc2U2NERlY29kZShjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSwgZGF0YSkp
IHsKKyAgICBjYXNlIE1JTUVIZWFkZXI6OkJhc2U2NDogeworICAgICAgICBhdXRvIGRlY29kZWRE
YXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmRhdGFBc1VJbnQ4UHRyKCkgICAsIGNvbnRlbnQt
PnNpemUoKSk7CisgICAgICAgIGlmICghZGVjb2RlZERhdGEpIHsKICAgICAgICAgICAgIExPR19F
UlJPUigiSW52YWxpZCBiYXNlNjQgY29udGVudCBmb3IgTUhUTUwgcGFydC4iKTsKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CisgICAgICAgIGRhdGEgPSBXVEZNb3ZlKCpk
ZWNvZGVkRGF0YSk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIE1JTUVIZWFkZXI6
OlF1b3RlZFByaW50YWJsZToKLSAgICAgICAgcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnRlbnQt
PmRhdGEoKSwgY29udGVudC0+c2l6ZSgpLCBkYXRhKTsKKyAgICAgICAgZGF0YSA9IHF1b3RlZFBy
aW50YWJsZURlY29kZShjb250ZW50LT5kYXRhQXNVSW50OFB0cigpLCBjb250ZW50LT5zaXplKCkp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1JTUVIZWFkZXI6OlNldmVuQml0OgogICAgIGNh
c2UgTUlNRUhlYWRlcjo6QmluYXJ5OgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NvY29h
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0JKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jb2NvYS9Qcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAgYm9v
bCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogewogI2lmIEhBVkUoUlNBX0JT
U0EpCiAgICAgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gc2VydmVyUHVibGljS2V5RGF0YTsK
LSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoc2VydmVyUHVibGljS2V5QmFzZTY0VVJMLCBz
ZXJ2ZXJQdWJsaWNLZXlEYXRhKSkKKyAgICAgICAgYXV0byBzZXJ2ZXJQdWJsaWNLZXlEYXRhID0g
YmFzZTY0VVJMRGVjb2RlKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCk7CisgICAgICAgIGlmICgh
c2VydmVyUHVibGljS2V5RGF0YSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
YXV0byBzZXJ2ZXJQdWJsaWNLZXkgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5
dGVzOnNlcnZlclB1YmxpY0tleURhdGEuZGF0YSgpIGxlbmd0aDpzZXJ2ZXJQdWJsaWNLZXlEYXRh
LnNpemUoKV0pOworICAgICAgICBhdXRvIHNlcnZlclB1YmxpY0tleSA9IGFkb3B0TlMoW1tOU0Rh
dGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2VydmVyUHVibGljS2V5RGF0YS0+ZGF0YSgpIGxlbmd0
aDpzZXJ2ZXJQdWJsaWNLZXlEYXRhLT5zaXplKCldKTsKIAogICAgICAgICAvLyBGSVhNRSgyMjIw
MTgpOiBDaGVjayBlcnJvci4KICAgICAgICAgbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4uYmxpbmRl
ciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NSU0FCU1NBVG9rZW5CbGluZGVySW5zdGFuY2UoKSBpbml0
V2l0aFB1YmxpY0tleTpzZXJ2ZXJQdWJsaWNLZXkuZ2V0KCkgZXJyb3I6bnVsbHB0cl0pOwpAQCAt
NTAsNyArNTAsNyBAQCBib29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBCiAg
ICAgaWYgKCFtX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4pCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIG1fc291cmNlVW5saW5rYWJsZVRva2VuLnZhbHVlQmFzZTY0VVJM
ID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoW21fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdU
b2tlbiBibGluZGVkTWVzc2FnZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0
aW5nVG9rZW4gYmxpbmRlZE1lc3NhZ2VdLmxlbmd0aCk7CisgICAgbV9zb3VyY2VVbmxpbmthYmxl
VG9rZW4udmFsdWVCYXNlNjRVUkwgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhbbV9zb3VyY2VV
bmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuIGJsaW5kZWRNZXNzYWdlXS5ieXRlcywgW21fc291
cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBibGluZGVkTWVzc2FnZV0ubGVuZ3RoKTsK
ICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlcnZlclB1YmxpY0tl
eUJhc2U2NFVSTCk7CkBAIC02NSwxMCArNjUsMTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudDo6Y2FsY3VsYXRlQQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB7Ci0gICAgICAg
IFZlY3Rvcjx1aW50OF90PiBzZXJ2ZXJSZXNwb25zZURhdGE7Ci0gICAgICAgIGlmICghYmFzZTY0
VVJMRGVjb2RlKHNlcnZlclJlc3BvbnNlQmFzZTY0VVJMLCBzZXJ2ZXJSZXNwb25zZURhdGEpKQor
ICAgICAgICBhdXRvIHNlcnZlclJlc3BvbnNlRGF0YSA9IGJhc2U2NFVSTERlY29kZShzZXJ2ZXJS
ZXNwb25zZUJhc2U2NFVSTCk7CisgICAgICAgIGlmICghc2VydmVyUmVzcG9uc2VEYXRhKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvIHNlcnZlclJlc3BvbnNlID0gYWRv
cHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzZXJ2ZXJSZXNwb25zZURhdGEuZGF0
YSgpIGxlbmd0aDpzZXJ2ZXJSZXNwb25zZURhdGEuc2l6ZSgpXSk7CisgICAgICAgIGF1dG8gc2Vy
dmVyUmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZl
clJlc3BvbnNlRGF0YS0+ZGF0YSgpIGxlbmd0aDpzZXJ2ZXJSZXNwb25zZURhdGEtPnNpemUoKV0p
OwogCiAgICAgICAgIC8vIEZJWE1FKDIyMjAxOCk6IENoZWNrIGVycm9yLgogICAgICAgICBtX3Nv
dXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuID0gW21fc291cmNlVW5saW5rYWJsZVRva2Vu
LndhaXRpbmdUb2tlbiBhY3RpdmF0ZVRva2VuV2l0aFNlcnZlclJlc3BvbnNlOnNlcnZlclJlc3Bv
bnNlLmdldCgpIGVycm9yOm51bGxwdHJdOwpAQCAtNzcsOSArNzcsOSBAQCBib29sIFByaXZhdGVD
bGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBCiAgICAgfQogCiAgICAgU291cmNlU2VjcmV0VG9r
ZW4gdG9rZW47Ci0gICAgdG9rZW4udG9rZW5CYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29k
ZShbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmJ5dGVz
LCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmxlbmd0
aCk7Ci0gICAgdG9rZW4ua2V5SURCYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9z
b3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBrZXlJZF0uYnl0ZXMsIFttX3NvdXJjZVVu
bGlua2FibGVUb2tlbi5yZWFkeVRva2VuIGtleUlkXS5sZW5ndGgpOwotICAgIHRva2VuLnNpZ25h
dHVyZUJhc2U2NFVSTCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKFttX3NvdXJjZVVubGlua2FibGVU
b2tlbi5yZWFkeVRva2VuIHNpZ25hdHVyZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tl
bi5yZWFkeVRva2VuIHNpZ25hdHVyZV0ubGVuZ3RoKTsKKyAgICB0b2tlbi50b2tlbkJhc2U2NFVS
TCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFk
eVRva2VuIHRva2VuQ29udGVudF0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFk
eVRva2VuIHRva2VuQ29udGVudF0ubGVuZ3RoKTsKKyAgICB0b2tlbi5rZXlJREJhc2U2NFVSTCA9
IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRv
a2VuIGtleUlkXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5
SWRdLmxlbmd0aCk7CisgICAgdG9rZW4uc2lnbmF0dXJlQmFzZTY0VVJMID0gYmFzZTY0VVJMRW5j
b2RlVG9TdHJpbmcoW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gc2lnbmF0dXJl
XS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gc2lnbmF0dXJlXS5s
ZW5ndGgpOwogCiAgICAgbV9zb3VyY2VTZWNyZXRUb2tlbiA9IFdURk1vdmUodG9rZW4pOwogICAg
IHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEV4Y2VwdGlvbk9yPFN0cmlu
Zz4gQmFzZTY0VXRpbGl0aWVzOjpidG8KICAgICBpZiAoIXN0cmluZ1RvRW5jb2RlLmlzQWxsTGF0
aW4xKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3Ig
fTsKIAotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkpOwor
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKSk7
CiB9CiAKIEV4Y2VwdGlvbk9yPFN0cmluZz4gQmFzZTY0VXRpbGl0aWVzOjphdG9iKGNvbnN0IFN0
cmluZyYgZW5jb2RlZFN0cmluZykKQEAgLTQ2LDExICs0NiwxMSBAQCBFeGNlcHRpb25PcjxTdHJp
bmc+IEJhc2U2NFV0aWxpdGllczo6YXRvCiAgICAgaWYgKGVuY29kZWRTdHJpbmcuaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAg
aWYgKCFiYXNlNjREZWNvZGUoZW5jb2RlZFN0cmluZywgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRp
bmcgfCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyB8IEJhc2U2NERpc2NhcmRWZXJ0aWNh
bFRhYikpCisgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShlbmNvZGVkU3RyaW5n
LCB7IEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZywgQmFzZTY0RGVjb2RlT3B0
aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMsIEJhc2U2NERlY29kZU9wdGlvbnM6OkRpc2Nh
cmRWZXJ0aWNhbFRhYiB9KTsKKyAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKLSAgICByZXR1cm4gU3RyaW5n
KG91dC5kYXRhKCksIG91dC5zaXplKCkpOworICAgIHJldHVybiBTdHJpbmcoZGVjb2RlZERhdGEt
PmRhdGEoKSwgZGVjb2RlZERhdGEtPnNpemUoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg0OCw5ICsxODQ4LDggQEAgdm9pZCBQYWdlOjp1c2VyU3R5bGVT
aGVldExvY2F0aW9uQ2hhbmdlZAogICAgIGlmICh1cmwucHJvdG9jb2xJc0RhdGEoKSAmJiB1cmwu
c3RyaW5nKCkuc3RhcnRzV2l0aCgiZGF0YTp0ZXh0L2NzcztjaGFyc2V0PXV0Zi04O2Jhc2U2NCwi
KSkgewogICAgICAgICBtX2RpZExvYWRVc2VyU3R5bGVTaGVldCA9IHRydWU7CiAKLSAgICAgICAg
VmVjdG9yPGNoYXI+IHN0eWxlU2hlZXRBc1VURjg7Ci0gICAgICAgIGlmIChiYXNlNjREZWNvZGUo
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5zdHJpbmcoKS5zdWJzdHJpbmcoMzUpKSwgc3R5
bGVTaGVldEFzVVRGOCwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpKQotICAgICAgICAg
ICAgbV91c2VyU3R5bGVTaGVldCA9IFN0cmluZzo6ZnJvbVVURjgoc3R5bGVTaGVldEFzVVRGOC5k
YXRhKCksIHN0eWxlU2hlZXRBc1VURjguc2l6ZSgpKTsKKyAgICAgICAgaWYgKGF1dG8gc3R5bGVT
aGVldEFzVVRGOCA9IGJhc2U2NERlY29kZShkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnN0
cmluZygpLnN1YnN0cmluZygzNSkpLCBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNB
bmROZXdMaW5lcykpCisgICAgICAgICAgICBtX3VzZXJTdHlsZVNoZWV0ID0gU3RyaW5nOjpmcm9t
VVRGOChzdHlsZVNoZWV0QXNVVEY4LT5kYXRhKCksIHN0eWxlU2hlZXRBc1VURjgtPnNpemUoKSk7
CiAgICAgfQogCiAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCwxMSBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5k
KGNvbnN0IGNoYXIqIGRhCiAgICAgQVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQog
Cit2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBs
ZW5ndGgpCit7CisgICAgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEp
LCBsZW5ndGgpOworfQorCiB2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKFZlY3RvcjxjaGFyPiYm
IGRhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0JlZW5Db21iaW5lZEludG9PbmVTZWdtZW50KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTEyLDYgKzExMiw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0
IFNoYXJlZEJ1ZmZlciYpOwogICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqLCBzaXplX3QpOwor
ICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogICAgIHZvaWQgYXBwZW5k
KFZlY3RvcjxjaGFyPiYmKTsKIAogICAgIHZvaWQgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtl
eS9DRE1DbGVhcktleS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzksMTIgKzc5LDE1IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtl
eUhhbmRsZT4KICAgICAgICAgICAgIGlmICgha2V5VmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBLZXlJRFR5cGUga2V5SUREYXRhOwotICAgICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUhhbmRsZVZhbHVlRGF0YTsKLSAgICAgICAgICAgIGlmICgh
V1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pIHx8ICFXVEY6OmJhc2U2
NFVSTERlY29kZShrZXlWYWx1ZSwgeyBrZXlIYW5kbGVWYWx1ZURhdGEgfSkpCisgICAgICAgICAg
ICBhdXRvIGtleUlERGF0YSA9IGJhc2U2NFVSTERlY29kZShrZXlJRCk7CisgICAgICAgICAgICBp
ZiAoIWtleUlERGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICAgICAgYXV0byBrZXlIYW5kbGVWYWx1ZURhdGEgPSBiYXNlNjRVUkxEZWNvZGUoa2V5
VmFsdWUpOworICAgICAgICAgICAgaWYgKCFrZXlIYW5kbGVWYWx1ZURhdGEpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5
SGFuZGxlOjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RG
TW92ZShrZXlJRERhdGEpLCBXVEZNb3ZlKGtleUhhbmRsZVZhbHVlRGF0YSkpKTsKKyAgICAgICAg
ICAgIGRlY29kZWRLZXlzLmFwcGVuZChLZXlIYW5kbGU6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Np
b246OktleVN0YXR1czo6VXNhYmxlLCBXVEZNb3ZlKCprZXlJRERhdGEpLCBXVEZNb3ZlKCprZXlI
YW5kbGVWYWx1ZURhdGEpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSk7
CiAgICAgaWYgKCF2YWxpZEZvcm1hdCkKQEAgLTIxNSw4ICsyMTgsNyBAQCBzdGF0aWMgUmVmPFNo
YXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0ZyCiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJy
YXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJs
IGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFs
dWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleUlkQ291bnQ7IGkrKykgewotICAg
ICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZSgmZGF0YVtpbmRleF0sIENs
ZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKTsKLSAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJp
bmcoa2V5SWQpOworICAgICAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZygmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKSk7CiAg
ICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0KIApAQCAt
MjQzLDggKzI0NSw3IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5SWRGcm8K
ICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9sbG93
aW5nIG1lbWJlcnM6CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4g
RWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRo
ZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCi0gICAgU3RyaW5n
IGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoaW5pdERhdGEuZGF0YSgpLCBpbml0RGF0YS5z
aXplKCkpOwotICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGtleUlkKTsKKyAgICBrZXlJZHNB
cnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhpbml0RGF0YS5kYXRhKCks
IGluaXREYXRhLnNpemUoKSkpOwogCiAgICAgb2JqZWN0LT5zZXRBcnJheSgia2lkcyIsIFdURk1v
dmUoa2V5SWRzQXJyYXkpKTsKICAgICBDU3RyaW5nIGpzb25EYXRhID0gb2JqZWN0LT50b0pTT05T
dHJpbmcoKS51dGY4KCk7CkBAIC01ODcsNyArNTg4LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Np
b25DbGVhcktleTo6cmVtb3ZlUwogICAgICAgICAgICAgYXV0byBhcnJheSA9IEpTT046OkFycmF5
OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlTdG9y
ZSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChrZXktPmlkKCkuc2l6ZSgpIDw9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXktPnB1
c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNvZGUoa2V5LT5pZCgpLmRhdGEoKSwga2V5LT5pZCgp
LnNpemUoKSkpOworICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5zaXplKCkpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJvb3RPYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92
ZShhcnJheSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxh
eVN0cmVhbWluZy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMywxMSArMTEzLDExIEBAIHN0YXRpYyBWZWN0b3I8UmVmPFNoYXJlZEJ1
ZmZlcj4+IGV4dHJhY3QKICAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIFZlY3RvcjxjaGFyPiBzaW5mRGF0YTsKLSAgICAgICAgaWYgKCFXVEY6OmJh
c2U2NERlY29kZShrZXlJRCwgeyBzaW5mRGF0YSB9LCBXVEY6OkJhc2U2NElnbm9yZVNwYWNlc0Fu
ZE5ld0xpbmVzKSkKKyAgICAgICAgYXV0byBzaW5mRGF0YSA9IGJhc2U2NERlY29kZShrZXlJRCwg
QmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpOworICAgICAgICBp
ZiAoIXNpbmZEYXRhKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc2luZnMudW5j
aGVja2VkQXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoc2luZkRhdGEpKSk7Cisg
ICAgICAgIHNpbmZzLnVuY2hlY2tlZEFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3Zl
KCpzaW5mRGF0YSkpKTsKICAgICB9CiAKICAgICByZXR1cm4gc2luZnM7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZh
aXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVh
bWluZ0FWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTcxNSw3ICs3MTUsNyBAQCB2b2lkIENE
TUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgIGlkZW50aWZpZXIgPSBh
ZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTppbml0RGF0YS0+Y3JlYXRlTlNE
YXRhKCkuZ2V0KCkgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKICNpZiBIQVZFKEZB
SVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCiAgICAgZWxzZSBpZiAoaW5pdERhdGFUeXBl
ID09IEluaXREYXRhUmVnaXN0cnk6OmNlbmNOYW1lKCkpIHsKLSAgICAgICAgU3RyaW5nIHBzc2hT
dHJpbmcgPSBiYXNlNjRFbmNvZGUoaW5pdERhdGEtPmRhdGEoKSwgaW5pdERhdGEtPnNpemUoKSk7
CisgICAgICAgIGF1dG8gcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGluaXREYXRh
LT5kYXRhKCksIGluaXREYXRhLT5zaXplKCkpOwogICAgICAgICBpbml0aWFsaXphdGlvbkRhdGEg
PSBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6QHsgQCJwc3NoIjogKE5T
U3RyaW5nKilwc3NoU3RyaW5nIH0gb3B0aW9uczpOU0pTT05Xcml0aW5nUHJldHR5UHJpbnRlZCBl
cnJvcjpuaWxdOwogICAgIH0KICNlbmRpZgpAQCAtODUwLDExICs4NTAsMTEgQEAgdm9pZCBDRE1J
bnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICAgICAgaWYgKCFrZXlJRFN0
cmluZykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBrZXlJRFZlY3RvcjsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGtl
eUlEU3RyaW5nLCBrZXlJRFZlY3RvcikpCisgICAgICAgICAgICBhdXRvIGtleUlEVmVjdG9yID0g
YmFzZTY0RGVjb2RlKGtleUlEU3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChrZXlJRFZlY3RvcikK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGF1dG8ga2V5SUQg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGtleUlEVmVjdG9yKSk7CisgICAgICAgICAg
ICBhdXRvIGtleUlEID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqa2V5SURWZWN0b3Ip
KTsKICAgICAgICAgICAgIGF1dG8gZm91bmRJbmRleCA9IG1fY3VycmVudFJlcXVlc3QudmFsdWUo
KS5yZXF1ZXN0cy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiByZXF1ZXN0KSB7CiAgICAgICAgICAg
ICAgICAgYXV0byBrZXlJRHMgPSBrZXlJRHNGb3JSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBrZXlJRHMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBSZWY8U2hh
cmVkQnVmZmVyPiYgaWQpIHsKQEAgLTg4NSwxMCArODg1LDEwIEBAIHZvaWQgQ0RNSW5zdGFuY2VT
ZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAgICAgICAgICAgICBhdXRvIHBheWxvYWRTdHJp
bmcgPSBwYXlsb2FkRmluZFJlc3VsdHMtPnZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAg
ICAgIGlmICghcGF5bG9hZFN0cmluZykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBwYXlsb2FkVmVjdG9yOwotICAgICAg
ICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKHBheWxvYWRTdHJpbmcsIHBheWxvYWRWZWN0b3Ip
KQorICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZFZlY3RvciA9IGJhc2U2NERlY29kZShwYXls
b2FkU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWRWZWN0b3IpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBhdXRvIHBheWxvYWRE
YXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShwYXlsb2FkVmVjdG9yKSk7CisgICAg
ICAgICAgICAgICAgYXV0byBwYXlsb2FkRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1v
dmUoKnBheWxvYWRWZWN0b3IpKTsKICAgICAgICAgICAgICAgICBbcmVxdWVzdCBwcm9jZXNzQ29u
dGVudEtleVJlc3BvbnNlOltQQUw6OmdldEFWQ29udGVudEtleVJlc3BvbnNlQ2xhc3MoKSBjb250
ZW50S2V5UmVzcG9uc2VXaXRoRmFpclBsYXlTdHJlYW1pbmdLZXlSZXNwb25zZURhdGE6cGF5bG9h
ZERhdGEtPmNyZWF0ZU5TRGF0YSgpLmdldCgpXV07CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTExOTUsOCArMTE5NSw4IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNz
aW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgYXV0byYga2V5SUQgPSByZXF1ZXN0RGF0YS5maXJz
dDsKICAgICAgICAgICAgIGF1dG8mIHBheWxvYWQgPSByZXF1ZXN0RGF0YS5zZWNvbmQ7Ci0gICAg
ICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29kZShrZXlJRC0+ZGF0
YSgpLCBrZXlJRC0+c2l6ZSgpKSk7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJwYXls
b2FkIiwgYmFzZTY0RW5jb2RlKHBheWxvYWQuZ2V0KCkuYnl0ZXMsIHBheWxvYWQuZ2V0KCkubGVu
Z3RoKSk7CisgICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKTsKKyAgICAgICAgICAgIGVu
dHJ5LT5zZXRTdHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGVUb1N0cmluZyhwYXlsb2FkLmdl
dCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxlbmd0aCkpOwogICAgICAgICAgICAgcmVxdWVzdEpT
T04tPnB1c2hPYmplY3QoV1RGTW92ZShlbnRyeSkpOwogICAgICAgICB9CiAgICAgICAgIGF1dG8g
cmVxdWVzdEJ1ZmZlciA9IHV0ZjhCdWZmZXIocmVxdWVzdEpTT04tPnRvSlNPTlN0cmluZygpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDEwICsxMzAsNyBAQCBTdHJp
bmcgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSCiAgICAgaWYgKGVuY29kZWRJbWFn
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAotICAgIFZlY3RvcjxjaGFy
PiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNv
ZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWlt
ZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygi
ZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChlbmNvZGVkSW1hZ2Uu
ZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpKSk7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
Y3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEw
ICsxNzQsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0CiAKIFN0
cmluZyBkYXRhVVJMKENGRGF0YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewot
ICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRC
eXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEpOwotCi0gICAg
cmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAg
IHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRF
bmNvZGVkKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSkpOwog
fQogCiBTdHJpbmcgZGF0YVVSTChjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnRO
YW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQpOwog
Ci0gICAgU3RyaW5nIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBi
YXNlNjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBz
aXplb2YoZm9udFV1aWQpKTsKICAgICBBU1NFUlQoZm9udE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNF
U0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGFDYWlyby5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVl
Rm9udE5hbWUoKQogICAgIEdVSUQgZm9udFV1aWQ7CiAgICAgQ29DcmVhdGVHdWlkKCZmb250VXVp
ZCk7CiAKLSAgICBTdHJpbmcgZm9udE5hbWUgPSBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oJmZvbnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSk7CisgICAgYXV0byBmb250TmFt
ZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVp
ZCksIHNpemVvZihmb250VXVpZCkpOwogICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExG
X0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0JKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTIxOSw3ICsyMTksNyBAQCBzdGF0aWMgU3RyaW5nIHNpZ25l
ZFB1YmxpY0tleUFuZENoYWxsZW5nCiAgICAgaWYgKFNlY0FzbjFFbmNvZGVJdGVtKGNvZGVyLCAm
c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLCBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VU
ZW1wbGF0ZSwgJmVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UpICE9IG5vRXJyKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29k
ZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZS5MZW5ndGgpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhl
bmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkRhdGEsIGVuY29kZWRTaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2UuTGVuZ3RoKTsKIH0KIAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdp
c3RyeUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIFJlZjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlQmxvYlJl
cwogICAgIHJldHVybiBibG9iUmVnaXN0cnkoKS5ibG9iUmVnaXN0cnlJbXBsKCktPmNyZWF0ZVJl
c291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvYWRCbG9i
UmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYg
ZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCitz
dGF0aWMgdm9pZCBsb2FkQmxvYlJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVj
dG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIGF1dG8qIGJsb2JEYXRhID0gYmxvYlJlZ2lzdHJ5
KCkuYmxvYlJlZ2lzdHJ5SW1wbCgpLT5nZXRCbG9iRGF0YUZyb21VUkwocmVxdWVzdC51cmwoKSk7
CiAgICAgQmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGJsb2JE
YXRhLCByZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAko
cmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIG5hbWVz
cGFjZSB7CiAKIGNsYXNzIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyIDogcHVibGljIFJl
c291cmNlSGFuZGxlQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBCbG9iUmVzb3VyY2VTeW5jaHJvbm91
c0xvYWRlcihSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYp
OworICAgIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImLCBSZXNv
dXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+Jik7CiAKICAgICB2b2lkIGRpZFJlY2VpdmVS
ZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXNwb25zZSYmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwogICAgIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKSBmaW5hbDsKQEAgLTg1LDEwICs4NSwxMCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIFJlc291cmNlRXJyb3ImIG1fZXJyb3I7CiAgICAgUmVzb3Vy
Y2VSZXNwb25zZSYgbV9yZXNwb25zZTsKLSAgICBWZWN0b3I8Y2hhcj4mIG1fZGF0YTsKKyAgICBW
ZWN0b3I8dWludDhfdD4mIG1fZGF0YTsKIH07CiAKLUJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9h
ZGVyOjpCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiBlcnJvciwg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK0Jsb2JSZXNv
dXJjZVN5bmNocm9ub3VzTG9hZGVyOjpCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcihSZXNv
dXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50
OF90PiYgZGF0YSkKICAgICA6IG1fZXJyb3IoZXJyb3IpCiAgICAgLCBtX3Jlc3BvbnNlKHJlc3Bv
bnNlKQogICAgICwgbV9kYXRhKGRhdGEpCkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBCbG9iUmVz
b3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUgogCiAgICAgLy8gUmVhZCBhbGwgdGhlIGRhdGEu
CiAgICAgbV9kYXRhLnJlc2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+KHJlc3BvbnNlLmV4cGVjdGVk
Q29udGVudExlbmd0aCgpKSk7Ci0gICAgc3RhdGljX2Nhc3Q8QmxvYlJlc291cmNlSGFuZGxlKj4o
aGFuZGxlKS0+cmVhZFN5bmMobV9kYXRhLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihtX2RhdGEu
c2l6ZSgpKSk7CisgICAgc3RhdGljX2Nhc3Q8QmxvYlJlc291cmNlSGFuZGxlKj4oaGFuZGxlKS0+
cmVhZFN5bmMocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9kYXRhLmRhdGEoKSksIHN0YXRpY19j
YXN0PGludD4obV9kYXRhLnNpemUoKSkpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAK
QEAgLTE0MSw3ICsxNDEsNyBAQCBSZWY8QmxvYlJlc291cmNlSGFuZGxlPiBCbG9iUmVzb3VyY2VI
YW5kCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmxvYlJlc291cmNlSGFuZGxlKGJsb2JEYXRh
LCByZXF1ZXN0LCBjbGllbnQsIHRydWUpKTsKIH0KIAotdm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQmxvYkRhdGEqIGJsb2JEYXRhLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBCbG9iUmVzb3VyY2VIYW5k
bGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQmxvYkRhdGEqIGJsb2JEYXRhLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIGlmICghZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocmVxdWVzdC5odHRwTWV0aG9kKCksICJnZXQiKSkg
ewogICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3Iod2ViS2l0QmxvYlJlc291cmNlRG9tYWlu
LCBzdGF0aWNfY2FzdDxpbnQ+KEVycm9yOjpNZXRob2ROb3RBbGxvd2VkKSwgcmVzcG9uc2UudXJs
KCksICJSZXF1ZXN0IG1ldGhvZCBtdXN0IGJlIEdFVCIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJj
ZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIEJsb2JSZXNv
dXJjZUhhbmRsZSBmaW5hbCA6IHB1YmxpYyAKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEJsb2JS
ZXNvdXJjZUhhbmRsZT4gY3JlYXRlQXN5bmMoQmxvYkRhdGEqLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCopOwogCi0gICAgc3RhdGljIHZvaWQgbG9hZFJlc291
cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291
cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBz
dGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEJsb2JEYXRhKiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8
dWludDhfdD4mIGRhdGEpOwogCiAgICAgdm9pZCBzdGFydCgpOwogICAgIGludCByZWFkU3luYyhj
aGFyKiwgaW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVu
dGlhbEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQ3JlZGVudGlhbEJhc2UuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNyZWRlbnRpYWxCYXNlLmgiCiAKICNpbmNsdWRlICJD
cmVkZW50aWFsLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtOTQsNCArOTUsMTAgQEAgYm9vbCBDcmVkZW50aWFsQmFzZTo6Y29tcGFy
ZShjb25zdCBDcmVkZQogICAgIHJldHVybiBDcmVkZW50aWFsOjpwbGF0Zm9ybUNvbXBhcmUoYSwg
Yik7CiB9CiAKK1N0cmluZyBDcmVkZW50aWFsQmFzZTo6c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0
aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0Cit7CisgICAgYXV0byBjcmVkZW50aWFsU3RyaW5nRGF0
YSA9IG1ha2VTdHJpbmcobV91c2VyLCAnOicsIG1fcGFzc3dvcmQpLnV0ZjgoKTsKKyAgICByZXR1
cm4gbWFrZVN0cmluZygiQmFzaWMgIiwgYmFzZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5nRGF0
YSkpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRl
bnRpYWxCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9DcmVkZW50aWFsQmFzZS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDYgQEAgZW51bSBDcmVkZW50aWFsUGVyc2lzdGVuY2UgewogfTsKIAogY2xhc3MgQ3JlZGVu
dGlhbEJhc2UgewotCiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0VtcHR5KCkg
Y29uc3Q7CiAgICAgCkBAIC01Miw2ICs1MSw4IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgQ3JlZGVudGlhbCYsIGNvbnN0IENyZWRlbnRp
YWwmKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQmFzaWNB
dXRob3JpemF0aW9uSGVhZGVyKCkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VY
UE9SVCBDcmVkZW50aWFsQmFzZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIENyZWRlbnRpYWxCYXNl
KGNvbnN0IFN0cmluZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCwgQ3JlZGVudGlhbFBl
cnNpc3RlbmNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVS
TERlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRGF0YVVSTERlY29kZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ4LDM2ICsxNDgsMjYgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVUYXNrPiBjcmVh
dAogICAgICk7CiB9CiAKLXN0YXRpYyBib29sIGRlY29kZUJhc2U2NChEZWNvZGVUYXNrJiB0YXNr
LCBNb2RlIG1vZGUpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWNvZGVCYXNl
NjQoY29uc3QgRGVjb2RlVGFzayYgdGFzaywgTW9kZSBtb2RlKQogewotICAgIFZlY3RvcjxjaGFy
PiBidWZmZXI7Ci0gICAgaWYgKG1vZGUgPT0gTW9kZTo6Rm9yZ2l2aW5nQmFzZTY0KSB7Ci0gICAg
ICAgIGF1dG8gdW5lc2NhcGVkU3RyaW5nID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRhc2su
ZW5jb2RlZERhdGEudG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKLSAgICAgICAgaWYgKCFiYXNl
NjREZWNvZGUodW5lc2NhcGVkU3RyaW5nLCBidWZmZXIsIEJhc2U2NFZhbGlkYXRlUGFkZGluZyB8
IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzIHwgQmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFi
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgeworICAgIHN3aXRjaCAo
bW9kZSkgeworICAgIGNhc2UgTW9kZTo6Rm9yZ2l2aW5nQmFzZTY0OgorICAgICAgICByZXR1cm4g
YmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0YXNrLmVuY29kZWREYXRhKSwg
eyBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcsIEJhc2U2NERlY29kZU9wdGlv
bnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzLCBCYXNlNjREZWNvZGVPcHRpb25zOjpEaXNjYXJk
VmVydGljYWxUYWJ9KTsKKworICAgIGNhc2UgTW9kZTo6TGVnYWN5OgogICAgICAgICAvLyBGaXJz
dCB0cnkgYmFzZTY0dXJsLgotICAgICAgICBpZiAoIWJhc2U2NFVSTERlY29kZSh0YXNrLmVuY29k
ZWREYXRhLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgYnVmZmVyKSkgewotICAgICAgICAgICAg
Ly8gRGlkbid0IHdvcmssIHRyeSB1bmVzY2FwaW5nIGFuZCBkZWNvZGluZyBhcyBiYXNlNjQuCi0g
ICAgICAgICAgICBhdXRvIHVuZXNjYXBlZFN0cmluZyA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNl
cyh0YXNrLmVuY29kZWREYXRhLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7Ci0gICAgICAgICAg
ICBpZiAoIWJhc2U2NERlY29kZSh1bmVzY2FwZWRTdHJpbmcsIGJ1ZmZlciwgQmFzZTY0SWdub3Jl
U3BhY2VzQW5kTmV3TGluZXMgfCBCYXNlNjREaXNjYXJkVmVydGljYWxUYWIpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBkZWNvZGVk
RGF0YSA9IGJhc2U2NFVSTERlY29kZSh0YXNrLmVuY29kZWREYXRhKSkKKyAgICAgICAgICAgIHJl
dHVybiBkZWNvZGVkRGF0YTsKKyAgICAgICAgLy8gRGlkbid0IHdvcmssIHRyeSB1bmVzY2FwaW5n
IGFuZCBkZWNvZGluZyBhcyBiYXNlNjQuCisgICAgICAgIHJldHVybiBiYXNlNjREZWNvZGUoZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRhc2suZW5jb2RlZERhdGEpLCB7IEJhc2U2NERlY29kZU9w
dGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzLCBCYXNlNjREZWNvZGVPcHRpb25zOjpEaXNj
YXJkVmVydGljYWxUYWIgfSk7CiAgICAgfQotICAgIGJ1ZmZlci5zaHJpbmtUb0ZpdCgpOwotICAg
IHRhc2sucmVzdWx0LmRhdGEgPSBXVEZNb3ZlKGJ1ZmZlcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotc3RhdGljIHZvaWQgZGVjb2RlRXNjYXBlZChEZWNvZGVUYXNrJiB0YXNrKQorc3RhdGlj
IFZlY3Rvcjx1aW50OF90PiBkZWNvZGVFc2NhcGVkKGNvbnN0IERlY29kZVRhc2smIHRhc2spCiB7
CiAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nRnJvbUNoYXJzZXQodGFzay5yZXN1bHQuY2hhcnNl
dCk7CiAgICAgYXV0byYgZW5jb2RpbmcgPSBlbmNvZGluZ0Zyb21DaGFyc2V0LmlzVmFsaWQoKSA/
IGVuY29kaW5nRnJvbUNoYXJzZXQgOiBVVEY4RW5jb2RpbmcoKTsKLSAgICBhdXRvIGJ1ZmZlciA9
IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0YSh0YXNrLmVuY29kZWREYXRhLCBlbmNvZGlu
Zyk7Ci0KLSAgICBidWZmZXIuc2hyaW5rVG9GaXQoKTsKLSAgICB0YXNrLnJlc3VsdC5kYXRhID0g
V1RGTW92ZShidWZmZXIpOworICAgIHJldHVybiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0Rh
dGEodGFzay5lbmNvZGVkRGF0YSwgZW5jb2RpbmcpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8UmVz
dWx0PiBkZWNvZGVTeW5jaHJvbm91c2x5KERlY29kZVRhc2smIHRhc2ssIE1vZGUgbW9kZSkKQEAg
LTE4NiwxMSArMTc2LDE0IEBAIHN0YXRpYyBPcHRpb25hbDxSZXN1bHQ+IGRlY29kZVN5bmNocm9u
b3UKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmICh0YXNrLmlzQmFzZTY0
KSB7Ci0gICAgICAgIGlmICghZGVjb2RlQmFzZTY0KHRhc2ssIG1vZGUpKQorICAgICAgICBhdXRv
IGRlY29kZWREYXRhID0gZGVjb2RlQmFzZTY0KHRhc2ssIG1vZGUpOworICAgICAgICBpZiAoIWRl
Y29kZWREYXRhKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgdGFz
ay5yZXN1bHQuZGF0YSA9IFdURk1vdmUoKmRlY29kZWREYXRhKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgZGVjb2RlRXNjYXBlZCh0YXNrKTsKKyAgICAgICAgdGFzay5yZXN1bHQuZGF0YSA9IGRlY29k
ZUVzY2FwZWQodGFzayk7CiAKKyAgICB0YXNrLnJlc3VsdC5kYXRhLnNocmlua1RvRml0KCk7CiAg
ICAgcmV0dXJuIFdURk1vdmUodGFzay5yZXN1bHQpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5oCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgc3RydWN0IFJlc3VsdCB7CiAgICAgU3Ry
aW5nIG1pbWVUeXBlOwogICAgIFN0cmluZyBjaGFyc2V0OwogICAgIFN0cmluZyBjb250ZW50VHlw
ZTsKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKIH07
CiAKIHVzaW5nIERlY29kZUNvbXBsZXRpb25IYW5kbGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkIChP
cHRpb25hbDxSZXN1bHQ+KT47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpmYWlsdXJlVGltZXJG
aXJlZCgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5k
bGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRs
ZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBz
dG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgaWYgKGF1dG8g
Y29uc3RydWN0b3IgPSBidWlsdGluUmVzb3VyY2VIYW5kbGVTeW5jaHJvbm91c0xvYWRlck1hcCgp
LmdldChyZXF1ZXN0LnVybCgpLnByb3RvY29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkg
ewogICAgICAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFs
c1BvbGljeSwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBjbGFzcyBDdXJsUmVzb3VyY2VIYW5kbGVEZWxl
Z2F0ZTsKIGNsYXNzIFJlc291cmNlSGFuZGxlIDogcHVibGljIFJlZkNvdW50ZWQ8UmVzb3VyY2VI
YW5kbGU+LCBwdWJsaWMgQXV0aGVudGljYXRpb25DbGllbnQgewogcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZShOZXR3b3JraW5n
Q29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50Kiwg
Ym9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRD
b250ZW50RW5jb2RpbmdTbmlmZik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3Vy
Y2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVy
cm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+UmVzb3VyY2VIYW5kbGUoKTsKIAogI2lmIFBMQVRGT1JNKENP
Q09BKSB8fCBVU0UoQ0ZVUkxDT05ORUNUSU9OKQpAQCAtMTkzLDcgKzE5Myw3IEBAIHB1YmxpYzoK
ICAgICB0eXBlZGVmIFJlZjxSZXNvdXJjZUhhbmRsZT4gKCpCdWlsdGluQ29uc3RydWN0b3IpKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVu
dCk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCdWlsdGluQ29uc3RydWN0b3IoY29uc3QgQXRv
bVN0cmluZyYgcHJvdG9jb2wsIEJ1aWx0aW5Db25zdHJ1Y3Rvcik7CiAKLSAgICB0eXBlZGVmIHZv
aWQgKCpCdWlsdGluU3luY2hyb25vdXNMb2FkZXIpKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3Im
LCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICB0eXBlZGVmIHZv
aWQgKCpCdWlsdGluU3luY2hyb25vdXNMb2FkZXIpKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3Im
LCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKICAgICBzdGF0aWMg
dm9pZCByZWdpc3RlckJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlcihjb25zdCBBdG9tU3RyaW5nJiBw
cm90b2NvbCwgQnVpbHRpblN5bmNocm9ub3VzTG9hZGVyKTsKIAogcHJvdGVjdGVkOgpAQCAtMjEz
LDcgKzIxMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5
cGUpOwogCiAgICAgYm9vbCBzdGFydCgpOwotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtTG9hZFJl
c291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VS
ZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1M
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNv
dXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKIAogICAgIHZvaWQgcmVmQXV0
aGVudGljYXRpb25DbGllbnQoKSBvdmVycmlkZSB7IHJlZigpOyB9CiAgICAgdm9pZCBkZXJlZkF1
dGhlbnRpY2F0aW9uQ2xpZW50KCkgb3ZlcnJpZGUgeyBkZXJlZigpOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9h
ZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDcgQEAgdm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZQog
CiB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgaW50IC8qZW5jb2RlZERh
dGFMZW5ndGgqLykKIHsKLSAgICBtX2RhdGEuYXBwZW5kKGRhdGEsIGxlbmd0aCk7CisgICAgbV9k
YXRhLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3Ro
KTsKIH0KIAogdm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhS
ZXNvdXJjZUhhbmRsZSogaGFuZGxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xv
YWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgc2V0QWxsb3dTdG9yZWRDcmVkZW50aWFscyhib29sIGFsbG93KSB7IG1fYWxsb3dT
dG9yZWRDcmVkZW50aWFscyA9IGFsbG93OyB9CiAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9Ci0gICAgVmVjdG9yPGNoYXI+
JiBtdXRhYmxlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIFZlY3Rvcjx1aW50OF90PiYg
bXV0YWJsZURhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KICAgICBjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KICAgICBTeW5jaHJvbm91c0xvYWRl
ck1lc3NhZ2VRdWV1ZSYgbWVzc2FnZVF1ZXVlKCkgeyByZXR1cm4gbV9tZXNzYWdlUXVldWUuZ2V0
KCk7IH0KIApAQCAtNzUsNyArNzUsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2FsbG93U3Rv
cmVkQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwogICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25z
ZTsKLSAgICBWZWN0b3I8Y2hhcj4gbV9kYXRhOworICAgIFZlY3Rvcjx1aW50OF90PiBtX2RhdGE7
CiAgICAgUmVzb3VyY2VFcnJvciBtX2Vycm9yOwogICAgIFJlZjxTeW5jaHJvbm91c0xvYWRlck1l
c3NhZ2VRdWV1ZT4gbV9tZXNzYWdlUXVldWU7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSw3IEBA
IHN0YXRpYyBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPENGRGF0YVIKIAogc3RhdGljIHZvaWQg
YXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogewotICAgIFN0cmluZyBhdXRoZW50aWNhdGlv
bkhlYWRlciA9ICJCYXNpYyAiICsgYmFzZTY0RW5jb2RlKFN0cmluZyhjcmVkZW50aWFsLnVzZXIo
KSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKSkudXRmOCgpKTsKLQotICAgIHJlcXVlc3Qu
c2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uLCBhdXRoZW50
aWNhdGlvbkhlYWRlcik7CisgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRl
ck5hbWU6OkF1dGhvcml6YXRpb24sIGNyZWRlbnRpYWwuc2VyaWFsaXphdGlvbkZvckJhc2ljQXV0
aG9yaXphdGlvbkhlYWRlcigpKTsKIH0KIAogUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291
cmNlSGFuZGxlSW50ZXJuYWwoKQpAQCAtNTI0LDcgKzUyMiw3IEBAIHN0YXRpYyB2b2lkIGVtcHR5
UGVyZm9ybSh2b2lkKikKIHsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRm
b3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBz
dG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgTE9HKE5ldHdv
cmssICJSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5OiVz
IHNzdG9yZWRDcmVkZW50aWFsc1BvbGljeToldSIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0b3JlZENyZWRlbnRpYWxzUG9saWN5
KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6
OnJlc3RhcnRSZXF1ZXN0V2l0aEMKICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zdGFydCgpOwogfQog
Ci12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291
cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+
JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5
LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rv
cjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFT
U0VSVCghcmVxdWVzdC5pc0VtcHR5KCkpOwpAQCAtNTYyLDkgKzU2Miw5IEBAIHZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OmhhbmRsZURhdGFVUkwoKQogCiAgICAgICAgIC8vIGRpZFJlY2VpdmVSZXNwb25z
ZSBtaWdodCBjYXVzZSB0aGUgY2xpZW50IHRvIGJlIGRlbGV0ZWQuCiAgICAgICAgIGlmIChjbGll
bnQoKSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmIChi
YXNlNjREZWNvZGUoZGF0YSwgb3V0LCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykgJiYg
b3V0LnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVCdWZm
ZXIodGhpcywgU2hhcmVkQnVmZmVyOjpjcmVhdGUob3V0LmRhdGEoKSwgb3V0LnNpemUoKSksIG9y
aWdpbmFsU2l6ZSk7CisgICAgICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2Rl
KGRhdGEsIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKTsKKyAg
ICAgICAgICAgIGlmIChkZWNvZGVkRGF0YSAmJiBkZWNvZGVkRGF0YS0+c2l6ZSgpID4gMCkKKyAg
ICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcih0aGlzLCBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShkZWNvZGVkRGF0YS0+ZGF0YSgpLCBkZWNvZGVkRGF0YS0+c2l6ZSgpKSwgb3Jp
Z2luYWxTaXplKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIFRleHRFbmNvZGlu
ZyBlbmNvZGluZyhjaGFyc2V0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRs
ZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjcsOSArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgCiBzdGF0aWMgdm9pZCBhcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcihSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7Ci0g
ICAgU3RyaW5nIGF1dGhlbnRpY2F0aW9uSGVhZGVyID0gIkJhc2ljICIgKyBiYXNlNjRFbmNvZGUo
U3RyaW5nKGNyZWRlbnRpYWwudXNlcigpICsgIjoiICsgY3JlZGVudGlhbC5wYXNzd29yZCgpKS51
dGY4KCkpOwotCi0gICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6
OkF1dGhvcml6YXRpb24sIGF1dGhlbnRpY2F0aW9uSGVhZGVyKTsKKyAgICByZXF1ZXN0LnNldEhU
VFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlvbiwgY3JlZGVudGlhbC5z
ZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkpOwogfQogCiBzdGF0aWMg
TlNPcGVyYXRpb25RdWV1ZSAqb3BlcmF0aW9uUXVldWVGb3JBc3luY0NsaWVudHMoKQpAQCAtMzUy
LDcgKzM1MCw3IEBAIENGU3RyaW5nUmVmIFJlc291cmNlSGFuZGxlOjpzeW5jaHJvbm91c0wKICAg
ICByZXR1cm4gQ0ZTVFIoIldlYkNvcmVTeW5jaHJvbm91c0xvYWRlclJ1bkxvb3BNb2RlIik7CiB9
CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVz
b3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hh
cj4mIGRhdGEpCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVj
dG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIExPRyhOZXR3b3JrLCAiUmVzb3VyY2VIYW5kbGU6
OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseTolQCBzdG9yZWRDcmVkZW50aWFsc1Bv
bGljeToldSIsIHJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05v
dFVwZGF0ZUhUVFBCb2R5KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0b3JlZENyZWRlbnRpYWxz
UG9saWN5KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZUhhbmRsZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVT
b3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG8KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNo
YXI+JikKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25v
dXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rv
cjx1aW50OF90PiYpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5l
dHdvcmtTZXNzaW9uLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDcgKzg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZGlnZXN0LT5hZGRCeXRlcyhjZXJ0
aWZpY2F0ZURhdGEtPmRhdGEsIGNlcnRpZmljYXRlRGF0YS0+bGVuKTsKIAogICAgICAgICBhdXRv
IGhhc2ggPSBkaWdlc3QtPmNvbXB1dGVIYXNoKCk7Ci0gICAgICAgIHJldHVybiBiYXNlNjRFbmNv
ZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaGFzaC5kYXRhKCkpLCBoYXNoLnNpemUo
KSk7CisgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICB9CiAK
ICAgICBIYXNoU2V0PFN0cmluZz4gbV9jZXJ0aWZpY2F0ZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBl
U2VxdWVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMSArMTU0LDExIEBAIFN0cmluZyBk
ZWNvZGVFc2NhcGVTZXF1ZW5jZXMoU3RyaW5nVmlldyAKICAgICByZXR1cm4gcmVzdWx0LnRvU3Ry
aW5nKCk7CiB9CiAKLWlubGluZSBWZWN0b3I8Y2hhcj4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2Vz
QXNEYXRhKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQor
aW5saW5lIFZlY3Rvcjx1aW50OF90PiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3Ry
aW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgQVNT
RVJUKGVuY29kaW5nLmlzVmFsaWQoKSk7CiAKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OworICAg
IFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAgICAgc2l6ZV90IGRlY29kZWRQb3NpdGlvbiA9IDA7
CiAgICAgc2l6ZV90IHNlYXJjaFBvc2l0aW9uID0gMDsKICAgICB3aGlsZSAodHJ1ZSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90
ZWRQcmludGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyBj
b25zdCBzaXplX3QgbWF4aW11bUxpbmVMZW5ndGggPSAKIAogc3RhdGljIGNvbnN0IGNoYXIgY3Js
ZkxpbmVFbmRpbmdbXSA9ICJcclxuIjsKIAotc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRp
bmdBdEluZGV4KGNvbnN0IGNoYXIqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgsIHNpemVfdCBp
bmRleCkKK3N0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRleChjb25zdCB1aW50
OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoLCBzaXplX3QgaW5kZXgpCiB7CiAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBpbnB1dExlbmd0aCk7CiAgICAg
aWYgKGlucHV0W2luZGV4XSA9PSAnXG4nKQpAQCAtNTUsMTkgKzU1LDE5IEBAIHN0YXRpYyBzaXpl
X3QgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRleCgKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBx
dW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbiwgVmVjdG9yPGNoYXI+
JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgaW5wdXQpCiB7Ci0gICAgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGluLmRhdGEo
KSwgaW4uc2l6ZSgpLCBvdXQpOworICAgIHJldHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwogfQogCi12b2lkIHF1b3RlZFByaW50YWJsZUVuY29k
ZShjb25zdCBjaGFyKiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoLCBWZWN0b3I8Y2hhcj4mIG91
dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgdWludDhfdCog
aW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCkKIHsKLSAgICBvdXQuY2xlYXIoKTsKLSAgICBvdXQu
cmVzZXJ2ZUNhcGFjaXR5KGlucHV0TGVuZ3RoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0Owor
ICAgIG91dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGlucHV0TGVuZ3RoKTsKICAgICBzaXplX3Qg
Y3VycmVudExpbmVMZW5ndGggPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5wdXRM
ZW5ndGg7ICsraSkgewogICAgICAgICBib29sIGlzTGFzdENoYXJhY3RlciA9IChpID09IGlucHV0
TGVuZ3RoIC0gMSk7Ci0gICAgICAgIGNoYXIgY3VycmVudENoYXJhY3RlciA9IGlucHV0W2ldOwor
ICAgICAgICB1aW50OF90IGN1cnJlbnRDaGFyYWN0ZXIgPSBpbnB1dFtpXTsKICAgICAgICAgYm9v
bCByZXF1aXJlc0VuY29kaW5nID0gZmFsc2U7CiAgICAgICAgIC8vIEFsbCBub24tcHJpbnRhYmxl
IEFTQ0lJIGNoYXJhY3RlcnMgYW5kID0gcmVxdWlyZSBlbmNvZGluZy4KICAgICAgICAgaWYgKChj
dXJyZW50Q2hhcmFjdGVyIDwgJyAnIHx8IGN1cnJlbnRDaGFyYWN0ZXIgPiAnficgfHwgY3VycmVu
dENoYXJhY3RlciA9PSAnPScpICYmIGN1cnJlbnRDaGFyYWN0ZXIgIT0gJ1x0JykKQEAgLTExMiwx
OCArMTEyLDIwIEBAIHZvaWQgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IGNoYXIqIGkKICAg
ICAgICAgICAgIGN1cnJlbnRMaW5lTGVuZ3RoKys7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBy
ZXR1cm4gb3V0OwogfQogCi12b2lkIHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8
Y2hhcj4mIGluLCBWZWN0b3I8Y2hhcj4mIG91dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmlu
dGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKIHsKLSAgICBxdW90ZWRQ
cmludGFibGVEZWNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIG91dCk7CisgICAgcmV0dXJuIHF1
b3RlZFByaW50YWJsZURlY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7CiB9CiAKLXZv
aWQgcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVu
Z3RoLCBWZWN0b3I8Y2hhcj4mIG91dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVE
ZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgpCiB7Ci0gICAgb3V0
LmNsZWFyKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dDsKICAgICBpZiAoIWRhdGFMZW5ndGgp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG91dDsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7CiAgICAgICAgIGNoYXIgY3VycmVudENoYXJh
Y3RlciA9IGRhdGFbaV07CkBAIC0xNDksOCArMTUxLDkgQEAgdm9pZCBxdW90ZWRQcmludGFibGVE
ZWNvZGUoY29uc3QgY2hhciogZAogICAgICAgICAgICAgb3V0LmFwcGVuZChsb3dlckNoYXJhY3Rl
cik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBvdXQuYXBwZW5k
KHN0YXRpY19jYXN0PGNoYXI+KHRvQVNDSUlIZXhWYWx1ZSh1cHBlckNoYXJhY3RlciwgbG93ZXJD
aGFyYWN0ZXIpKSk7CisgICAgICAgIG91dC5hcHBlbmQodG9BU0NJSUhleFZhbHVlKHVwcGVyQ2hh
cmFjdGVyLCBsb3dlckNoYXJhY3RlcikpOwogICAgIH0KKyAgICByZXR1cm4gb3V0OwogfQogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxl
LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVv
dGVkUHJpbnRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE5ICsyOCwxNiBAQAogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFF1b3RlZFByaW50YWJsZV9oCi0jZGVmaW5lIFF1b3Rl
ZFByaW50YWJsZV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3Qg
VmVjdG9yPGNoYXI+JiwgVmVjdG9yPGNoYXI+Jik7Ci12b2lkIHF1b3RlZFByaW50YWJsZUVuY29k
ZShjb25zdCBjaGFyKiwgc2l6ZV90LCBWZWN0b3I8Y2hhcj4mKTsKK1ZlY3Rvcjx1aW50OF90PiBx
dW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CitWZWN0b3I8dWlu
dDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogCi12
b2lkIHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBWZWN0b3I8Y2hh
cj4mKTsKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QsIFZl
Y3RvcjxjaGFyPiYpOworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25z
dCBWZWN0b3I8dWludDhfdD4mKTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNv
ZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFF1b3RlZFByaW50YWJsZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vU1NMS2V5R2VuZXJhdG9yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9yV2luLmNwcAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDggKzgwLDggQEAgU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZVN0cmluZwogICAgICAgICBpZiAoIUNyeXB0U2lnbkFuZEVuY29kZUNlcnRpZmljYXRl
KGhDb250ZXh0LCBBVF9LRVlFWENIQU5HRSwgWDUwOV9BU05fRU5DT0RJTkcsIFg1MDlfS0VZR0VO
X1JFUVVFU1RfVE9fQkVfU0lHTkVELCAmcmVxdWVzdEluZm8sICZzaWduQWxnbywgMCwgcmVpbnRl
cnByZXRfY2FzdDxMUEJZVEU+KGJpbmFyeS5kYXRhKCkpLCAmZHdFbmNvZGVkTGVuZ3RoKSkKICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGtleVN0cmluZyA9IGJhc2U2NEVuY29kZShiaW5h
cnkpOwotICAgIH0gd2hpbGUoMCk7CisgICAgICAgIGtleVN0cmluZyA9IGJhc2U2NEVuY29kZVRv
U3RyaW5nKGJpbmFyeSk7CisgICAgfSB3aGlsZSAoMCk7CiAKICAgICBpZiAocFB1YkluZm8pCiAg
ICAgICAgIGZhc3RGcmVlKHBQdWJJbmZvKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dT
Y3JpcHRTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBTdHJpbmcg
U1dTY3JpcHRTdG9yYWdlOjpzaGEySGFzaChjb25zdCBTCiAgICAgYXV0byBpbnB1dFV0ZjggPSBp
bnB1dC51dGY4KCk7CiAgICAgY3J5cHRvLT5hZGRCeXRlcyhpbnB1dFV0ZjguZGF0YSgpLCBpbnB1
dFV0ZjgubGVuZ3RoKCkpOwogICAgIGF1dG8gaGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsK
LSAgICByZXR1cm4gV1RGOjpiYXNlNjRVUkxFbmNvZGUoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgp
KTsKKyAgICByZXR1cm4gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIGhhc2gu
c2l6ZSgpKTsKIH0KIAogU3RyaW5nIFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgVVJM
JiBpbnB1dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc3MTUpCisrKyBTb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDIxLTA1
LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFz
ZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVNl
dFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmg6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVUkxTY2hlbWVUYXNrOjpkaWRDb21wbGV0ZSk6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlVSTFNjaGVtZVRhc2suaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9h
ZGVyU3RyYXRlZ3kuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMb2FkZXJTdHJhdGVneTo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dl
YkxvYWRlclN0cmF0ZWd5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNj
aGVtZUhhbmRsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRs
ZXJQcm94eTo6bG9hZFN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuaDoKKyAgICAgICAgVXBkYXRlIHRvIHVzZSB1aW50
OF90KiBkYXRhIGJ1ZmZlcnMgbW9yZSBjb25zaXN0ZW50bHkgZm9yIHN5bmNocm9ub3VzIGxvYWRz
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6c2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlc3QpOgorICAgICAg
ICBVcGRhdGUgdG8gdXNlIHVpbnQ4X3QqIGRhdGEgYnVmZmVycyBtb3JlIGNvbnNpc3RlbnRseSBm
b3Igc3luY2hyb25vdXMgbG9hZHMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Qcml2YXRl
Q2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcmVDb252ZXJzaW9uUmVxdWVzdCk6CisgICAgICAgIFVw
ZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZSAvIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5j
b2RlZCgpKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFz
a0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjphcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRl
cik6CisgICAgICAgIFVzZSBuZXcgc2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhl
YWRlcigpIGhlbHBlci4KKworICAgICAgICAqIFNoYXJlZC9BUEkvQVBJRGF0YS5oOgorICAgICAg
ICAoQVBJOjpEYXRhOjpjcmVhdGUpOgorICAgICAgICAoQVBJOjpEYXRhOjpmYXN0RnJlZUJ5dGVz
KTogRGVsZXRlZC4KKyAgICAgICAgQWRkIG5ldyBjcmVhdGUgZnVuY3Rpb24gdGhhdCB0YWtlcyBv
d25lcnNoaXAgb2YgYSBWZWN0b3IncyBidWZmZXIgcmF0aGVyCisgICAgICAgIHRoYW4gY29weWlu
ZyBpdC4gUmVwbGFjZSB1c2Ugb2Ygc3RhdGljIGZ1bmN0aW9ucyB3aXRoIGlubGluZSBsYW1iZGFz
IGZvcgorICAgICAgICBmcmVlLWZ1bmN0aW9ucy4KKworICAgICAgICAqIFNoYXJlZC9tYWMvQXV4
aWxpYXJ5UHJvY2Vzc01hYy5tbToKKyAgICAgICAgKFdlYktpdDo6c2FuZGJveEZpbGVQYXRoKToK
KyAgICAgICAgVXNlIG1ha2VTdHJpbmcgYW5kIG5ldyBiYXNlNjRVUkxFbmNvZGVkKCkuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW06
CisgICAgICAgIChwcm9kdWNlQ2xpZW50RGF0YUpzb24pOgorICAgICAgICBVc2UgbmV3IG1ha2VT
dHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgpKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0
aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViS2l0
OjpiYXNlNjRFbmNvZGVkUE5HRGF0YSk6CisgICAgICAgIFVzZSBuZXcgbWFrZVN0cmluZyhiYXNl
NjRFbmNvZGVkKCkpLgorCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0
ZS5tbToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50
Ojp3ZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICBVc2UgbmV3IGRlZmF1bHRXZWJDcnlwdG9N
YXN0ZXJLZXkoKSBhbmQgbmV3IGFkb3B0aW5nIEFQSTo6RGF0YTo6Y3JlYXRlIGZ1bmN0aW9uLgor
CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVu
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2Vu
ZENvbW1hbmRzKToKKyAgICAgICAgVXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoKSku
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAgVXNlIG5ldyBiYXNlNjREZWNvZGUoKS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUpOgor
ICAgICAgICBVc2UgbmV3IGJhc2U2NERlY29kZSgpLgorCisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAg
VXNlIG5ldyBiYXNlNjREZWNvZGUoKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3Iv
bWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6CisgICAgICAgIFVzZSBuZXcgYmFzZTY0RGVjb2Rl
KCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
dEJhY2tlbmRDb21tYW5kcyk6CisgICAgICAgIFVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRFbmNv
ZGVkKCkpLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xv
Y2FsQXV0aGVudGljYXRvci5tbToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxBdXRoZW50aWNhdG9y
SW50ZXJuYWw6OnByb2R1Y2VIYXNoU2V0KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxBdXRoZW50
aWNhdG9yOjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsQXV0aGVudGlj
YXRvcjo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgVXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NEVu
Y29kZWQoKSkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9N
b2NrSGlkQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1vY2tIaWRDb25uZWN0aW9u
OjpmZWVkUmVwb3J0cyk6CisgICAgICAgIFVzZSBuZXcgYmFzZTY0RGVjb2RlKCkuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9u
Lm1tOgorICAgICAgICAoV2ViS2l0OjpNb2NrTG9jYWxDb25uZWN0aW9uOjpmaWx0ZXJSZXNwb25z
ZXMgY29uc3QpOgorICAgICAgICBVc2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4K
KwogMjAyMS0wNS0xOCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBhbGxvd3NDb250ZW50SmF2YVNjcmlwdCBBUEkgbm90IGFwcGxpZWQgZnJvbSBkZWZh
dWx0V2VicGFnZVByZWZlcmVuY2VzCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIG1lc3NhZ2VzIC0+IE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKIAogICAgIFNjaGVkdWxlUmVzb3VyY2VMb2Fk
KFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1l
dGVycykKLSAgICBQZXJmb3JtU3luY2hyb25vdXNMb2FkKFdlYktpdDo6TmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJlc291
cmNlRXJyb3IgZXJyb3IsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFZlY3Rv
cjxjaGFyPiBkYXRhKSBTeW5jaHJvbm91cworICAgIFBlcmZvcm1TeW5jaHJvbm91c0xvYWQoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
KSAtPiAoV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgVGVz
dFByb2Nlc3NJbmNvbWluZ1N5bmNNZXNzYWdlc1doZW5XYWl0aW5nRm9yU3luY1JlcGx5KFdlYktp
dDo6V2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQpIC0+IChib29sIGhhbmRsZWQpIFN5bmNo
cm9ub3VzCiAgICAgTG9hZFBpbmcoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVy
cyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKQogICAgIFJlbW92ZUxvYWRJZGVudGlmaWVyKHVpbnQ2
NF90IHJlc291cmNlTG9hZElkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIHZvaWQgc2Vu
ZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlcwogICAgIEFTU0VSVChkYXRhLmRlbGF5ZWRSZXBseSk7
CiAgICAgQVNTRVJUKCFkYXRhLnJlc3BvbnNlLmlzTnVsbCgpIHx8ICFkYXRhLmVycm9yLmlzTnVs
bCgpKTsKIAotICAgIFZlY3RvcjxjaGFyPiByZXNwb25zZUJ1ZmZlcjsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gcmVzcG9uc2VCdWZmZXI7CiAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPnNpemUoKSkK
ICAgICAgICAgcmVzcG9uc2VCdWZmZXIuYXBwZW5kKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNp
emUoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE0ICszMTUsMTUgQEAgdm9p
ZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcgogICAgICAgICBpZiAoIXdlYWtU
aGlzKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBwdWJs
aWNLZXlEYXRhOwotICAgICAgICBXVEY6OmJhc2U2NFVSTERlY29kZShwdWJsaWNLZXlCYXNlNjRV
UkwsIHB1YmxpY0tleURhdGEpOworICAgICAgICBhdXRvIHB1YmxpY0tleURhdGEgPSBiYXNlNjRV
UkxEZWNvZGUocHVibGljS2V5QmFzZTY0VVJMKTsKKyAgICAgICAgaWYgKCFwdWJsaWNLZXlEYXRh
KQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gY3J5cHRvID0gUEFMOjpDcnlw
dG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsK
LSAgICAgICAgY3J5cHRvLT5hZGRCeXRlcyhwdWJsaWNLZXlEYXRhLmRhdGEoKSwgcHVibGljS2V5
RGF0YS5zaXplKCkpOworICAgICAgICBjcnlwdG8tPmFkZEJ5dGVzKHB1YmxpY0tleURhdGEtPmRh
dGEoKSwgcHVibGljS2V5RGF0YS0+c2l6ZSgpKTsKICAgICAgICAgYXV0byBwdWJsaWNLZXlEYXRh
SGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKIAotICAgICAgICBhdXRvIGtleUlEID0gV1RG
OjpiYXNlNjRVUkxFbmNvZGUocHVibGljS2V5RGF0YUhhc2guZGF0YSgpLCBwdWJsaWNLZXlEYXRh
SGFzaC5zaXplKCkpOworICAgICAgICBhdXRvIGtleUlEID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJp
bmcocHVibGljS2V5RGF0YUhhc2guZGF0YSgpLCBwdWJsaWNLZXlEYXRhSGFzaC5zaXplKCkpOwog
ICAgICAgICBpZiAoa2V5SUQgIT0gYXR0cmlidXRpb24uc291cmNlVW5saW5rYWJsZVRva2VuKCkt
PmtleUlEQmFzZTY0VVJMKQogICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNr
Q29jb2EubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTY1LDgg
KzY1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAjaWYgVVNFKENSRURFTlRJQUxfU1RPUkFHRV9X
SVRIX05FVFdPUktfU0VTU0lPTikKIHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9u
SGVhZGVyKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6
Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKLSAgICBTdHJpbmcgYXV0aGVudGljYXRpb25IZWFk
ZXIgPSAiQmFzaWMgIiArIGJhc2U2NEVuY29kZShTdHJpbmcoY3JlZGVudGlhbC51c2VyKCkgKyAi
OiIgKyBjcmVkZW50aWFsLnBhc3N3b3JkKCkpLnV0ZjgoKSk7Ci0gICAgcmVxdWVzdC5zZXRIVFRQ
SGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGF1dGhl
bnRpY2F0aW9uSGVhZGVyKTsKKyAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChXZWJDb3Jl
OjpIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlvbiwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9u
Rm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9TaGFyZWQvQVBJL0FQSURhdGEuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktp
dC9TaGFyZWQvQVBJL0FQSURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsMTAgQEAg
cHVibGljOgogICAgICAgICAgICAgbWVtY3B5KGNvcGllZEJ5dGVzLCBieXRlcywgc2l6ZSk7CiAg
ICAgICAgIH0KIAotICAgICAgICByZXR1cm4gY3JlYXRlV2l0aG91dENvcHlpbmcoY29waWVkQnl0
ZXMsIHNpemUsIGZhc3RGcmVlQnl0ZXMsIG51bGxwdHIpOworICAgICAgICByZXR1cm4gY3JlYXRl
V2l0aG91dENvcHlpbmcoY29waWVkQnl0ZXMsIHNpemUsIFtdICh1bnNpZ25lZCBjaGFyKiBieXRl
cywgY29uc3Qgdm9pZCopIHsKKyAgICAgICAgICAgIGlmIChieXRlcykKKyAgICAgICAgICAgICAg
ICBmYXN0RnJlZShzdGF0aWNfY2FzdDx2b2lkKj4oYnl0ZXMpKTsKKyAgICAgICAgfSwgbnVsbHB0
cik7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBSZWY8RGF0YT4gY3JlYXRlKGNvbnN0IFZlY3Rv
cjx1bnNpZ25lZCBjaGFyPiYgYnVmZmVyKQpAQCAtNjgsNiArNzEsMTYgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOwogICAgIH0K
IAorICAgIHN0YXRpYyBSZWY8RGF0YT4gY3JlYXRlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmIGJ1
ZmZlcikKKyAgICB7CisgICAgICAgIGF1dG8gYnVmZmVyU2l6ZSA9IGJ1ZmZlci5zaXplKCk7Cisg
ICAgICAgIGF1dG8gYnVmZmVyUG9pbnRlciA9IGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCkubGVha1B0
cigpOworICAgICAgICByZXR1cm4gY3JlYXRlV2l0aG91dENvcHlpbmcoYnVmZmVyUG9pbnRlciwg
YnVmZmVyU2l6ZSwgW10gKHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBjb25zdCB2b2lkKikgeworICAg
ICAgICAgICAgaWYgKGJ5dGVzKQorICAgICAgICAgICAgICAgIFdURjo6VmVjdG9yTWFsbG9jOjpm
cmVlKGJ5dGVzKTsKKyAgICAgICAgfSwgbnVsbHB0cik7CisgICAgfQorCiAgICAgc3RhdGljIFJl
ZlB0cjxEYXRhPiBjcmVhdGUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7CiAgICAgCiAjaWYg
UExBVEZPUk0oQ09DT0EpCkBAIC05NiwxMiArMTA5LDYgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgZmFzdEZyZWVCeXRlcyh1bnNpZ25lZCBjaGFyKiBieXRlcywg
Y29uc3Qgdm9pZCopCi0gICAgewotICAgICAgICBpZiAoYnl0ZXMpCi0gICAgICAgICAgICBmYXN0
RnJlZShzdGF0aWNfY2FzdDx2b2lkKj4oYnl0ZXMpKTsKLSAgICB9Ci0KICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBtX2J5dGVzIHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNz
TWFjLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4
aWxpYXJ5UHJvY2Vzc01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE4ICszMTUsMTMgQEAg
c3RhdGljIFN0cmluZyBzYW5kYm94RGlyZWN0b3J5KFdlYkNvcmU6OgogCiBzdGF0aWMgU3RyaW5n
IHNhbmRib3hGaWxlUGF0aChjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgsIGNvbnN0IENTdHJp
bmcmIGhlYWRlcikKIHsKLSAgICBTdHJpbmdCdWlsZGVyIHNhbmRib3hGaWxlOwotICAgIHNhbmRi
b3hGaWxlLmFwcGVuZChkaXJlY3RvcnlQYXRoKTsKLSAgICBzYW5kYm94RmlsZS5hcHBlbmQoIi9D
b21waWxlZFNhbmRib3grIik7Ci0KICAgICAvLyBNYWtlIHRoZSBmaWxlbmFtZSBzZW1pLXVuaXF1
ZSBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIGhlYWRlci4KKwogICAgIGF1dG8gY3J5cHRv
ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGht
OjpTSEFfMjU2KTsKICAgICBjcnlwdG8tPmFkZEJ5dGVzKGhlYWRlci5kYXRhKCksIGhlYWRlci5s
ZW5ndGgoKSk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNo
KCk7Ci0gICAgU3RyaW5nIHJlYWRhYmxlSGFzaCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKGhhc2gu
ZGF0YSgpLCBoYXNoLnNpemUoKSk7CisgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFz
aCgpOwogCi0gICAgc2FuZGJveEZpbGUuYXBwZW5kKHJlYWRhYmxlSGFzaCk7Ci0gICAgcmV0dXJu
IHNhbmRib3hGaWxlLnRvU3RyaW5nKCk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5
UGF0aCwgIi9Db21waWxlZFNhbmRib3grIiwgYmFzZTY0VVJMRW5jb2RlZChoYXNoLmRhdGEoKSwg
aGFzaC5zaXplKCkpKTsKIH0KIAogc3RhdGljIGJvb2wgZW5zdXJlU2FuZGJveENhY2hlRGlyZWN0
b3J5KGNvbnN0IFNhbmRib3hJbmZvJiBpbmZvKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5n
IGNvcHkpCkBAIC01MjAsNyArNTIwLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAog
ICAgIFN0YXJ0VVJMU2NoZW1lVGFzayhzdHJ1Y3QgV2ViS2l0OjpVUkxTY2hlbWVUYXNrUGFyYW1l
dGVycyBwYXJhbWV0ZXJzKQogICAgIFN0b3BVUkxTY2hlbWVUYXNrKHVpbnQ2NF90IGhhbmRsZXJJ
ZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKLSAgICBMb2FkU3luY2hyb25vdXNV
UkxTY2hlbWVUYXNrKHN0cnVjdCBXZWJLaXQ6OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFt
ZXRlcnMpIC0+IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBXZWJDb3JlOjpS
ZXNvdXJjZUVycm9yIGVycm9yLCBWZWN0b3I8Y2hhcj4gZGF0YSkgU3luY2hyb25vdXMKKyAgICBM
b2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrKHN0cnVjdCBXZWJLaXQ6OlVSTFNjaGVtZVRhc2tQ
YXJhbWV0ZXJzIHBhcmFtZXRlcnMpIC0+IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3Bv
bnNlLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBWZWN0b3I8dWludDhfdD4gZGF0YSkg
U3luY2hyb25vdXMKIAogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgU2hvdWxk
QWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyhXZWJDb3JlOjpGcmFtZUlkZW50
aWZpZXIgZnJhbWVJRCwgc3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFtZUluZm8sIGJv
b2wgbWF5UHJvbXB0KSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9u
T3JNb3Rpb25QZXJtaXNzaW9uU3RhdGUgcGVybWlzc2lvblN0YXRlKSBBc3luYwpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIuaAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHN0cnVjdCBVUkxTY2hlbWVUYXNrUGFy
YW1ldGVyczsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKIAot
dXNpbmcgU3luY0xvYWRDb21wbGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImLCBjb25zdCBWZWN0b3I8Y2hhcj4mKT47Cit1c2luZyBTeW5jTG9hZENvbXBsZXRpb25I
YW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYpPjsKIAogY2xhc3MgV2ViVVJMU2NoZW1lSGFuZGxlciA6IHB1YmxpYyBSZWZDb3VudGVk
PFdlYlVSTFNjaGVtZUhhbmRsZXI+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxT
Y2hlbWVIYW5kbGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVt
ZVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNj
aGVtZVRhc2suY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJVUkxTY2hlbWVUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDEwICsyMTIsMTAg
QEAgYXV0byBXZWJVUkxTY2hlbWVUYXNrOjpkaWRDb21wbGV0ZShjb25zdAogICAgIG1fY29tcGxl
dGVkID0gdHJ1ZTsKICAgICAKICAgICBpZiAoaXNTeW5jKCkpIHsKLSAgICAgICAgVmVjdG9yPGNo
YXI+IGRhdGE7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgICAgICBpZiAobV9z
eW5jRGF0YSkgewogICAgICAgICAgICAgZGF0YS5yZXNpemUobV9zeW5jRGF0YS0+c2l6ZSgpKTsK
LSAgICAgICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4obV9zeW5jRGF0YS0+ZGF0YSgpKSwgbV9zeW5jRGF0YS0+c2l6ZSgpKTsKKyAgICAgICAg
ICAgIG1lbWNweShkYXRhLmRhdGEoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
bV9zeW5jRGF0YS0+ZGF0YSgpKSwgbV9zeW5jRGF0YS0+c2l6ZSgpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIG1fc3luY0NvbXBsZXRpb25IYW5kbGVyKG1fc3luY1Jlc3BvbnNlLCBlcnJvciwgV1RG
TW92ZShkYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVU
YXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1l
VGFzay5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJV
UkxTY2hlbWVUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgc3RydWN0IFVS
TFNjaGVtZVRhc2tQYXJhbWV0ZXJzOwogY2xhc3MgV2ViVVJMU2NoZW1lSGFuZGxlcjsKIGNsYXNz
IFdlYlBhZ2VQcm94eTsKIAotdXNpbmcgU3luY0xvYWRDb21wbGV0aW9uSGFuZGxlciA9IENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBWZWN0b3I8Y2hhcj4mKT47Cit1c2luZyBT
eW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpPjsKIAogY2xhc3MgV2ViVVJMU2NoZW1lVGFzayA6IHB1
YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlVSTFNjaGVtZVRhc2s+LCBw
dWJsaWMgSW5zdGFuY2VDb3VudGVkPFdlYlVSTFNjaGVtZVRhc2s+IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShXZWJVUkxTY2hlbWVUYXNrKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzOCwxMyArMjMz
OCwxNCBAQCB2b2lkIFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KFdLUGFnCiAgICAgICAg
ICAgICBpZiAobV9jbGllbnQuY29weVdlYkNyeXB0b01hc3RlcktleSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYodG9JbXBsKG1fY2xpZW50LmNvcHlXZWJDcnlwdG9NYXN0ZXJLZXko
dG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKSk7CiAKLSAgICAgICAgICAg
IFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAjaWYgRU5BQkxFKFdFQl9DUllQVE8pCi0gICAg
ICAgICAgICBpZiAoIWdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKKyAg
ICAgICAgICAgIGF1dG8gbWFzdGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOwor
ICAgICAgICAgICAgaWYgKCFtYXN0ZXJLZXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUoV1RGTW92ZSgqbWFzdGVy
S2V5KSk7CisjZWxzZQorICAgICAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKG51bGxw
dHIsIDApOwogI2VuZGlmCi0KLSAgICAgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZSht
YXN0ZXJLZXkuZGF0YSgpLCBtYXN0ZXJLZXkuc2l6ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IFJlZlB0cjxBUEk6OlN0cmluZz4gc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKFdl
YlBhZ2VQcm94eSYgcGFnZSwgdW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBSZWZQdHI8QVBJ
OjpTdHJpbmc+JiBjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IFVSTCYgdXJsKSBvdmVycmlkZQpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9u
UGFuZWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNEYXRh
PiBwcm9kdWNlQ2xpZW50RGEKICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAid2ViYXV0
aG4uZ2V0IiBmb3JLZXk6QCJ0eXBlIl07CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBbZGlj
dGlvbmFyeSBzZXRPYmplY3Q6V1RGOjpiYXNlNjRVUkxFbmNvZGUoY2hhbGxlbmdlLmJ5dGVzLCBj
aGFsbGVuZ2UubGVuZ3RoKSBmb3JLZXk6QCJjaGFsbGVuZ2UiXTsKKyAgICBbZGljdGlvbmFyeSBz
ZXRPYmplY3Q6YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVu
Z2UubGVuZ3RoKSBmb3JLZXk6QCJjaGFsbGVuZ2UiXTsKICAgICBbZGljdGlvbmFyeSBzZXRPYmpl
Y3Q6b3JpZ2luIGZvcktleTpAIm9yaWdpbiJdOwogCiAgICAgcmV0dXJuIFtOU0pTT05TZXJpYWxp
emF0aW9uIGRhdGFXaXRoSlNPTk9iamVjdDpkaWN0aW9uYXJ5LmdldCgpIG9wdGlvbnM6TlNKU09O
V3JpdGluZ1NvcnRlZEtleXMgZXJyb3I6bmlsXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2ViQXV0b21hdGlvblNlc3Npb25DYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9jYWlyby9XZWJBdXRv
bWF0aW9uU2Vzc2lvbkNhaXJvLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV0b21hdGlvbi9jYWlyby9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgT3B0aW9uYWw8U3RyaW5n
PiBiYXNlNjRFbmNvZGVkUE5HCiAgICAgaWYgKHBuZ0RhdGEuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShwbmdEYXRhKTsK
KyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcocG5nRGF0YSk7CiB9CiAKIE9wdGlvbmFs
PFN0cmluZz4gV2ViQXV0b21hdGlvblNlc3Npb246OnBsYXRmb3JtR2V0QmFzZTY0RW5jb2RlZFBO
R0RhdGEoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25T
dGF0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEzNSwxMSArMTEzNSwxMSBAQCBSZWZQdHI8QVBJ
OjpEYXRhPiBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2Rz
LndlYkNyeXB0b01hc3RlcktleUZvcldlYlZpZXcpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IG1hc3RlcktleTsKLSAgICAgICAgaWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1h
c3RlcktleSkpCisgICAgICAgIGF1dG8gbWFzdGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3Rl
cktleSgpOworICAgICAgICBpZiAoIW1hc3RlcktleSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0YSgp
LCBtYXN0ZXJLZXkuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKFdU
Rk1vdmUoKm1hc3RlcktleSkpOwogICAgIH0KIAogICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRl
ID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
Z2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsMTMgKzE5NCwxMSBAQCB2b2lkIFJlbW90ZUluc3Bl
Y3RvckNsaWVudDo6c2V0dXBDb25uZWN0CiB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0
QmFja2VuZENvbW1hbmRzKGNvbnN0IGNoYXIqIGJhY2tlbmRDb21tYW5kcykKIHsKICAgICBpZiAo
IWJhY2tlbmRDb21tYW5kcyB8fCAhYmFja2VuZENvbW1hbmRzWzBdKSB7Ci0gICAgICAgIG1fYmFj
a2VuZENvbW1hbmRzVVJMID0gU3RyaW5nKCk7CisgICAgICAgIG1fYmFja2VuZENvbW1hbmRzVVJM
ID0geyB9OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2
NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGJhY2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tlbmRD
b21tYW5kcyksIGJhc2U2NERhdGEpOwotICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gImRhdGE6
dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICBtX2JhY2tlbmRDb21t
YW5kc1VSTCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNl
NjRFbmNvZGVkKGJhY2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tlbmRDb21tYW5kcykpKTsKIH0K
IAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNvbm5lY3Rpb25EaWRDbG9zZSgpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHlHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSwxNiArMTM5LDE4
IEBAIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm0KICAgICBpZiAoZ3Rr
X25hdGl2ZV9kaWFsb2dfcnVuKEdUS19OQVRJVkVfRElBTE9HKGRpYWxvZy5nZXQoKSkpICE9IEdU
S19SRVNQT05TRV9BQ0NFUFQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxjaGFyPiBk
YXRhVmVjdG9yOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yOwogICAgIENTdHJpbmcg
ZGF0YVN0cmluZzsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICBpZiAoIWJhc2U2
NERlY29kZShjb250ZW50LCBkYXRhVmVjdG9yLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAg
ICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQsIEJhc2U2NERlY29k
ZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAg
ICAgICAgZGVjb2RlZERhdGEtPnNocmlua1RvRml0KCk7CisgICAgICAgIGRhdGFWZWN0b3IgPSBX
VEZNb3ZlKCpkZWNvZGVkRGF0YSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGRhdGFTdHJpbmcgPSBj
b250ZW50LnV0ZjgoKTsKIAotICAgIGNvbnN0IGNoYXIqIGRhdGEgPSAhZGF0YVN0cmluZy5pc051
bGwoKSA/IGRhdGFTdHJpbmcuZGF0YSgpIDogZGF0YVZlY3Rvci5kYXRhKCk7CisgICAgY29uc3Qg
Y2hhciogZGF0YSA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihkYXRhVmVjdG9yLmRhdGEoKSk7CiAgICAgc2l6ZV90IGRh
dGFMZW5ndGggPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcubGVuZ3RoKCkgOiBk
YXRhVmVjdG9yLnNpemUoKTsKICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGd0
a19maWxlX2Nob29zZXJfZ2V0X2ZpbGUoY2hvb3NlcikpOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4g
cGF0aChnX2ZpbGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3Rv
clVJUHJveHlHdGsuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MzgsMTYgKzUzOCwxOCBAQCB2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtU2F2ZShjCiAgICAgaWYgKGd0a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxP
RyhkaWFsb2cuZ2V0KCkpKSAhPSBHVEtfUkVTUE9OU0VfQUNDRVBUKQogICAgICAgICByZXR1cm47
CiAKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0
YVZlY3RvcjsKICAgICBDU3RyaW5nIGRhdGFTdHJpbmc7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQp
IHsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0
VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29k
ZShjb250ZW50LCBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAg
ICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkYXRhVmVj
dG9yLnNocmlua1RvRml0KCk7CisgICAgICAgIGRlY29kZWREYXRhLT5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICBkYXRhVmVjdG9yID0gV1RGTW92ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxzZQog
ICAgICAgICBkYXRhU3RyaW5nID0gY29udGVudC51dGY4KCk7CiAKLSAgICBjb25zdCBjaGFyKiBk
YXRhID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0
b3IuZGF0YSgpOworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSAhZGF0YVN0cmluZy5pc051bGwoKSA/
IGRhdGFTdHJpbmcuZGF0YSgpIDogcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YVZlY3Rvci5k
YXRhKCkpOwogICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBk
YXRhU3RyaW5nLmxlbmd0aCgpIDogZGF0YVZlY3Rvci5zaXplKCk7CiAgICAgR1JlZlB0cjxHRmls
ZT4gZmlsZSA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsK
ICAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5z
cGVjdG9yVUlQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEwICsxNzQs
MTAgQEAgdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybQogICAgICAgICBt
X3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwp
OwogCiAgICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hh
cj4gb3V0OwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwg
QmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBi
YXNlNjREZWNvZGUoY29udGVudENvcHksIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFk
ZGluZyk7CisgICAgICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHRO
UyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6
ZSgpXSk7CisgICAgICAgICAgICBhdXRvIGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBh
bGxvY10gaW5pdFdpdGhCeXRlczpkZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0
YS0+c2l6ZSgpXSk7CiAgICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxV
UkwgYXRvbWljYWxseTpZRVNdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50
Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhT
dHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlN
YWMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTA5
LDEwICs1MDksMTAgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUoYwog
ICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBh
Y3R1YWxVUkwpOwogCiAgICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENv
cHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgIGF1dG8gZGVjb2Rl
ZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudENvcHksIEJhc2U2NERlY29kZU9wdGlvbnM6OlZh
bGlkYXRlUGFkZGluZyk7CisgICAgICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50
ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0
aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAgICBhdXRvIGRhdGFDb250ZW50ID0gYWRvcHROUyhb
W05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpkZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpk
ZWNvZGVkRGF0YS0+c2l6ZSgpXSk7CiAgICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VS
TDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGlu
ZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90
ZUluc3BlY3RvckNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50
OjpzZXRCYWNrZW5kQ28KICAgICBpZiAoIWV2ZW50Lm1lc3NhZ2UgfHwgZXZlbnQubWVzc2FnZS0+
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9
IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGUo
ZXZlbnQubWVzc2FnZS0+dXRmOCgpKSk7CisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBtYWtl
U3RyaW5nKCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChldmVu
dC5tZXNzYWdlLT51dGY4KCkpKTsKIH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
dFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29h
L0xvY2FsQXV0aGVudGljYXRvci5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMCArODIsOCBAQCBzdGF0aWMgaW5saW5lIEhhc2hTZXQ8
U3RyaW5nPiBwcm9kdWNlSGFzCiB7CiAgICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKICAgICBm
b3IgKGF1dG8mIGNyZWRlbnRpYWxEZXNjcmlwdG9yIDogY3JlZGVudGlhbERlc2NyaXB0b3JzKSB7
Ci0gICAgICAgIGlmIChlbXB0eVRyYW5zcG9ydHNPckNvbnRhaW4oY3JlZGVudGlhbERlc2NyaXB0
b3IudHJhbnNwb3J0cywgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpCi0gICAgICAg
ICAgICAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09IFB1YmxpY0tleUNyZWRlbnRpYWxU
eXBlOjpQdWJsaWNLZXkKLSAgICAgICAgICAgICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVj
dG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCi0gICAgICAgICAgICByZXN1bHQuYWRk
KGJhc2U2NEVuY29kZShjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5kYXRhKCksIGNyZWRl
bnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSkpOworICAgICAgICBpZiAoZW1wdHlUcmFu
c3BvcnRzT3JDb250YWluKGNyZWRlbnRpYWxEZXNjcmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRp
Y2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKSAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09
IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkgJiYgY3JlZGVudGlhbERlc2NyaXB0
b3IuaWRWZWN0b3Iuc2l6ZSgpID09IGNyZWRlbnRpYWxJZExlbmd0aCkKKyAgICAgICAgICAgIHJl
c3VsdC5hZGQoYmFzZTY0RW5jb2RlVG9TdHJpbmcoY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0
b3IuZGF0YSgpLCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkpKTsKICAgICB9
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI0MSw3ICsyMzksNyBAQCB2b2lkIExvY2FsQXV0
aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoCiAgICAgICAgIGlmIChub3RGb3VuZCAhPSBtX2V4
aXN0aW5nQ3JlZGVudGlhbHMuZmluZE1hdGNoaW5nKFsmZXhjbHVkZUNyZWRlbnRpYWxJZHNdIChh
dXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwt
PnJhd0lkKCk7CiAgICAgICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAgICAgICAgcmV0dXJu
IGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZShyYXdJZC0+ZGF0YSgp
LCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRl
bnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3
SWQtPmJ5dGVMZW5ndGgoKSkpOwogICAgICAgICB9KSkgewogICAgICAgICAgICAgcmVjZWl2ZUV4
Y2VwdGlvbih7IE5vdEFsbG93ZWRFcnJvciwgIkF0IGxlYXN0IG9uZSBjcmVkZW50aWFsIG1hdGNo
ZXMgYW4gZW50cnkgb2YgdGhlIGV4Y2x1ZGVDcmVkZW50aWFscyBsaXN0IGluIHRoZSBwbGF0Zm9y
bSBhdHRhY2hlZCBhdXRoZW50aWNhdG9yLiJfcyB9LCBXZWJBdXRoZW50aWNhdGlvblN0YXR1czo6
TEFFeGNsdWRlQ3JlZGVudGlhbHNNYXRjaGVkKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTUx
OCw3ICs1MTYsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKCkKICAg
ICAgICAgfQogCiAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+cmF3SWQoKTsKLSAg
ICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGUocmF3SWQt
PmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpKQorICAgICAgICBpZiAoYWxsb3dDcmVkZW50
aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5kYXRhKCksIHJhd0lk
LT5ieXRlTGVuZ3RoKCkpKSkKICAgICAgICAgICAgIGFzc2VydGlvblJlc3BvbnNlcy51bmNoZWNr
ZWRBcHBlbmQoY3JlZGVudGlhbC5jb3B5UmVmKCkpOwogICAgIH0KICAgICBpZiAoYXNzZXJ0aW9u
UmVzcG9uc2VzLmlzRW1wdHkoKSkgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrSGlkQ29u
bmVjdGlvbi5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjEsMTUgKzI2MSwxMyBAQCB2b2lkIE1vY2tIaWRDb25uZWN0aW9uOjpmZWVkUmVw
b3J0cygpCiAgICAgICAgIGlmIChzdGFnZXNNYXRjaCgpICYmIG1fY29uZmlndXJhdGlvbi5oaWQt
PmVycm9yID09IE1vY2s6OkhpZEVycm9yOjpVbnN1cHBvcnRlZE9wdGlvbnMgJiYgKG1fcmVxdWly
ZVJlc2lkZW50S2V5IHx8IG1fcmVxdWlyZVVzZXJWZXJpZmljYXRpb24pKQogICAgICAgICAgICAg
bWVzc2FnZSA9IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hp
ZERldmljZUNvbW1hbmQ6OmtDYm9yLCB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEN0YXBEZXZpY2VS
ZXNwb25zZUNvZGU6OmtDdGFwMkVyclVuc3VwcG9ydGVkT3B0aW9uKSB9KTsKICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gcGF5bG9hZDsKICAgICAgICAgICAgIEFT
U0VSVCghbV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NC5pc0VtcHR5KCkpOwotICAg
ICAgICAgICAgYXV0byBzdGF0dXMgPSBiYXNlNjREZWNvZGUobV9jb25maWd1cmF0aW9uLmhpZC0+
cGF5bG9hZEJhc2U2NFswXSwgcGF5bG9hZCk7CisgICAgICAgICAgICBhdXRvIHBheWxvYWQgPSBi
YXNlNjREZWNvZGUobV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NFswXSk7CiAgICAg
ICAgICAgICBtX2NvbmZpZ3VyYXRpb24uaGlkLT5wYXlsb2FkQmFzZTY0LnJlbW92ZSgwKTsKLSAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhdHVzLCBzdGF0dXMpOwogICAgICAgICAgICAgaWYg
KCFtX2NvbmZpZ3VyYXRpb24uaGlkLT5pc1UyZikKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0g
Rmlkb0hpZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29t
bWFuZDo6a0Nib3IsIHBheWxvYWQpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGaWRvSGlk
TWVzc2FnZTo6Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21tYW5kOjpr
Q2JvciwgV1RGTW92ZSgqcGF5bG9hZCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZp
ZG9IaWREZXZpY2VDb21tYW5kOjprTXNnLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBtZXNz
YWdlID0gRmlkb0hpZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2
aWNlQ29tbWFuZDo6a01zZywgV1RGTW92ZSgqcGF5bG9hZCkpOwogICAgICAgICB9CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01v
Y2tMb2NhbENvbm5lY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9N
b2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIs
NyBAQCB2b2lkIE1vY2tMb2NhbENvbm5lY3Rpb246OmZpbHRlclJlc3BvbnNlCiAgICAgZm9yICg7
IGl0ciAhPSByZXNwb25zZXMuZW5kKCk7ICsraXRyKSB7CiAgICAgICAgIGF1dG8qIHJhd0lkID0g
aXRyLT5nZXQoKS5yYXdJZCgpOwogICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAgICBhdXRv
IHJhd0lkQmFzZTY0ID0gYmFzZTY0RW5jb2RlKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVu
Z3RoKCkpOworICAgICAgICBhdXRvIHJhd0lkQmFzZTY0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmco
cmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSk7CiAgICAgICAgIGlmIChyYXdJZEJh
c2U2NCA9PSBwcmVmZXJyZWRDcmVkZW50aWFsSWRCYXNlNjQpCiAgICAgICAgICAgICBicmVhazsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJT
dHJhdGVneS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3OCw3ICs1NzgsNyBAQCBPcHRpb25hbDxXZWJMb2FkZXJTdHJhdGVneTo6U3luY0xv
YWRSZXN1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2ln
bmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBDbGllbnRDcmVkZW50aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksICBj
b25zdCBGZXRjaE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9yaWdpbmFs
UmVxdWVzdEhlYWRlcnMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVk
IGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBDbGllbnRDcmVkZW50aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksICBjb25z
dCBGZXRjaE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9yaWdpbmFsUmVx
dWVzdEhlYWRlcnMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIGF1dG8qIHdlYkZyYW1lTG9hZGVy
Q2xpZW50ID0gdG9XZWJGcmFtZUxvYWRlckNsaWVudChmcmFtZUxvYWRlci5jbGllbnQoKSk7CiAg
ICAgYXV0byogd2ViRnJhbWUgPSB3ZWJGcmFtZUxvYWRlckNsaWVudCA/ICZ3ZWJGcmFtZUxvYWRl
ckNsaWVudC0+d2ViRnJhbWUoKSA6IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0
ZWd5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH5XZWJM
b2FkZXJTdHJhdGVneSgpIGZpbmFsOwogICAgIAogICAgIHZvaWQgbG9hZFJlc291cmNlKFdlYkNv
cmU6OkZyYW1lJiwgV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2UmLCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChSZWZQdHI8V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI+JiYpPiYmKSBm
aW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6RnJhbWVM
b2FkZXImLCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNv
bnN0IFdlYkNvcmU6OkZldGNoT3B0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAm
LCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZl
Y3RvcjxjaGFyPiYgZGF0YSkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KFdlYkNvcmU6OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDbGllbnRD
cmVkZW50aWFsUG9saWN5LCBjb25zdCBXZWJDb3JlOjpGZXRjaE9wdGlvbnMmLCBjb25zdCBXZWJD
b3JlOjpIVFRQSGVhZGVyTWFwJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpIGZpbmFsOwogICAgIHZvaWQg
cGFnZUxvYWRDb21wbGV0ZWQoV2ViQ29yZTo6UGFnZSYpIGZpbmFsOwogICAgIHZvaWQgYnJvd3Np
bmdDb250ZXh0UmVtb3ZlZChXZWJDb3JlOjpGcmFtZSYpIGZpbmFsOwogCkBAIC0xMDEsNyArMTAx
LDcgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgU3luY0xvYWRSZXN1bHQgewogICAgICAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yIGVycm9yOwotICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGRhdGE7CiAgICAgfTsKICAgICBPcHRpb25hbDxTeW5jTG9hZFJlc3VsdD4gdHJ5
TG9hZGluZ1N5bmNocm9ub3VzbHlVc2luZ1VSTFNjaGVtZUhhbmRsZXIoV2ViQ29yZTo6RnJhbWVM
b2FkZXImLCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmKTsKICAgICBTeW5jTG9hZFJlc3VsdCBsb2FkRGF0YVVSTFN5bmNocm9ub3VzbHkoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94
eS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcg
KzYzLDcgQEAgdm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OnN0YXJ0TmV3VAogICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUtPnN0YXJ0TG9hZGluZygpOwogfQogCi12b2lkIFdlYlVSTFNj
aGVtZUhhbmRsZXJQcm94eTo6bG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmll
ciBsb2FkSWRlbnRpZmllciwgV2ViRnJhbWUmIHdlYkZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6
OmxvYWRTeW5jaHJvbm91c2x5KFJlc291cmNlTG9hZElkZW50aWZpZXIgbG9hZElkZW50aWZpZXIs
IFdlYkZyYW1lJiB3ZWJGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFZlY3Rvcjx1aW50
OF90PiYgZGF0YSkKIHsKICAgICBkYXRhLnNocmluaygwKTsKICAgICBpZiAoIW1fd2ViUGFnZS5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVU
YXNrKFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHsgbV9pZGVudGlmaWVyLCBsb2FkSWRlbnRpZmll
ciwgcmVxdWVzdCwgd2ViRnJhbWUuaW5mbygpIH0pLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpM
b2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrOjpSZXBseShyZXNwb25zZSwgZXJyb3IsIGRhdGEp
KSkgewpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1l
SGFuZGxlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0
TmV3VGFzayhXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciYsIFdlYkZyYW1lJik7CiAgICAgdm9pZCBz
dG9wQWxsVGFza3MoKTsKIAotICAgIHZvaWQgbG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2Fk
SWRlbnRpZmllciwgV2ViRnJhbWUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFZlY3Rv
cjxjaGFyPiYpOworICAgIHZvaWQgbG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRp
ZmllciwgV2ViRnJhbWUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFZlY3Rvcjx1aW50
OF90PiYpOwogCiAgICAgdWludDY0X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRl
bnRpZmllcjsgfQogICAgIFdlYlBhZ2UmIHBhZ2UoKSB7IHJldHVybiBtX3dlYlBhZ2U7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0
TGVnYWN5L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA1
LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFz
ZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAgICAg
VXBkYXRlIHRvIG1hdGNoIG5ldyBzaWduYXR1cmUuIGNoYXIgLT4gdWludDhfdC4KKwogMjAyMS0w
NS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBG
aWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSgpIHRvIEZpbGVTeXN0ZW06OmZpbGVTaXplKCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0
L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpsb2FkUmVzb3UKICAgICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImIGZyYW1lTG9h
ZGVyLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVu
dENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRU
UEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyLCB1bnNp
Z25lZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVudENyZWRlbnRp
YWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1h
cCYsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVj
dG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KGZyYW1lTG9hZGVyLm5ldHdvcmtpbmdDb250ZXh0KCksIHJlcXVlc3QsIG9w
dGlvbnMuY3JlZGVudGlhbHMgPT0gRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFsczo6T21pdCA/IFN0
b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZSA6IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5
OjpVc2UsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVn
YWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29y
ZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCiAg
ICAgdm9pZCBsb2FkUmVzb3VyY2UoV2ViQ29yZTo6RnJhbWUmLCBXZWJDb3JlOjpDYWNoZWRSZXNv
dXJjZSYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRlck9wdGlvbnMmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlcj4mJik+JiYpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShXZWJDb3JlOjpGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ks
IGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJN
YXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYs
IFZlY3RvcjxjaGFyPiYpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShXZWJDb3JlOjpGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdl
YkNvcmU6OkZldGNoT3B0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1
aW50OF90PiYpIGZpbmFsOwogICAgIHZvaWQgcGFnZUxvYWRDb21wbGV0ZWQoV2ViQ29yZTo6UGFn
ZSYpIGZpbmFsOwogICAgIHZvaWQgYnJvd3NpbmdDb250ZXh0UmVtb3ZlZChXZWJDb3JlOjpGcmFt
ZSYpIGZpbmFsOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOSBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRj
aCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50Ojp3cmFwQ3J5cHRvS2V5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNocm9tZUNsaWVudDo6dW53cmFwQ3J5cHRvS2V5IGNvbnN0KToKKyAgICAgICAg
VXBkYXRlIHRvIHVzZSBuZXcgT3B0aW9uYWwgcmV0dXJuaW5nIGRlZmF1bHRXZWJDcnlwdG9NYXN0
ZXJLZXkoKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5t
bToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzYXZlKToKKyAgICAgICAg
VXBkYXRlIHRvIHVzZSBuZXcgT3B0aW9uYWwgcmV0dXJuaW5nIGJhc2U2NERlY29kZSgpLgorCiAy
MDIxLTA1LTE1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIERl
bGV0ZSBXZWJTUUwgY29kZSBmcm9tIFdlYktpdDIKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA2NiwyOCArMTA2NiwzNCBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdEZ1bGxTY3JlZW5Gb3JFCiAKIGJvb2wgV2ViQ2hy
b21lQ2xpZW50Ojp3cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBWZWN0
b3I8dWludDhfdD4mIHdyYXBwZWRLZXkpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1h
c3RlcktleTsKICAgICBTRUwgc2VsZWN0b3IgPSBAc2VsZWN0b3Iod2ViQ3J5cHRvTWFzdGVyS2V5
Rm9yV2ViVmlldzopOwogICAgIGlmIChbW21fd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1Rv
U2VsZWN0b3I6c2VsZWN0b3JdKSB7CiAgICAgICAgIE5TRGF0YSAqa2V5RGF0YSA9IENhbGxVSURl
bGVnYXRlKG1fd2ViVmlldywgc2VsZWN0b3IpOworICAgICAgICBWZWN0b3I8dWludDhfdD4gbWFz
dGVyS2V5OwogICAgICAgICBtYXN0ZXJLZXkuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihj
b25zdF9jYXN0PHZvaWQqPihba2V5RGF0YSBieXRlc10pKSwgW2tleURhdGEgbGVuZ3RoXSk7Ci0g
ICAgfSBlbHNlIGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQor
ICAgICAgICByZXR1cm4gd3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCBrZXksIHdy
YXBwZWRLZXkpOworICAgIH0KKyAgICAKKyAgICBhdXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBpZiAoIW1hc3RlcktleSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIHdyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwga2V5
LCB3cmFwcGVkS2V5KTsKKyAgICByZXR1cm4gd3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoV1RGTW92
ZSgqbWFzdGVyS2V5KSwga2V5LCB3cmFwcGVkS2V5KTsKIH0KIAogYm9vbCBXZWJDaHJvbWVDbGll
bnQ6OnVud3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXksIFZl
Y3Rvcjx1aW50OF90PiYga2V5KSBjb25zdAogewotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJL
ZXk7CiAgICAgU0VMIHNlbGVjdG9yID0gQHNlbGVjdG9yKHdlYkNyeXB0b01hc3RlcktleUZvcldl
YlZpZXc6KTsKICAgICBpZiAoW1ttX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVj
dG9yOnNlbGVjdG9yXSkgeworICAgICAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogICAg
ICAgICBOU0RhdGEgKmtleURhdGEgPSBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIHNlbGVjdG9y
KTsKICAgICAgICAgbWFzdGVyS2V5LmFwcGVuZChzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29uc3Rf
Y2FzdDx2b2lkKj4oW2tleURhdGEgYnl0ZXNdKSksIFtrZXlEYXRhIGxlbmd0aF0pOwotICAgIH0g
ZWxzZSBpZiAoIWdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdW53cmFwU2VyaWFsaXplZENyeXB0b0tl
eShtYXN0ZXJLZXksIHdyYXBwZWRLZXksIGtleSk7CisgICAgfQogCi0gICAgcmV0dXJuIHVud3Jh
cFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCB3cmFwcGVkS2V5LCBrZXkpOworICAgIGF1
dG8gbWFzdGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIGlmICghbWFz
dGVyS2V5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6
ZWRDcnlwdG9LZXkoV1RGTW92ZSgqbWFzdGVyS2V5KSwgd3JhcHBlZEtleSwga2V5KTsKIH0KIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJ
bnNwZWN0b3JDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGll
bnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwOCwxMCArNDA4LDEwIEBAIHZvaWQgV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OnNhdmUoY28KICAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVS
TE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKIAogICAgICAgICBpZiAoYmFz
ZTY0RW5jb2RlZCkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAg
IGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGlu
ZykpCisgICAgICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQs
IEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgICAgICBpZiAo
IWRlY29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFp
blB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdp
dGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAgICBSZXRh
aW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRX
aXRoQnl0ZXM6ZGVjb2RlZERhdGEtPmRhdGEoKSBsZW5ndGg6ZGVjb2RlZERhdGEtPnNpemUoKV0p
OwogICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2Fs
bHk6WUVTXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVU
b1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmcgZXJyb3I6TlVMTF07CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc3MTUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5p
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0
byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0byB1c2UgdXBkYXRlZCBiYXNl
NjQgYW5kIGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKSByZWxhdGVkCisgICAgICAgIGZ1bmN0
aW9ucy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6c3RhcnRTZWN1cmVDb25uZWN0aW9uKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6dGVzdENlcnRpZmljYXRlKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6dGVzdFByaXZhdGVLZXkpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29h
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvU2Vy
aWFsaXplZENyeXB0b0tleVdyYXAubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0Yp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1t
OgorICAgICAgICAodGVzdElkZW50aXR5Mik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJpYnV0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJh
dG9yLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpD
b25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hha2UpOgorCiAyMDIxLTA1LTE4ICBSb2JpbiBNb3Jp
c3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBBaXJBbGxvY2F0ZVJl
Z2lzdGVyc0J5R3JhcGhDb2xvcmluZyB1c2UgbGVzcyBtZW1vcnkKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVENQU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1RDUFNlcnZlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VENQU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDkgKzE1NSw4IEBAIHZvaWQgVENQ
U2VydmVyOjpzdGFydFNlY3VyZUNvbm5lY3Rpb24oU28KICAgICAibGRZOWF2Y1RHU3did29pdUlx
djBqVEwxZkhGbnp5M1JITUxEaCtMcHZvbGM1RFNyU0pIQ1A1V3VLMGVlSlhociIKICAgICAiVDVv
UXBITDl6L2NDRExBS0NLUmE0dVYwZmhFZE9XQnF5UjlwOHk1akp0eWU3MnQ2Q3VGVVY1aXFjcEY0
Qkg0ZiIKICAgICAiajJWTkh3c1NySndrRDRRVUdsVXRIN3Z3blFteUNGeFpNbVdBSmc9PSIpOwot
ICAgIFZlY3Rvcjx1aW50OF90PiBjZXJ0REVSOwotICAgIGJhc2U2NERlY29kZShjZXJ0UEVNLCBj
ZXJ0REVSLCBXVEY6OkJhc2U2NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwotICAgIHNz
bDo6dW5pcXVlX3B0cjxDUllQVE9fQlVGRkVSPiBjZXJ0KENSWVBUT19CVUZGRVJfbmV3KGNlcnRE
RVIuZGF0YSgpLCBjZXJ0REVSLnNpemUoKSwgbnVsbHB0cikpOworICAgIGF1dG8gY2VydERFUiA9
IGJhc2U2NERlY29kZShjZXJ0UEVNKTsKKyAgICBzc2w6OnVuaXF1ZV9wdHI8Q1JZUFRPX0JVRkZF
Uj4gY2VydChDUllQVE9fQlVGRkVSX25ldyhjZXJ0REVSLT5kYXRhKCksIGNlcnRERVItPnNpemUo
KSwgbnVsbHB0cikpOwogICAgIEFTU0VSVChjZXJ0KTsKIAogICAgIC8vIFRoaXMgaXMgYSB0ZXN0
IGtleSBmcm9tIEJvcmluZ1NTTC4KQEAgLTQxMiw5ICs0MTEsOCBAQCBWZWN0b3I8dWludDhfdD4g
VENQU2VydmVyOjp0ZXN0Q2VydGlmaWNhCiAgICAgIkczUEZuWWJXOHVySDBOU0pHL1crLzlEQStZ
N0FhMGNzNFRQcHVCR1owTlUxVzk0T29DTW80bGtPNkgveTZMZXUiCiAgICAgIjN2alpEM3k5a1pr
N21yZTlYSHdrSThNZEs1cz0iKTsKICAgICAKLSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwot
ICAgIGJhc2U2NERlY29kZShwZW1FbmNvZGVkQ2VydGlmaWNhdGUsIHZlY3RvciwgV1RGOjpCYXNl
NjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsKLSAgICByZXR1cm4gdmVjdG9yOworICAg
IGF1dG8gZGVjb2RlZENlcnRpZmljYXRlID0gYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZp
Y2F0ZSk7CisgICAgcmV0dXJuIFdURk1vdmUoKmRlY29kZWRDZXJ0aWZpY2F0ZSk7CiB9CiAKIFZl
Y3Rvcjx1aW50OF90PiBUQ1BTZXJ2ZXI6OnRlc3RQcml2YXRlS2V5KCkKQEAgLTQ3MSw5ICs0Njks
OCBAQCBWZWN0b3I8dWludDhfdD4gVENQU2VydmVyOjp0ZXN0UHJpdmF0ZUtlCiAgICAgImRFT2J2
Y3BTaFAyMkl0T1ZqU2FtcFJ1QXVSRzI2WmVtRWJHQ0kzSjZNcXgzeTZtKzZId3VsdHNndGR6RGdy
RmUiCiAgICAgInFKZlU4YmJkYnUycGk0N1k0RmRKSzBITGZmbDVSdz09Iik7CiAKLSAgICBWZWN0
b3I8dWludDhfdD4gdmVjdG9yOwotICAgIGJhc2U2NERlY29kZShwZW1FbmNvZGVkUHJpdmF0ZUtl
eSwgdmVjdG9yLCBXVEY6OkJhc2U2NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwotICAg
IHJldHVybiB2ZWN0b3I7CisgICAgYXV0byBkZWNvZGVkUHJpdmF0ZUtleSA9IGJhc2U2NERlY29k
ZShwZW1FbmNvZGVkUHJpdmF0ZUtleSk7CisgICAgcmV0dXJuIFdURk1vdmUoKmRlY29kZWRQcml2
YXRlS2V5KTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDExIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBiYXNl
NjRFbmNvZGVkU2luZldpdGgKIAogVEVTVChJU09Cb3gsIElTT1Byb3RlY3Rpb25TY2hlbWVJbmZv
Qm94KQogewotICAgIFZlY3Rvcjx1aW50OF90PiBzaW5mQXJyYXk7Ci0gICAgQVNTRVJUX1RSVUUo
YmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2RlZFNpbmZXaXRoS2V5SUQzKSwgc2lu
ZkFycmF5KSk7Ci0gICAgQVNTRVJUX0VRKDk3VUwsIHNpbmZBcnJheS5zaXplKCkpOworICAgIGF1
dG8gc2luZkFycmF5ID0gYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2RlZFNpbmZX
aXRoS2V5SUQzKSk7CisgICAgQVNTRVJUX1RSVUUoc2luZkFycmF5KTsKKyAgICBBU1NFUlRfRVEo
OTdVTCwgc2luZkFycmF5LT5zaXplKCkpOwogCi0gICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmll
dzo6Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUoc2luZkFycmF5LmRhdGEoKSwgc2luZkFycmF5
LnNpemUoKSksIDAsIHNpbmZBcnJheS5zaXplKCkpOworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0
YVZpZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKHNpbmZBcnJheS0+ZGF0YSgpLCBzaW5m
QXJyYXktPnNpemUoKSksIDAsIHNpbmZBcnJheS0+c2l6ZSgpKTsKIAogICAgIElTT1Byb3RlY3Rp
b25TY2hlbWVJbmZvQm94IHNpbmZCb3g7CiAgICAgQVNTRVJUX1RSVUUoc2luZkJveC5yZWFkKHZp
ZXcpKTsKQEAgLTc4LDExICs3OCwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciogYmFzZTY0RW5jb2Rl
ZFBzc2hXaXRoCiAKIFRFU1QoSVNPQm94LCBJU09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3gpCiB7
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHBzc2hBcnJheTsKLSAgICBBU1NFUlRfVFJVRShiYXNlNjRE
ZWNvZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNvZGVkUHNzaFdpdGhBc3NldElkKSwgcHNzaEFycmF5
KSk7Ci0gICAgQVNTRVJUX0VRKDE3NlVMLCBwc3NoQXJyYXkuc2l6ZSgpKTsKKyAgICBhdXRvIHBz
c2hBcnJheSA9IGJhc2U2NERlY29kZShTdHJpbmdWaWV3KGJhc2U2NEVuY29kZWRQc3NoV2l0aEFz
c2V0SWQpKTsKKyAgICBBU1NFUlRfVFJVRShwc3NoQXJyYXkpOworICAgIEFTU0VSVF9FUSgxNzZV
TCwgcHNzaEFycmF5LT5zaXplKCkpOwogCi0gICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6
Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUocHNzaEFycmF5LmRhdGEoKSwgcHNzaEFycmF5LnNp
emUoKSksIDAsIHBzc2hBcnJheS5zaXplKCkpOworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZp
ZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKHBzc2hBcnJheS0+ZGF0YSgpLCBwc3NoQXJy
YXktPnNpemUoKSksIDAsIHBzc2hBcnJheS0+c2l6ZSgpKTsKIAogICAgIElTT0ZhaXJQbGF5U3Ry
ZWFtaW5nUHNzaEJveCBwc3NoQm94OwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRDb2NvYS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0J
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgVEVTVChQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCwgVmFsaWRCbGluZAogICAgIGF1dG8gKm5zU3BraURhdGEgPSAoX19icmlkZ2UgTlNEYXRh
ICopc3BraURhdGEuZ2V0KCk7CiAKICAgICAvLyBDb250aW51ZSB0aGUgdGVzdC4KLSAgICBFWFBF
Q1RfVFJVRShwY20uY2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJsZVRva2VuKFdURjo6
YmFzZTY0VVJMRW5jb2RlKG5zU3BraURhdGEuYnl0ZXMsIG5zU3BraURhdGEubGVuZ3RoKSkpOwor
ICAgIEVYUEVDVF9UUlVFKHBjbS5jYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VVbmxpbmthYmxlVG9r
ZW4oYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcobnNTcGtpRGF0YS5ieXRlcywgbnNTcGtpRGF0YS5s
ZW5ndGgpKSk7CiAgICAgYXV0byBzb3VyY2VTZWNyZXRUb2tlbiA9IHBjbS50b2tlblNpZ25hdHVy
ZUpTT04oKTsKICAgICBFWFBFQ1RfRVEoc291cmNlU2VjcmV0VG9rZW4tPmFzT2JqZWN0KCktPnNp
emUoKSwgNHVsKTsKICAgICBFWFBFQ1RfU1RSRVEoc291cmNlU2VjcmV0VG9rZW4tPmdldFN0cmlu
Zygic291cmNlX2VuZ2FnZW1lbnRfdHlwZSJfcykudXRmOCgpLmRhdGEoKSwgImNsaWNrIik7CkBA
IC05MCwxNCArOTAsMTMgQEAgVEVTVChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgVmFsaWRCbGlu
ZAogICAgIEVYUEVDVF9FUShzb3VyY2VTZWNyZXRUb2tlbi0+Z2V0SW50ZWdlcigidmVyc2lvbiJf
cyksIDIpOwogCiAgICAgLy8gR2VuZXJhdGUgdGhlIHNpZ25hdHVyZS4KLSAgICBWZWN0b3I8dWlu
dDhfdD4gYmxpbmRlZE1lc3NhZ2U7Ci0gICAgYmFzZTY0VVJMRGVjb2RlKHNvdXJjZVNlY3JldFRv
a2VuLT5nZXRTdHJpbmcoInNvdXJjZV9zZWNyZXRfdG9rZW4iX3MpLCBibGluZGVkTWVzc2FnZSk7
CisgICAgYXV0byBibGluZGVkTWVzc2FnZSA9IGJhc2U2NFVSTERlY29kZShzb3VyY2VTZWNyZXRU
b2tlbi0+Z2V0U3RyaW5nKCJzb3VyY2Vfc2VjcmV0X3Rva2VuIl9zKSk7CiAKLSAgICBhdXRvIGJs
aW5kZWRTaWduYXR1cmUgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdFdpdGhM
ZW5ndGg6IG1vZHVsdXNOQnl0ZXNdKTsKLSAgICBjY3JzYWJzc2Ffc2lnbl9ibGluZGVkX21lc3Nh
Z2UoY2lwaGVyc3VpdGUsIHJzYVByaXZhdGVLZXksIGJsaW5kZWRNZXNzYWdlLmRhdGEoKSwgYmxp
bmRlZE1lc3NhZ2Uuc2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50OF90ICo+KFtibGluZGVkU2lnbmF0
dXJlIG11dGFibGVCeXRlc10pLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdLCBybmcpOworICAg
IGF1dG8gYmxpbmRlZFNpZ25hdHVyZSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBp
bml0V2l0aExlbmd0aDptb2R1bHVzTkJ5dGVzXSk7CisgICAgY2Nyc2Fic3NhX3NpZ25fYmxpbmRl
ZF9tZXNzYWdlKGNpcGhlcnN1aXRlLCByc2FQcml2YXRlS2V5LCBibGluZGVkTWVzc2FnZS0+ZGF0
YSgpLCBibGluZGVkTWVzc2FnZS0+c2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50OF90ICo+KFtibGlu
ZGVkU2lnbmF0dXJlIG11dGFibGVCeXRlc10pLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdLCBy
bmcpOwogCiAgICAgLy8gQ29udGludWUgdGhlIHRlc3QuCi0gICAgRVhQRUNUX1RSVUUocGNtLmNh
bGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVNlY3JldFRva2VuKFdURjo6YmFzZTY0VVJMRW5jb2RlKFti
bGluZGVkU2lnbmF0dXJlIGJ5dGVzXSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSkpKTsKKyAg
ICBFWFBFQ1RfVFJVRShwY20uY2FsY3VsYXRlQW5kVXBkYXRlU291cmNlU2VjcmV0VG9rZW4oYmFz
ZTY0VVJMRW5jb2RlVG9TdHJpbmcoW2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBbYmxpbmRlZFNp
Z25hdHVyZSBsZW5ndGhdKSkpOwogICAgIGF1dG8mIHBlcnNpc3RlbnRUb2tlbiA9IHBjbS5zb3Vy
Y2VVbmxpbmthYmxlVG9rZW4oKTsKICAgICBFWFBFQ1RfVFJVRShwZXJzaXN0ZW50VG9rZW4pOwog
ICAgIEVYUEVDVF9GQUxTRShwZXJzaXN0ZW50VG9rZW4tPnRva2VuQmFzZTY0VVJMLmlzRW1wdHko
KSk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvU2VyaWFs
aXplZENyeXB0b0tleVdyYXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL2NvY29hL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvU2VyaWFs
aXplZENyeXB0b0tleVdyYXAubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDM3ICs0NCwzNyBAQCBw
dWJsaWM6CiAgICAgfQogfTsKIAotVEVTVF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVzdCwg
R2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSkKK1RFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5
V3JhcFRlc3QsIERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IG1hc3RlcktleTE7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNy
eXB0b01hc3RlcktleShtYXN0ZXJLZXkxKSk7CisgICAgYXV0byBtYXN0ZXJLZXkxID0gV2ViQ29y
ZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIEVYUEVDVF9UUlVFKG1hc3Rlcktl
eTEpOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTI7Ci0gICAgRVhQRUNUX1RSVUUo
V2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkyKSk7CisgICAg
YXV0byBtYXN0ZXJLZXkyID0gV2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOwor
ICAgIEVYUEVDVF9UUlVFKG1hc3RlcktleTIpOwogCiAgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5
MSA9PSBtYXN0ZXJLZXkyKTsKIH0KIAogVEVTVF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVz
dCwgRGVsZXRlRGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSkKIHsKLSAgICBWZWN0b3I8dWludDhf
dD4gbWFzdGVyS2V5MTsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpnZXREZWZhdWx0V2ViQ3J5
cHRvTWFzdGVyS2V5KG1hc3RlcktleTEpKTsKKyAgICBhdXRvIG1hc3RlcktleTEgPSBXZWJDb3Jl
OjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5
MSk7CiAgICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6ZGVsZXRlRGVmYXVsdFdlYkNyeXB0b01hc3Rl
cktleSgpKTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXkyOwotICAgIEVYUEVDVF9U
UlVFKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5MikpOwor
ICAgIGF1dG8gbWFzdGVyS2V5MiA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXko
KTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkyKTsKIAogICAgIEVYUEVDVF9UUlVFKG1hc3Rl
cktleTEgIT0gbWFzdGVyS2V5Mik7CiB9CiAKIFRFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5V3Jh
cFRlc3QsIFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVW53cmFwKQogewotICAgIFZlY3Rvcjx1aW50
OF90PiBtYXN0ZXJLZXk7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNy
eXB0b01hc3RlcktleShtYXN0ZXJLZXkpKTsKKyAgICBhdXRvIG1hc3RlcktleSA9IFdlYkNvcmU6
OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkp
OwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGNyeXB0b0tleSgxNiwgMSk7CiAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHdyYXBwZWRLZXk7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6d3JhcFNlcmlhbGl6
ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCBjcnlwdG9LZXksIHdyYXBwZWRLZXkpKTsKKyAgICBFWFBF
Q1RfVFJVRShXZWJDb3JlOjp3cmFwU2VyaWFsaXplZENyeXB0b0tleSgqbWFzdGVyS2V5LCBjcnlw
dG9LZXksIHdyYXBwZWRLZXkpKTsKICAgICBFWFBFQ1RfVFJVRShjcnlwdG9LZXkgIT0gd3JhcHBl
ZEtleSk7CiAgICAgLy8gZW5zdXJlIHdyYXBwZWRLZXkgZG9lc24ndCBjb250YWluIGNyeXB0b0tl
eQogICAgIGJvb2wgbm90Q29udGFpbmVkID0gdHJ1ZTsKQEAgLTkwLDcgKzkwLDcgQEAgVEVTVF9G
KFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVzdCwgU2VyaQogICAgIEVYUEVDVF9UUlVFKG5vdENv
bnRhaW5lZCk7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdW53cmFwcGVkS2V5OwotICAgIEVYUEVD
VF9UUlVFKFdlYkNvcmU6OnVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCB3cmFw
cGVkS2V5LCB1bndyYXBwZWRLZXkpKTsKKyAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjp1bndyYXBT
ZXJpYWxpemVkQ3J5cHRvS2V5KCptYXN0ZXJLZXksIHdyYXBwZWRLZXksIHVud3JhcHBlZEtleSkp
OwogICAgIEVYUEVDVF9UUlVFKHVud3JhcHBlZEtleSA9PSBjcnlwdG9LZXkpOwogfQogCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5n
ZS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9DaGFsbGVuZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMyArMTc2LDEwIEBA
IFJldGFpblB0cjxTZWNJZGVudGl0eVJlZj4gdGVzdElkZW50aXR5MigKICAgICAiSkFIMm54S0d1
cXRBSzJoV2JBQ3U2MVJUNWdBcUF2L2hCOUpZbmMyT2lRMlZtallrT2syR0VkSWpuMHhTZ1g3VyIK
ICAgICAibUkvaEhieEtNRzNSa3Y5cTFDeCtXQi92MXQ4PSIpOwogCi0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHByaXZhdGVLZXlCeXRlczsKLSAgICBiYXNlNjREZWNvZGUocGVtRW5jb2RlZFByaXZhdGVL
ZXksIHByaXZhdGVLZXlCeXRlcywgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZh
dWx0KTsKKyAgICBhdXRvIHByaXZhdGVLZXlCeXRlcyA9IGJhc2U2NERlY29kZShwZW1FbmNvZGVk
UHJpdmF0ZUtleSk7CisgICAgYXV0byBjZXJ0aWZpY2F0ZUJ5dGVzID0gYmFzZTY0RGVjb2RlKHBl
bUVuY29kZWRDZXJ0aWZpY2F0ZSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gY2VydGlmaWNhdGVC
eXRlczsKLSAgICBiYXNlNjREZWNvZGUocGVtRW5jb2RlZENlcnRpZmljYXRlLCBjZXJ0aWZpY2F0
ZUJ5dGVzLCBXVEY6OkJhc2U2NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwotCi0gICAg
cmV0dXJuIGNyZWF0ZVRlc3RJZGVudGl0eShwcml2YXRlS2V5Qnl0ZXMsIGNlcnRpZmljYXRlQnl0
ZXMpOworICAgIHJldHVybiBjcmVhdGVUZXN0SWRlbnRpdHkoV1RGTW92ZSgqcHJpdmF0ZUtleUJ5
dGVzKSwgV1RGTW92ZSgqY2VydGlmaWNhdGVCeXRlcykpOwogfQogCiBzdGF0aWMgUmV0YWluUHRy
PE5TVVJMQ3JlZGVudGlhbD4gY3JlZGVudGlhbFdpdGhJZGVudGl0eSgpCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0V2ZW50QXR0cmlidXRpb24ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJp
YnV0aW9uLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0V2ZW50QXR0cmlidXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3
ICsxNTksNyBAQCBURVNUKEV2ZW50QXR0cmlidXRpb24sIEZyYXVkUHJldmVudGlvbikKICAgICBh
dXRvIHNwa2lEYXRhID0gYWRvcHRDRihTZWNLZXlDb3B5U3ViamVjdFB1YmxpY0tleUluZm8oc2Vj
S2V5LmdldCgpKSk7CiAgICAgYXV0byAqbnNTcGtpRGF0YSA9IChfX2JyaWRnZSBOU0RhdGEgKilz
cGtpRGF0YS5nZXQoKTsKIAotICAgIGF1dG8ga2V5RGF0YSA9IFdURjo6YmFzZTY0VVJMRW5jb2Rl
KG5zU3BraURhdGEuYnl0ZXMsIG5zU3BraURhdGEubGVuZ3RoKTsKKyAgICBhdXRvIGtleURhdGEg
PSBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihuc1Nwa2lEYXRhLmJ5dGVzLCBuc1Nwa2lEYXRhLmxl
bmd0aCk7CiAKICAgICAvLyBUaGUgc2VydmVyLgogICAgIEhUVFBTZXJ2ZXIgc2VydmVyKFsmZG9u
ZSwgY29ubmVjdGlvbkNvdW50ID0gMCwgJnJzYVByaXZhdGVLZXksICZtb2R1bHVzTkJ5dGVzLCAm
cm5nLCAma2V5RGF0YSwgJnNlY0tleV0gKENvbm5lY3Rpb24gY29ubmVjdGlvbikgbXV0YWJsZSB7
CkBAIC0xODQsMTMgKzE4NCwxMiBAQCBURVNUKEV2ZW50QXR0cmlidXRpb24sIEZyYXVkUHJldmVu
dGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZW5kID0gcmVxdWVzdDJTdHJpbmcu
ZmluZCgnIicsIHN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdG9rZW4gPSBy
ZXF1ZXN0MlN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsaW5kZWRNZXNzYWdlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYmFzZTY0VVJMRGVjb2RlKHRva2VuLCBibGluZGVkTWVzc2FnZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGJsaW5kZWRNZXNzYWdlID0gYmFzZTY0VVJMRGVj
b2RlKHRva2VuKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNjcnNh
YnNzYV9jaXBoZXJzdWl0ZSAqY2lwaGVyc3VpdGUgPSAmY2Nyc2Fic3NhX2NpcGhlcnN1aXRlX3Jz
YTQwOTZfc2hhMzg0OwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBibGluZGVkU2lnbmF0
dXJlID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRXaXRoTGVuZ3RoOiBtb2R1
bHVzTkJ5dGVzXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjY3JzYWJzc2Ffc2lnbl9ibGlu
ZGVkX21lc3NhZ2UoY2lwaGVyc3VpdGUsIHJzYVByaXZhdGVLZXksIGJsaW5kZWRNZXNzYWdlLmRh
dGEoKSwgYmxpbmRlZE1lc3NhZ2Uuc2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50OF90ICo+KFtibGlu
ZGVkU2lnbmF0dXJlIG11dGFibGVCeXRlc10pLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdLCBy
bmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmxpbmthYmxlVG9rZW4gPSBXVEY6
OmJhc2U2NFVSTEVuY29kZShbYmxpbmRlZFNpZ25hdHVyZSBieXRlc10sIFtibGluZGVkU2lnbmF0
dXJlIGxlbmd0aF0pOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBibGluZGVkU2lnbmF0
dXJlID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRXaXRoTGVuZ3RoOm1vZHVs
dXNOQnl0ZXNdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNjcnNhYnNzYV9zaWduX2JsaW5k
ZWRfbWVzc2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJpdmF0ZUtleSwgYmxpbmRlZE1lc3NhZ2UtPmRh
dGEoKSwgYmxpbmRlZE1lc3NhZ2UtPnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAqPihbYmxp
bmRlZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSwg
cm5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5saW5rYWJsZVRva2VuID0gYmFz
ZTY0VVJMRW5jb2RlVG9TdHJpbmcoW2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBbYmxpbmRlZFNp
Z25hdHVyZSBsZW5ndGhdKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhhbXBsZSBy
ZXNwb25zZTogeyAidW5saW5rYWJsZV90b2tlbiI6ICJBQkNEIiB9LiAiQUJDRCIgc2hvdWxkIGJl
IEJhc2U2NFVSTCBlbmNvZGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byByZXNwb25z
ZSA9IG1ha2VTdHJpbmcoIkhUVFAvMS4xIDIwMCBPS1xyXG4iCkBAIC0yMjIsMTggKzIyMSwxNiBA
QCBURVNUKEV2ZW50QXR0cmlidXRpb24sIEZyYXVkUHJldmVudGlvbikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArPSBrZXkubGVuZ3RoKCkgKyAzOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZW5kID0gcmVxdWVzdDRT
dHJpbmcuZmluZCgnIicsIHN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIHRva2VuID0gcmVxdWVzdDRTdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQg
LSBzdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRva2VuVmVjdG9yOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJhc2U2NFVSTERlY29kZSh0b2tlbiwgdG9rZW5WZWN0b3IpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdG9rZW5EYXRhID0gYWRvcHROUyhbW05T
RGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczp0b2tlblZlY3Rvci5kYXRhKCkgbGVuZ3RoOnRva2Vu
VmVjdG9yLnNpemUoKV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gdG9rZW5WZWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUodG9rZW4pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdG9rZW5EYXRhID0gYWRvcHROUyhbW05T
RGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczp0b2tlblZlY3Rvci0+ZGF0YSgpIGxlbmd0aDp0b2tl
blZlY3Rvci0+c2l6ZSgpXSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrZXkgPSBTdHJpbmcoInNvdXJjZV9zZWNyZXRfdG9rZW5fc2lnbmF0dXJlIik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSByZXF1ZXN0NFN0cmlu
Zy5maW5kKGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
cnQgKz0ga2V5Lmxlbmd0aCgpICsgMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQgPSByZXF1ZXN0NFN0cmluZy5maW5kKCciJywgc3RhcnQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2lnbmF0dXJlID0gcmVxdWVzdDRT
dHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNpZ25hdHVyZVZlY3RvcjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjRVUkxEZWNvZGUoc2ln
bmF0dXJlLCBzaWduYXR1cmVWZWN0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gc2lnbmF0dXJlRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGlu
aXRXaXRoQnl0ZXM6c2lnbmF0dXJlVmVjdG9yLmRhdGEoKSBsZW5ndGg6c2lnbmF0dXJlVmVjdG9y
LnNpemUoKV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
c2lnbmF0dXJlVmVjdG9yID0gYmFzZTY0VVJMRGVjb2RlKHNpZ25hdHVyZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzaWduYXR1cmVEYXRhID0gYWRvcHRO
UyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzaWduYXR1cmVWZWN0b3ItPmRhdGEoKSBs
ZW5ndGg6c2lnbmF0dXJlVmVjdG9yLT5zaXplKCldKTsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKFNlY0tleVZlcmlmeVNpZ25hdHVyZShzZWNL
ZXkuZ2V0KCksIGtTZWNLZXlBbGdvcml0aG1SU0FTaWduYXR1cmVNZXNzYWdlUFNTU0hBMzg0LCAo
X19icmlkZ2UgQ0ZEYXRhUmVmKXRva2VuRGF0YS5nZXQoKSwgKF9fYnJpZGdlIENGRGF0YVJlZilz
aWduYXR1cmVEYXRhLmdldCgpLCBOVUxMKSk7CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvbWFjL1NTTEtleUdlbmVyYXRvci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW0JKHJldmlzaW9uIDI3NzU2OSkKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdlbmVyYXRvci5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtOTgsOCArOTgsOCBAQCBURVNUX0YoU1NMS2V5R2VuZXJhdG9yVGVzdCwgRGVm
YXVsdFRlc3QpCiAgICAgY2hhciBjaGFsbGVuZ2VbXSA9ICIwMTIzNDU2Nzg5IjsKICAgICBhdXRv
IHJhd1Jlc3VsdCA9IFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZygw
LCBjaGFsbGVuZ2UsIHVybCk7CiAgICAgQVNTRVJUX0ZBTFNFKHJhd1Jlc3VsdC5pc0VtcHR5KCkp
OwotICAgIFZlY3Rvcjx1aW50OF90PiBkZXJSZXN1bHQ7Ci0gICAgQVNTRVJUX1RSVUUoYmFzZTY0
RGVjb2RlKHJhd1Jlc3VsdCwgZGVyUmVzdWx0KSk7CisgICAgYXV0byBkZXJSZXN1bHQgPSBiYXNl
NjREZWNvZGUocmF3UmVzdWx0KTsKKyAgICBBU1NFUlRfVFJVRShkZXJSZXN1bHQpOwogCiAgICAg
U2VjQXNuMUNvZGVyUmVmIGNvZGVyID0gbnVsbHB0cjsKICAgICBBU1NFUlRfRVEoZXJyU2VjU3Vj
Y2VzcywgU2VjQXNuMUNvZGVyQ3JlYXRlKCZjb2RlcikpOwpAQCAtMTA4LDcgKzEwOCw3IEBAIFRF
U1RfRihTU0xLZXlHZW5lcmF0b3JUZXN0LCBEZWZhdWx0VGVzdCkKICAgICB9KTsKIAogICAgIFNp
Z25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSBkZWNvZGVkUmVzdWx0IHsgfTsKLSAgICBTZWNBc24x
SXRlbSBkZXJSZXN1bHRJdGVtIHsgZGVyUmVzdWx0LnNpemUoKSwgZGVyUmVzdWx0LmRhdGEoKSB9
OworICAgIFNlY0FzbjFJdGVtIGRlclJlc3VsdEl0ZW0geyBkZXJSZXN1bHQtPnNpemUoKSwgZGVy
UmVzdWx0LT5kYXRhKCkgfTsKICAgICBBU1NFUlRfRVEoZXJyU2VjU3VjY2VzcywgU2VjQXNuMURl
Y29kZURhdGEoY29kZXIsICZkZXJSZXN1bHRJdGVtLCBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2VUZW1wbGF0ZSwgJmRlY29kZWRSZXN1bHQpKTsKIAogICAgIC8vIENoZWNrIGNoYWxsZW5nZQpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2aXNpb24gMjc3
NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDQsNyArMzQ0LDcgQEAgdm9pZCBDb25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5k
c2hha2UoQ29tcAogICAgICAgICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQp
KTsKICAgICAgICAgICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgICAgICAgICAgc2hhMS5jb21w
dXRlSGFzaChoYXNoKTsKLSAgICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaGFzaC5kYXRh
KCksIFNIQTE6Omhhc2hTaXplKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpOwogICAgICAgICB9OwogCiAgICAgICAg
IGNvbm5lY3Rpb24uc2VuZChIVFRQUmVzcG9uc2UoMTAxLCB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429061</attachid>
            <date>2021-05-19 10:14:53 -0700</date>
            <delta_ts>2021-05-19 10:37:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210519101452.patch</filename>
            <type>text/plain</type>
            <size>206036</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnJpbmcgYmFzZTY0IGVuY29kaW5nL2RlY29k
aW5nIHVwIHRvIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucyBieToKKyAgICAgICAgLSBS
ZXBsYWNlIHVzZSBvZiAib3V0IHBhcmFtZXRlciArIGJvb2wiIHdpdGggT3B0aW9uYWwgcmV0dXJu
IHZhbHVlcy4KKyAgICAgICAgLSBVc2luZyBlbnVtIGNsYXNzIGZvciBlbnVtZXJhdGlvbnMuCisg
ICAgICAgIC0gUmVwbGFjaW5nIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlci9Db25z
dFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcgorICAgICAgICAgIHdpdGggYXBwcm9w
cmlhdGUgZnVuY3Rpb24gb3ZlcmxvYWRzLgorCisgICAgICAgIEFsc28gYWRkcyBhIG5ldyBTdHJp
bmdUeXBlQWRhcHRlciBmb3IgaW5saW5lIGJhc2U2NCBlbmNvZGluZyBkYXRhIGluIGVpdGhlciBt
YWtlU3RyaW5nKCkKKyAgICAgICAgb3IgU3RyaW5nQnVpbGRlci4gVG8gbWFrZSB0aGlzIHdvcmss
IGEgZmV3IG1vZGlmaWNhdGlvbnMgd2VyZSBuZWVkIHRvIHRoZSBiYXNlNjRFbmNvZGUoKQorICAg
ICAgICBmdW5jdGlvbnMgdG8gc3VwcG9ydCB0aGUgZml4ZWQgc2l6ZSB3cml0ZVRvKCkgZnVuY3Rp
b24uCisKKyAgICAgICAgRmlyc3QsIHRoZSBsZW5ndGggb2YgdGhlIGVuY29kZWQgZGF0YSBpcyBu
b3cgY29tcHV0ZWQgdXAgZnJvbnQgZGVwZW5kaW5nIG9uIHRoZSBwb2xpY3kuCisgICAgICAgIFRo
aXMgaGFzIGJlZW4gZXh0cmFjdGVkIGludG8gYSBuZXcgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNp
emUoKSBmdW5jdGlvbiB1c2VkIGJ5IGJvdGgKKyAgICAgICAgdGhlIGFkYXB0b3IgYW5kIGJ5IGJh
c2U2NEVuY29kZSB3aGVuIHBhc3NlZCBhIFZlY3Rvci4gUHJldmlvdXNseSwgd2hlbiBlbmNvZGlu
ZyB1c2luZworICAgICAgICBzb21lIHBvbGljaWVzLCB0aGUgc2l6ZSB3YXMgYW4gb3ZlcmVzdGlt
YXRlIGFuZCB0aGUgcmVzdWx0aW5nIFZlY3RvciB3b3VsZCBiZSByZXNpemVkCisgICAgICAgIGRv
d24gYWZ0ZXIgZW5jb2RpbmcuCisKKyAgICAgICAgU2Vjb25kLCBiYXNlNjRFbmNvZGVJbnRlcm5h
bCB3YXMgbWFkZSBpbnRvIGEgdGVtcGxhdGUgZnVuY3Rpb24gdG8gYWxsb3cgZm9yIHR3byBuZXcg
CisgICAgICAgIGJhc2U2NEVuY29kZSBmdW5jdGlvbnMsIG9uZSBvZiB3aGljaCBoYXMgYSBVQ2hh
ciogZGVzdGluYXRpb24uIFRoZXNlIGFyZSB1c2VkIGJ5IHRoZQorICAgICAgICBhZGFwdG9yIHRv
IHdyaXRlIHRoZSBlbmNvZGVkIGRhdGEuCisKKyAgICAgICAgT25lIGFkZGl0aW9uYWwgc21hbGwg
Y2hhbmdlIGlzIHRoYXQgbm93IGEgb3B0aW9uYWwgbWFwIHR5cGUgcGFyYW1ldGVyIGhhcyBiZWVu
IGFkZGVkCisgICAgICAgIHRvIGFsbCB0aGUgZW5jb2RlcnMgdG8gYWxsb3cgdXNpbmcgZWl0aGVy
IHRoZSBkZWZhdWx0IG1hcCBvciB0aGUgVVJMIG9uZSBhcyBkZWZpbmVkIAorICAgICAgICBpbiBS
RkMgNDY0OC4gVGhpcyBzaW1wbGlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RyaW5n
VHlwZUFkYXB0ZXIgYW5kIG1ha2VzIHRoZQorICAgICAgICBiYXNlNjRVUkxFbmNvZGUvYmFzZTY0
VVJMRGVjb2RlIGZ1bmN0aW9ucyBpbnRvIHNpbXBsZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdGhh
dCB1c2UKKyAgICAgICAgdGhlIHJpZ2h0IGRlZmF1bHRzIGZvciB0aGUgZ2VuZXJpYyBlbmNvZGUv
ZGVjb2RlIGZ1bmN0aW9ucy4gCisKKyAgICAgICAgKiB3dGYvdGV4dC9CYXNlNjQuY3BwOgorICAg
ICAgICAoV1RGOjpiYXNlNjRFbmNvZGVJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OmJhc2U2NEVu
Y29kZSk6CisgICAgICAgIChXVEY6OmJhc2U2NERlY29kZUludGVybmFsKToKKyAgICAgICAgKFdU
Rjo6YmFzZTY0RGVjb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRGVjb2RlKToKKyAgICAg
ICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9C
YXNlNjQuaDoKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlKToKKyAgICAgICAgKFdURjo6YmFz
ZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlKToKKyAgICAgICAgKFdU
Rjo6aXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcik6CisgICAgICAgIChXVEY6OmNhbGN1bGF0
ZUJhc2U2NEVuY29kZWRTaXplKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlZCk6CisgICAg
ICAgIChXVEY6OmJhc2U2NFVSTEVuY29kZWQpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRh
cHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6U3RyaW5nVHlwZUFkYXB0ZXIpOgorICAgICAgICAo
V1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6bGVuZ3RoIGNvbnN0
KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46
OmlzOEJpdCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNw
ZWNpZmljYXRpb24+Ojp3cml0ZVRvIGNvbnN0KToKKwogMjAyMS0wNS0xNiAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1vZGVybml6ZSAvIE9wdGltaXplIFNRTGl0
ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb24KSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvQmFzZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2
NC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgICBDb3B5cmlnaHQgKEMpIDIw
MDAtMjAwMSBEYXdpdCBBbGVtYXllaHUgPGFkYXdpdEBrZGUub3JnPgogICAgQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0gICBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICAgQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFy
b2dhLmNvbT4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI1LDEzICsyNSwxNiBAQAogI2luY2x1ZGUg
PHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFj
ZSBXVEYgewogCi1jb25zdCBjaGFyIG5vbkFscGhhYmV0ID0gLTE7Citjb25zdGV4cHIgY29uc3Qg
Y2hhciBub25BbHBoYWJldCA9IC0xOwogCi1zdGF0aWMgY29uc3QgY2hhciBiYXNlNjRFbmNNYXBb
NjRdID0geworY29uc3RleHByIHVuc2lnbmVkIGVuY29kZU1hcFNpemUgPSA2NDsKK2NvbnN0ZXhw
ciB1bnNpZ25lZCBkZWNvZGVNYXBTaXplID0gMTI4OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNl
NjRFbmNNYXBbZW5jb2RlTWFwU2l6ZV0gPSB7CiAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwg
MHg0NSwgMHg0NiwgMHg0NywgMHg0OCwKICAgICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRE
LCAweDRFLCAweDRGLCAweDUwLAogICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4
NTYsIDB4NTcsIDB4NTgsCkBAIC00Miw3ICs0NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2
NEVuY01hcFs2NF0gPSB7CiAgICAgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwg
MHgyQiwgMHgyRgogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RGVjTWFwWzEyOF0gPSB7
CitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjREZWNNYXBbZGVjb2RlTWFwU2l6ZV0gPSB7CiAgICAg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJl
dCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJl
dCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5v
bkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCkBAIC02MSw3ICs2NCw3IEBAIHN0
YXRpYyBjb25zdCBjaGFyIGJhc2U2NERlY01hcFsxMjhdID0gewogICAgIDB4MzEsIDB4MzIsIDB4
MzMsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9
IHsKK3N0YXRpYyBjb25zdCBjaGFyIGJhc2U2NFVSTEVuY01hcFtlbmNvZGVNYXBTaXplXSA9IHsK
ICAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAogICAg
IDB4NDksIDB4NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCiAgICAgMHg1
MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKQEAgLTcyLDcgKzc1
LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IAogICAgIDB4MzQs
IDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4MkQsIDB4NUYKIH07CiAKLXN0YXRpYyBj
b25zdCBjaGFyIGJhc2U2NFVSTERlY01hcFsxMjhdID0geworc3RhdGljIGNvbnN0IGNoYXIgYmFz
ZTY0VVJMRGVjTWFwW2RlY29kZU1hcFNpemVdID0gewogICAgIG5vbkFscGhhYmV0LCBub25BbHBo
YWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQs
IG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQs
IG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25B
bHBoYWJldCwgbm9uQWxwaGFiZXQsCiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25B
bHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFi
ZXQsIG5vbkFscGhhYmV0LApAQCAtOTEsMjQzICs5NCwyNDUgQEAgc3RhdGljIGNvbnN0IGNoYXIg
YmFzZTY0VVJMRGVjTWFwWzEyOF0gPQogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsK
IAotc3RhdGljIGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29k
ZVBvbGljeSBwb2xpY3ksIGNvbnN0IGNoYXIgKCZlbmNvZGVNYXApWzY0XSkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNv
bnN0IHVpbnQ4X3QqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJh
Y3RlclR5cGUqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5n
dGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0g
ICAgb3V0LmNsZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NF
UlQoZGVzdGluYXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRlQmFzZTY0RW5j
b2RlZFNpemUoaW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5ndGgpOwogCi0g
ICAgLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCBy
ZXR1cm4gbm90aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSAi
b3V0TGVuZ3RoIiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhhbiBiZWluZyBw
ZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0gICAgY29uc3Qg
dW5zaWduZWQgbWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2IC8gNCAqIDMg
LSAyOwotICAgIGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVybjsK
KyAgICBhdXRvIGVuY29kZU1hcCA9IChtYXAgPT0gQmFzZTY0RW5jb2RlTWFwOjpVUkwpID8gYmFz
ZTY0VVJMRW5jTWFwIDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9IDA7CiAg
ICAgdW5zaWduZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0gICAgdW5z
aWduZWQgb3V0TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGluc2VydExG
cyA9IChwb2xpY3kgPT0gQmFzZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnMgJiYgZGVzdGluYXRp
b25MZW5ndGggPiBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOwogCi0g
ICAgLy8gRGVhbCB3aXRoIHRoZSA3NiBjaGFyYWN0ZXIgcGVyIGxpbmUgbGltaXQgc3BlY2lmaWVk
IGluIFJGQyAyMDQ1LgotICAgIGJvb2wgaW5zZXJ0TEZzID0gKHBvbGljeSA9PSBCYXNlNjRJbnNl
cnRMRnMgJiYgb3V0TGVuZ3RoID4gNzYpOwotICAgIGlmIChpbnNlcnRMRnMpCi0gICAgICAgIG91
dExlbmd0aCArPSAoKG91dExlbmd0aCAtIDEpIC8gNzYpOwotCi0gICAgaW50IGNvdW50ID0gMDsK
LSAgICBvdXQuZ3JvdyhvdXRMZW5ndGgpOwotCi0gICAgLy8gMy1ieXRlIHRvIDQtYnl0ZSBjb252
ZXJzaW9uICsgMC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgotICAgIGlmIChsZW4g
PiAxKSB7Ci0gICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAgIGlmIChpbnB1dExl
bmd0aCA+IDEpIHsKKyAgICAgICAgd2hpbGUgKHNpZHggPCBpbnB1dExlbmd0aCAtIDIpIHsKICAg
ICAgICAgICAgIGlmIChpbnNlcnRMRnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoY291bnQgJiYg
IShjb3VudCAlIDc2KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOwor
ICAgICAgICAgICAgICAgIGlmIChjb3VudCAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVM
ZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25E
YXRhQnVmZmVyW2RpZHgrK10gPSAnXG4nOwogICAgICAgICAgICAgICAgIGNvdW50ICs9IDQ7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtz
aWR4XSA+PiAyKSAmIDA3N107Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFso
KGRhdGFbc2lkeCArIDFdID4+IDQpICYgMDE3KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3Nyld
OwotICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAyXSA+
PiA2KSAmIDAwMykgfCAoKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07Ci0gICAgICAgICAg
ICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFtkYXRhW3NpZHggKyAyXSAmIDA3N107CisKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXRE
YXRhQnVmZmVyW3NpZHggICAgXSA+PiAyKSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlv
bkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsg
MV0gPj4gNCkgJiAwMTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3
KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1h
cFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0gPj4gNikgJiAwMDMpIHwgKChpbnB1dERhdGFC
dWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRh
dGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsgIGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0g
ICAgICAgJiAwNzddOwogICAgICAgICAgICAgc2lkeCArPSAzOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgaWYgKHNpZHggPCBsZW4pIHsKLSAgICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQg
PiAwKSAmJiAhKGNvdW50ICUgNzYpKQotICAgICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7Ci0K
LSAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzdd
OwotICAgICAgICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG91dFtkaWR4Kytd
ID0gZW5jb2RlTWFwWygoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhd
IDw8IDQpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0
YVtzaWR4ICsgMV0gPDwgMikgJiAwNzddOworICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsK
KyAgICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgbWF4aW11
bUJhc2U2NExpbmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gJ1xuJzsKKworICAgICAgICBkZXN0aW5hdGlvbkRhdGFC
dWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoaW5wdXREYXRhQnVmZmVyW3NpZHhdID4+IDIpICYg
MDc3XTsKKyAgICAgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCAtIDEpIHsKKyAgICAgICAgICAg
IGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVm
ZmVyW3NpZHggKyAxXSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA8PCA0
KSAmIDA3NyldOworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBl
bmNvZGVNYXBbIChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4
XSA8PCA0KSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsr
XSA9IGVuY29kZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzddOwog
ICAgIH0KIAotICAgIC8vIEFkZCBwYWRkaW5nCi0gICAgaWYgKHBvbGljeSA9PSBCYXNlNjRVUkxQ
b2xpY3kpCi0gICAgICAgIG91dC5yZXNpemUoZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdo
aWxlIChkaWR4IDwgb3V0LnNpemUoKSkgewotICAgICAgICAgICAgb3V0W2RpZHhdID0gJz0nOwot
ICAgICAgICAgICAgKytkaWR4OwotICAgICAgICB9Ci0gICAgfQorICAgIEFTU0VSVChwb2xpY3kg
IT0gQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwgfHwgZGlkeCA9PSBkZXN0aW5hdGlvbkxlbmd0aCk7
CisKKyAgICB3aGlsZSAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0aW5h
dGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9ICc9JzsKIH0KIAotU3RyaW5nIGJhc2U2NEVuY29kZShj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVp
bnQ4X3QqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29k
ZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgVmVjdG9yPGNoYXI+
IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBwb2xpY3ksIGJhc2U2NEVuY01hcCk7
Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoaW5wdXRM
ZW5ndGgsIHBvbGljeSk7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBkZXN0aW5hdGlvblZlY3RvcihkZXN0aW5h
dGlvbkxlbmd0aCk7CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoaW5wdXREYXRhQnVmZmVyLCBp
bnB1dExlbmd0aCwgZGVzdGluYXRpb25WZWN0b3IuZGF0YSgpLCBkZXN0aW5hdGlvbkxlbmd0aCwg
cG9saWN5LCBtYXApOworICAgIHJldHVybiBkZXN0aW5hdGlvblZlY3RvcjsKK30KKwordm9pZCBi
YXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExl
bmd0aCwgVUNoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25M
ZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCit7
CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGJhc2U2
NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZm
ZXIpLCBpbnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0aW5hdGlvbkxlbmd0
aCwgcG9saWN5LCBtYXApOwogfQogCi12b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRh
LCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9s
aWN5KQordm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNp
Z25lZCBpbnB1dExlbmd0aCwgTENoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQg
ZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29k
ZU1hcCBtYXApCiB7Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGRhdGEpLCBsZW4sIG91dCwgcG9saWN5LCBiYXNlNjRFbmNNYXApOwor
ICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICBiYXNlNjRF
bmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVy
KSwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgs
IHBvbGljeSwgbWFwKTsKIH0KIAotU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCitWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0
b3IoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBWZWN0
b3I8Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIEJhc2U2NFVSTFBvbGlj
eSwgYmFzZTY0VVJMRW5jTWFwKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJl
c3VsdC5zaXplKCkpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRMZW5ndGgsIHBvbGljeSwg
bWFwKTsKIH0KIAotdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWdu
ZWQgbGVuLCBWZWN0b3I8Y2hhcj4mIG91dCkKK1N0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhj
b25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJhc2U2NEVu
Y29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVu
LCBvdXQsIEJhc2U2NFVSTFBvbGljeSwgYmFzZTY0VVJMRW5jTWFwKTsKKyAgICByZXR1cm4gbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIHBvbGlj
eSwgbWFwKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIGJvb2wg
YmFzZTY0RGVjb2RlSW50ZXJuYWwoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBTaWdu
ZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXImIG91dCwgdW5zaWduZWQgb3B0aW9ucywgY29u
c3QgY2hhciAoJmRlY29kZU1hcClbMTI4XSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBP
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGlu
cHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNv
ZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewotICAgIG91dC5jbGVh
cigpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWlu
cHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gVmVjdG9yPHVpbnQ4X3Q+IHsgfTsKIAotICAgIG91
dC5ncm93KGxlbmd0aCk7CisgICAgYXV0byBkZWNvZGVNYXAgPSAobWFwID09IEJhc2U2NERlY29k
ZU1hcDo6VVJMKSA/IGJhc2U2NFVSTERlY01hcCA6IGJhc2U2NERlY01hcDsKKworICAgIFZlY3Rv
cjx1aW50OF90PiBkZXN0aW5hdGlvbihpbnB1dExlbmd0aCk7CiAKICAgICB1bnNpZ25lZCBlcXVh
bHNTaWduQ291bnQgPSAwOwotICAgIHVuc2lnbmVkIG91dExlbmd0aCA9IDA7Ci0gICAgYm9vbCBo
YWRFcnJvciA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4IDwgbGVuZ3Ro
OyArK2lkeCkgewotICAgICAgICB1bnNpZ25lZCBjaCA9IGRhdGFbaWR4XTsKKyAgICB1bnNpZ25l
ZCBkZXN0aW5hdGlvbkxlbmd0aCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpZHggPSAwOyBpZHgg
PCBpbnB1dExlbmd0aDsgKytpZHgpIHsKKyAgICAgICAgdW5zaWduZWQgY2ggPSBpbnB1dERhdGFC
dWZmZXJbaWR4XTsKICAgICAgICAgaWYgKGNoID09ICc9JykgewogICAgICAgICAgICAgKytlcXVh
bHNTaWduQ291bnQ7CiAgICAgICAgICAgICAvLyBUaGVyZSBzaG91bGQgbmV2ZXIgYmUgbW9yZSB0
aGFuIDIgcGFkZGluZyBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiBCYXNl
NjRWYWxpZGF0ZVBhZGRpbmcgJiYgZXF1YWxzU2lnbkNvdW50ID4gMikgewotICAgICAgICAgICAg
ICAgIGhhZEVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmIChvcHRpb25zLmNvbnRhaW5zKEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGlu
ZykgJiYgZXF1YWxzU2lnbkNvdW50ID4gMikgeworICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBj
aGFyIGRlY29kZWRDaGFyYWN0ZXIgPSBjaCA8IFdURl9BUlJBWV9MRU5HVEgoZGVjb2RlTWFwKSA/
IGRlY29kZU1hcFtjaF0gOiBub25BbHBoYWJldDsKKyAgICAgICAgICAgIGNoYXIgZGVjb2RlZENo
YXJhY3RlciA9IGNoIDwgZGVjb2RlTWFwU2l6ZSA/IGRlY29kZU1hcFtjaF0gOiBub25BbHBoYWJl
dDsKICAgICAgICAgICAgIGlmIChkZWNvZGVkQ2hhcmFjdGVyICE9IG5vbkFscGhhYmV0KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGVxdWFsc1NpZ25Db3VudCkgewotICAgICAgICAgICAgICAgICAg
ICBoYWRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXRbb3V0TGVuZ3RoKytdID0gZGVjb2RlZENoYXJh
Y3RlcjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zICYgQmFzZTY0SWdub3JlU3Bh
Y2VzQW5kTmV3TGluZXMpCi0gICAgICAgICAgICAgICAgfHwgKCFpc0xhdGluMShjaCkgfHwgIWlz
QVNDSUlTcGFjZShjaCkgfHwgKChvcHRpb25zICYgQmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiKSAm
JiBjaCA9PSAnXHYnKSkpIHsKLSAgICAgICAgICAgICAgICBoYWRFcnJvciA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKGVxdWFsc1NpZ25Db3VudCkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAg
ICBkZXN0aW5hdGlvbltkZXN0aW5hdGlvbkxlbmd0aCsrXSA9IGRlY29kZWRDaGFyYWN0ZXI7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmNvbnRhaW5zKEJhc2U2NERlY29kZU9wdGlv
bnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSB8fCAoIWlzTGF0aW4xKGNoKSB8fCAhaXNBU0NJ
SVNwYWNlKGNoKSB8fCAob3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpEaXNj
YXJkVmVydGljYWxUYWIpICYmIGNoID09ICdcdicpKSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAv
LyBNYWtlIHN1cmUgd2Ugc2hyaW5rIGJhY2sgdGhlIFZlY3RvciBiZWZvcmUgcmV0dXJuaW5nLiBv
dXRMZW5ndGggbWF5IGJlIHNob3J0ZXIgdGhhbiBleHBlY3RlZAorICAgIC8vIE1ha2Ugc3VyZSB3
ZSBzaHJpbmsgYmFjayB0aGUgVmVjdG9yIGJlZm9yZSByZXR1cm5pbmcuIGRlc3RpbmF0aW9uTGVu
Z3RoIG1heSBiZSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQKICAgICAvLyBpbiBjYXNlIG9mIGVycm9y
IG9yIGluIGNhc2Ugb2YgaWdub3JlZCBzcGFjZXMuCi0gICAgaWYgKG91dExlbmd0aCA8IG91dC5z
aXplKCkpCi0gICAgICAgIG91dC5zaHJpbmsob3V0TGVuZ3RoKTsKLQotICAgIGlmIChoYWRFcnJv
cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChkZXN0aW5hdGlvbkxlbmd0aCA8IGRl
c3RpbmF0aW9uLnNpemUoKSkKKyAgICAgICAgZGVzdGluYXRpb24uc2hyaW5rKGRlc3RpbmF0aW9u
TGVuZ3RoKTsKIAotICAgIGlmICghb3V0TGVuZ3RoKQotICAgICAgICByZXR1cm4gIWVxdWFsc1Np
Z25Db3VudDsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKSB7CisgICAgICAgIGlmIChlcXVh
bHNTaWduQ291bnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBy
ZXR1cm4gVmVjdG9yPHVpbnQ4X3Q+IHsgfTsKKyAgICB9CiAKICAgICAvLyBUaGUgc2hvdWxkIGJl
IG5vIHBhZGRpbmcgaWYgbGVuZ3RoIGlzIGEgbXVsdGlwbGUgb2YgNC4KLSAgICAvLyBXZSB1c2Ug
KG91dExlbmd0aCArIGVxdWFsc1NpZ25Db3VudCkgaW5zdGVhZCBvZiBsZW5ndGggYmVjYXVzZSB3
ZSBkb24ndCB3YW50IHRvIGFjY291bnQgZm9yIGlnbm9yZWQgY2hhcmFjdGVycyAoaS5lLiBzcGFj
ZXMpLgotICAgIGlmIChvcHRpb25zICYgQmFzZTY0VmFsaWRhdGVQYWRkaW5nICYmIGVxdWFsc1Np
Z25Db3VudCAmJiAob3V0TGVuZ3RoICsgZXF1YWxzU2lnbkNvdW50KSAlIDQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAvLyBXZSB1c2UgKGRlc3RpbmF0aW9uTGVuZ3RoICsgZXF1YWxzU2ln
bkNvdW50KSBpbnN0ZWFkIG9mIGxlbmd0aCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gYWNjb3Vu
dCBmb3IgaWdub3JlZCBjaGFyYWN0ZXJzIChpLmUuIHNwYWNlcykuCisgICAgaWYgKG9wdGlvbnMu
Y29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKSAmJiBlcXVhbHNT
aWduQ291bnQgJiYgKGRlc3RpbmF0aW9uTGVuZ3RoICsgZXF1YWxzU2lnbkNvdW50KSAlIDQpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAvLyBWYWxpZCBkYXRhIGlzIChuICog
NCArIFswLDIsM10pIGNoYXJhY3RlcnMgbG9uZy4KLSAgICBpZiAoKG91dExlbmd0aCAlIDQpID09
IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGRlc3RpbmF0aW9uTGVuZ3RoICUg
NCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICAvLyA0LWJ5
dGUgdG8gMy1ieXRlIGNvbnZlcnNpb24KLSAgICBvdXRMZW5ndGggLT0gKG91dExlbmd0aCArIDMp
IC8gNDsKLSAgICBpZiAoIW91dExlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRl
c3RpbmF0aW9uTGVuZ3RoIC09IChkZXN0aW5hdGlvbkxlbmd0aCArIDMpIC8gNDsKKyAgICBpZiAo
IWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
dW5zaWduZWQgc2lkeCA9IDA7CiAgICAgdW5zaWduZWQgZGlkeCA9IDA7Ci0gICAgaWYgKG91dExl
bmd0aCA+IDEpIHsKLSAgICAgICAgd2hpbGUgKGRpZHggPCBvdXRMZW5ndGggLSAyKSB7Ci0gICAg
ICAgICAgICBvdXRbZGlkeF0gPSAoKChvdXRbc2lkeF0gPDwgMikgJiAyNTUpIHwgKChvdXRbc2lk
eCArIDFdID4+IDQpICYgMDAzKSk7Ci0gICAgICAgICAgICBvdXRbZGlkeCArIDFdID0gKCgob3V0
W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikgJiAwMTcpKTsK
LSAgICAgICAgICAgIG91dFtkaWR4ICsgMl0gPSAoKChvdXRbc2lkeCArIDJdIDw8IDYpICYgMjU1
KSB8IChvdXRbc2lkeCArIDNdICYgMDc3KSk7CisgICAgaWYgKGRlc3RpbmF0aW9uTGVuZ3RoID4g
MSkgeworICAgICAgICB3aGlsZSAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoIC0gMikgeworICAg
ICAgICAgICAgZGVzdGluYXRpb25bZGlkeCAgICBdID0gKCgoZGVzdGluYXRpb25bc2lkeCAgICBd
IDw8IDIpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lkeCArIDFdID4+IDQpICYgMDAzKSk7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbltkaWR4ICsgMV0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICsg
MV0gPDwgNCkgJiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMl0gPj4gMikgJiAwMTcpKTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2RpZHggKyAyXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHgg
KyAyXSA8PCA2KSAmIDI1NSkgfCAgKGRlc3RpbmF0aW9uW3NpZHggKyAzXSAgICAgICAmIDA3Nykp
OwogICAgICAgICAgICAgc2lkeCArPSA0OwogICAgICAgICAgICAgZGlkeCArPSAzOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKGRpZHggPCBvdXRMZW5ndGgpCi0gICAgICAgIG91dFtkaWR4
XSA9ICgoKG91dFtzaWR4XSA8PCAyKSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMV0gPj4gNCkgJiAw
MDMpKTsKKyAgICBpZiAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0aW5h
dGlvbltkaWR4XSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggICAgXSA8PCAyKSAmIDI1NSkgfCAoKGRl
c3RpbmF0aW9uW3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOwogCi0gICAgaWYgKCsrZGlkeCA8IG91
dExlbmd0aCkKLSAgICAgICAgb3V0W2RpZHhdID0gKCgob3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1
NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikgJiAwMTcpKTsKKyAgICBpZiAoKytkaWR4IDwgZGVz
dGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0aW9uW2RpZHhdID0gKCgoZGVzdGluYXRp
b25bc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lkeCArIDJdID4+IDIp
ICYgMDE3KSk7CiAKLSAgICBpZiAob3V0TGVuZ3RoIDwgb3V0LnNpemUoKSkKLSAgICAgICAgb3V0
LnNocmluayhvdXRMZW5ndGgpOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGRlc3RpbmF0
aW9uTGVuZ3RoIDwgZGVzdGluYXRpb24uc2l6ZSgpKQorICAgICAgICBkZXN0aW5hdGlvbi5zaHJp
bmsoZGVzdGluYXRpb25MZW5ndGgpOworICAgIHJldHVybiBkZXN0aW5hdGlvbjsKIH0KIAotYm9v
bCBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNv
ZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGluLmxlbmd0aCgpOwotICAgIGlmICghbGVuZ3RoIHx8IGluLmlzOEJpdCgpKQot
ICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczgoKSwgbGVu
Z3RoLCBvdXQsIG9wdGlvbnMsIGJhc2U2NERlY01hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29k
ZUludGVybmFsKGluLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0
RGVjTWFwKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKKyAgICBpZiAo
IWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKKyAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwg
b3B0aW9ucywgbWFwKTsKIH0KIAotYm9vbCBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbiwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcgaW5wdXQsIE9w
dGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFw
KQogewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGluLmxlbmd0aCgpOwotICAgIGlmICghbGVuZ3Ro
IHx8IGluLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4u
Y2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvdXQsIG9wdGlvbnMsIGJhc2U2NERlY01hcCk7Ci0gICAg
cmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG91
dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5s
ZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKKyAgICAgICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3B0
aW9ucywgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFj
dGVyczE2KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKIH0KIAotYm9vbCBiYXNlNjREZWNvZGUo
Y29uc3QgVmVjdG9yPGNoYXI+JiBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVy
IG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0
RGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNv
ZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewotICAgIG91dC5jbGVh
cigpOworICAgIGlmIChpbnB1dC5zaXplKCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGJhc2U2
NERlY29kZUludGVybmFsKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBtYXAp
OworfQogCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJn
ZSwganVzdCByZXR1cm4gbm90aGluZy4KLSAgICBpZiAoaW4uc2l6ZSgpID4gVUlOVF9NQVgpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRp
b25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQoreworICAgIGlmIChpbnB1dC5zaXpl
KCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgb3B0
aW9ucywgbWFwKTsKK30KIAotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oaW4uZGF0YSgpKSwgaW4uc2l6ZSgpLCBvdXQsIG9wdGlv
bnMsIGJhc2U2NERlY01hcCk7CitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIE9wdGlvblNldDxCYXNlNjRE
ZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQoreworICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChkYXRhLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAK
LWJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgU2lnbmVk
T3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2ln
bmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2
NERlY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuLCBvdXQsIG9wdGlvbnMsIGJhc2U2
NERlY01hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1ib29s
IGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZl
Y3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNv
ZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbi5sZW5n
dGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGJh
c2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0LCBCYXNlNjRE
ZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5h
bChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2NFVS
TERlY01hcCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAgaWYg
KCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJ
bnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFw
OjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJz
MTYoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBiYXNl
NjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyIG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmlu
Z1ZpZXcgaW5wdXQpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAg
aWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJ
bnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwgYmFz
ZTY0VVJMRGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFj
dGVyczE2KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOwor
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoIHx8
IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5w
dXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKKyAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0
aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
ciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGlucHV0KQogewotICAgIG91dC5jbGVhcigpOworICAgIGlmIChpbnB1
dC5zaXplKCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKK30K
IAotICAgIC8vIElmIHRoZSBpbnB1dCBzdHJpbmcgaXMgcGF0aG9sb2dpY2FsbHkgbGFyZ2UsIGp1
c3QgcmV0dXJuIG5vdGhpbmcuCi0gICAgaWYgKGluLnNpemUoKSA+IFVJTlRfTUFYKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoreworICAgIGlmIChpbnB1dC5zaXplKCkgPiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgeyB9LCBCYXNl
NjREZWNvZGVNYXA6OlVSTCk7Cit9CiAKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGluLmRhdGEoKSksIGluLnNpemUoKSwgb3V0
LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOworT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChkYXRhLCBsZW5ndGgsIHsgfSwg
QmFzZTY0RGVjb2RlTWFwOjpVUkwpOwogfQogCi1ib29sIGJhc2U2NFVSTERlY29kZShjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
ciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuLCBvdXQsIEJh
c2U2NERlZmF1bHQsIGJhc2U2NFVSTERlY01hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsg
fSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdGV4dC9CYXNlNjQuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dURi93dGYvdGV4
dC9CYXNlNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTkxICsyNywxNDYgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNl
dC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi1lbnVtIEJhc2U2NEVu
Y29kZVBvbGljeSB7Ci0gICAgQmFzZTY0RG9Ob3RJbnNlcnRMRnMsCi0gICAgQmFzZTY0SW5zZXJ0
TEZzLAotICAgIEJhc2U2NFVSTFBvbGljeSAvLyBObyBwYWRkaW5nLCBubyBMRnMuCitlbnVtIGNs
YXNzIEJhc2U2NEVuY29kZVBvbGljeSB7CisgICAgRG9Ob3RJbnNlcnRMRnMsCisgICAgSW5zZXJ0
TEZzLAorICAgIFVSTCAvLyBObyBwYWRkaW5nLCBubyBMRnMuCiB9OwogCi1lbnVtIEJhc2U2NERl
Y29kZU9wdGlvbnMgewotICAgIEJhc2U2NERlZmF1bHQgPSAwLAotICAgIEJhc2U2NFZhbGlkYXRl
UGFkZGluZyA9IDEgPDwgMCwKLSAgICBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyA9IDEg
PDwgMSwKLSAgICBCYXNlNjREaXNjYXJkVmVydGljYWxUYWIgPSAxIDw8IDIsCi19OwotCi1jbGFz
cyBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgewotcHVibGljOgotICAgIFNpZ25l
ZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8Y2hhcj4mIHZlY3RvcikKLSAgICAg
ICAgOiBtX2lzU2lnbmVkKHRydWUpCi0gICAgewotICAgICAgICBtX3ZlY3Rvci5jID0gJnZlY3Rv
cjsKLSAgICB9Ci0gICAgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKFZlY3Rvcjx1
aW50OF90PiYgdmVjdG9yKQotICAgICAgICA6IG1faXNTaWduZWQoZmFsc2UpCi0gICAgewotICAg
ICAgICBtX3ZlY3Rvci51ID0gJnZlY3RvcjsKLSAgICB9Ci0KLSAgICB1aW50OF90KiBkYXRhKCkK
LSAgICB7Ci0gICAgICAgIGlmIChtX2lzU2lnbmVkKQotICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fdmVjdG9yLmMtPmRhdGEoKSk7Ci0gICAgICAgIHJldHVy
biBtX3ZlY3Rvci51LT5kYXRhKCk7Ci0gICAgfQotICAgIAotICAgIHNpemVfdCBzaXplKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzU2lnbmVkKQotICAgICAgICAgICAgcmV0dXJuIG1f
dmVjdG9yLmMtPnNpemUoKTsKLSAgICAgICAgcmV0dXJuIG1fdmVjdG9yLnUtPnNpemUoKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBpZiAobV9pc1NpZ25l
ZCkgewotICAgICAgICAgICAgbV92ZWN0b3IuYy0+Y2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBtX3ZlY3Rvci51LT5jbGVhcigpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGdyb3coc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICBpZiAobV9pc1NpZ25l
ZCkgewotICAgICAgICAgICAgbV92ZWN0b3IuYy0+Z3JvdyhzaXplKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBtX3ZlY3Rvci51LT5ncm93KHNpemUpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIHNocmluayhzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmICht
X2lzU2lnbmVkKSB7Ci0gICAgICAgICAgICBtX3ZlY3Rvci5jLT5zaHJpbmsoc2l6ZSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbV92ZWN0b3IudS0+c2hyaW5rKHNp
emUpOwotICAgIH0KLSAgICAKLSAgICB1aW50OF90JiBvcGVyYXRvcltdKHNpemVfdCBwb3NpdGlv
bikgeyByZXR1cm4gZGF0YSgpW3Bvc2l0aW9uXTsgfQorZW51bSBjbGFzcyBCYXNlNjRFbmNvZGVN
YXAgeyBEZWZhdWx0LCBVUkwgfTsKIAotcHJpdmF0ZToKLSAgICBib29sIG1faXNTaWduZWQ7Ci0g
ICAgdW5pb24gewotICAgICAgICBWZWN0b3I8Y2hhcj4qIGM7Ci0gICAgICAgIFZlY3Rvcjx1aW50
OF90PiogdTsKLSAgICB9IG1fdmVjdG9yOworZW51bSBjbGFzcyBCYXNlNjREZWNvZGVPcHRpb25z
IDogdWludDhfdCB7CisgICAgVmFsaWRhdGVQYWRkaW5nICAgICAgICAgPSAxIDw8IDAsCisgICAg
SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgPSAxIDw8IDEsCisgICAgRGlzY2FyZFZlcnRpY2FsVGFi
ICAgICAgPSAxIDw8IDIsCiB9OwogCi1jbGFzcyBDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVj
dG9yQWRhcHRlciB7Ci1wdWJsaWM6Ci0gICAgQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3Rv
ckFkYXB0ZXIoY29uc3QgVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCi0gICAgICAgIDogbV9pc1NpZ25l
ZChmYWxzZSkKLSAgICB7Ci0gICAgICAgIG1fdmVjdG9yLmMgPSAmdmVjdG9yOwotICAgIH0KLSAg
ICBDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIHZlY3RvcikKLSAgICAgICAgOiBtX2lzU2lnbmVkKHRydWUpCi0gICAgewotICAgICAg
ICBtX3ZlY3Rvci51ID0gJnZlY3RvcjsKLSAgICB9CitlbnVtIGNsYXNzIEJhc2U2NERlY29kZU1h
cCB7IERlZmF1bHQsIFVSTCB9OwogCi0gICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBpZiAobV9pc1NpZ25lZCkKLSAgICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX3ZlY3Rvci5jLT5kYXRhKCkpOwotICAgICAgICBy
ZXR1cm4gbV92ZWN0b3IudS0+ZGF0YSgpOwotICAgIH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAobV9pc1NpZ25lZCkKLSAgICAgICAgICAgIHJldHVybiBtX3Zl
Y3Rvci5jLT5zaXplKCk7Ci0gICAgICAgIHJldHVybiBtX3ZlY3Rvci51LT5zaXplKCk7Ci0gICAg
fQorc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5J
bnNlcnRpbmdMRnMgPSA3NjsKIAotcHJpdmF0ZToKLSAgICBib29sIG1faXNTaWduZWQ7Ci0gICAg
dW5pb24gewotICAgICAgICBjb25zdCBWZWN0b3I8Y2hhcj4qIGM7Ci0gICAgICAgIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiogdTsKLSAgICB9IG1fdmVjdG9yOwotfTsKKy8vIElmIHRoZSBpbnB1dCBz
dHJpbmcgaXMgcGF0aG9sb2dpY2FsbHkgbGFyZ2UsIGp1c3QgcmV0dXJuIG5vdGhpbmcuCisvLyBS
YXRoZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2
YXRpdmUuCitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRFbmNvZGVySW5w
dXRCdWZmZXJTaXplID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gNzcg
KiA3NiAvIDQgKiAzIC0gMjsKKworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2Rl
KGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgVUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFw
ID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJh
c2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2
NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CisKK1dURl9FWFBPUlRfUFJJ
VkFURSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCosIHVu
c2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMs
IEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5j
b2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNl
NjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBDU3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0
RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRF
bmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJh
c2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9s
aWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpE
ZWZhdWx0KTsKK1N0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4m
LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworU3RyaW5nIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBC
YXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNl
NjRFbmNvZGVNYXA6OkRlZmF1bHQpOworCitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiwgT3B0aW9uU2V0PEJhc2U2
NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6
OkRlZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
YmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9
IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9F
WFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25z
dCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0s
IEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JU
X1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVj
dG9yPGNoYXI+JiwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjRE
ZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRF
IE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCB1
bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNv
ZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25l
ZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAg
PSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBi
YXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRF
bmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExGcyk7Ci12b2lkIGJhc2U2NEVuY29kZShD
b25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgVmVjdG9yPGNoYXI+JiwgQmFz
ZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotdm9pZCBiYXNlNjRFbmNv
ZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJh
c2U2NERvTm90SW5zZXJ0TEZzKTsKLVdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5j
b2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9O
b3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRD
aGFyVmVjdG9yQWRhcHRlciwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRM
RnMpOwotU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOworaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNl
NjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQoreworICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXAp
OworfQogCi1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5n
JiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRpb25zID0g
QmFzZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoU3Ry
aW5nVmlldywgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRp
b25zID0gQmFzZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNv
ZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVy
LCB1bnNpZ25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBiYXNlNjREZWNvZGUoY29uc3QgY2hhciosIHVuc2lnbmVkLCBTaWduZWRPclVuc2lnbmVk
Q2hhclZlY3RvckFkYXB0ZXIsIHVuc2lnbmVkIG9wdGlvbnMgPSBCYXNlNjREZWZhdWx0KTsKK2lu
bGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNo
YXI+JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1h
cCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1
dC5zaXplKCksIHBvbGljeSwgbWFwKTsKK30KIAotaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlKENv
bnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGlj
eSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRh
dGEoKSwgaW4uc2l6ZSgpLCBvdXQsIHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
VmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSwgbWFwKTsKIH0KIAot
aW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcmIGluLCBWZWN0b3I8Y2hhcj4m
IG91dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBTdHJpbmcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBiYXNlNjRFbmNvZGUoaW4u
ZGF0YSgpLCBpbi5sZW5ndGgoKSwgb3V0LCBwb2xpY3kpOworICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXApOwogfQog
Ci1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVj
dG9yQWRhcHRlciBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBTdHJpbmcg
YmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4uc2l6ZSgpLCBwb2xpY3kpOworICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXAp
OwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiBpbiwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJp
bmcoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2
NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIGlu
Lmxlbmd0aCgpLCBwb2xpY3kpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1
dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CiB9CiAKKwogLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIEFsbCB0aGUgc2FtZSBmdW5jdGlvbnMgbW9kaWZp
ZWQgZm9yIGJhc2U2NHVybCwgYXMgZGVmaW5lZCBpbiBSRkMgNDY0OC4KIC8vIFRoaXMgZm9ybWF0
IHVzZXMgJy0nIGFuZCAnXycgaW5zdGVhZCBvZiAnKycgYW5kICcvJyByZXNwZWN0aXZlbHkuCiAv
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBWZWN0b3I8Y2hhcj4mKTsK
LXZvaWQgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyLCBWZWN0b3I8Y2hhcj4mKTsKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcm
LCBWZWN0b3I8Y2hhcj4mKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rv
cihjb25zdCB2b2lkKiwgdW5zaWduZWQpOworVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29k
ZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3RvcjxjaGFyPiYpOworVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmKTsKKworU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7CitTdHJpbmcgYmFzZTY0
VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CitTdHJpbmcgYmFzZTY0
VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+Jik7CitTdHJpbmcgYmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYpOworCitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7CitX
VEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNv
ZGUoU3RyaW5nVmlldyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CitXVEZfRVhQT1JU
X1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3Qg
VmVjdG9yPGNoYXI+Jik7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCosIHVuc2lnbmVkKTsKK1dURl9FWFBP
UlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25z
dCBjaGFyKiwgdW5zaWduZWQpOworCitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVu
Y29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7Cit9CisKK2lubGluZSBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1
dCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1
dC5zaXplKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7
Cit9CiAKLVdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZv
aWQqLCB1bnNpZ25lZCk7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNp
Z25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0
cmluZyYpOworaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1Zl
Y3RvcihpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkws
IEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKK30KIAotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFz
ZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlcik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmll
dywgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVdURl9FWFBPUlRfUFJJVkFU
RSBib29sIGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBTaWduZWRPclVuc2ln
bmVkQ2hhclZlY3RvckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJM
RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyKTsKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3Io
Y29uc3QgQ1N0cmluZyYgaW5wdXQpCit7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9y
KGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBC
YXNlNjRFbmNvZGVNYXA6OlVSTCk7Cit9CiAKLWlubGluZSB2b2lkIGJhc2U2NFVSTEVuY29kZShD
b25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbiwgVmVjdG9yPGNoYXI+JiBv
dXQpCitpbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlu
cHV0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgYmFzZTY0VVJMRW5jb2RlKGluLmRhdGEoKSwg
aW4uc2l6ZSgpLCBvdXQpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dCwg
bGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3Rv
cjxjaGFyPiYgb3V0KQoraW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25z
dCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQogewotICAgIGJhc2U2NFVSTEVuY29kZShpbi5kYXRh
KCksIGluLmxlbmd0aCgpLCBvdXQpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhp
bnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2
NEVuY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGUoQ29u
c3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgaW4pCitpbmxpbmUgU3RyaW5nIGJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQpCiB7Ci0gICAg
cmV0dXJuIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLnNpemUoKSk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRF
bmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5nJiBpbikKK2lubGluZSBTdHJpbmcgYmFz
ZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYgaW5wdXQpCiB7Ci0gICAgcmV0dXJu
IGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgQmFzZTY0RW5j
b2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBib29sIGlzQmFzZTY0T3JCYXNlNjRV
UkxDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQpAQCAtMjE5LDE1ICsxNzQsMTE4IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyAKICAgICByZXR1cm4gaXNBU0NJSUFs
cGhhbnVtZXJpYyhjKSB8fCBjID09ICcrJyB8fCBjID09ICcvJyB8fCBjID09ICctJyB8fCBjID09
ICdfJzsKIH0KIAoraW5saW5lIHVuc2lnbmVkIGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKHVu
c2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoreworICAgIGlm
ICghaW5wdXRMZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGlucHV0TGVuZ3Ro
ID4gbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUpCisgICAgICAgIHJldHVybiAw
OworCisgICAgYXV0byBiYXNlUGFkZGVkRW5jb2RlZFNpemUgPSBbJl0geworICAgICAgICByZXR1
cm4gKChpbnB1dExlbmd0aCArIDIpIC8gMykgKiA0OworICAgIH07CisKKyAgICBhdXRvIGJhc2VV
bnBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAgICAgcmV0dXJuICgoaW5wdXRMZW5ndGgg
KiA0KSArIDIpIC8gMzsKKyAgICB9OworCisgICAgc3dpdGNoIChwb2xpY3kpIHsKKyAgICBjYXNl
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnM6CisgICAgICAgIHJldHVybiBiYXNl
UGFkZGVkRW5jb2RlZFNpemUoKTsKKworICAgIGNhc2UgQmFzZTY0RW5jb2RlUG9saWN5OjpJbnNl
cnRMRnM6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBiYXNlUGFkZGVkRW5jb2RlZFNpemUoKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0gMSkgLyBtYXhpbXVtQmFzZTY0TGlu
ZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOworICAgIH0KKworICAgIGNhc2UgQmFzZTY0RW5jb2Rl
UG9saWN5OjpVUkw6CisgICAgICAgIHJldHVybiBiYXNlVW5wYWRkZWRFbmNvZGVkU2l6ZSgpOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitz
dHJ1Y3QgQmFzZTY0U3BlY2lmaWNhdGlvbiB7CisgICAgY29uc3Qgdm9pZCogaW5wdXREYXRhOwor
ICAgIHVuc2lnbmVkIGlucHV0TGVuZ3RoOworICAgIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3k7
CisgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKK307CisKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0
aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5wdXREYXRhLCB1bnNpZ25lZCBpbnB1dExl
bmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1
bHQpCit7CisgICAgcmV0dXJuIHsgaW5wdXREYXRhLCBpbnB1dExlbmd0aCwgcG9saWN5LCBtYXAg
fTsKK30KKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
ZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKK30KKworaW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2Vy
dExGcykKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNp
emUoKSwgcG9saWN5KTsKK30KKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5j
b2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJh
c2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCit7CisgICAgcmV0dXJuIGJhc2U2NEVu
Y29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5KTsKK30KKworaW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCB2b2lkKiBpbnB1dERh
dGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlu
cHV0RGF0YSwgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNv
ZGVNYXA6OlVSTCk7Cit9CisKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVu
Y29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3sKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpV
UkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKK30KKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRp
b24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoreworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNv
ZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworfQorCitpbmxpbmUgQmFzZTY0
U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IENTdHJpbmcmIGlucHV0KQorewor
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7Cit9CisKK3RlbXBs
YXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj4geworcHVi
bGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IEJhc2U2NFNwZWNpZmljYXRpb24mIGJh
c2U2NCkKKyAgICAgICAgOiBtX2Jhc2U2NCB7IGJhc2U2NCB9CisgICAgICAgICwgbV9lbmNvZGVk
TGVuZ3RoIHsgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoYmFzZTY0LmlucHV0TGVuZ3RoLCBi
YXNlNjQucG9saWN5KSB9CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5jb2RlZExlbmd0aDsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
dm9pZCB3cml0ZVRvKENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAg
ICAgICAgYmFzZTY0RW5jb2RlKG1fYmFzZTY0LmlucHV0RGF0YSwgbV9iYXNlNjQuaW5wdXRMZW5n
dGgsIGRlc3RpbmF0aW9uLCBtX2VuY29kZWRMZW5ndGgsIG1fYmFzZTY0LnBvbGljeSwgbV9iYXNl
NjQubWFwKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzZTY0U3BlY2lmaWNhdGlvbiBtX2Jh
c2U2NDsKKyAgICB1bnNpZ25lZCBtX2VuY29kZWRMZW5ndGg7Cit9OworCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIAordXNpbmcgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOwogdXNpbmcgV1RGOjpCYXNl
NjRFbmNvZGVQb2xpY3k7Ci11c2luZyBXVEY6OkJhc2U2NERvTm90SW5zZXJ0TEZzOwotdXNpbmcg
V1RGOjpCYXNlNjRJbnNlcnRMRnM7Ci11c2luZyBXVEY6OkJhc2U2NFZhbGlkYXRlUGFkZGluZzsK
LXVzaW5nIFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXM7Ci11c2luZyBXVEY6OkJh
c2U2NERpc2NhcmRWZXJ0aWNhbFRhYjsKLXVzaW5nIFdURjo6YmFzZTY0RW5jb2RlOwogdXNpbmcg
V1RGOjpiYXNlNjREZWNvZGU7Cit1c2luZyBXVEY6OmJhc2U2NEVuY29kZVRvU3RyaW5nOwordXNp
bmcgV1RGOjpiYXNlNjRFbmNvZGVUb1ZlY3RvcjsKK3VzaW5nIFdURjo6YmFzZTY0RW5jb2RlZDsK
K3VzaW5nIFdURjo6YmFzZTY0VVJMRGVjb2RlOwogdXNpbmcgV1RGOjpiYXNlNjRVUkxEZWNvZGU7
Cit1c2luZyBXVEY6OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nOwordXNpbmcgV1RGOjpiYXNlNjRV
UkxFbmNvZGVUb1ZlY3RvcjsKK3VzaW5nIFdURjo6YmFzZTY0VVJMRW5jb2RlZDsKIHVzaW5nIFdU
Rjo6aXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3RlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI3NzcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI5NCBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3Jl
IG1vZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIC0gVXBkYXRlcyB0byB1c2UgbmV3IHNpZ25hdHVyZXMgZm9yIGJh
c2U2NCBlbmNvZGluZy9kZWNvZGluZyBpbmNsdWRpbmcKKyAgICAgICAgICB1dGlsaXppbmcgdGhl
IHN0cmluZyB0eXBlIGFkYXB0b3IgYW5kIG1ha2VTdHJpbmcuCisgICAgICAgIC0gUmVwbGFjZSBv
dXQgcGFyYW1ldGVyIGJhc2VkIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKSB3aXRoIAor
ICAgICAgICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3Rl
cktleSgpLgorICAgICAgICAtIFVwZGF0ZSBzeW5jaHJvbm91cyBsb2FkaW5nIGNvZGUgcGF0aCB0
byB1c2UgdWludDhfdCogY29uc2lzdGVudGx5IGZvcgorICAgICAgICAgIGRhdGEgYnVmZmVyIHJl
cHJlc2VudGF0aW9uLgorICAgICAgICAtIFJlcGxhY2Ugb3V0IHBhcmFtZXRlcnMgaW4gcXVvdGVk
UHJpbnRhYmxlRW5jb2RlL3F1b3RlZFByaW50YWJsZURlY29kZQorICAgICAgICAgIHdpdGggT3B0
aW9uYWwuCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0
cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleUlEc0tleWlkcyk6CisgICAgICAg
IFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZS4KKworICAgICAgICAoV2ViQ29yZTo6
c2FuaXRpemVLZXlpZHMpOiAKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhi
YXNlNjRVUkxFbmNvZGVkKCkpCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xl
Z2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0RN
U2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUpOiAKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFz
ZTY0RGVjb2RlKCkuCisKKyAgICAgICAgKiBNb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2lu
UmVwbGFjZW1lbnQubW06CisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aERhdGFJbkNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6anNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlbUluQ29udGV4
dCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgp
KS4gUmVwbGFjZSBzdHJpbmcgY29uY2F0ZW50YXRpb24KKyAgICAgICAgdXNpbmcgb3BlcmF0b3Ir
IHdpdGggbWFrZVN0cmluZygpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50
aWNhdG9yQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGljYXRvckNv
b3JkaW5hdG9ySW50ZXJuYWw6OnByb2R1Y2VDbGllbnREYXRhSnNvbik6CisgICAgICAgIFVwZGF0
ZSB0byB1c2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5jb2RlZCgpKS4KKworICAgICAgICAq
IE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsOjpQdWJsaWNLZXlDcmVkZW50aWFsKToKKyAgICAgICAg
VXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCkpLgorCisgICAg
ICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpnZW5lcmF0ZVNlY1dlYlNvY2tldEtleSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNjZXB0KToKKyAgICAgICAg
VXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCkpLgorCisgICAg
ICAgICogY3J5cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmg6CisgICAgICAgIENoYW5nZSBm
cm9tIG91dHBhcmFtZXRlciBiYXNlZCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkgdG8g
bmV3CisgICAgICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01h
c3RlcktleSgpLgorCisgICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1l
bnRzIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRV
UkxFbmNvZGVkKCkpLgorCisgICAgICAgICogY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcEdDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFz
dGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkp
OiBEZWxldGVkLgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVy
S2V5KCkgc2lnbmF0dXJlLgorCisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6aW1wb3J0SndrKToKKyAgICAgICAg
KFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6ZXhwb3J0SndrIGNvbnN0KToKKyAgICAgICAgVXBkYXRl
IHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlIC8gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVk
KCkpLgorICAgICAgICAKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlFQzo6aW1wb3J0SndrKToKKyAgICAgICAgVXBkYXRl
IHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlLgorCisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5
cHRvS2V5SE1BQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjppbXBvcnRK
d2spOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5SE1BQzo6ZXhwb3J0SndrIGNvbnN0KToK
KyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlIC8gbWFrZVN0cmluZyhi
YXNlNjRVUkxFbmNvZGVkKCkpLgorCisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNB
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleVJTQTo6aW1wb3J0SndrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0tleVJTQTo6ZXhwb3J0SndrIGNvbnN0KToKKyAgICAgICAgVXBk
YXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlIC8gbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNv
ZGVkKCkpLgorCisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbnRzIGNvbnN0
KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVk
KCkpLgorCisgICAgICAgICogY3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFuZFN0b3JlTWFzdGVyS2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OmZpbmRNYXN0ZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFdlYkNy
eXB0b01hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpnZXREZWZhdWx0V2ViQ3J5cHRvTWFz
dGVyS2V5KTogRGVsZXRlZC4KKyAgICAgICAgVXBkYXRlIGZvciBuZXcgZGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSgpIHNpZ25hdHVyZS4KKworICAgICAgICAqIGNyeXB0by9vcGVuc3NsL1Nlcmlh
bGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBkZWZhdWx0V2Vi
Q3J5cHRvTWFzdGVyS2V5KCkgc2lnbmF0dXJlLgorCisgICAgICAgICogZmlsZWFwaS9GaWxlUmVh
ZGVyTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXJMb2FkZXI6OmNvbnZl
cnRUb0RhdGFVUkwpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2
NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAg
ICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgIFVw
ZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZSAvIG1ha2VTdHJpbmcoYmFzZTY0VVJMRW5j
b2RlZCgpKS4KKworICAgICAgICAqIGluc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhOjpk
ZWNvZGVEYXRhVG9Db250ZW50KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmlu
ZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ29udGVudFNlY3VyaXR5
UG9saWN5U0hBMjU2SGFzaCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NERlY29k
ZSAvIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIGluc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvcjo6YnVpbGRXZWJTb2NrZXRNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXNwb25z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJl
cXVlc3RXaXRoUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBi
YXNlNjREZWNvZGUgLyBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRhdGFDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclBhZ2VBZ2VudDo6YXJjaGl2ZSk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IG1h
a2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseSk6CisgICAgICAgIFN3aXRjaCB0byB1c2luZyBWZWN0b3I8dWludDhfdD4gYnVmZmVy
IHRvIG1hdGNoIG5ldyBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5CisgICAgICAgIHNpZ25hdHVy
ZS4KKworICAgICAgICAqIGxvYWRlci9Mb2FkZXJTdHJhdGVneS5oOgorICAgICAgICBTd2l0Y2gg
dG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGZvciB0aGUgZGF0YSBidWZmZXIuCisKKyAgICAgICAg
KiBsb2FkZXIvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkVwaGVtZXJhbFNvdXJjZU5vbmNlOjppc1ZhbGlkIGNv
bnN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlLgorCisgICAg
ICAgICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OmRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAgICBVcGRh
dGUgdG8gdXNlIG5ldyBiYXNlNjREZWNvZGUuCisKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9t
aHRtbC9NSFRNTEFyY2hpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUhUTUxBcmNoaXZlOjpn
ZW5lcmF0ZU1IVE1MRGF0YSk6CisgICAgICAgIFN3aXRjaCB0byB1c2luZyBuZXcgYmFzZTY0RW5j
b2RlIGFuZCBuZXcgcXVvdGVkUHJpbnRhYmxlRW5jb2RlLgorCisgICAgICAgICogbG9hZGVyL2Fy
Y2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUhUTUxQYXJz
ZXI6OnBhcnNlTmV4dFBhcnQpOgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgbmV3IGJhc2U2NERl
Y29kZSBhbmQgbmV3IHF1b3RlZFByaW50YWJsZURlY29kZS4KKworICAgICAgICAqIGxvYWRlci9j
b2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVVubGlua2Fi
bGVUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2Fs
Y3VsYXRlQW5kVXBkYXRlU291cmNlU2VjcmV0VG9rZW4pOgorICAgICAgICBVcGRhdGUgdG8gdXNl
IG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoKSkuCisK
KyAgICAgICAgKiBwYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlNjRVdGlsaXRpZXM6OmJ0b2EpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZTY0VXRpbGl0aWVz
OjphdG9iKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlIC8gbWFrZVN0
cmluZyhiYXNlNjRFbmNvZGVkKCkpLgorICAgIAorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZCk6Cisg
ICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NERlY29kZS4KKworICAgICAgICAqIHBsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFw
cGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisgICAgICAgIEFkZCBv
dmVybG9hZCBmb3IgYXBwZW5kIHdoaWNoIGFsbG93cyBwYXNzaW5nIGluIGEgdWludDhfdCouCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vuc2VGb3JtYXQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
ZXh0cmFjdEtleUlkRnJvbVdlYk1Jbml0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0
YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOgorICAgICAgICBVcGRhdGUg
dG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVuY29kZWQo
KSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBs
YXlTdHJlYW1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdFNpbmZEYXRhKToKKyAg
ICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWlu
Z0FWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakM6OnJlcXVlc3RMaWNlbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGljZW5zZSk6
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakM6OmRpZFByb3ZpZGVSZXF1ZXN0cyk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJh
c2U2NERlY29kZSAvIG1ha2VTdHJpbmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgor
ICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFVUkwpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5l
dyBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVVbmlxdWVGb250TmFtZSk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IG1ha2VTdHJp
bmcoYmFzZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
VW5pcXVlRm9udE5hbWUpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJh
c2U2NEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9y
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3Ry
aW5nKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVk
KCkpLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmxvYWRCbG9iUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAg
ICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90PiBidWZmZXIgdG8gbWF0Y2ggbmV3IGxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkKKyAgICAgICAgc2lnbmF0dXJlLgorCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICBTd2l0
Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlciB0byBtYXRjaCBuZXcgbG9hZFJlc291
cmNlU3luY2hyb25vdXNseQorICAgICAgICBzaWduYXR1cmUuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0NyZWRlbnRpYWxCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsQmFzZTo6c2Vy
aWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlciBjb25zdCk6CisgICAgICAgIEFk
ZCBoZWxwZXIgdG8gY29uc3RydWN0IEJhc2ljIGF1dGggaGVhZGVyIHRvIHJlcGxhY2UgZHVwbGlj
YXRlZCBsb2dpYyBpbgorICAgICAgICBjYWxsIHNpdGVzLgorCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9EYXRhVVJMRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVVJMRGVj
b2Rlcjo6ZGVjb2RlQmFzZTY0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpk
ZWNvZGVFc2NhcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVT
eW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVy
Lmg6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NERlY29kZS4KKworICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rv
cjx1aW50OF90PiBmb3IgdGhlIGRhdGEgYnVmZmVyIGluIHRoZSBzeW5jaHJvbm91cyBsb2FkLgor
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQu
aDoKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90PiBidWZmZXIgdG8gbWF0
Y2ggbmV3IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkKKyAgICAgICAgc2lnbmF0dXJlLgorCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAg
VXNlIG5ldyBzZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkgaGVscGVy
LgorCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90
PiBmb3IgdGhlIGRhdGEgYnVmZmVyIGluIHRoZSBzeW5jaHJvbm91cyBsb2FkLgorCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKToK
KyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90PiBmb3IgdGhlIGRhdGEgYnVm
ZmVyIGluIHRoZSBzeW5jaHJvbm91cyBsb2FkLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjphcHBseUJhc2lj
QXV0aG9yaXphdGlvbkhlYWRlcik6CisgICAgICAgIFVzZSBuZXcgc2VyaWFsaXphdGlvbkZvckJh
c2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGhlbHBlci4KKworICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAg
IFN3aXRjaCB0byB1c2luZyBWZWN0b3I8dWludDhfdD4gZm9yIHRoZSBkYXRhIGJ1ZmZlciBpbiB0
aGUgc3luY2hyb25vdXMgbG9hZC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIFN3aXRjaCB0byB1
c2luZyBWZWN0b3I8dWludDhfdD4gZm9yIHRoZSBkYXRhIGJ1ZmZlciBpbiB0aGUgc3luY2hyb25v
dXMgbG9hZC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nl
c3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SG9zdFRMU0NlcnRpZmljYXRlU2V0Ojpjb21w
dXRlQ2VydGlmaWNhdGVIYXNoKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgbWFrZVN0cmlu
ZyhiYXNlNjRFbmNvZGVkKCkpLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2Nh
cGVTZXF1ZW5jZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZVVSTEVzY2FwZVNlcXVlbmNl
c0FzRGF0YSk6CisgICAgICAgIFN3aXRjaCB0byByZXR1cm5pbmcgVmVjdG9yPHVpbnQ4X3Q+Lgor
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpsZW5n
dGhPZkxpbmVFbmRpbmdBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OnF1b3RlZFByaW50YWJs
ZUVuY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpxdW90ZWRQcmludGFibGVEZWNvZGUpOgorICAg
ICAgICBSZXBsYWNlIHVzZXMgb2YgVmVjdG9yPGNoYXI+IHdpdGggVmVjdG9yPHVpbnQ4X3Q+IGFu
ZCB0aGUgb3V0IHBhcmFtZXRlcnMKKyAgICAgICAgd2l0aCBPcHRpb25hbCByZXR1cm4gdmFsdWVz
LgorCisgICAgICAgICogcGxhdGZvcm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOgorICAgICAg
ICBVcGRhdGUgdG8gdXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoKSkuCisKKyAgICAg
ICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoIGNvbnN0KToKKyAgICAgICAgVXBk
YXRlIHRvIHVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRVUkxFbmNvZGVkKCkpLgorCiAyMDIxLTA1
LTE4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIFdURjo6
TG9ja2VyIGZvciBsb2NraW5nIEJhc2VBdWRpb0NvbnRleHQncyBncmFwaCBsb2NrCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5p
dERhdGFSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDE1ICs4MCwxNCBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZjxTaGFyZWRCdWZm
ZXI+CiAgICAgICAgIGlmICgha2V5SUQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICBWZWN0b3I8Y2hhcj4ga2V5SUREYXRhOwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVj
b2RlKGtleUlELCB7IGtleUlERGF0YSB9KSkKKyAgICAgICAgYXV0byBrZXlJRERhdGEgPSBiYXNl
NjRVUkxEZWNvZGUoa2V5SUQpOworICAgICAgICBpZiAoIWtleUlERGF0YSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChrZXlJRERhdGEuc2l6ZSgpIDwga0tleUlkc01pbktl
eUlkU2l6ZUluQnl0ZXMgfHwga2V5SUREYXRhLnNpemUoKSA+IGtLZXlJZHNNYXhLZXlJZFNpemVJ
bkJ5dGVzKQorICAgICAgICBpZiAoa2V5SUREYXRhLT5zaXplKCkgPCBrS2V5SWRzTWluS2V5SWRT
aXplSW5CeXRlcyB8fCBrZXlJRERhdGEtPnNpemUoKSA+IGtLZXlJZHNNYXhLZXlJZFNpemVJbkJ5
dGVzKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBSZWY8U2hh
cmVkQnVmZmVyPiBrZXlJREJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5
SUREYXRhKSk7Ci0gICAgICAgIGtleUlEcy5hcHBlbmQoV1RGTW92ZShrZXlJREJ1ZmZlcikpOwor
ICAgICAgICBrZXlJRHMuYXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKmtleUlE
RGF0YSkpKTsKICAgICB9CiAKICAgICByZXR1cm4ga2V5SURzOwpAQCAtMTA1LDcgKzEwNCw3IEBA
IHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZUtleWkKICAgICBhdXRvIG9iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgYXV0byBraWRzQXJyYXkgPSBKU09OOjpB
cnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBrZXlJREJ1ZmZlci52YWx1
ZSgpKQotICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNvZGUo
YnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSk7CisgICAgICAgIGtpZHNBcnJheS0+cHVz
aFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5z
aXplKCkpKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShraWRzQXJyYXkp
KTsKIAogICAgIENTdHJpbmcganNvbkRhdGEgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0Zjgo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xl
Z2FjeUNETVNlc3Npb25DbGVhcktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRt
ZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY5LDEzICsxNjksMTMgQEAgYm9vbCBDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZShVaW50
OEFycgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBWZWN0b3I8dWludDhfdD4ga2V5RGF0YTsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVj
b2RlKHJhd0tleURhdGEsIGtleURhdGEpIHx8IGtleURhdGEuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBhdXRvIGtleURhdGEgPSBiYXNlNjREZWNvZGUocmF3S2V5RGF0YSk7CisgICAgICAgICAg
ICBpZiAoIWtleURhdGEgfHwga2V5RGF0YS0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAg
TE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoJXApIC0gZmFpbGVkOiB1bmFi
bGUgdG8gYmFzZTY0IGRlY29kZSBrZXkiLCB0aGlzKTsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbV9jYWNoZWRLZXlzLnNldChrZXlJZCwg
V1RGTW92ZShrZXlEYXRhKSk7CisgICAgICAgICAgICBtX2NhY2hlZEtleXMuc2V0KGtleUlkLCBX
VEZNb3ZlKCprZXlEYXRhKSk7CiAgICAgICAgICAgICBmb3VuZFZhbGlkS2V5ID0gdHJ1ZTsKICAg
ICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFj
ZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0MywxNCArMjQzLDEyIEBAIHZvaWQgUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQ6OnBvc3RFdmUKIAogc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVX
aXRoRGF0YUluQ29udGV4dChOU0RhdGEgKmRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEpT
Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBi
YXNlNjRFbmNvZGUoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdLCBiYXNlNjREYXRhKTsKLQor
ICAgIC8vIEZJWE1FOiBBZGQgbWFrZUNGU3RyaW5nL21ha2VOU1N0cmluZyB0byBhdm9pZCB1bm5l
Y2Vzc2FyeSBTdHJpbmcgYWxsb2NhdGlvbi4KICAgICBTdHJpbmcgZGF0YTY0OwogICAgIGlmICgh
bWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBkYXRhNjQgPSAiZGF0YToiICsgbWltZVR5cGUg
KyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygi
ZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbZGF0YSBieXRlc10s
IFtkYXRhIGxlbmd0aF0pKTsKICAgICBlbHNlCi0gICAgICAgIGRhdGE2NCA9ICJkYXRhOnRleHQv
cGxhaW47YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAgICAgICBkYXRhNjQgPSBtYWtlU3RyaW5n
KCJkYXRhOnRleHQvcGxhaW47YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBb
ZGF0YSBsZW5ndGhdKSk7CiAKICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0Oihp
ZClkYXRhNjQuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSBpbkNvbnRleHQ6Y29udGV4dF07CiB9CkBA
IC0zNDIsOSArMzQwLDcgQEAgc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0
ZQogICAgICAgICBpZCB2YWx1ZSA9IGl0ZW0udmFsdWU7CiAgICAgICAgIE5TU3RyaW5nICptaW1l
VHlwZSA9IFtbaXRlbSBleHRyYUF0dHJpYnV0ZXNdIG9iamVjdEZvcktleTpAIk1JTUV0eXBlIl07
CiAgICAgICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0gJiYgbWlt
ZVR5cGUpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgICAgICAg
ICAgYmFzZTY0RW5jb2RlKFt2YWx1ZSBieXRlc10sIFt2YWx1ZSBsZW5ndGhdLCBiYXNlNjREYXRh
KTsKLSAgICAgICAgICAgIFN0cmluZyBkYXRhNjQgPSAiZGF0YToiICsgU3RyaW5nKG1pbWVUeXBl
KSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAgICAgICAgICAgYXV0byBkYXRhNjQgPSBt
YWtlU3RyaW5nKCJkYXRhOiIsIFN0cmluZyhtaW1lVHlwZSksICI7YmFzZTY0LCIsIGJhc2U2NEVu
Y29kZWQoW3ZhbHVlIGJ5dGVzXSwgW3ZhbHVlIGxlbmd0aF0pKTsKICAgICAgICAgICAgIFtkaWN0
aW9uYXJ5IHNldE9iamVjdDooX19icmlkZ2UgTlNTdHJpbmcgKilkYXRhNjQuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSBmb3JLZXk6QCJ2YWx1ZSJdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IFtkaWN0aW9uYXJ5IHNldE9iamVjdDp2YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGlj
YXRvckNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBSZWY8QXJyYXlCdWZmZXI+IHByb2R1Y2VDbGll
bnREYXQKICAgICAgICAgb2JqZWN0LT5zZXRTdHJpbmcoInR5cGUiX3MsICJ3ZWJhdXRobi5nZXQi
X3MpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgb2JqZWN0LT5zZXRTdHJpbmcoImNoYWxs
ZW5nZSJfcywgV1RGOjpiYXNlNjRVUkxFbmNvZGUoY2hhbGxlbmdlLmRhdGEoKSwgY2hhbGxlbmdl
Lmxlbmd0aCgpKSk7CisgICAgb2JqZWN0LT5zZXRTdHJpbmcoImNoYWxsZW5nZSJfcywgYmFzZTY0
VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmRhdGEoKSwgY2hhbGxlbmdlLmxlbmd0aCgpKSk7
CiAgICAgb2JqZWN0LT5zZXRTdHJpbmcoIm9yaWdpbiJfcywgb3JpZ2luLnRvUmF3U3RyaW5nKCkp
OwogCiAgICAgYXV0byB1dGY4SlNPTlN0cmluZyA9IG9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRm
OCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVk
ZW50aWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhu
L1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw3IEBAIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1
dHMgUHUKIH0KIAogUHVibGljS2V5Q3JlZGVudGlhbDo6UHVibGljS2V5Q3JlZGVudGlhbChSZWY8
QXV0aGVudGljYXRvclJlc3BvbnNlPiYmIHJlc3BvbnNlKQotICAgIDogQmFzaWNDcmVkZW50aWFs
KFdURjo6YmFzZTY0VVJMRW5jb2RlKHJlc3BvbnNlLT5yYXdJZCgpLT5kYXRhKCksIHJlc3BvbnNl
LT5yYXdJZCgpLT5ieXRlTGVuZ3RoKCkpLCBUeXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVt
b3RlKQorICAgIDogQmFzaWNDcmVkZW50aWFsKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3Bv
bnNlLT5yYXdJZCgpLT5kYXRhKCksIHJlc3BvbnNlLT5yYXdJZCgpLT5ieXRlTGVuZ3RoKCkpLCBU
eXBlOjpQdWJsaWNLZXksIERpc2NvdmVyeTo6UmVtb3RlKQogICAgICwgbV9yZXNwb25zZShXVEZN
b3ZlKHJlc3BvbnNlKSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgU3RyaW5nIGdl
bmVyYXRlU2VjV2ViU29ja2V0S2V5KCkKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbmNlU2l6
ZSA9IDE2OwogICAgIHVuc2lnbmVkIGNoYXIga2V5W25vbmNlU2l6ZV07CiAgICAgY3J5cHRvZ3Jh
cGhpY2FsbHlSYW5kb21WYWx1ZXMoa2V5LCBub25jZVNpemUpOwotICAgIHJldHVybiBiYXNlNjRF
bmNvZGUoa2V5LCBub25jZVNpemUpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhr
ZXksIG5vbmNlU2l6ZSk7CiB9CiAKIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVj
dGVkV2ViU29ja2V0QWNjZXB0KGNvbnN0IFN0cmluZyYgc2VjV2ViU29ja2V0S2V5KQpAQCAtMTEw
LDcgKzExMCw3IEBAIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2UKICAg
ICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHdlYlNvY2tl
dEtleUdVSUQpLCBzdHJsZW4od2ViU29ja2V0S2V5R1VJRCkpOwogICAgIFNIQTE6OkRpZ2VzdCBo
YXNoOwogICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29k
ZShoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVU
b1N0cmluZyhoYXNoLmRhdGEoKSwgU0hBMTo6aGFzaFNpemUpOwogfQogCiBXZWJTb2NrZXRIYW5k
c2hha2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBw
cm90b2NvbCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgY2xpZW50T3Jp
Z2luLCBib29sIGFsbG93Q29va2llcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TZXJp
YWxpemVkQ3J5cHRvS2V5V3JhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBvZiBwcm90ZWN0aW9uIGlz
IG5vdCByZXF1aXJlZCBieSB0aGUgc3BlYyBhcyBvZiAxMSBEZWNlbWJlciAyMDE0OgogLy8gaHR0
cHM6Ly93d3cudzMub3JnL1RSL1dlYkNyeXB0b0FQSS8jc2VjdXJpdHktZGV2ZWxvcGVycwogCi1X
RUJDT1JFX0VYUE9SVCBib29sIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVp
bnQ4X3Q+Jik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZGVsZXRlRGVmYXVs
dFdlYkNyeXB0b01hc3RlcktleSgpOwogCiBXRUJDT1JFX0VYUE9SVCBib29sIHdyYXBTZXJpYWxp
emVkQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5LCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5
RUNHQ3J5cHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjMsMTEgKzUyMywxMSBAQCBib29sIENy
eXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVuCiAgICAgICAgIGlmIChxICYmIHEtPnNp
emUoKSA9PSBjdXJ2ZVVuY29tcHJlc3NlZFBvaW50U2l6ZShtX2N1cnZlKSkgewogICAgICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGE7CiAgICAgICAgICAgICBhLmFwcGVuZChxLT5kYXRhKCkgKyAx
LCB1bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplKTsKLSAgICAgICAgICAgIGp3ay54ID0gYmFz
ZTY0VVJMRW5jb2RlKGEpOworICAgICAgICAgICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0
cmluZyhhKTsKIAogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGI7CiAgICAgICAgICAgICBi
LmFwcGVuZChxLT5kYXRhKCkgKyAxICsgdW5jb21wcmVzc2VkRmllbGRFbGVtZW50U2l6ZSwgdW5j
b21wcmVzc2VkRmllbGRFbGVtZW50U2l6ZSk7Ci0gICAgICAgICAgICBqd2sueSA9IGJhc2U2NFVS
TEVuY29kZShiKTsKKyAgICAgICAgICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmco
Yik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU0Myw3ICs1NDMsNyBAQCBib29sIENyeXB0b0tl
eUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVuCiAgICAgICAgICAgICAgICAgICAgICpkID0gV1RG
TW92ZShwYWRkZWREYXRhKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBq
d2suZCA9IGJhc2U2NFVSTEVuY29kZSgqZCk7CisgICAgICAgICAgICAgICAgandrLmQgPSBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZygqZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwR0NyeXB0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlw
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE1ICsyOSwxNCBAQAogI2lmIEVOQUJMRShXRUJf
Q1JZUFRPKQogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGdldERlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCitPcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0KLSAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogLy8gSW5pdGlhbGx5IHRoZXNlIGhlbHBl
ciBmdW5jdGlvbnMgd2VyZSBpbnRlbmRlZCB0byBwZXJmb3JtIEtFSyB3cmFwcGluZyBhbmQgdW53
cmFwcGluZywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVT
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5QUVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTAgKzg4LDEwIEBAIFJlZlB0cjxD
cnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgaWYgKGtleURhdGEuay5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IG9jdGV0U2VxdWVuY2U7Ci0gICAgaWYgKCFiYXNlNjRVUkxEZWNv
ZGUoa2V5RGF0YS5rLCBvY3RldFNlcXVlbmNlKSkKKyAgICBhdXRvIG9jdGV0U2VxdWVuY2UgPSBi
YXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5rKTsKKyAgICBpZiAoIW9jdGV0U2VxdWVuY2UpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghY2FsbGJhY2sob2N0ZXRTZXF1ZW5jZS5zaXpl
KCkgKiA4LCBrZXlEYXRhLmFsZykpCisgICAgaWYgKCFjYWxsYmFjayhvY3RldFNlcXVlbmNlLT5z
aXplKCkgKiA4LCBrZXlEYXRhLmFsZykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlm
ICh1c2FnZXMgJiYgIWtleURhdGEudXNlLmlzTnVsbCgpICYmIGtleURhdGEudXNlICE9ICJlbmMi
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMCwxNCArMTAwLDE0IEBAIFJlZlB0cjxD
cnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICBpZiAoa2V5RGF0YS5leHQgJiYg
IWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFjdGFibGUpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCBX
VEZNb3ZlKG9jdGV0U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCBXVEZNb3ZlKCpvY3RldFNlcXVl
bmNlKSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwogfQogCiBKc29uV2ViS2V5IENyeXB0b0tleUFF
Uzo6ZXhwb3J0SndrKCkgY29uc3QKIHsKICAgICBKc29uV2ViS2V5IHJlc3VsdDsKICAgICByZXN1
bHQua3R5ID0gIm9jdCI7Ci0gICAgcmVzdWx0LmsgPSBiYXNlNjRVUkxFbmNvZGUobV9rZXkpOwor
ICAgIHJlc3VsdC5rID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcobV9rZXkpOwogICAgIHJlc3Vs
dC5rZXlfb3BzID0gdXNhZ2VzKCk7CiAgICAgcmVzdWx0LmV4dCA9IGV4dHJhY3RhYmxlKCk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0
b0tleUVDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9Dcnlw
dG9LZXlFQy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleUVDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsMjIgKzk4LDIyIEBAIFJl
ZlB0cjxDcnlwdG9LZXlFQz4gQ3J5cHRvS2V5RUM6OmltcG9ydEoKIAogICAgIGlmIChrZXlEYXRh
LnguaXNOdWxsKCkgfHwga2V5RGF0YS55LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBWZWN0b3I8dWludDhfdD4geDsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2Rl
KGtleURhdGEueCwgeCkpCisgICAgYXV0byB4ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEueCk7
CisgICAgaWYgKCF4KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhf
dD4geTsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEueSwgeSkpCisgICAg
YXV0byB5ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEueSk7CisgICAgaWYgKCF5KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5kLmlzTnVsbCgpKSB7CiAgICAgICAg
IC8vIGltcG9ydCBwdWJsaWMga2V5Ci0gICAgICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1B1
YmxpYyhpZGVudGlmaWVyLCAqbmFtZWRDdXJ2ZSwgV1RGTW92ZSh4KSwgV1RGTW92ZSh5KSwgZXh0
cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1B1Ymxp
YyhpZGVudGlmaWVyLCAqbmFtZWRDdXJ2ZSwgV1RGTW92ZSgqeCksIFdURk1vdmUoKnkpLCBleHRy
YWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAKLSAgICBWZWN0b3I8dWludDhfdD4gZDsKLSAgICBp
ZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZCwgZCkpCisgICAgYXV0byBkID0gYmFz
ZTY0VVJMRGVjb2RlKGtleURhdGEuZCk7CisgICAgaWYgKCFkKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAvLyBpbXBvcnQgcHJpdmF0ZSBrZXkKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBv
cnRKV0tQcml2YXRlKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKHgpLCBXVEZNb3Zl
KHkpLCBXVEZNb3ZlKGQpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICByZXR1cm4gcGxhdGZv
cm1JbXBvcnRKV0tQcml2YXRlKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZNb3ZlKCp4KSwg
V1RGTW92ZSgqeSksIFdURk1vdmUoKmQpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKIH0KIAogUmVm
UHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6aW1wb3J0U3BraShDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgY3VydmUsIFZlY3Rvcjx1aW50OF90
PiYmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdl
cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9L
ZXlITUFDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDggKzEwMyw4IEBAIFJlZlB0cjxDcnlw
dG9LZXlITUFDPiBDcnlwdG9LZXlITUFDOjppbXAKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgaWYgKGtleURhdGEuay5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
VmVjdG9yPHVpbnQ4X3Q+IG9jdGV0U2VxdWVuY2U7Ci0gICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUo
a2V5RGF0YS5rLCBvY3RldFNlcXVlbmNlKSkKKyAgICBhdXRvIG9jdGV0U2VxdWVuY2UgPSBiYXNl
NjRVUkxEZWNvZGUoa2V5RGF0YS5rKTsKKyAgICBpZiAoIW9jdGV0U2VxdWVuY2UpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIGlmICghY2FsbGJhY2soaGFzaCwga2V5RGF0YS5hbGcpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTExNSwxNCArMTE1LDE0IEBAIFJlZlB0cjxDcnlw
dG9LZXlITUFDPiBDcnlwdG9LZXlITUFDOjppbXAKICAgICBpZiAoa2V5RGF0YS5leHQgJiYgIWtl
eURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFjdGFibGUpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIENyeXB0b0tleUhNQUM6OmltcG9ydFJhdyhsZW5ndGhCaXRzLCBoYXNo
LCBXVEZNb3ZlKG9jdGV0U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICByZXR1
cm4gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3KGxlbmd0aEJpdHMsIGhhc2gsIFdURk1vdmUoKm9j
dGV0U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKIH0KIAogSnNvbldlYktleSBDcnlw
dG9LZXlITUFDOjpleHBvcnRKd2soKSBjb25zdAogewogICAgIEpzb25XZWJLZXkgcmVzdWx0Owog
ICAgIHJlc3VsdC5rdHkgPSAib2N0IjsKLSAgICByZXN1bHQuayA9IGJhc2U2NFVSTEVuY29kZSht
X2tleSk7CisgICAgcmVzdWx0LmsgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhtX2tleSk7CiAg
ICAgcmVzdWx0LmtleV9vcHMgPSB1c2FnZXMoKTsKICAgICByZXN1bHQuZXh0ID0gZXh0cmFjdGFi
bGUoKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5UlNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
a2V5cy9DcnlwdG9LZXlSU0EuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2NSAr
NDUsODcgQEAgUmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5cHRvS2V5UlNBOjppbXBvcgogCiAgICAg
aWYgKGtleURhdGEubi5pc051bGwoKSB8fCBrZXlEYXRhLmUuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90PiBtb2R1bHVzOwotICAgIGlmICghV1RG
OjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5uLCBtb2R1bHVzKSkKKyAgICBhdXRvIG1vZHVsdXMg
PSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5uKTsKKyAgICBpZiAoIW1vZHVsdXMpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIC8vIFBlciBSRkMgNzUxOCBTZWN0aW9uIDYuMy4xLjE6IGh0
dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTE4I3NlY3Rpb24tNi4zLjEuMQotICAgIGlm
ICghbW9kdWx1cy5pc0VtcHR5KCkgJiYgIW1vZHVsdXNbMF0pCi0gICAgICAgIG1vZHVsdXMucmVt
b3ZlKDApOwotICAgIFZlY3Rvcjx1aW50OF90PiBleHBvbmVudDsKLSAgICBpZiAoIVdURjo6YmFz
ZTY0VVJMRGVjb2RlKGtleURhdGEuZSwgZXhwb25lbnQpKQorICAgIGlmICghbW9kdWx1cy0+aXNF
bXB0eSgpICYmICFtb2R1bHVzLT5hdCgwKSkKKyAgICAgICAgbW9kdWx1cy0+cmVtb3ZlKDApOwor
ICAgIGF1dG8gZXhwb25lbnQgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5lKTsKKyAgICBpZiAo
IWV4cG9uZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5kLmlz
TnVsbCgpKSB7CiAgICAgICAgIC8vIGltcG9ydCBwdWJsaWMga2V5Ci0gICAgICAgIGF1dG8gcHVi
bGljS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVB1YmxpYyhX
VEZNb3ZlKG1vZHVsdXMpLCBXVEZNb3ZlKGV4cG9uZW50KSk7CisgICAgICAgIGF1dG8gcHVibGlj
S2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVB1YmxpYyhXVEZN
b3ZlKCptb2R1bHVzKSwgV1RGTW92ZSgqZXhwb25lbnQpKTsKICAgICAgICAgLy8gTm90aWNlOiBD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuIEl0
IHNob3VsZCBub3QgaGF2ZSBhbnkgZWZmZWN0IGlmIGhhc2ggaXMgV1RGOjpudWxsb3B0LgogICAg
ICAgICByZXR1cm4gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBoYXNoLnZhbHVlT3Io
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsICpwdWJsaWNLZXlDb21w
b25lbnRzLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAKICAgICAvLyBpbXBvcnQgcHJp
dmF0ZSBrZXkKLSAgICBWZWN0b3I8dWludDhfdD4gcHJpdmF0ZUV4cG9uZW50OwotICAgIGlmICgh
V1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kLCBwcml2YXRlRXhwb25lbnQpKQorICAgIGF1
dG8gcHJpdmF0ZUV4cG9uZW50ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZCk7CisgICAgaWYg
KCFwcml2YXRlRXhwb25lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlE
YXRhLnAuaXNOdWxsKCkgJiYga2V5RGF0YS5xLmlzTnVsbCgpICYmIGtleURhdGEuZHAuaXNOdWxs
KCkgJiYga2V5RGF0YS5kcC5pc051bGwoKSAmJiBrZXlEYXRhLnFpLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIGF1dG8gcHJpdmF0ZUtleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpj
cmVhdGVQcml2YXRlKFdURk1vdmUobW9kdWx1cyksIFdURk1vdmUoZXhwb25lbnQpLCBXVEZNb3Zl
KHByaXZhdGVFeHBvbmVudCkpOworICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0g
Q3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShXVEZNb3ZlKCptb2R1bHVzKSwg
V1RGTW92ZSgqZXhwb25lbnQpLCBXVEZNb3ZlKCpwcml2YXRlRXhwb25lbnQpKTsKICAgICAgICAg
Ly8gTm90aWNlOiBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSBpcyBqdXN0IGEgcGxh
Y2Vob2xkZXIuIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkgZWZmZWN0IGlmIGhhc2ggaXMgV1RGOjpu
dWxsb3B0LgogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBo
YXNoLnZhbHVlT3IoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsICpw
cml2YXRlS2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgfQogCiAgICAg
aWYgKGtleURhdGEucC5pc051bGwoKSB8fCBrZXlEYXRhLnEuaXNOdWxsKCkgfHwga2V5RGF0YS5k
cC5pc051bGwoKSB8fCBrZXlEYXRhLmRxLmlzTnVsbCgpIHx8IGtleURhdGEucWkuaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlBy
aW1lSW5mbyBmaXJzdFByaW1lSW5mbzsKLSAgICBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpQcmlt
ZUluZm8gc2Vjb25kUHJpbWVJbmZvOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5
RGF0YS5wLCBmaXJzdFByaW1lSW5mby5wcmltZUZhY3RvcikpCisgICAgCisgICAgYXV0byBmaXJz
dFByaW1lRmFjdG9yID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEucCk7CisgICAgaWYgKCFmaXJz
dFByaW1lRmFjdG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIVdURjo6YmFz
ZTY0VVJMRGVjb2RlKGtleURhdGEuZHAsIGZpcnN0UHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50
KSkKKyAgICBhdXRvIGZpcnN0RmFjdG9yQ1JURXhwb25lbnQgPSBiYXNlNjRVUkxEZWNvZGUoa2V5
RGF0YS5kcCk7CisgICAgaWYgKCFmaXJzdEZhY3RvckNSVEV4cG9uZW50KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEucSwgc2Vj
b25kUHJpbWVJbmZvLnByaW1lRmFjdG9yKSkKKyAgICBhdXRvIHNlY29uZFByaW1lRmFjdG9yID0g
YmFzZTY0VVJMRGVjb2RlKGtleURhdGEucSk7CisgICAgaWYgKCFzZWNvbmRQcmltZUZhY3RvcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShr
ZXlEYXRhLmRxLCBzZWNvbmRQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQpKQorICAgIGF1dG8g
c2Vjb25kRmFjdG9yQ1JURXhwb25lbnQgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kcSk7Cisg
ICAgaWYgKCFzZWNvbmRGYWN0b3JDUlRFeHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLnFpLCBzZWNvbmRQcmltZUlu
Zm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQpKQorICAgIGF1dG8gc2Vjb25kRmFjdG9yQ1JUQ29lZmZp
Y2llbnQgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5xaSk7CisgICAgaWYgKCFzZWNvbmRGYWN0
b3JDUlRDb2VmZmljaWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDcnlwdG9L
ZXlSU0FDb21wb25lbnRzOjpQcmltZUluZm8gZmlyc3RQcmltZUluZm87CisgICAgZmlyc3RQcmlt
ZUluZm8ucHJpbWVGYWN0b3IgPSBXVEZNb3ZlKCpmaXJzdFByaW1lRmFjdG9yKTsKKyAgICBmaXJz
dFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCA9IFdURk1vdmUoKmZpcnN0RmFjdG9yQ1JURXhw
b25lbnQpOworICAgIAorICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBzZWNv
bmRQcmltZUluZm87CisgICAgc2Vjb25kUHJpbWVJbmZvLnByaW1lRmFjdG9yID0gV1RGTW92ZSgq
c2Vjb25kUHJpbWVGYWN0b3IpOworICAgIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVu
dCA9IFdURk1vdmUoKnNlY29uZEZhY3RvckNSVEV4cG9uZW50KTsKKyAgICBzZWNvbmRQcmltZUlu
Zm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQgPSBXVEZNb3ZlKCpzZWNvbmRGYWN0b3JDUlRDb2VmZmlj
aWVudCk7CisKICAgICBpZiAoIWtleURhdGEub3RoKSB7Ci0gICAgICAgIGF1dG8gcHJpdmF0ZUtl
eUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlV2l0aEFk
ZGl0aW9uYWxEYXRhKFdURk1vdmUobW9kdWx1cyksIFdURk1vdmUoZXhwb25lbnQpLCBXVEZNb3Zl
KHByaXZhdGVFeHBvbmVudCksIFdURk1vdmUoZmlyc3RQcmltZUluZm8pLCBXVEZNb3ZlKHNlY29u
ZFByaW1lSW5mbyksIHsgfSk7CisgICAgICAgIGF1dG8gcHJpdmF0ZUtleUNvbXBvbmVudHMgPSBD
cnlwdG9LZXlSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKFdU
Rk1vdmUoKm1vZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVudCksIFdURk1vdmUoKnByaXZhdGVFeHBv
bmVudCksIFdURk1vdmUoZmlyc3RQcmltZUluZm8pLCBXVEZNb3ZlKHNlY29uZFByaW1lSW5mbyks
IHsgfSk7CiAgICAgICAgIC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hB
XzEgaXMganVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBp
ZiBoYXNoIGlzIFdURjo6bnVsbG9wdC4KICAgICAgICAgcmV0dXJuIENyeXB0b0tleVJTQTo6Y3Jl
YXRlKGFsZ29yaXRobSwgaGFzaC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNI
QV8xKSwgISFoYXNoLCAqcHJpdmF0ZUtleUNvbXBvbmVudHMsIGV4dHJhY3RhYmxlLCB1c2FnZXMp
OwogICAgIH0KIAogICAgIFZlY3RvcjxDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpQcmltZUluZm8+
IG90aGVyUHJpbWVJbmZvczsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhbHVlIDoga2V5RGF0YS5v
dGgudmFsdWUoKSkgewotICAgICAgICBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpQcmltZUluZm8g
aW5mbzsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZSh2YWx1ZS5yLCBpbmZvLnBy
aW1lRmFjdG9yKSkKKyAgICAgICAgYXV0byBwcmltZUZhY3RvciA9IGJhc2U2NFVSTERlY29kZSh2
YWx1ZS5yKTsKKyAgICAgICAgaWYgKCFwcmltZUZhY3RvcikKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKHZhbHVlLmQsIGluZm8u
ZmFjdG9yQ1JURXhwb25lbnQpKQorICAgICAgICBhdXRvIGZhY3RvckNSVEV4cG9uZW50ID0gYmFz
ZTY0VVJMRGVjb2RlKHZhbHVlLmQpOworICAgICAgICBpZiAoIWZhY3RvckNSVEV4cG9uZW50KQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxE
ZWNvZGUodmFsdWUudCwgaW5mby5mYWN0b3JDUlRDb2VmZmljaWVudCkpCisgICAgICAgIGF1dG8g
ZmFjdG9yQ1JUQ29lZmZpY2llbnQgPSBiYXNlNjRVUkxEZWNvZGUodmFsdWUudCk7CisgICAgICAg
IGlmICghZmFjdG9yQ1JUQ29lZmZpY2llbnQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgb3RoZXJQcmltZUluZm9zLmFwcGVuZChpbmZvKTsKKworICAgICAgICBDcnlwdG9L
ZXlSU0FDb21wb25lbnRzOjpQcmltZUluZm8gaW5mbzsKKyAgICAgICAgaW5mby5wcmltZUZhY3Rv
ciA9IFdURk1vdmUoKnByaW1lRmFjdG9yKTsKKyAgICAgICAgaW5mby5mYWN0b3JDUlRFeHBvbmVu
dCA9IFdURk1vdmUoKmZhY3RvckNSVEV4cG9uZW50KTsKKyAgICAgICAgaW5mby5mYWN0b3JDUlRD
b2VmZmljaWVudCA9IFdURk1vdmUoKmZhY3RvckNSVENvZWZmaWNpZW50KTsKKworICAgICAgICBv
dGhlclByaW1lSW5mb3MuYXBwZW5kKFdURk1vdmUoaW5mbykpOwogICAgIH0KIAotICAgIGF1dG8g
cHJpdmF0ZUtleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2
YXRlV2l0aEFkZGl0aW9uYWxEYXRhKFdURk1vdmUobW9kdWx1cyksIFdURk1vdmUoZXhwb25lbnQp
LCBXVEZNb3ZlKHByaXZhdGVFeHBvbmVudCksIFdURk1vdmUoZmlyc3RQcmltZUluZm8pLCBXVEZN
b3ZlKHNlY29uZFByaW1lSW5mbyksIFdURk1vdmUob3RoZXJQcmltZUluZm9zKSk7CisgICAgYXV0
byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVBy
aXZhdGVXaXRoQWRkaXRpb25hbERhdGEoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9u
ZW50KSwgV1RGTW92ZSgqcHJpdmF0ZUV4cG9uZW50KSwgV1RGTW92ZShmaXJzdFByaW1lSW5mbyks
IFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwgV1RGTW92ZShvdGhlclByaW1lSW5mb3MpKTsKICAg
ICAvLyBOb3RpY2U6IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBw
bGFjZWhvbGRlci4gSXQgc2hvdWxkIG5vdCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6
Om51bGxvcHQuCiAgICAgcmV0dXJuIENyeXB0b0tleVJTQTo6Y3JlYXRlKGFsZ29yaXRobSwgaGFz
aC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xKSwgISFoYXNoLCAqcHJp
dmF0ZUtleUNvbXBvbmVudHMsIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQpAQCAtMTE4LDMwICsx
NDAsMzAgQEAgSnNvbldlYktleSBDcnlwdG9LZXlSU0E6OmV4cG9ydEp3aygpIGNvbgogICAgIGF1
dG8gcnNhQ29tcG9uZW50cyA9IGV4cG9ydERhdGEoKTsKIAogICAgIC8vIHB1YmxpYyBrZXkKLSAg
ICByZXN1bHQubiA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5tb2R1bHVzKCkpOwot
ICAgIHJlc3VsdC5lID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPmV4cG9uZW50KCkp
OworICAgIHJlc3VsdC5uID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocnNhQ29tcG9uZW50cy0+
bW9kdWx1cygpKTsKKyAgICByZXN1bHQuZSA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJzYUNv
bXBvbmVudHMtPmV4cG9uZW50KCkpOwogICAgIGlmIChyc2FDb21wb25lbnRzLT50eXBlKCkgPT0g
Q3J5cHRvS2V5UlNBQ29tcG9uZW50czo6VHlwZTo6UHVibGljKQogICAgICAgICByZXR1cm4gcmVz
dWx0OwogCiAgICAgLy8gcHJpdmF0ZSBrZXkKLSAgICByZXN1bHQuZCA9IGJhc2U2NFVSTEVuY29k
ZShyc2FDb21wb25lbnRzLT5wcml2YXRlRXhwb25lbnQoKSk7CisgICAgcmVzdWx0LmQgPSBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhyc2FDb21wb25lbnRzLT5wcml2YXRlRXhwb25lbnQoKSk7CiAg
ICAgaWYgKCFyc2FDb21wb25lbnRzLT5oYXNBZGRpdGlvbmFsUHJpdmF0ZUtleVBhcmFtZXRlcnMo
KSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHJlc3VsdC5wID0gYmFzZTY0VVJMRW5j
b2RlKHJzYUNvbXBvbmVudHMtPmZpcnN0UHJpbWVJbmZvKCkucHJpbWVGYWN0b3IpOwotICAgIHJl
c3VsdC5xID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5mbygp
LnByaW1lRmFjdG9yKTsKLSAgICByZXN1bHQuZHAgPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9u
ZW50cy0+Zmlyc3RQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBvbmVudCk7Ci0gICAgcmVzdWx0LmRx
ID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5mbygpLmZhY3Rv
ckNSVEV4cG9uZW50KTsKLSAgICByZXN1bHQucWkgPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9u
ZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkuZmFjdG9yQ1JUQ29lZmZpY2llbnQpOworICAgIHJlc3Vs
dC5wID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmltZUlu
Zm8oKS5wcmltZUZhY3Rvcik7CisgICAgcmVzdWx0LnEgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
Zyhyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5wcmltZUZhY3Rvcik7CisgICAgcmVz
dWx0LmRwID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmlt
ZUluZm8oKS5mYWN0b3JDUlRFeHBvbmVudCk7CisgICAgcmVzdWx0LmRxID0gYmFzZTY0VVJMRW5j
b2RlVG9TdHJpbmcocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkuZmFjdG9yQ1JURXhw
b25lbnQpOworICAgIHJlc3VsdC5xaSA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJzYUNvbXBv
bmVudHMtPnNlY29uZFByaW1lSW5mbygpLmZhY3RvckNSVENvZWZmaWNpZW50KTsKICAgICBpZiAo
cnNhQ29tcG9uZW50cy0+b3RoZXJQcmltZUluZm9zKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gcmVzdWx0OwogCiAgICAgVmVjdG9yPFJzYU90aGVyUHJpbWVzSW5mbz4gb3RoOwogICAgIGZv
ciAoY29uc3QgYXV0byYgaW5mbyA6IHJzYUNvbXBvbmVudHMtPm90aGVyUHJpbWVJbmZvcygpKSB7
CiAgICAgICAgIFJzYU90aGVyUHJpbWVzSW5mbyBvdGhlckluZm87Ci0gICAgICAgIG90aGVySW5m
by5yID0gYmFzZTY0VVJMRW5jb2RlKGluZm8ucHJpbWVGYWN0b3IpOwotICAgICAgICBvdGhlcklu
Zm8uZCA9IGJhc2U2NFVSTEVuY29kZShpbmZvLmZhY3RvckNSVEV4cG9uZW50KTsKLSAgICAgICAg
b3RoZXJJbmZvLnQgPSBiYXNlNjRVUkxFbmNvZGUoaW5mby5mYWN0b3JDUlRDb2VmZmljaWVudCk7
CisgICAgICAgIG90aGVySW5mby5yID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaW5mby5wcmlt
ZUZhY3Rvcik7CisgICAgICAgIG90aGVySW5mby5kID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmco
aW5mby5mYWN0b3JDUlRFeHBvbmVudCk7CisgICAgICAgIG90aGVySW5mby50ID0gYmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcoaW5mby5mYWN0b3JDUlRDb2VmZmljaWVudCk7CiAgICAgICAgIG90aC5h
cHBlbmQoV1RGTW92ZShvdGhlckluZm8pKTsKICAgICB9CiAgICAgcmVzdWx0Lm90aCA9IFdURk1v
dmUob3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNN
YWMuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0Ny
eXB0b0tleUVDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9v
bCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbgogCiAgICAgaWYgKFVOTElLRUxZ
KChzaXplICE9IHB1YmxpY0tleVNpemUpICYmIChzaXplICE9IHByaXZhdGVLZXlTaXplKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBqd2sueCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHJl
c3VsdC5kYXRhKCkgKyAxLCBrZXlTaXplSW5CeXRlcyk7Ci0gICAgandrLnkgPSBXVEY6OmJhc2U2
NFVSTEVuY29kZShyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUluQnl0ZXMgKyAxLCBrZXlTaXplSW5C
eXRlcyk7CisgICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQuZGF0YSgp
ICsgMSwga2V5U2l6ZUluQnl0ZXMpOworICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJp
bmcocmVzdWx0LmRhdGEoKSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6ZUluQnl0ZXMpOwog
ICAgIGlmIChzaXplID4gcHVibGljS2V5U2l6ZSkKLSAgICAgICAgandrLmQgPSBXVEY6OmJhc2U2
NFVSTEVuY29kZShyZXN1bHQuZGF0YSgpICsgcHVibGljS2V5U2l6ZSwga2V5U2l6ZUluQnl0ZXMp
OworICAgICAgICBqd2suZCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3VsdC5kYXRhKCkg
KyBwdWJsaWNLZXlTaXplLCBrZXlTaXplSW5CeXRlcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9TZXJpYWxpemVk
Q3J5cHRvS2V5V3JhcE1hYy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUv
Y3J5cHRvL21hYy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCA8Q29tbW9uQ3J5cHRvL0NvbW1vblN5bW1ldHJpY0tl
eXdyYXAuaD4KICNpbXBvcnQgPGNydF9leHRlcm5zLmg+CiAjaW1wb3J0IDx3dGYvQ3J5cHRvZ3Jh
cGhpY1V0aWxpdGllcy5oPgorI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAjaW1wb3J0IDx3dGYv
UHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8
d3RmL3NwaS9jb2NvYS9TZWN1cml0eVNQSS5oPgpAQCAtODAsMTEgKzgxLDExIEBAIHN0YXRpYyBO
U1N0cmluZyogbWFzdGVyS2V5QWNjb3VudE5hbWVGb3IKICAgICByZXR1cm4gW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCJjb20uYXBwbGUuV2ViS2l0LldlYkNyeXB0by5tYXN0ZXIrJUAiLCBi
dW5kbGVJZGVudGlmaWVyXTsKIH0KIAotc3RhdGljIGJvb2wgY3JlYXRlQW5kU3RvcmVNYXN0ZXJL
ZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXlEYXRhKQorc3RhdGljIE9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkoKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzQ3JlZGVu
dGlhbHMpKTsKIAotICAgIG1hc3RlcktleURhdGEucmVzaXplKG1hc3RlcktleVNpemVJbkJ5dGVz
KTsKKyAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5RGF0YShtYXN0ZXJLZXlTaXplSW5CeXRl
cyk7CiAgICAgYXV0byByYyA9IENDUmFuZG9tR2VuZXJhdGVCeXRlcyhtYXN0ZXJLZXlEYXRhLmRh
dGEoKSwgbWFzdGVyS2V5RGF0YS5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJjID09IGtD
Q1N1Y2Nlc3MpOwogCkBAIC0xMDcsNyArMTA4LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlQW5kU3Rv
cmVNYXN0ZXJLZXkoVmVjdAogICAgIHN0YXR1cyA9IFNlY0FjY2Vzc0NyZWF0ZSgoX19icmlkZ2Ug
Q0ZTdHJpbmdSZWYpbG9jYWxpemVkSXRlbU5hbWUsIG51bGxwdHIsICZhY2Nlc3NSZWYpOwogICAg
IGlmIChzdGF0dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3QgY3JlYXRlIGEgc2Vj
dXJpdHkgYWNjZXNzIG9iamVjdCBmb3Igc3RvcmluZyBXZWJDcnlwdG8gbWFzdGVyIGtleSwgZXJy
b3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPFNlY0FjY2Vzc1JlZj4gYWNj
ZXNzID0gYWRvcHRDRihhY2Nlc3NSZWYpOwogCkBAIC0xMjAsMTkgKzEyMSwxOCBAQCBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfRU5ECiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBj
cmVhdGUgYSB0cnVzdGVkIGFwcGxpY2F0aW9uIG9iamVjdCBmb3Igc3RvcmluZyBXZWJDcnlwdG8g
bWFzdGVyIGtleSwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPFNl
Y1RydXN0ZWRBcHBsaWNhdGlvblJlZj4gdHJ1c3RlZEFwcCA9IGFkb3B0Q0YodHJ1c3RlZEFwcFJl
Zik7CiAKICAgICBzdGF0dXMgPSBTZWNBQ0xTZXRDb250ZW50cyhhY2wsIChfX2JyaWRnZSBDRkFy
cmF5UmVmKUBbIChfX2JyaWRnZSBpZCl0cnVzdGVkQXBwLmdldCgpIF0sIChfX2JyaWRnZSBDRlN0
cmluZ1JlZilsb2NhbGl6ZWRJdGVtTmFtZSwga1NlY0tleWNoYWluUHJvbXB0UmVxdWlyZVBhc3Nw
aGFzZSk7CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBz
ZXQgQUNMIGZvciBXZWJDcnlwdG8gbWFzdGVyIGtleSwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICB9CiAjZW5kaWYKIAotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0
YTsKLSAgICBiYXNlNjRFbmNvZGUobWFzdGVyS2V5RGF0YSwgYmFzZTY0RW5jb2RlZE1hc3Rlcktl
eURhdGEpOworICAgIGF1dG8gYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEgPSBiYXNlNjRFbmNv
ZGVUb1ZlY3RvcihtYXN0ZXJLZXlEYXRhKTsKIAogICAgIC8vIENhbm5vdCB1c2Uga1NlY0NsYXNz
S2V5IGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVtLzE2MDY4MjA3Pi4KICAgICBOU0RpY3Rpb25h
cnkgKmF0dHJpYnV0ZXMgPSBAewpAQCAtMTUwLDEyICsxNTAsMTMgQEAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECiAgICAgc3RhdHVzID0gU2VjSXRlbUFkZCgoQ0ZEaWN0aW9uYXJ5
UmVmKWF0dHJpYnV0ZXMsIG51bGxwdHIpOwogICAgIGlmIChzdGF0dXMpIHsKICAgICAgICAgV1RG
TG9nQWx3YXlzKCJDYW5ub3Qgc3RvcmUgV2ViQ3J5cHRvIG1hc3RlciBrZXksIGVycm9yICVkIiwg
KGludClzdGF0dXMpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIG1hc3Rlcktl
eURhdGE7CiB9CiAKLXN0YXRpYyBib29sIGZpbmRNYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBt
YXN0ZXJLZXlEYXRhKQorc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZmluZE1hc3Rl
cktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNz
UHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFscykpOwogCkBAIC0xNzAsMjAgKzE3MSwyNSBA
QCBzdGF0aWMgYm9vbCBmaW5kTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90CiAgICAgaWYgKHN0YXR1
cykgewogICAgICAgICBpZiAoc3RhdHVzICE9IGVyclNlY0l0ZW1Ob3RGb3VuZCAmJiBzdGF0dXMg
IT0gZXJyU2VjVXNlckNhbmNlbGVkKQogICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJDb3VsZCBu
b3QgZmluZCBXZWJDcnlwdG8gbWFzdGVyIGtleSBpbiBLZXljaGFpbiwgZXJyb3IgJWQiLCAoaW50
KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICB9CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4ga2V5RGF0YSA9IGFkb3B0Q0Yo
a2V5RGF0YVJlZik7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlZE1hc3Rlcktl
eURhdGEgPSB2ZWN0b3JGcm9tTlNEYXRhKChfX2JyaWRnZSBOU0RhdGEgKilrZXlEYXRhLmdldCgp
KTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlKChjb25zdCBjaGFyKiliYXNlNjRFbmNvZGVkTWFz
dGVyS2V5RGF0YS5kYXRhKCksIGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhLnNpemUoKSwgbWFz
dGVyS2V5RGF0YSk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKGtleURhdGEuZ2V0KCkpKSwgQ0ZEYXRhR2V0TGVu
Z3RoKGtleURhdGEuZ2V0KCkpKTsKIH0KIAotYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVy
S2V5KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKIHsKLSAgICBpZiAoIWZpbmRNYXN0ZXJLZXko
bWFzdGVyS2V5KSAmJiAhY3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkobWFzdGVyS2V5KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIFJFTEVBU0VfQVNTRVJUKG1hc3RlcktleS5zaXplKCkgPT0g
bWFzdGVyS2V5U2l6ZUluQnl0ZXMpOwotICAgIHJldHVybiB0cnVlOworICAgIGlmIChhdXRvIG1h
c3RlcktleSA9IGZpbmRNYXN0ZXJLZXkoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtYXN0
ZXJLZXktPnNpemUoKSA9PSBtYXN0ZXJLZXlTaXplSW5CeXRlcyk7CisgICAgICAgIHJldHVybiBt
YXN0ZXJLZXk7CisgICAgfQorCisgICAgaWYgKGF1dG8gbWFzdGVyS2V5ID0gY3JlYXRlQW5kU3Rv
cmVNYXN0ZXJLZXkoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtYXN0ZXJLZXktPnNpemUo
KSA9PSBtYXN0ZXJLZXlTaXplSW5CeXRlcyk7CisgICAgICAgIHJldHVybiBtYXN0ZXJLZXk7Cisg
ICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogYm9vbCBkZWxldGVEZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3Ns
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2VyaWFsaXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2Vy
aWFsaXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUg
KzMxLDE0IEBACiAjaWYgRU5BQkxFKFdFQl9DUllQVE8pCiAKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShWZWN0b3I8dWludDhfdD4mIG1h
c3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3Rl
cktleSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBVTlVTRURfUEFSQU0obWFzdGVy
S2V5KTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
CiAvLyBJbml0aWFsbHkgdGhlc2UgaGVscGVyIGZ1bmN0aW9ucyB3ZXJlIGludGVuZGVkIHRvIHBl
cmZvcm0gS0VLIHdyYXBwaW5nIGFuZCB1bndyYXBwaW5nLApJbmRleDogU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzMsMjYgKzMzMywxMiBAQCB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNvbnZlcnRUb1RleHQo
KQogCiB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNvbnZlcnRUb0RhdGFVUkwoKQogewotICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImRhdGE6Iik7
Ci0KICAgICBpZiAoIW1fYnl0ZXNMb2FkZWQpIHsKLSAgICAgICAgbV9zdHJpbmdSZXN1bHQgPSBi
dWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIG1fc3RyaW5nUmVzdWx0ID0gImRhdGE6Il9zOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fZGF0YVR5cGUuaXNFbXB0eSgpKQot
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7Ci0gICAg
ZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVuZChtX2RhdGFUeXBlKTsKLSAgICBidWlsZGVyLmFw
cGVuZExpdGVyYWwoIjtiYXNlNjQsIik7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgIGJh
c2U2NEVuY29kZShtX3Jhd0RhdGEtPmRhdGEoKSwgbV9ieXRlc0xvYWRlZCwgb3V0KTsKLSAgICBv
dXQuYXBwZW5kKCdcMCcpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG91dC5kYXRhKCkpOwotCi0gICAg
bV9zdHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgbV9zdHJpbmdSZXN1bHQg
PSBtYWtlU3RyaW5nKCJkYXRhOiIsIG1fZGF0YVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9u
L29jdGV0LXN0cmVhbSIgOiBtX2RhdGFUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKG1f
cmF3RGF0YS0+ZGF0YSgpLCBtX2J5dGVzTG9hZGVkKSk7CiB9CiAKIGJvb2wgRmlsZVJlYWRlckxv
YWRlcjo6aXNDb21wbGV0ZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0RPTVBhdGNoU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mjks
MTQgKzQyOSwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0Y2hTdXBwb3J0OjpEaWdlc3Q+CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgYXR0cnNIYXNoOwogICAgICAg
ICAgICAgYXR0cnNTSEExLmNvbXB1dGVIYXNoKGF0dHJzSGFzaCk7Ci0gICAgICAgICAgICBkaWdl
c3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZShhdHRyc0hhc2guZGF0YSgpLCAxMCk7CisgICAg
ICAgICAgICBkaWdlc3QtPmF0dHJzU0hBMSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGF0dHJzSGFz
aC5kYXRhKCksIDEwKTsKICAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBkaWdlc3Qt
PmF0dHJzU0hBMSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBTSEExOjpEaWdlc3QgaGFzaDsK
ICAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2NEVu
Y29kZShoYXNoLmRhdGEoKSwgMTApOworICAgIGRpZ2VzdC0+c2hhMSA9IGJhc2U2NEVuY29kZVRv
U3RyaW5nKGhhc2guZGF0YSgpLCAxMCk7CiAgICAgaWYgKHVudXNlZE5vZGVzTWFwKQogICAgICAg
ICB1bnVzZWROb2Rlc01hcC0+YWRkKGRpZ2VzdC0+c2hhMSwgZGlnZXN0LmdldCgpKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9z
dC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsMTEgKzU5OCwxMSBA
QCBib29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljCiAgICAgaWYgKCFtX2Ns
aWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7
Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoc2VyaWFsaXplZENlcnRpZmljYXRlLCBkYXRhKSkKKyAg
ICBhdXRvIGRhdGEgPSBiYXNlNjREZWNvZGUoc2VyaWFsaXplZENlcnRpZmljYXRlKTsKKyAgICBp
ZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXIgZGVjb2RlcihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CiAg
ICAgT3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgZGVjb2Rl
ciA+PiBjZXJ0aWZpY2F0ZUluZm87CiAgICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVz
b3VyY2VzRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB1bnNpZ25l
ZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VECiAgICAgICAgIG1fY29udGVudCA9IG1f
ZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fYmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0gICAgICAg
IG1fY29udGVudCA9IGJhc2U2NEVuY29kZShtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0
aCk7CisgICAgICAgIG1fY29udGVudCA9IGJhc2U2NEVuY29kZWRUb1N0cmluZyhtX2RhdGFCdWZm
ZXItPmRhdGEoKSwgZGF0YUxlbmd0aCk7CiAgICAgfQogCiAgICAgbV9kYXRhQnVmZmVyID0gbnVs
bHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTcwOSw3ICsxNzA5LDcgQEAgc3RhdGljIFN0cmluZyBjb21wdXRlQ29udGVudFNlY3VyaXR5
UG9saQogICAgIGF1dG8gY3J5cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQ
QUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBjcnlwdG9EaWdlc3Qt
PmFkZEJ5dGVzKGNvbnRlbnQuZGF0YSgpLCBjb250ZW50LnNpemUoKSk7CiAgICAgYXV0byBkaWdl
c3QgPSBjcnlwdG9EaWdlc3QtPmNvbXB1dGVIYXNoKCk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmco
InNoYTI1Ni0iLCBiYXNlNjRFbmNvZGUoZGlnZXN0LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOwor
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChkaWdlc3QuZGF0
YSgpLCBkaWdlc3Quc2l6ZSgpKSk7CiB9CiAKIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwg
Tm9kZVRvSWRNYXAqIG5vZGVzTWFwKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3
b3JrQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAgUmVmPFByb3Rv
Y29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4gYgogICAgIHJldHVybiBQcm90b2NvbDo6TmV0
d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUu
b3BDb2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5tYXNrZWQpCi0gICAgICAgIC5zZXRQYXls
b2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFs
bGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNlNjRFbmNvZGUo
ZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpCisgICAgICAgIC5zZXRQYXlsb2Fk
RGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJh
Y2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSkKICAgICAgICAgLnNldFBh
eWxvYWRMZW5ndGgoZnJhbWUucGF5bG9hZExlbmd0aCkKICAgICAgICAgLnJlbGVhc2UoKTsKIH0K
QEAgLTU4Niw3ICs1ODYsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2
ZURhCiAgICAgICAgIC8vIE9mdGVuIHRoZSBkYXRhIGlzIHRleHQgYW5kIHdlIHdvdWxkIGhhdmUg
YSBkZWNvZGVyLCBidXQgZm9yIG5vbi10ZXh0IHdlIHdvbid0IGhhdmUgYSBkZWNvZGVyLgogICAg
ICAgICAvLyBTeW5jIFhIUnMgbWF5IG5vdCBoYXZlIGEgY2FjaGVkIHJlc291cmNlLCB3aGlsZSBu
b24tc3luYyBYSFJzIHVzdWFsbHkgdHJhbnNmZXIgZGF0YSBvdmVyIG9uIGNvbXBsZXRpb24uCiAg
ICAgICAgIGlmIChtX2xvYWRpbmdYSFJTeW5jaHJvbm91c2x5ICYmIHJlc291cmNlRGF0YSAmJiAh
cmVzb3VyY2VEYXRhLT5oYXNCdWZmZXJlZERhdGEoKSAmJiAhcmVzb3VyY2VEYXRhLT5jYWNoZWRS
ZXNvdXJjZSgpKQotICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRl
bnQocmVxdWVzdElkLCBiYXNlNjRFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCksIHRydWUpOworICAg
ICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQocmVxdWVzdElkLCBi
YXNlNjRFbmNvZGVUb1N0cmluZyhkYXRhLCBkYXRhTGVuZ3RoKSwgdHJ1ZSk7CiAgICAgfQogCiAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRhdGFSZWNlaXZlZChyZXF1ZXN0SWQsIHRpbWVzdGFt
cCgpLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxlbmd0aCk7CkBAIC0xMDA0LDcgKzEwMDQsNyBA
QCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvCiAKICAgICBXVEY6OlBl
cnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8
V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2RlKGVuY29kZXIsIGNlcnRpZmljYXRlLnZh
bHVlKCkpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rl
ci5idWZmZXJTaXplKCkpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhlbmNvZGVy
LmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CiB9CiAKIFdlYlNvY2tldCogSW5zcGVj
dG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQpAQCAtMTIwMiwxMSArMTIwMiwxMSBAQCBQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOCiAgICAgICAgIHJlcXVlc3Quc2V0
SFRUUEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0SGVhZGVycykpOwogICAgIH0KICAgICBp
ZiAoISFwb3N0RGF0YSkgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAg
ICBpZiAoIWJhc2U2NERlY29kZShwb3N0RGF0YSwgYnVmZmVyKSkKKyAgICAgICAgYXV0byBidWZm
ZXIgPSBiYXNlNjREZWNvZGUocG9zdERhdGEpOworICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBwb3N0
RGF0YSJfcyk7CiAKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShGb3JtRGF0YTo6Y3JlYXRl
KGJ1ZmZlcikpOworICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KEZvcm1EYXRhOjpjcmVhdGUo
V1RGTW92ZSgqYnVmZmVyKSkpOwogICAgIH0KICAgICAvLyBGSVhNRTogZmlndXJlIG91dCBob3cg
dG8gaWRlbnRpZnkgd2hlbiBhIHJlcXVlc3QgaGFzIGJlZW4gb3ZlcnJpZGRlbiB3aGVuIHdlIGFk
ZCB0aGlzIHRvIHRoZSBmcm9udGVuZC4KICAgICBwZW5kaW5nUmVxdWVzdC0+Y29udGludWVXaXRo
UmVxdWVzdChyZXF1ZXN0KTsKQEAgLTEyNDIsMTEgKzEyNDIsMTEgQEAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gb3Zl
cnJpZGVEYXRhOwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIFZlY3Rvcjx1aW50
OF90PiBidWZmZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikp
CisgICAgICAgIGF1dG8gYnVmZmVyID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQpOworICAgICAgICBp
ZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRv
IGRlY29kZSBnaXZlbiBjb250ZW50Il9zKTsKIAotICAgICAgICBvdmVycmlkZURhdGEgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICBvdmVycmlkZURhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVsc2UKICAg
ICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC51dGY4KCku
ZGF0YSgpLCBjb250ZW50LnV0ZjgoKS5sZW5ndGgoKSk7CiAKQEAgLTEyNjgsMTEgKzEyNjgsMTEg
QEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgogCiAgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICBW
ZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50
LCBidWZmZXIpKQorICAgICAgICBhdXRvIGJ1ZmZlciA9IGJhc2U2NERlY29kZShjb250ZW50KTsK
KyAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfcyk7CiAKLSAgICAgICAgZGF0YSA9IFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIGRhdGEgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVsc2UKICAgICAgICAg
ZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwgY29udGVu
dC51dGY4KCkubGVuZ3RoKCkpOwogCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCBib29sIEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3VyCiAgICAgICAgIH0KIAogICAgICAgICAqYmFzZTY0
RW5jb2RlZCA9IHRydWU7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGUoYnVmZmVyLT5k
YXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgKnJlc3VsdCA9IG1ha2VTdHJpbmcoV1RG
OjpiYXNlNjRFbmNvZGVkKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBib29sIEluc3BlY3RvclBh
Z2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29uCiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNv
bnRlbnQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaW5nJiB0ZXh0
RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0KQogewog
ICAgIGlmICh3aXRoQmFzZTY0RW5jb2RlKSB7Ci0gICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNv
ZGUoZGF0YSwgc2l6ZSk7CisgICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhk
YXRhLCBzaXplKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMTAyLDcgKzEx
MDIsNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvCiAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3Ig
bWFpbiBmcmFtZSJfcyk7CiAKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNo
aXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKENG
RGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQo
KSkpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhDRkRhdGFHZXRCeXRlUHRyKGJ1
ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkpKTsKIH0KICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxMTgsNyArMzExOCw3IEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRS
ZXNvdXJjZVMKICAgICAgICAgQVNTRVJUKCFuZXdSZXF1ZXN0LmlzTnVsbCgpKTsKIAogICAgICAg
ICBpZiAoIWRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkubWF5YmVMb2Fk
U3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpKSB7Ci0gICAg
ICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGJ1ZmZlcjsKICAgICAgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVn
eSgpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KCp0aGlzLCBpZGVudGlmaWVyLCBuZXdSZXF1
ZXN0LCBjbGllbnRDcmVkZW50aWFsUG9saWN5LCBvcHRpb25zLCBvcmlnaW5hbFJlcXVlc3RIZWFk
ZXJzLCBlcnJvciwgcmVzcG9uc2UsIGJ1ZmZlcik7CiAgICAgICAgICAgICBkYXRhID0gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpKTsKICAgICAgICAgICAgIGRvY3VtZW50TG9h
ZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkubWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91
c2x5KG5ld1JlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3kuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4
LDcgQEAgc3RydWN0IEZldGNoT3B0aW9uczsKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIExvYWRlclN0
cmF0ZWd5IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEZyYW1lJiwg
Q2FjaGVkUmVzb3VyY2UmLCBSZXNvdXJjZVJlcXVlc3QmJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJP
cHRpb25zJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+
JiYpPiYmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0aW9ucyYsIGNvbnN0
IEhUVFBIZWFkZXJNYXAmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rv
cjxjaGFyPiYgZGF0YSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KEZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBGZXRjaE9wdGlvbnMm
LCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2Um
LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcGFnZUxvYWRD
b21wbGV0ZWQoUGFnZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYnJvd3NpbmdDb250ZXh0UmVt
b3ZlZChGcmFtZSYpID0gMDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1ByaXZhdGVD
bGlja01lYXN1cmVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODksMTAgKzE4OSwxMCBAQCBib29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpFcGhl
bWVyYWxTCiB7CiAgICAgLy8gRklYTUU6IEludmVzdGlnYXRlIGlmIHdlIGNhbiBkbyB3aXRoIGEg
c2ltcGxlIGxlbmd0aCBjaGVjayBpbnN0ZWFkIG9mIGRlY29kaW5nLgogICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE5NDUKLSAgICBWZWN0b3I8dWludDhf
dD4gZGlnZXN0OwotICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKG5vbmNlLCBkaWdlc3QpKQorICAg
IGF1dG8gZGlnZXN0ID0gYmFzZTY0VVJMRGVjb2RlKG5vbmNlKTsKKyAgICBpZiAoIWRpZ2VzdCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBkaWdlc3Quc2l6ZSgpID09IEVwaGVt
ZXJhbFNvdXJjZU5vbmNlUmVxdWlyZWROdW1iZXJPZkJ5dGVzOworICAgIHJldHVybiBkaWdlc3Qt
PnNpemUoKSA9PSBFcGhlbWVyYWxTb3VyY2VOb25jZVJlcXVpcmVkTnVtYmVyT2ZCeXRlczsKIH0K
IAogdm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6c2V0RXBoZW1lcmFsU291cmNlTm9uY2Uo
RXBoZW1lcmFsU291cmNlTm9uY2UmJiBub25jZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGln
ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMTQgKzY5LDE1IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyAKICAgICBpZiAoYnVmZmVyLnBvc2l0aW9uKCkgPT0g
YmVnaW5IYXNoVmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBWZWN0
b3I8dWludDhfdD4gZGlnZXN0OwogICAgIFN0cmluZ1ZpZXcgaGFzaFZhbHVlKGJlZ2luSGFzaFZh
bHVlLCBidWZmZXIucG9zaXRpb24oKSAtIGJlZ2luSGFzaFZhbHVlKTsKLSAgICBpZiAoIWJhc2U2
NERlY29kZShoYXNoVmFsdWUsIGRpZ2VzdCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkgewotICAg
ICAgICBpZiAoIWJhc2U2NFVSTERlY29kZShoYXNoVmFsdWUsIGRpZ2VzdCkpCi0gICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0KIAotICAgIHJldHVybiBSZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3QgeyAqYWxnb3JpdGhtLCBXVEZNb3ZlKGRpZ2VzdCkgfTsKKyAgICBpZiAo
YXV0byBkaWdlc3QgPSBiYXNlNjREZWNvZGUoaGFzaFZhbHVlLCBCYXNlNjREZWNvZGVPcHRpb25z
OjpWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0IHsgKmFsZ29yaXRobSwgV1RGTW92ZSgqZGlnZXN0KSB9OworCisgICAgaWYgKGF1dG8g
ZGlnZXN0ID0gYmFzZTY0VVJMRGVjb2RlKGhhc2hWYWx1ZSkpCisgICAgICAgIHJldHVybiBSZXNv
dXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyAqYWxnb3JpdGhtLCBXVEZNb3ZlKCpkaWdlc3QpIH07
CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiBPcHRpb25hbDxSZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVm
ZmVyPFVDaGFyPiYgYnVmZmVyKQpAQCAtMTI0LDEzICsxMjUsMTMgQEAgT3B0aW9uYWw8RW5jb2Rl
ZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZwogCiBPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3Q+IGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3Qg
RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCYgZW5jb2RlZERpZ2VzdCkKIHsKLSAg
ICBWZWN0b3I8dWludDhfdD4gZGlnZXN0OwotICAgIGlmICghYmFzZTY0RGVjb2RlKGVuY29kZWRE
aWdlc3QuZGlnZXN0LCBkaWdlc3QsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpIHsKLSAgICAgICAg
aWYgKCFiYXNlNjRVUkxEZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdlc3QsIGRpZ2VzdCkpCi0gICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0KKyAgICBpZiAoYXV0byBkaWdlc3Qg
PSBiYXNlNjREZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdlc3QsIEJhc2U2NERlY29kZU9wdGlvbnM6
OlZhbGlkYXRlUGFkZGluZykpCisgICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QgeyBlbmNvZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZSgqZGlnZXN0KSB9OworCisg
ICAgaWYgKGF1dG8gZGlnZXN0ID0gYmFzZTY0VVJMRGVjb2RlKGVuY29kZWREaWdlc3QuZGlnZXN0
KSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGVuY29kZWRE
aWdlc3QuYWxnb3JpdGhtLCBXVEZNb3ZlKCpkaWdlc3QpIH07CiAKLSAgICByZXR1cm4gUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERpZ2VzdC5hbGdvcml0aG0sIFdURk1vdmUo
ZGlnZXN0KSB9OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIHN0YXRpYyBQQUw6OkNy
eXB0b0RpZ2VzdDo6QWxnb3JpdGhtIHRvQ3J5cHRvRGlnZXN0QWxnb3JpdGhtKFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtIGFsZ29yaXRobSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmNwcAkocmV2
aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhU
TUxBcmNoaXZlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDkgKzE2Nyw3IEBAIFJlZjxTaGFy
ZWRCdWZmZXI+IE1IVE1MQXJjaGl2ZTo6Z2VuZXJhdGUKIAogICAgIGZvciAoYXV0byYgcmVzb3Vy
Y2UgOiByZXNvdXJjZXMpIHsKICAgICAgICAgc3RyaW5nQnVpbGRlci5jbGVhcigpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChlbmRPZlJlc291cmNlQm91bmRhcnkpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgiQ29udGVudC1UeXBlOiAiKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQocmVzb3VyY2UubWltZVR5cGUpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChlbmRPZlJlc291cmNlQm91bmRhcnksICJDb250ZW50LVR5cGU6ICIsIHJlc291cmNlLm1p
bWVUeXBlKTsKIAogICAgICAgICBjb25zdCBjaGFyKiBjb250ZW50RW5jb2RpbmcgPSBudWxscHRy
OwogICAgICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlN
RVR5cGUocmVzb3VyY2UubWltZVR5cGUpIHx8IE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVk
Tm9uSW1hZ2VNSU1FVHlwZShyZXNvdXJjZS5taW1lVHlwZSkpCkBAIC0xNzcsMjcgKzE3NSwyMiBA
QCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlCiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZyA9IGJhc2U2NDsKIAotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6ICIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjb250ZW50RW5jb2RpbmcpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtTG9jYXRpb246ICIpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChyZXNvdXJjZS51cmwuc3RyaW5nKCkpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiXHJcblxyXG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxy
XG5Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAiLCBjb250ZW50RW5jb2RpbmcsICJcclxuQ29u
dGVudC1Mb2NhdGlvbjogIiwgcmVzb3VyY2UudXJsLnN0cmluZygpLCAiXHJcblxyXG4iKTsKIAog
ICAgICAgICBhc2NpaVN0cmluZyA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CiAg
ICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcu
bGVuZ3RoKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlIHdvdWxkIGVuY29kZSB0
aGUgY29udGVudCBhcyBhIHN0cmVhbSB3aXRob3V0IGhhdmluZyB0byBmZXRjaCBpdCBhbGwuCi0g
ICAgICAgIGNvbnN0IGNoYXIqIGRhdGEgPSByZXNvdXJjZS5kYXRhLT5kYXRhKCk7CisgICAgICAg
IGF1dG8qIGRhdGEgPSByZXNvdXJjZS5kYXRhLT5kYXRhQXNVSW50OFB0cigpOwogICAgICAgICBz
aXplX3QgZGF0YUxlbmd0aCA9IHJlc291cmNlLmRhdGEtPnNpemUoKTsKLSAgICAgICAgVmVjdG9y
PGNoYXI+IGVuY29kZWREYXRhOwogICAgICAgICBpZiAoIXN0cmNtcChjb250ZW50RW5jb2Rpbmcs
IHF1b3RlZFByaW50YWJsZSkpIHsKLSAgICAgICAgICAgIHF1b3RlZFByaW50YWJsZUVuY29kZShk
YXRhLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YSk7CisgICAgICAgICAgICBhdXRvIGVuY29kZWRE
YXRhID0gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgpOwogICAgICAgICAg
ICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXpl
KCkpOwogICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoIlxyXG4iLCAyKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgYmFz
ZTY0KSk7CiAgICAgICAgICAgICAvLyBXZSBhcmUgbm90IHNwZWNpZnlpbmcgaW5zZXJ0TEZzID0g
dHJ1ZSBiZWxvdyBhcyBpdCB3b3VsZCBjdXQgdGhlIGxpbmVzIHdpdGggTEZzIGFuZCBNSFRNTCBy
ZXF1aXJlcyBDUkxGcy4KLSAgICAgICAgICAgIGJhc2U2NEVuY29kZShkYXRhLCBkYXRhTGVuZ3Ro
LCBlbmNvZGVkRGF0YSk7CisgICAgICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gYmFzZTY0RW5j
b2RlVG9WZWN0b3IoZGF0YSwgZGF0YUxlbmd0aCk7CiAgICAgICAgICAgICBjb25zdCBzaXplX3Qg
bWF4aW11bUxpbmVMZW5ndGggPSA3NjsKICAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IDA7CiAg
ICAgICAgICAgICBzaXplX3QgZW5jb2RlZERhdGFMZW5ndGggPSBlbmNvZGVkRGF0YS5zaXplKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhU
TUxQYXJzZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MiwxNiAr
MTkyLDE5IEBAIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IE1IVE1MUGFyc2VyOjpwYXIKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgc3dpdGNoIChtaW1lSGVhZGVyLmNvbnRlbnRUcmFu
c2ZlckVuY29kaW5nKCkpIHsKLSAgICBjYXNlIE1JTUVIZWFkZXI6OkJhc2U2NDoKLSAgICAgICAg
aWYgKCFiYXNlNjREZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCksIGRhdGEp
KSB7CisgICAgY2FzZSBNSU1FSGVhZGVyOjpCYXNlNjQ6IHsKKyAgICAgICAgYXV0byBkZWNvZGVk
RGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50LT5kYXRhQXNVSW50OFB0cigpICAgLCBjb250ZW50
LT5zaXplKCkpOworICAgICAgICBpZiAoIWRlY29kZWREYXRhKSB7CiAgICAgICAgICAgICBMT0df
RVJST1IoIkludmFsaWQgYmFzZTY0IGNvbnRlbnQgZm9yIE1IVE1MIHBhcnQuIik7CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQorICAgICAgICBkYXRhID0gV1RGTW92ZSgq
ZGVjb2RlZERhdGEpOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBNSU1FSGVhZGVy
OjpRdW90ZWRQcmludGFibGU6Ci0gICAgICAgIHF1b3RlZFByaW50YWJsZURlY29kZShjb250ZW50
LT5kYXRhKCksIGNvbnRlbnQtPnNpemUoKSwgZGF0YSk7CisgICAgICAgIGRhdGEgPSBxdW90ZWRQ
cmludGFibGVEZWNvZGUoY29udGVudC0+ZGF0YUFzVUludDhQdHIoKSwgY29udGVudC0+c2l6ZSgp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpTZXZlbkJpdDoKICAgICBj
YXNlIE1JTUVIZWFkZXI6OkJpbmFyeToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jb2Nv
YS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY29jb2EvUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEwIEBAIGJv
b2wgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUEKIHsKICNpZiBIQVZFKFJTQV9C
U1NBKQogICAgIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcnZlclB1YmxpY0tleURhdGE7
Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCwg
c2VydmVyUHVibGljS2V5RGF0YSkpCisgICAgICAgIGF1dG8gc2VydmVyUHVibGljS2V5RGF0YSA9
IGJhc2U2NFVSTERlY29kZShzZXJ2ZXJQdWJsaWNLZXlCYXNlNjRVUkwpOworICAgICAgICBpZiAo
IXNlcnZlclB1YmxpY0tleURhdGEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGF1dG8gc2VydmVyUHVibGljS2V5ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhC
eXRlczpzZXJ2ZXJQdWJsaWNLZXlEYXRhLmRhdGEoKSBsZW5ndGg6c2VydmVyUHVibGljS2V5RGF0
YS5zaXplKCldKTsKKyAgICAgICAgYXV0byBzZXJ2ZXJQdWJsaWNLZXkgPSBhZG9wdE5TKFtbTlNE
YXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZlclB1YmxpY0tleURhdGEtPmRhdGEoKSBsZW5n
dGg6c2VydmVyUHVibGljS2V5RGF0YS0+c2l6ZSgpXSk7CiAKICAgICAgICAgLy8gRklYTUUoMjIy
MDE4KTogQ2hlY2sgZXJyb3IuCiAgICAgICAgIG1fc291cmNlVW5saW5rYWJsZVRva2VuLmJsaW5k
ZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jUlNBQlNTQVRva2VuQmxpbmRlckluc3RhbmNlKCkgaW5p
dFdpdGhQdWJsaWNLZXk6c2VydmVyUHVibGljS2V5LmdldCgpIGVycm9yOm51bGxwdHJdKTsKQEAg
LTUwLDcgKzUwLDcgQEAgYm9vbCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQog
ICAgIGlmICghbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBtX3NvdXJjZVVubGlua2FibGVUb2tlbi52YWx1ZUJhc2U2NFVS
TCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5n
VG9rZW4gYmxpbmRlZE1lc3NhZ2VdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ud2Fp
dGluZ1Rva2VuIGJsaW5kZWRNZXNzYWdlXS5sZW5ndGgpOworICAgIG1fc291cmNlVW5saW5rYWJs
ZVRva2VuLnZhbHVlQmFzZTY0VVJMID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoW21fc291cmNl
VW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBibGluZGVkTWVzc2FnZV0uYnl0ZXMsIFttX3Nv
dXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4gYmxpbmRlZE1lc3NhZ2VdLmxlbmd0aCk7
CiAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZXJ2ZXJQdWJsaWNL
ZXlCYXNlNjRVUkwpOwpAQCAtNjUsMTAgKzY1LDEwIEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQ6OmNhbGN1bGF0ZUEKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgewotICAgICAg
ICBWZWN0b3I8dWludDhfdD4gc2VydmVyUmVzcG9uc2VEYXRhOwotICAgICAgICBpZiAoIWJhc2U2
NFVSTERlY29kZShzZXJ2ZXJSZXNwb25zZUJhc2U2NFVSTCwgc2VydmVyUmVzcG9uc2VEYXRhKSkK
KyAgICAgICAgYXV0byBzZXJ2ZXJSZXNwb25zZURhdGEgPSBiYXNlNjRVUkxEZWNvZGUoc2VydmVy
UmVzcG9uc2VCYXNlNjRVUkwpOworICAgICAgICBpZiAoIXNlcnZlclJlc3BvbnNlRGF0YSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byBzZXJ2ZXJSZXNwb25zZSA9IGFk
b3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2VydmVyUmVzcG9uc2VEYXRhLmRh
dGEoKSBsZW5ndGg6c2VydmVyUmVzcG9uc2VEYXRhLnNpemUoKV0pOworICAgICAgICBhdXRvIHNl
cnZlclJlc3BvbnNlID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzZXJ2
ZXJSZXNwb25zZURhdGEtPmRhdGEoKSBsZW5ndGg6c2VydmVyUmVzcG9uc2VEYXRhLT5zaXplKCld
KTsKIAogICAgICAgICAvLyBGSVhNRSgyMjIwMTgpOiBDaGVjayBlcnJvci4KICAgICAgICAgbV9z
b3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiA9IFttX3NvdXJjZVVubGlua2FibGVUb2tl
bi53YWl0aW5nVG9rZW4gYWN0aXZhdGVUb2tlbldpdGhTZXJ2ZXJSZXNwb25zZTpzZXJ2ZXJSZXNw
b25zZS5nZXQoKSBlcnJvcjpudWxscHRyXTsKQEAgLTc3LDkgKzc3LDkgQEAgYm9vbCBQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogICAgIH0KIAogICAgIFNvdXJjZVNlY3JldFRv
a2VuIHRva2VuOwotICAgIHRva2VuLnRva2VuQmFzZTY0VVJMID0gV1RGOjpiYXNlNjRVUkxFbmNv
ZGUoW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50XS5ieXRl
cywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50XS5sZW5n
dGgpOwotICAgIHRva2VuLmtleUlEQmFzZTY0VVJMID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoW21f
c291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRdLmJ5dGVzLCBbbV9zb3VyY2VV
bmxpbmthYmxlVG9rZW4ucmVhZHlUb2tlbiBrZXlJZF0ubGVuZ3RoKTsKLSAgICB0b2tlbi5zaWdu
YXR1cmVCYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxpbmthYmxl
VG9rZW4ucmVhZHlUb2tlbiBzaWduYXR1cmVdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9r
ZW4ucmVhZHlUb2tlbiBzaWduYXR1cmVdLmxlbmd0aCk7CisgICAgdG9rZW4udG9rZW5CYXNlNjRV
UkwgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVh
ZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVh
ZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmxlbmd0aCk7CisgICAgdG9rZW4ua2V5SURCYXNlNjRVUkwg
PSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlU
b2tlbiBrZXlJZF0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIGtl
eUlkXS5sZW5ndGgpOworICAgIHRva2VuLnNpZ25hdHVyZUJhc2U2NFVSTCA9IGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHNpZ25hdHVy
ZV0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHNpZ25hdHVyZV0u
bGVuZ3RoKTsKIAogICAgIG1fc291cmNlU2VjcmV0VG9rZW4gPSBXVEZNb3ZlKHRva2VuKTsKICAg
ICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Jhc2U2NFV0aWxpdGllcy5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBFeGNlcHRpb25PcjxTdHJp
bmc+IEJhc2U2NFV0aWxpdGllczo6YnRvCiAgICAgaWYgKCFzdHJpbmdUb0VuY29kZS5pc0FsbExh
dGluMSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9y
IH07CiAKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKHN0cmluZ1RvRW5jb2RlLmxhdGluMSgpKTsK
KyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkp
OwogfQogCiBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YXRvYihjb25zdCBT
dHJpbmcmIGVuY29kZWRTdHJpbmcpCkBAIC00NiwxMSArNDYsMTEgQEAgRXhjZXB0aW9uT3I8U3Ry
aW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0bwogICAgIGlmIChlbmNvZGVkU3RyaW5nLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAg
IGlmICghYmFzZTY0RGVjb2RlKGVuY29kZWRTdHJpbmcsIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRk
aW5nIHwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgfCBCYXNlNjREaXNjYXJkVmVydGlj
YWxUYWIpKQorICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoZW5jb2RlZFN0cmlu
ZywgeyBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcsIEJhc2U2NERlY29kZU9w
dGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzLCBCYXNlNjREZWNvZGVPcHRpb25zOjpEaXNj
YXJkVmVydGljYWxUYWIgfSk7CisgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRDaGFyYWN0ZXJFcnJvciB9OwogCi0gICAgcmV0dXJuIFN0cmlu
ZyhvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpKTsKKyAgICByZXR1cm4gU3RyaW5nKGRlY29kZWREYXRh
LT5kYXRhKCksIGRlY29kZWREYXRhLT5zaXplKCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NDgsOSArMTg0OCw4IEBAIHZvaWQgUGFnZTo6dXNlclN0eWxl
U2hlZXRMb2NhdGlvbkNoYW5nZWQKICAgICBpZiAodXJsLnByb3RvY29sSXNEYXRhKCkgJiYgdXJs
LnN0cmluZygpLnN0YXJ0c1dpdGgoImRhdGE6dGV4dC9jc3M7Y2hhcnNldD11dGYtODtiYXNlNjQs
IikpIHsKICAgICAgICAgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQgPSB0cnVlOwogCi0gICAgICAg
IFZlY3RvcjxjaGFyPiBzdHlsZVNoZWV0QXNVVEY4OwotICAgICAgICBpZiAoYmFzZTY0RGVjb2Rl
KGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vic3RyaW5nKDM1KSksIHN0
eWxlU2hlZXRBc1VURjgsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSkKLSAgICAgICAg
ICAgIG1fdXNlclN0eWxlU2hlZXQgPSBTdHJpbmc6OmZyb21VVEY4KHN0eWxlU2hlZXRBc1VURjgu
ZGF0YSgpLCBzdHlsZVNoZWV0QXNVVEY4LnNpemUoKSk7CisgICAgICAgIGlmIChhdXRvIHN0eWxl
U2hlZXRBc1VURjggPSBiYXNlNjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5z
dHJpbmcoKS5zdWJzdHJpbmcoMzUpKSwgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2Vz
QW5kTmV3TGluZXMpKQorICAgICAgICAgICAgbV91c2VyU3R5bGVTaGVldCA9IFN0cmluZzo6ZnJv
bVVURjgoc3R5bGVTaGVldEFzVVRGOC0+ZGF0YSgpLCBzdHlsZVNoZWV0QXNVVEY4LT5zaXplKCkp
OwogICAgIH0KIAogICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsMTEgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVu
ZChjb25zdCBjaGFyKiBkYQogICAgIEFTU0VSVChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsKIH0K
IAordm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qg
bGVuZ3RoKQoreworICAgIGFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRh
KSwgbGVuZ3RoKTsKK30KKwogdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChWZWN0b3I8Y2hhcj4m
JiBkYXRhKQogewogICAgIEFTU0VSVCghbV9oYXNCZWVuQ29tYmluZWRJbnRvT25lU2VnbWVudCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExMiw2ICsxMTIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFwcGVuZChjb25z
dCBTaGFyZWRCdWZmZXImKTsKICAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiwgc2l6ZV90KTsK
KyAgICB2b2lkIGFwcGVuZChjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKICAgICB2b2lkIGFwcGVu
ZChWZWN0b3I8Y2hhcj4mJik7CiAKICAgICB2b2lkIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJr
ZXkvQ0RNQ2xlYXJLZXkuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc5LDEyICs3OSwxNSBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxL
ZXlIYW5kbGU+CiAgICAgICAgICAgICBpZiAoIWtleVZhbHVlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICAgICAgS2V5SURUeXBlIGtleUlERGF0YTsKLSAgICAgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiBrZXlIYW5kbGVWYWx1ZURhdGE7Ci0gICAgICAgICAgICBpZiAo
IVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7IGtleUlERGF0YSB9KSB8fCAhV1RGOjpiYXNl
NjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5SGFuZGxlVmFsdWVEYXRhIH0pKQorICAgICAgICAg
ICAgYXV0byBrZXlJRERhdGEgPSBiYXNlNjRVUkxEZWNvZGUoa2V5SUQpOworICAgICAgICAgICAg
aWYgKCFrZXlJRERhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgICAgIGF1dG8ga2V5SGFuZGxlVmFsdWVEYXRhID0gYmFzZTY0VVJMRGVjb2RlKGtl
eVZhbHVlKTsKKyAgICAgICAgICAgIGlmICgha2V5SGFuZGxlVmFsdWVEYXRhKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtl
eUhhbmRsZTo6Y3JlYXRlKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFdU
Rk1vdmUoa2V5SUREYXRhKSwgV1RGTW92ZShrZXlIYW5kbGVWYWx1ZURhdGEpKSk7CisgICAgICAg
ICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5SGFuZGxlOjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNz
aW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZSgqa2V5SUREYXRhKSwgV1RGTW92ZSgqa2V5
SGFuZGxlVmFsdWVEYXRhKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0p
OwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC0yMTUsOCArMjE4LDcgQEAgc3RhdGljIFJlZjxT
aGFyZWRCdWZmZXI+IGV4dHJhY3RLZXlpZHNGcgogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFy
cmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVy
bCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZh
bHVlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlJZENvdW50OyBpKyspIHsKLSAg
ICAgICAgU3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRhdGFbaW5kZXhdLCBD
bGVhcktleTo6S2V5SURTaXplSW5CeXRlcyk7Ci0gICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3Ry
aW5nKGtleUlkKTsKKyAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5j
b2RlVG9TdHJpbmcoJmRhdGFbaW5kZXhdLCBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlcykpOwog
ICAgICAgICBpbmRleCArPSBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlczsKICAgICB9CiAKQEAg
LTI0Myw4ICsyNDUsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleUlkRnJv
CiAgICAgLy8gVGhlIGZvcm1hdCBpcyBhIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxv
d2luZyBtZW1iZXJzOgogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFycmF5IG9mIGtleSBJRHMu
IEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0
aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZhbHVlLgotICAgIFN0cmlu
ZyBrZXlJZCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKGluaXREYXRhLmRhdGEoKSwgaW5pdERhdGEu
c2l6ZSgpKTsKLSAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhrZXlJZCk7CisgICAga2V5SWRz
QXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoaW5pdERhdGEuZGF0YSgp
LCBpbml0RGF0YS5zaXplKCkpKTsKIAogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZN
b3ZlKGtleUlkc0FycmF5KSk7CiAgICAgQ1N0cmluZyBqc29uRGF0YSA9IG9iamVjdC0+dG9KU09O
U3RyaW5nKCkudXRmOCgpOwpAQCAtNTg3LDcgKzU4OCw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNz
aW9uQ2xlYXJLZXk6OnJlbW92ZVMKICAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJh
eTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5U3Rv
cmUpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoa2V5LT5pZCgpLnNpemUoKSA8PSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICAgICAgICAgIGFycmF5LT5w
dXNoU3RyaW5nKFdURjo6YmFzZTY0VVJMRW5jb2RlKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQo
KS5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxF
bmNvZGVUb1N0cmluZyhrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJheSgia2lkcyIsIFdURk1v
dmUoYXJyYXkpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBs
YXlTdHJlYW1pbmcuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTMsMTEgKzExMywxMSBAQCBzdGF0aWMgVmVjdG9yPFJlZjxTaGFyZWRC
dWZmZXI+PiBleHRyYWN0CiAgICAgICAgIGlmICgha2V5SUQpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICBWZWN0b3I8Y2hhcj4gc2luZkRhdGE7Ci0gICAgICAgIGlmICghV1RGOjpi
YXNlNjREZWNvZGUoa2V5SUQsIHsgc2luZkRhdGEgfSwgV1RGOjpCYXNlNjRJZ25vcmVTcGFjZXNB
bmROZXdMaW5lcykpCisgICAgICAgIGF1dG8gc2luZkRhdGEgPSBiYXNlNjREZWNvZGUoa2V5SUQs
IEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKTsKKyAgICAgICAg
aWYgKCFzaW5mRGF0YSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHNpbmZzLnVu
Y2hlY2tlZEFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKHNpbmZEYXRhKSkpOwor
ICAgICAgICBzaW5mcy51bmNoZWNrZWRBcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92
ZSgqc2luZkRhdGEpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHNpbmZzOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VG
YWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0
cmVhbWluZ0FWRk9iakMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MTUsNyArNzE1LDcgQEAgdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICBpZGVudGlmaWVyID0g
YWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6aW5pdERhdGEtPmNyZWF0ZU5T
RGF0YSgpLmdldCgpIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CiAjaWYgSEFWRShG
QUlSUExBWVNUUkVBTUlOR19DRU5DX0lOSVREQVRBKQogICAgIGVsc2UgaWYgKGluaXREYXRhVHlw
ZSA9PSBJbml0RGF0YVJlZ2lzdHJ5OjpjZW5jTmFtZSgpKSB7Ci0gICAgICAgIFN0cmluZyBwc3No
U3RyaW5nID0gYmFzZTY0RW5jb2RlKGluaXREYXRhLT5kYXRhKCksIGluaXREYXRhLT5zaXplKCkp
OworICAgICAgICBhdXRvIHBzc2hTdHJpbmcgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbml0RGF0
YS0+ZGF0YSgpLCBpbml0RGF0YS0+c2l6ZSgpKTsKICAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRh
ID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7IEAicHNzaCI6IChO
U1N0cmluZyopcHNzaFN0cmluZyB9IG9wdGlvbnM6TlNKU09OV3JpdGluZ1ByZXR0eVByaW50ZWQg
ZXJyb3I6bmlsXTsKICAgICB9CiAjZW5kaWYKQEAgLTg1MCwxMSArODUwLDExIEBAIHZvaWQgQ0RN
SW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAgICAgICAgIGlmICgha2V5SURT
dHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBWZWN0
b3I8dWludDhfdD4ga2V5SURWZWN0b3I7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShr
ZXlJRFN0cmluZywga2V5SURWZWN0b3IpKQorICAgICAgICAgICAgYXV0byBrZXlJRFZlY3RvciA9
IGJhc2U2NERlY29kZShrZXlJRFN0cmluZyk7CisgICAgICAgICAgICBpZiAoa2V5SURWZWN0b3Ip
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBhdXRvIGtleUlE
ID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlJRFZlY3RvcikpOworICAgICAgICAg
ICAgYXV0byBrZXlJRCA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKmtleUlEVmVjdG9y
KSk7CiAgICAgICAgICAgICBhdXRvIGZvdW5kSW5kZXggPSBtX2N1cnJlbnRSZXF1ZXN0LnZhbHVl
KCkucmVxdWVzdHMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgcmVxdWVzdCkgewogICAgICAgICAg
ICAgICAgIGF1dG8ga2V5SURzID0ga2V5SURzRm9yUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4ga2V5SURzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgUmVmPFNo
YXJlZEJ1ZmZlcj4mIGlkKSB7CkBAIC04ODUsMTAgKzg4NSwxMCBAQCB2b2lkIENETUluc3RhbmNl
U2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgICAgICAgICAgYXV0byBwYXlsb2FkU3Ry
aW5nID0gcGF5bG9hZEZpbmRSZXN1bHRzLT52YWx1ZS0+YXNTdHJpbmcoKTsKICAgICAgICAgICAg
ICAgICBpZiAoIXBheWxvYWRTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gcGF5bG9hZFZlY3RvcjsKLSAgICAg
ICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShwYXlsb2FkU3RyaW5nLCBwYXlsb2FkVmVjdG9y
KSkKKyAgICAgICAgICAgICAgICBhdXRvIHBheWxvYWRWZWN0b3IgPSBiYXNlNjREZWNvZGUocGF5
bG9hZFN0cmluZyk7CisgICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkVmVjdG9yKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYXV0byBwYXlsb2Fk
RGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUocGF5bG9hZFZlY3RvcikpOworICAg
ICAgICAgICAgICAgIGF1dG8gcGF5bG9hZERhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZN
b3ZlKCpwYXlsb2FkVmVjdG9yKSk7CiAgICAgICAgICAgICAgICAgW3JlcXVlc3QgcHJvY2Vzc0Nv
bnRlbnRLZXlSZXNwb25zZTpbUEFMOjpnZXRBVkNvbnRlbnRLZXlSZXNwb25zZUNsYXNzKCkgY29u
dGVudEtleVJlc3BvbnNlV2l0aEZhaXJQbGF5U3RyZWFtaW5nS2V5UmVzcG9uc2VEYXRhOnBheWxv
YWREYXRhLT5jcmVhdGVOU0RhdGEoKS5nZXQoKV1dOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMTk1LDggKzExOTUsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vz
c2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGF1dG8mIGtleUlEID0gcmVxdWVzdERhdGEuZmly
c3Q7CiAgICAgICAgICAgICBhdXRvJiBwYXlsb2FkID0gcmVxdWVzdERhdGEuc2Vjb25kOwotICAg
ICAgICAgICAgZW50cnktPnNldFN0cmluZygia2V5SUQiLCBiYXNlNjRFbmNvZGUoa2V5SUQtPmRh
dGEoKSwga2V5SUQtPnNpemUoKSkpOwotICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygicGF5
bG9hZCIsIGJhc2U2NEVuY29kZShwYXlsb2FkLmdldCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxl
bmd0aCkpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygia2V5SUQiLCBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhrZXlJRC0+ZGF0YSgpLCBrZXlJRC0+c2l6ZSgpKSk7CisgICAgICAgICAgICBl
bnRyeS0+c2V0U3RyaW5nKCJwYXlsb2FkIiwgYmFzZTY0RW5jb2RlVG9TdHJpbmcocGF5bG9hZC5n
ZXQoKS5ieXRlcywgcGF5bG9hZC5nZXQoKS5sZW5ndGgpKTsKICAgICAgICAgICAgIHJlcXVlc3RK
U09OLT5wdXNoT2JqZWN0KFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgfQogICAgICAgICBhdXRv
IHJlcXVlc3RCdWZmZXIgPSB1dGY4QnVmZmVyKHJlcXVlc3RKU09OLT50b0pTT05TdHJpbmcoKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc1
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMCArMTMwLDcgQEAgU3Ry
aW5nIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUgogICAgIGlmIChlbmNvZGVkSW1h
Z2UuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gImRhdGE6LCI7CiAKLSAgICBWZWN0b3I8Y2hh
cj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5j
b2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1p
bWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgcmV0dXJuIG1ha2VTdHJpbmco
ImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoZW5jb2RlZEltYWdl
LmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSkpOwogfQogCiBWZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwx
MCArMTc0LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogCiBT
dHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsK
LSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0
Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKLQotICAg
IHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAg
ICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0
RW5jb2RlZChDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSkpKTsK
IH0KIAogU3RyaW5nIGRhdGFVUkwoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250
TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsKICAgICBDb0NyZWF0ZUd1aWQoJmZvbnRVdWlkKTsK
IAotICAgIFN0cmluZyBmb250TmFtZSA9IGJhc2U2NEVuY29kZShyZWludGVycHJldF9jYXN0PGNo
YXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKKyAgICBhdXRvIGZvbnROYW1lID0g
YmFzZTY0RW5jb2RlVG9TdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlkKSwg
c2l6ZW9mKGZvbnRVdWlkKSk7CiAgICAgQVNTRVJUKGZvbnROYW1lLmxlbmd0aCgpIDwgTEZfRkFD
RVNJWkUpOwogICAgIHJldHVybiBmb250TmFtZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1
ZUZvbnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwogICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1
aWQpOwogCi0gICAgU3RyaW5nIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOworICAgIGF1dG8gZm9udE5h
bWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1
aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKICAgICBBU1NFUlQoZm9udE5hbWUubGVuZ3RoKCkgPCBM
Rl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1lOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIFN0cmluZyBzaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZwogICAgIGlmIChTZWNBc24xRW5jb2RlSXRlbShjb2Rlciwg
JnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSwgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdl
VGVtcGxhdGUsICZlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlKSAhPSBub0VycikK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShlbmNv
ZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkRhdGEsIGVuY29kZWRTaWduZWRQdWJsaWNL
ZXlBbmRDaGFsbGVuZ2UuTGVuZ3RoKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmco
ZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBlbmNvZGVkU2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmdlLkxlbmd0aCk7CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnlJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyBSZWY8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZUJsb2JS
ZXMKICAgICByZXR1cm4gYmxvYlJlZ2lzdHJ5KCkuYmxvYlJlZ2lzdHJ5SW1wbCgpLT5jcmVhdGVS
ZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQpOwogfQogCi1zdGF0aWMgdm9pZCBsb2FkQmxv
YlJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3Im
IGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQor
c3RhdGljIHZvaWQgbG9hZEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRl
eHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBhdXRvKiBibG9iRGF0YSA9IGJsb2JSZWdpc3Ry
eSgpLmJsb2JSZWdpc3RyeUltcGwoKS0+Z2V0QmxvYkRhdGFGcm9tVVJMKHJlcXVlc3QudXJsKCkp
OwogICAgIEJsb2JSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShibG9i
RGF0YSwgcmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxv
YlJlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBuYW1l
c3BhY2UgewogCiBjbGFzcyBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlciA6IHB1YmxpYyBS
ZXNvdXJjZUhhbmRsZUNsaWVudCB7CiBwdWJsaWM6Ci0gICAgQmxvYlJlc291cmNlU3luY2hyb25v
dXNMb2FkZXIoUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4m
KTsKKyAgICBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiwgUmVz
b3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYpOwogCiAgICAgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVzcG9uc2UmJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKICAgICB2b2lkIGRpZEZhaWwoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgZmluYWw7CkBAIC04NSwxMCArODUsMTAgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBSZXNvdXJjZUVycm9yJiBtX2Vycm9yOwogICAgIFJlc291
cmNlUmVzcG9uc2UmIG1fcmVzcG9uc2U7Ci0gICAgVmVjdG9yPGNoYXI+JiBtX2RhdGE7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+JiBtX2RhdGE7CiB9OwogCi1CbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xv
YWRlcjo6QmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYgZXJyb3Is
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCitCbG9iUmVz
b3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6QmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIoUmVz
b3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWlu
dDhfdD4mIGRhdGEpCiAgICAgOiBtX2Vycm9yKGVycm9yKQogICAgICwgbV9yZXNwb25zZShyZXNw
b25zZSkKICAgICAsIG1fZGF0YShkYXRhKQpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgQmxvYlJl
c291cmNlU3luY2hyb25vdXNMb2FkZXI6OmRpZFIKIAogICAgIC8vIFJlYWQgYWxsIHRoZSBkYXRh
LgogICAgIG1fZGF0YS5yZXNpemUoc3RhdGljX2Nhc3Q8c2l6ZV90PihyZXNwb25zZS5leHBlY3Rl
ZENvbnRlbnRMZW5ndGgoKSkpOwotICAgIHN0YXRpY19jYXN0PEJsb2JSZXNvdXJjZUhhbmRsZSo+
KGhhbmRsZSktPnJlYWRTeW5jKG1fZGF0YS5kYXRhKCksIHN0YXRpY19jYXN0PGludD4obV9kYXRh
LnNpemUoKSkpOworICAgIHN0YXRpY19jYXN0PEJsb2JSZXNvdXJjZUhhbmRsZSo+KGhhbmRsZSkt
PnJlYWRTeW5jKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fZGF0YS5kYXRhKCkpLCBzdGF0aWNf
Y2FzdDxpbnQ+KG1fZGF0YS5zaXplKCkpKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQog
CkBAIC0xNDEsNyArMTQxLDcgQEAgUmVmPEJsb2JSZXNvdXJjZUhhbmRsZT4gQmxvYlJlc291cmNl
SGFuZAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJsb2JSZXNvdXJjZUhhbmRsZShibG9iRGF0
YSwgcmVxdWVzdCwgY2xpZW50LCB0cnVlKSk7CiB9CiAKLXZvaWQgQmxvYlJlc291cmNlSGFuZGxl
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEJsb2JEYXRhKiBibG9iRGF0YSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgQmxvYlJlc291cmNlSGFu
ZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEJsb2JEYXRhKiBibG9iRGF0YSwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBpZiAoIWVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHJlcXVlc3QuaHR0cE1ldGhvZCgpLCAiZ2V0Iikp
IHsKICAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKHdlYktpdEJsb2JSZXNvdXJjZURvbWFp
biwgc3RhdGljX2Nhc3Q8aW50PihFcnJvcjo6TWV0aG9kTm90QWxsb3dlZCksIHJlc3BvbnNlLnVy
bCgpLCAiUmVxdWVzdCBtZXRob2QgbXVzdCBiZSBHRVQiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3Vy
Y2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBCbG9iUmVz
b3VyY2VIYW5kbGUgZmluYWwgOiBwdWJsaWMgCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxCbG9i
UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZUFzeW5jKEJsb2JEYXRhKiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKTsKIAotICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoQmxvYkRhdGEqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNv
dXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisgICAg
c3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PHVpbnQ4X3Q+JiBkYXRhKTsKIAogICAgIHZvaWQgc3RhcnQoKTsKICAgICBpbnQgcmVhZFN5bmMo
Y2hhciosIGludCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRl
bnRpYWxCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0NyZWRlbnRpYWxCYXNlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDcmVkZW50aWFsQmFzZS5oIgogCiAjaW5jbHVkZSAi
Q3JlZGVudGlhbC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTk0LDQgKzk1LDEwIEBAIGJvb2wgQ3JlZGVudGlhbEJhc2U6OmNvbXBh
cmUoY29uc3QgQ3JlZGUKICAgICByZXR1cm4gQ3JlZGVudGlhbDo6cGxhdGZvcm1Db21wYXJlKGEs
IGIpOwogfQogCitTdHJpbmcgQ3JlZGVudGlhbEJhc2U6OnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1
dGhvcml6YXRpb25IZWFkZXIoKSBjb25zdAoreworICAgIGF1dG8gY3JlZGVudGlhbFN0cmluZ0Rh
dGEgPSBtYWtlU3RyaW5nKG1fdXNlciwgJzonLCBtX3Bhc3N3b3JkKS51dGY4KCk7CisgICAgcmV0
dXJuIG1ha2VTdHJpbmcoIkJhc2ljICIsIGJhc2U2NEVuY29kZWQoY3JlZGVudGlhbFN0cmluZ0Rh
dGEpKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVk
ZW50aWFsQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQ3JlZGVudGlhbEJhc2UuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3
ICszOSw2IEBAIGVudW0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlIHsKIH07CiAKIGNsYXNzIENyZWRl
bnRpYWxCYXNlIHsKLQogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbXB0eSgp
IGNvbnN0OwogICAgIApAQCAtNTIsNiArNTEsOCBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgYm9vbCBjb21wYXJlKGNvbnN0IENyZWRlbnRpYWwmLCBjb25zdCBDcmVkZW50
aWFsJik7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckJhc2lj
QXV0aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgV0VCQ09SRV9F
WFBPUlQgQ3JlZGVudGlhbEJhc2UoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDcmVkZW50aWFsQmFz
ZShjb25zdCBTdHJpbmcmIHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQsIENyZWRlbnRpYWxQ
ZXJzaXN0ZW5jZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFV
UkxEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0RhdGFVUkxEZWNvZGVyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0OCwzNiArMTQ4LDI2IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2RlVGFzaz4gY3Jl
YXQKICAgICApOwogfQogCi1zdGF0aWMgYm9vbCBkZWNvZGVCYXNlNjQoRGVjb2RlVGFzayYgdGFz
aywgTW9kZSBtb2RlKQorc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVjb2RlQmFz
ZTY0KGNvbnN0IERlY29kZVRhc2smIHRhc2ssIE1vZGUgbW9kZSkKIHsKLSAgICBWZWN0b3I8Y2hh
cj4gYnVmZmVyOwotICAgIGlmIChtb2RlID09IE1vZGU6OkZvcmdpdmluZ0Jhc2U2NCkgewotICAg
ICAgICBhdXRvIHVuZXNjYXBlZFN0cmluZyA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0YXNr
LmVuY29kZWREYXRhLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7Ci0gICAgICAgIGlmICghYmFz
ZTY0RGVjb2RlKHVuZXNjYXBlZFN0cmluZywgYnVmZmVyLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcg
fCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyB8IEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRh
YikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKKyAgICBzd2l0Y2gg
KG1vZGUpIHsKKyAgICBjYXNlIE1vZGU6OkZvcmdpdmluZ0Jhc2U2NDoKKyAgICAgICAgcmV0dXJu
IGJhc2U2NERlY29kZShkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModGFzay5lbmNvZGVkRGF0YSks
IHsgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nLCBCYXNlNjREZWNvZGVPcHRp
b25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcywgQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlzY2Fy
ZFZlcnRpY2FsVGFifSk7CisKKyAgICBjYXNlIE1vZGU6OkxlZ2FjeToKICAgICAgICAgLy8gRmly
c3QgdHJ5IGJhc2U2NHVybC4KLSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUodGFzay5lbmNv
ZGVkRGF0YS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIGJ1ZmZlcikpIHsKLSAgICAgICAgICAg
IC8vIERpZG4ndCB3b3JrLCB0cnkgdW5lc2NhcGluZyBhbmQgZGVjb2RpbmcgYXMgYmFzZTY0Lgot
ICAgICAgICAgICAgYXV0byB1bmVzY2FwZWRTdHJpbmcgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5j
ZXModGFzay5lbmNvZGVkRGF0YS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpOwotICAgICAgICAg
ICAgaWYgKCFiYXNlNjREZWNvZGUodW5lc2NhcGVkU3RyaW5nLCBidWZmZXIsIEJhc2U2NElnbm9y
ZVNwYWNlc0FuZE5ld0xpbmVzIHwgQmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gZGVjb2Rl
ZERhdGEgPSBiYXNlNjRVUkxEZWNvZGUodGFzay5lbmNvZGVkRGF0YSkpCisgICAgICAgICAgICBy
ZXR1cm4gZGVjb2RlZERhdGE7CisgICAgICAgIC8vIERpZG4ndCB3b3JrLCB0cnkgdW5lc2NhcGlu
ZyBhbmQgZGVjb2RpbmcgYXMgYmFzZTY0LgorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0YXNrLmVuY29kZWREYXRhKSwgeyBCYXNlNjREZWNvZGVP
cHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcywgQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlz
Y2FyZFZlcnRpY2FsVGFiIH0pOwogICAgIH0KLSAgICBidWZmZXIuc2hyaW5rVG9GaXQoKTsKLSAg
ICB0YXNrLnJlc3VsdC5kYXRhID0gV1RGTW92ZShidWZmZXIpOwotCi0gICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyB2b2lkIGRlY29kZUVzY2FwZWQoRGVjb2RlVGFzayYgdGFzaykKK3N0YXRp
YyBWZWN0b3I8dWludDhfdD4gZGVjb2RlRXNjYXBlZChjb25zdCBEZWNvZGVUYXNrJiB0YXNrKQog
ewogICAgIFRleHRFbmNvZGluZyBlbmNvZGluZ0Zyb21DaGFyc2V0KHRhc2sucmVzdWx0LmNoYXJz
ZXQpOwogICAgIGF1dG8mIGVuY29kaW5nID0gZW5jb2RpbmdGcm9tQ2hhcnNldC5pc1ZhbGlkKCkg
PyBlbmNvZGluZ0Zyb21DaGFyc2V0IDogVVRGOEVuY29kaW5nKCk7Ci0gICAgYXV0byBidWZmZXIg
PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEodGFzay5lbmNvZGVkRGF0YSwgZW5jb2Rp
bmcpOwotCi0gICAgYnVmZmVyLnNocmlua1RvRml0KCk7Ci0gICAgdGFzay5yZXN1bHQuZGF0YSA9
IFdURk1vdmUoYnVmZmVyKTsKKyAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNE
YXRhKHRhc2suZW5jb2RlZERhdGEsIGVuY29kaW5nKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPFJl
c3VsdD4gZGVjb2RlU3luY2hyb25vdXNseShEZWNvZGVUYXNrJiB0YXNrLCBNb2RlIG1vZGUpCkBA
IC0xODYsMTEgKzE3NiwxNCBAQCBzdGF0aWMgT3B0aW9uYWw8UmVzdWx0PiBkZWNvZGVTeW5jaHJv
bm91CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAodGFzay5pc0Jhc2U2
NCkgewotICAgICAgICBpZiAoIWRlY29kZUJhc2U2NCh0YXNrLCBtb2RlKSkKKyAgICAgICAgYXV0
byBkZWNvZGVkRGF0YSA9IGRlY29kZUJhc2U2NCh0YXNrLCBtb2RlKTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVkRGF0YSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHRh
c2sucmVzdWx0LmRhdGEgPSBXVEZNb3ZlKCpkZWNvZGVkRGF0YSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIGRlY29kZUVzY2FwZWQodGFzayk7CisgICAgICAgIHRhc2sucmVzdWx0LmRhdGEgPSBkZWNv
ZGVFc2NhcGVkKHRhc2spOwogCisgICAgdGFzay5yZXN1bHQuZGF0YS5zaHJpbmtUb0ZpdCgpOwog
ICAgIHJldHVybiBXVEZNb3ZlKHRhc2sucmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHN0cnVjdCBSZXN1bHQgewogICAgIFN0
cmluZyBtaW1lVHlwZTsKICAgICBTdHJpbmcgY2hhcnNldDsKICAgICBTdHJpbmcgY29udGVudFR5
cGU7Ci0gICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiB9
OwogCiB1c2luZyBEZWNvZGVDb21wbGV0aW9uSGFuZGxlciA9IFdURjo6RnVuY3Rpb248dm9pZCAo
T3B0aW9uYWw8UmVzdWx0Pik+OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZmFpbHVyZVRpbWVy
RmlyZWQoKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFJlc291cmNlSGFu
ZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5
IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgUmVzb3VyY2VIYW5k
bGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIGlmIChhdXRv
IGNvbnN0cnVjdG9yID0gYnVpbHRpblJlc291cmNlSGFuZGxlU3luY2hyb25vdXNMb2FkZXJNYXAo
KS5nZXQocmVxdWVzdC51cmwoKS5wcm90b2NvbCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSkp
IHsKICAgICAgICAgY29uc3RydWN0b3IoY29udGV4dCwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgY2xhc3MgQ3VybFJlc291cmNlSGFuZGxlRGVs
ZWdhdGU7CiBjbGFzcyBSZXNvdXJjZUhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc291cmNl
SGFuZGxlPiwgcHVibGljIEF1dGhlbnRpY2F0aW9uQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGUoTmV0d29ya2lu
Z0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCos
IGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxk
Q29udGVudEVuY29kaW5nU25pZmYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291
cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VF
cnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlc291cmNlSGFuZGxlKCk7CiAKICNpZiBQTEFURk9STShD
T0NPQSkgfHwgVVNFKENGVVJMQ09OTkVDVElPTikKQEAgLTE5Myw3ICsxOTMsNyBAQCBwdWJsaWM6
CiAgICAgdHlwZWRlZiBSZWY8UmVzb3VyY2VIYW5kbGU+ICgqQnVpbHRpbkNvbnN0cnVjdG9yKShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGll
bnQpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQnVpbHRpbkNvbnN0cnVjdG9yKGNvbnN0IEF0
b21TdHJpbmcmIHByb3RvY29sLCBCdWlsdGluQ29uc3RydWN0b3IpOwogCi0gICAgdHlwZWRlZiB2
b2lkICgqQnVpbHRpblN5bmNocm9ub3VzTG9hZGVyKShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9y
JiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisgICAgdHlwZWRlZiB2
b2lkICgqQnVpbHRpblN5bmNocm9ub3VzTG9hZGVyKShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9y
JiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJCdWlsdGluU3luY2hyb25vdXNMb2FkZXIoY29uc3QgQXRvbVN0cmluZyYg
cHJvdG9jb2wsIEJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlcik7CiAKIHByb3RlY3RlZDoKQEAgLTIx
Myw3ICsyMTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVU
eXBlKTsKIAogICAgIGJvb2wgc3RhcnQoKTsKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIHN0YXRpYyB2b2lkIHBsYXRmb3Jt
TG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVz
b3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAKICAgICB2b2lkIHJlZkF1
dGhlbnRpY2F0aW9uQ2xpZW50KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQogICAgIHZvaWQgZGVyZWZB
dXRoZW50aWNhdGlvbkNsaWVudCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xv
YWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw3ICs3Myw3IEBAIHZvaWQgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmUK
IAogdm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIGludCAvKmVuY29kZWRE
YXRhTGVuZ3RoKi8pCiB7Ci0gICAgbV9kYXRhLmFwcGVuZChkYXRhLCBsZW5ndGgpOworICAgIG1f
ZGF0YS5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0
aCk7CiB9CiAKIHZvaWQgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmco
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNM
b2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldEFsbG93U3RvcmVkQ3JlZGVudGlhbHMoYm9vbCBhbGxvdykgeyBtX2FsbG93
U3RvcmVkQ3JlZGVudGlhbHMgPSBhbGxvdzsgfQogICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQotICAgIFZlY3RvcjxjaGFy
PiYgbXV0YWJsZURhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBWZWN0b3I8dWludDhfdD4m
IG11dGFibGVEYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAgY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9CiAgICAgU3luY2hyb25vdXNMb2Fk
ZXJNZXNzYWdlUXVldWUmIG1lc3NhZ2VRdWV1ZSgpIHsgcmV0dXJuIG1fbWVzc2FnZVF1ZXVlLmdl
dCgpOyB9CiAKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9hbGxvd1N0
b3JlZENyZWRlbnRpYWxzIHsgZmFsc2UgfTsKICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9u
c2U7Ci0gICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9kYXRh
OwogICAgIFJlc291cmNlRXJyb3IgbV9lcnJvcjsKICAgICBSZWY8U3luY2hyb25vdXNMb2FkZXJN
ZXNzYWdlUXVldWU+IG1fbWVzc2FnZVF1ZXVlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsOSArODUsNyBA
QCBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxDRkRhdGFSCiAKIHN0YXRpYyB2b2lk
IGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKLSAgICBTdHJpbmcgYXV0aGVudGljYXRp
b25IZWFkZXIgPSAiQmFzaWMgIiArIGJhc2U2NEVuY29kZShTdHJpbmcoY3JlZGVudGlhbC51c2Vy
KCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3b3JkKCkpLnV0ZjgoKSk7Ci0KLSAgICByZXF1ZXN0
LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlvbiwgYXV0aGVu
dGljYXRpb25IZWFkZXIpOworICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFk
ZXJOYW1lOjpBdXRob3JpemF0aW9uLCBjcmVkZW50aWFsLnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1
dGhvcml6YXRpb25IZWFkZXIoKSk7CiB9CiAKIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNv
dXJjZUhhbmRsZUludGVybmFsKCkKQEAgLTUyNCw3ICs1MjIsNyBAQCBzdGF0aWMgdm9pZCBlbXB0
eVBlcmZvcm0odm9pZCopCiB7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0
Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIExPRyhOZXR3
b3JrLCAiUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseTol
cyBzc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6JXUiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3Vy
Y2VIYW5kbGVDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw3ICszNjgsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxl
OjpyZXN0YXJ0UmVxdWVzdFdpdGhDCiAgICAgZC0+bV9jdXJsUmVxdWVzdC0+c3RhcnQoKTsKIH0K
IAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNv
dXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFy
PiYgZGF0YSkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hy
b25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0
b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBB
U1NFUlQoIXJlcXVlc3QuaXNFbXB0eSgpKTsKQEAgLTU2Miw5ICs1NjIsOSBAQCB2b2lkIFJlc291
cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKCkKIAogICAgICAgICAvLyBkaWRSZWNlaXZlUmVzcG9u
c2UgbWlnaHQgY2F1c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVkLgogICAgICAgICBpZiAoY2xp
ZW50KCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAgICBpZiAo
YmFzZTY0RGVjb2RlKGRhdGEsIG91dCwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpICYm
IG91dC5zaXplKCkgPiAwKQotICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQnVm
ZmVyKHRoaXMsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG91dC5kYXRhKCksIG91dC5zaXplKCkpLCBv
cmlnaW5hbFNpemUpOworICAgICAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29k
ZShkYXRhLCBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyk7Cisg
ICAgICAgICAgICBpZiAoZGVjb2RlZERhdGEgJiYgZGVjb2RlZERhdGEtPnNpemUoKSA+IDApCisg
ICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIodGhpcywgU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoZGVjb2RlZERhdGEtPmRhdGEoKSwgZGVjb2RlZERhdGEtPnNpemUoKSksIG9y
aWdpbmFsU2l6ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBUZXh0RW5jb2Rp
bmcgZW5jb2RpbmcoY2hhcnNldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5k
bGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTY3LDkgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIAogc3RhdGljIHZvaWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogewot
ICAgIFN0cmluZyBhdXRoZW50aWNhdGlvbkhlYWRlciA9ICJCYXNpYyAiICsgYmFzZTY0RW5jb2Rl
KFN0cmluZyhjcmVkZW50aWFsLnVzZXIoKSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKSku
dXRmOCgpKTsKLQotICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1l
OjpBdXRob3JpemF0aW9uLCBhdXRoZW50aWNhdGlvbkhlYWRlcik7CisgICAgcmVxdWVzdC5zZXRI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGNyZWRlbnRpYWwu
c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpKTsKIH0KIAogc3RhdGlj
IE5TT3BlcmF0aW9uUXVldWUgKm9wZXJhdGlvblF1ZXVlRm9yQXN5bmNDbGllbnRzKCkKQEAgLTM1
Miw3ICszNTAsNyBAQCBDRlN0cmluZ1JlZiBSZXNvdXJjZUhhbmRsZTo6c3luY2hyb25vdXNMCiAg
ICAgcmV0dXJuIENGU1RSKCJXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJSdW5Mb29wTW9kZSIpOwog
fQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJl
c291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNo
YXI+JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBMT0coTmV0d29yaywgIlJlc291cmNlSGFuZGxl
OjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHk6JUAgc3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3k6JXUiLCByZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9O
b3RVcGRhdGVIVFRQQm9keSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdG9yZWRDcmVkZW50aWFs
c1BvbGljeSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VIYW5kbGVTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAkocmV2aXNpb24gMjc3NTY5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFJlc291cmNl
SGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRl
bnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjxj
aGFyPiYpCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0
b3I8dWludDhfdD4mKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBO
ZXR3b3JrU2Vzc2lvbi5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw3ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGRpZ2VzdC0+YWRkQnl0ZXMoY2Vy
dGlmaWNhdGVEYXRhLT5kYXRhLCBjZXJ0aWZpY2F0ZURhdGEtPmxlbik7CiAKICAgICAgICAgYXV0
byBoYXNoID0gZGlnZXN0LT5jb21wdXRlSGFzaCgpOwotICAgICAgICByZXR1cm4gYmFzZTY0RW5j
b2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGhhc2guZGF0YSgpKSwgaGFzaC5zaXpl
KCkpOworICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaCk7CiAgICAgfQog
CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fY2VydGlmaWNhdGVzOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2Fw
ZVNlcXVlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTEgKzE1NCwxMSBAQCBTdHJpbmcg
ZGVjb2RlRXNjYXBlU2VxdWVuY2VzKFN0cmluZ1ZpZXcgCiAgICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOwogfQogCi1pbmxpbmUgVmVjdG9yPGNoYXI+IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNl
c0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykK
K2lubGluZSBWZWN0b3I8dWludDhfdD4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKFN0
cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewogICAgIEFT
U0VSVChlbmNvZGluZy5pc1ZhbGlkKCkpOwogCi0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAg
ICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwogICAgIHNpemVfdCBkZWNvZGVkUG9zaXRpb24gPSAw
OwogICAgIHNpemVfdCBzZWFyY2hQb3NpdGlvbiA9IDA7CiAgICAgd2hpbGUgKHRydWUpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVv
dGVkUHJpbnRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBzdGF0aWMg
Y29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gCiAKIHN0YXRpYyBjb25zdCBjaGFyIGNy
bGZMaW5lRW5kaW5nW10gPSAiXHJcbiI7CiAKLXN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5k
aW5nQXRJbmRleChjb25zdCBjaGFyKiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoLCBzaXplX3Qg
aW5kZXgpCitzdGF0aWMgc2l6ZV90IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoY29uc3QgdWlu
dDhfdCogaW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCwgc2l6ZV90IGluZGV4KQogewogICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgaW5wdXRMZW5ndGgpOwogICAg
IGlmIChpbnB1dFtpbmRleF0gPT0gJ1xuJykKQEAgLTU1LDE5ICs1NSwxOSBAQCBzdGF0aWMgc2l6
ZV90IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg
cXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFZlY3RvcjxjaGFy
PiYgb3V0KQorVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0
b3I8dWludDhfdD4mIGlucHV0KQogewotICAgIHF1b3RlZFByaW50YWJsZUVuY29kZShpbi5kYXRh
KCksIGluLnNpemUoKSwgb3V0KTsKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVFbmNv
ZGUoY29uc3QgY2hhciogaW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCwgVmVjdG9yPGNoYXI+JiBv
dXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3Qq
IGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgpCiB7Ci0gICAgb3V0LmNsZWFyKCk7Ci0gICAgb3V0
LnJlc2VydmVDYXBhY2l0eShpbnB1dExlbmd0aCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dDsK
KyAgICBvdXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnB1dExlbmd0aCk7CiAgICAgc2l6ZV90
IGN1cnJlbnRMaW5lTGVuZ3RoID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlucHV0
TGVuZ3RoOyArK2kpIHsKICAgICAgICAgYm9vbCBpc0xhc3RDaGFyYWN0ZXIgPSAoaSA9PSBpbnB1
dExlbmd0aCAtIDEpOwotICAgICAgICBjaGFyIGN1cnJlbnRDaGFyYWN0ZXIgPSBpbnB1dFtpXTsK
KyAgICAgICAgdWludDhfdCBjdXJyZW50Q2hhcmFjdGVyID0gaW5wdXRbaV07CiAgICAgICAgIGJv
b2wgcmVxdWlyZXNFbmNvZGluZyA9IGZhbHNlOwogICAgICAgICAvLyBBbGwgbm9uLXByaW50YWJs
ZSBBU0NJSSBjaGFyYWN0ZXJzIGFuZCA9IHJlcXVpcmUgZW5jb2RpbmcuCiAgICAgICAgIGlmICgo
Y3VycmVudENoYXJhY3RlciA8ICcgJyB8fCBjdXJyZW50Q2hhcmFjdGVyID4gJ34nIHx8IGN1cnJl
bnRDaGFyYWN0ZXIgPT0gJz0nKSAmJiBjdXJyZW50Q2hhcmFjdGVyICE9ICdcdCcpCkBAIC0xMTIs
MTggKzExMiwyMCBAQCB2b2lkIHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBjaGFyKiBpCiAg
ICAgICAgICAgICBjdXJyZW50TGluZUxlbmd0aCsrOwogICAgICAgICB9CiAgICAgfQorCisgICAg
cmV0dXJuIG91dDsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9y
PGNoYXI+JiBpbiwgVmVjdG9yPGNoYXI+JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCiB7Ci0gICAgcXVvdGVk
UHJpbnRhYmxlRGVjb2RlKGluLmRhdGEoKSwgaW4uc2l6ZSgpLCBvdXQpOworICAgIHJldHVybiBx
dW90ZWRQcmludGFibGVEZWNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwogfQogCi12
b2lkIHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxl
bmd0aCwgVmVjdG9yPGNoYXI+JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxl
RGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQogewotICAgIG91
dC5jbGVhcigpOworICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CiAgICAgaWYgKCFkYXRhTGVuZ3Ro
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBvdXQ7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkgewogICAgICAgICBjaGFyIGN1cnJlbnRDaGFy
YWN0ZXIgPSBkYXRhW2ldOwpAQCAtMTQ5LDggKzE1MSw5IEBAIHZvaWQgcXVvdGVkUHJpbnRhYmxl
RGVjb2RlKGNvbnN0IGNoYXIqIGQKICAgICAgICAgICAgIG91dC5hcHBlbmQobG93ZXJDaGFyYWN0
ZXIpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgb3V0LmFwcGVu
ZChzdGF0aWNfY2FzdDxjaGFyPih0b0FTQ0lJSGV4VmFsdWUodXBwZXJDaGFyYWN0ZXIsIGxvd2Vy
Q2hhcmFjdGVyKSkpOworICAgICAgICBvdXQuYXBwZW5kKHRvQVNDSUlIZXhWYWx1ZSh1cHBlckNo
YXJhY3RlciwgbG93ZXJDaGFyYWN0ZXIpKTsKICAgICB9CisgICAgcmV0dXJuIG91dDsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJs
ZS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1
b3RlZFByaW50YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxOSArMjgsMTYgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBRdW90ZWRQcmludGFibGVfaAotI2RlZmluZSBRdW90
ZWRQcmludGFibGVfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0
IFZlY3RvcjxjaGFyPiYsIFZlY3RvcjxjaGFyPiYpOwotdm9pZCBxdW90ZWRQcmludGFibGVFbmNv
ZGUoY29uc3QgY2hhciosIHNpemVfdCwgVmVjdG9yPGNoYXI+Jik7CitWZWN0b3I8dWludDhfdD4g
cXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworVmVjdG9yPHVp
bnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIAot
dm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgVmVjdG9yPGNo
YXI+Jik7Ci12b2lkIHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90LCBW
ZWN0b3I8Y2hhcj4mKTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVj
b2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBRdW90ZWRQcmludGFibGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MCw4ICs4MCw4IEBAIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRD
aGFsbGVuZ2VTdHJpbmcKICAgICAgICAgaWYgKCFDcnlwdFNpZ25BbmRFbmNvZGVDZXJ0aWZpY2F0
ZShoQ29udGV4dCwgQVRfS0VZRVhDSEFOR0UsIFg1MDlfQVNOX0VOQ09ESU5HLCBYNTA5X0tFWUdF
Tl9SRVFVRVNUX1RPX0JFX1NJR05FRCwgJnJlcXVlc3RJbmZvLCAmc2lnbkFsZ28sIDAsIHJlaW50
ZXJwcmV0X2Nhc3Q8TFBCWVRFPihiaW5hcnkuZGF0YSgpKSwgJmR3RW5jb2RlZExlbmd0aCkpCiAg
ICAgICAgICAgICBicmVhazsKIAotICAgICAgICBrZXlTdHJpbmcgPSBiYXNlNjRFbmNvZGUoYmlu
YXJ5KTsKLSAgICB9IHdoaWxlKDApOworICAgICAgICBrZXlTdHJpbmcgPSBiYXNlNjRFbmNvZGVU
b1N0cmluZyhiaW5hcnkpOworICAgIH0gd2hpbGUgKDApOwogCiAgICAgaWYgKHBQdWJJbmZvKQog
ICAgICAgICBmYXN0RnJlZShwUHViSW5mbyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2Uvc2VydmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NX
U2NyaXB0U3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgU3RyaW5n
IFNXU2NyaXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgUwogICAgIGF1dG8gaW5wdXRVdGY4ID0g
aW5wdXQudXRmOCgpOwogICAgIGNyeXB0by0+YWRkQnl0ZXMoaW5wdXRVdGY4LmRhdGEoKSwgaW5w
dXRVdGY4Lmxlbmd0aCgpKTsKICAgICBhdXRvIGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7
Ci0gICAgcmV0dXJuIFdURjo6YmFzZTY0VVJMRW5jb2RlKGhhc2guZGF0YSgpLCBoYXNoLnNpemUo
KSk7CisgICAgcmV0dXJuIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgpLCBoYXNo
LnNpemUoKSk7CiB9CiAKIFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNvbnN0IFVS
TCYgaW5wdXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NzE1KQorKysgU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5OSBAQAorMjAyMS0w
NS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEJh
c2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVu
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChXS1BhZ2VT
ZXRQYWdlTmF2aWdhdGlvbkNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViVVJMU2NoZW1lVGFzazo6ZGlkQ29tcGxldGUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJVUkxTY2hlbWVUYXNrLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxv
YWRlclN0cmF0ZWd5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTG9hZGVyU3RyYXRlZ3k6Omxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9X
ZWJMb2FkZXJTdHJhdGVneS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxT
Y2hlbWVIYW5kbGVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVIYW5k
bGVyUHJveHk6OmxvYWRTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5Lmg6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgdWlu
dDhfdCogZGF0YSBidWZmZXJzIG1vcmUgY29uc2lzdGVudGx5IGZvciBzeW5jaHJvbm91cyBsb2Fk
cy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OnNlbmRSZXBseVRvU3luY2hyb25vdXNSZXF1ZXN0KToKKyAgICAg
ICAgVXBkYXRlIHRvIHVzZSB1aW50OF90KiBkYXRhIGJ1ZmZlcnMgbW9yZSBjb25zaXN0ZW50bHkg
Zm9yIHN5bmNocm9ub3VzIGxvYWRzLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpmaXJlQ29udmVyc2lvblJlcXVlc3QpOgorICAgICAgICBV
cGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBtYWtlU3RyaW5nKGJhc2U2NFVSTEVu
Y29kZWQoKSkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRh
c2tDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6YXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFk
ZXIpOgorICAgICAgICBVc2UgbmV3IHNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25I
ZWFkZXIoKSBoZWxwZXIuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQSURhdGEuaDoKKyAgICAg
ICAgKEFQSTo6RGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEFQSTo6RGF0YTo6ZmFzdEZyZWVCeXRl
cyk6IERlbGV0ZWQuCisgICAgICAgIEFkZCBuZXcgY3JlYXRlIGZ1bmN0aW9uIHRoYXQgdGFrZXMg
b3duZXJzaGlwIG9mIGEgVmVjdG9yJ3MgYnVmZmVyIHJhdGhlcgorICAgICAgICB0aGFuIGNvcHlp
bmcgaXQuIFJlcGxhY2UgdXNlIG9mIHN0YXRpYyBmdW5jdGlvbnMgd2l0aCBpbmxpbmUgbGFtYmRh
cyBmb3IKKyAgICAgICAgZnJlZS1mdW5jdGlvbnMuCisKKyAgICAgICAgKiBTaGFyZWQvbWFjL0F1
eGlsaWFyeVByb2Nlc3NNYWMubW06CisgICAgICAgIChXZWJLaXQ6OnNhbmRib3hGaWxlUGF0aCk6
CisgICAgICAgIFVzZSBtYWtlU3RyaW5nIGFuZCBuZXcgYmFzZTY0VVJMRW5jb2RlZCgpLgorCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1t
OgorICAgICAgICAocHJvZHVjZUNsaWVudERhdGFKc29uKToKKyAgICAgICAgVXNlIG5ldyBtYWtl
U3RyaW5nKGJhc2U2NFVSTEVuY29kZWQoKSkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21h
dGlvbi9jYWlyby9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6YmFzZTY0RW5jb2RlZFBOR0RhdGEpOgorICAgICAgICBVc2UgbmV3IG1ha2VTdHJpbmcoYmFz
ZTY0RW5jb2RlZCgpKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3Rh
dGUubW06CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVu
dDo6d2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgVXNlIG5ldyBkZWZhdWx0V2ViQ3J5cHRv
TWFzdGVyS2V5KCkgYW5kIG5ldyBhZG9wdGluZyBBUEk6OkRhdGE6OmNyZWF0ZSBmdW5jdGlvbi4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGll
bnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tl
bmRDb21tYW5kcyk6CisgICAgICAgIFVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKCkp
LgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHk6OnBsYXRmb3JtU2F2ZSk6CisgICAgICAgIFVzZSBuZXcgYmFzZTY0RGVjb2RlKCkuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToK
KyAgICAgICAgVXNlIG5ldyBiYXNlNjREZWNvZGUoKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9J
bnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW06CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6CisgICAgICAg
IFVzZSBuZXcgYmFzZTY0RGVjb2RlKCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9y
L21hYy9XZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUpOgorICAgICAgICBVc2UgbmV3IGJhc2U2NERlY29k
ZSgpLgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpz
ZXRCYWNrZW5kQ29tbWFuZHMpOgorICAgICAgICBVc2UgbmV3IG1ha2VTdHJpbmcoYmFzZTY0RW5j
b2RlZCgpKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9M
b2NhbEF1dGhlbnRpY2F0b3IubW06CisgICAgICAgIChXZWJLaXQ6OkxvY2FsQXV0aGVudGljYXRv
ckludGVybmFsOjpwcm9kdWNlSGFzaFNldCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsQXV0aGVu
dGljYXRvcjo6bWFrZUNyZWRlbnRpYWwpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhlbnRp
Y2F0b3I6OmdldEFzc2VydGlvbik6CisgICAgICAgIFVzZSBuZXcgbWFrZVN0cmluZyhiYXNlNjRF
bmNvZGVkKCkpLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2sv
TW9ja0hpZENvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpNb2NrSGlkQ29ubmVjdGlv
bjo6ZmVlZFJlcG9ydHMpOgorICAgICAgICBVc2UgbmV3IGJhc2U2NERlY29kZSgpLgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlv
bi5tbToKKyAgICAgICAgKFdlYktpdDo6TW9ja0xvY2FsQ29ubmVjdGlvbjo6ZmlsdGVyUmVzcG9u
c2VzIGNvbnN0KToKKyAgICAgICAgVXNlIG5ldyBtYWtlU3RyaW5nKGJhc2U2NEVuY29kZWQoKSku
CisKIDIwMjEtMDUtMTggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgYWxsb3dzQ29udGVudEphdmFTY3JpcHQgQVBJIG5vdCBhcHBsaWVkIGZyb20gZGVm
YXVsdFdlYnBhZ2VQcmVmZXJlbmNlcwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiBtZXNzYWdlcyAtPiBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAKICAgICBTY2hlZHVsZVJlc291cmNlTG9h
ZChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIHJlc291cmNlTG9hZFBhcmFt
ZXRlcnMpCi0gICAgUGVyZm9ybVN5bmNocm9ub3VzTG9hZChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJj
ZUxvYWRQYXJhbWV0ZXJzIHJlc291cmNlTG9hZFBhcmFtZXRlcnMpIC0+IChXZWJDb3JlOjpSZXNv
dXJjZUVycm9yIGVycm9yLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBWZWN0
b3I8Y2hhcj4gZGF0YSkgU3luY2hyb25vdXMKKyAgICBQZXJmb3JtU3luY2hyb25vdXNMb2FkKFdl
YktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVy
cykgLT4gKFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwogICAgIFRl
c3RQcm9jZXNzSW5jb21pbmdTeW5jTWVzc2FnZXNXaGVuV2FpdGluZ0ZvclN5bmNSZXBseShXZWJL
aXQ6OldlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlEKSAtPiAoYm9vbCBoYW5kbGVkKSBTeW5j
aHJvbm91cwogICAgIExvYWRQaW5nKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykKICAgICBSZW1vdmVMb2FkSWRlbnRpZmllcih1aW50
NjRfdCByZXNvdXJjZUxvYWRJZGVudGlmaWVyKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHN0YXRpYyB2b2lkIHNl
bmRSZXBseVRvU3luY2hyb25vdXNSZXF1ZXMKICAgICBBU1NFUlQoZGF0YS5kZWxheWVkUmVwbHkp
OwogICAgIEFTU0VSVCghZGF0YS5yZXNwb25zZS5pc051bGwoKSB8fCAhZGF0YS5lcnJvci5pc051
bGwoKSk7CiAKLSAgICBWZWN0b3I8Y2hhcj4gcmVzcG9uc2VCdWZmZXI7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHJlc3BvbnNlQnVmZmVyOwogICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5zaXplKCkp
CiAgICAgICAgIHJlc3BvbnNlQnVmZmVyLmFwcGVuZChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5z
aXplKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlj
a01lYXN1cmVtZW50TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1
cmVtZW50TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSwxNCArMzE1LDE1IEBAIHZv
aWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpmaXIKICAgICAgICAgaWYgKCF3ZWFr
VGhpcykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBWZWN0b3I8dWludDhfdD4gcHVi
bGljS2V5RGF0YTsKLSAgICAgICAgV1RGOjpiYXNlNjRVUkxEZWNvZGUocHVibGljS2V5QmFzZTY0
VVJMLCBwdWJsaWNLZXlEYXRhKTsKKyAgICAgICAgYXV0byBwdWJsaWNLZXlEYXRhID0gYmFzZTY0
VVJMRGVjb2RlKHB1YmxpY0tleUJhc2U2NFVSTCk7CisgICAgICAgIGlmICghcHVibGljS2V5RGF0
YSkKKyAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBhdXRvIGNyeXB0byA9IFBBTDo6Q3J5
cHRvRGlnZXN0OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7
Ci0gICAgICAgIGNyeXB0by0+YWRkQnl0ZXMocHVibGljS2V5RGF0YS5kYXRhKCksIHB1YmxpY0tl
eURhdGEuc2l6ZSgpKTsKKyAgICAgICAgY3J5cHRvLT5hZGRCeXRlcyhwdWJsaWNLZXlEYXRhLT5k
YXRhKCksIHB1YmxpY0tleURhdGEtPnNpemUoKSk7CiAgICAgICAgIGF1dG8gcHVibGljS2V5RGF0
YUhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CiAKLSAgICAgICAgYXV0byBrZXlJRCA9IFdU
Rjo6YmFzZTY0VVJMRW5jb2RlKHB1YmxpY0tleURhdGFIYXNoLmRhdGEoKSwgcHVibGljS2V5RGF0
YUhhc2guc2l6ZSgpKTsKKyAgICAgICAgYXV0byBrZXlJRCA9IGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKHB1YmxpY0tleURhdGFIYXNoLmRhdGEoKSwgcHVibGljS2V5RGF0YUhhc2guc2l6ZSgpKTsK
ICAgICAgICAgaWYgKGtleUlEICE9IGF0dHJpYnV0aW9uLnNvdXJjZVVubGlua2FibGVUb2tlbigp
LT5rZXlJREJhc2U2NFVSTCkKICAgICAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFz
a0NvY29hLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4
ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogI2lmIFVTRShDUkVERU5USUFMX1NUT1JBR0Vf
V0lUSF9ORVRXT1JLX1NFU1NJT04pCiBzdGF0aWMgdm9pZCBhcHBseUJhc2ljQXV0aG9yaXphdGlv
bkhlYWRlcihXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6
OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7Ci0gICAgU3RyaW5nIGF1dGhlbnRpY2F0aW9uSGVh
ZGVyID0gIkJhc2ljICIgKyBiYXNlNjRFbmNvZGUoU3RyaW5nKGNyZWRlbnRpYWwudXNlcigpICsg
IjoiICsgY3JlZGVudGlhbC5wYXNzd29yZCgpKS51dGY4KCkpOwotICAgIHJlcXVlc3Quc2V0SFRU
UEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uLCBhdXRo
ZW50aWNhdGlvbkhlYWRlcik7CisgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoV2ViQ29y
ZTo6SFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGNyZWRlbnRpYWwuc2VyaWFsaXphdGlv
bkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL0FQSS9BUElEYXRhLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL0FQSS9BUElEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDEwIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIG1lbWNweShjb3BpZWRCeXRlcywgYnl0ZXMsIHNpemUpOwog
ICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVdpdGhvdXRDb3B5aW5nKGNvcGllZEJ5
dGVzLCBzaXplLCBmYXN0RnJlZUJ5dGVzLCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZVdpdGhvdXRDb3B5aW5nKGNvcGllZEJ5dGVzLCBzaXplLCBbXSAodW5zaWduZWQgY2hhciogYnl0
ZXMsIGNvbnN0IHZvaWQqKSB7CisgICAgICAgICAgICBpZiAoYnl0ZXMpCisgICAgICAgICAgICAg
ICAgZmFzdEZyZWUoc3RhdGljX2Nhc3Q8dm9pZCo+KGJ5dGVzKSk7CisgICAgICAgIH0sIG51bGxw
dHIpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgUmVmPERhdGE+IGNyZWF0ZShjb25zdCBWZWN0
b3I8dW5zaWduZWQgY2hhcj4mIGJ1ZmZlcikKQEAgLTY4LDYgKzcxLDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKICAgICB9
CiAKKyAgICBzdGF0aWMgUmVmPERhdGE+IGNyZWF0ZShWZWN0b3I8dW5zaWduZWQgY2hhcj4mJiBi
dWZmZXIpCisgICAgeworICAgICAgICBhdXRvIGJ1ZmZlclNpemUgPSBidWZmZXIuc2l6ZSgpOwor
ICAgICAgICBhdXRvIGJ1ZmZlclBvaW50ZXIgPSBidWZmZXIucmVsZWFzZUJ1ZmZlcigpLmxlYWtQ
dHIoKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVdpdGhvdXRDb3B5aW5nKGJ1ZmZlclBvaW50ZXIs
IGJ1ZmZlclNpemUsIFtdICh1bnNpZ25lZCBjaGFyKiBieXRlcywgY29uc3Qgdm9pZCopIHsKKyAg
ICAgICAgICAgIGlmIChieXRlcykKKyAgICAgICAgICAgICAgICBXVEY6OlZlY3Rvck1hbGxvYzo6
ZnJlZShieXRlcyk7CisgICAgICAgIH0sIG51bGxwdHIpOworICAgIH0KKwogICAgIHN0YXRpYyBS
ZWZQdHI8RGF0YT4gY3JlYXRlKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOwogICAgIAogI2lm
IFBMQVRGT1JNKENPQ09BKQpAQCAtOTYsMTIgKzEwOSw2IEBAIHByaXZhdGU6CiAgICAgewogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGZhc3RGcmVlQnl0ZXModW5zaWduZWQgY2hhciogYnl0ZXMs
IGNvbnN0IHZvaWQqKQotICAgIHsKLSAgICAgICAgaWYgKGJ5dGVzKQotICAgICAgICAgICAgZmFz
dEZyZWUoc3RhdGljX2Nhc3Q8dm9pZCo+KGJ5dGVzKSk7Ci0gICAgfQotCiAgICAgY29uc3QgdW5z
aWduZWQgY2hhciogbV9ieXRlcyB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vz
c01hYy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1
eGlsaWFyeVByb2Nlc3NNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxNSwxOCArMzE1LDEzIEBA
IHN0YXRpYyBTdHJpbmcgc2FuZGJveERpcmVjdG9yeShXZWJDb3JlOjoKIAogc3RhdGljIFN0cmlu
ZyBzYW5kYm94RmlsZVBhdGgoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoLCBjb25zdCBDU3Ry
aW5nJiBoZWFkZXIpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBzYW5kYm94RmlsZTsKLSAgICBzYW5k
Ym94RmlsZS5hcHBlbmQoZGlyZWN0b3J5UGF0aCk7Ci0gICAgc2FuZGJveEZpbGUuYXBwZW5kKCIv
Q29tcGlsZWRTYW5kYm94KyIpOwotCiAgICAgLy8gTWFrZSB0aGUgZmlsZW5hbWUgc2VtaS11bmlx
dWUgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mIHRoZSBoZWFkZXIuCisKICAgICBhdXRvIGNyeXB0
byA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRo
bTo6U0hBXzI1Nik7CiAgICAgY3J5cHRvLT5hZGRCeXRlcyhoZWFkZXIuZGF0YSgpLCBoZWFkZXIu
bGVuZ3RoKCkpOwotICAgIFZlY3Rvcjx1aW50OF90PiBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFz
aCgpOwotICAgIFN0cmluZyByZWFkYWJsZUhhc2ggPSBXVEY6OmJhc2U2NFVSTEVuY29kZShoYXNo
LmRhdGEoKSwgaGFzaC5zaXplKCkpOworICAgIGF1dG8gaGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhh
c2goKTsKIAotICAgIHNhbmRib3hGaWxlLmFwcGVuZChyZWFkYWJsZUhhc2gpOwotICAgIHJldHVy
biBzYW5kYm94RmlsZS50b1N0cmluZygpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGRpcmVjdG9y
eVBhdGgsICIvQ29tcGlsZWRTYW5kYm94KyIsIGJhc2U2NFVSTEVuY29kZWQoaGFzaC5kYXRhKCks
IGhhc2guc2l6ZSgpKSk7CiB9CiAKIHN0YXRpYyBib29sIGVuc3VyZVNhbmRib3hDYWNoZURpcmVj
dG9yeShjb25zdCBTYW5kYm94SW5mbyYgaW5mbykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtNTIwLDcgKzUyMCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAK
ICAgICBTdGFydFVSTFNjaGVtZVRhc2soc3RydWN0IFdlYktpdDo6VVJMU2NoZW1lVGFza1BhcmFt
ZXRlcnMgcGFyYW1ldGVycykKICAgICBTdG9wVVJMU2NoZW1lVGFzayh1aW50NjRfdCBoYW5kbGVy
SWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpCi0gICAgTG9hZFN5bmNocm9ub3Vz
VVJMU2NoZW1lVGFzayhzdHJ1Y3QgV2ViS2l0OjpVUkxTY2hlbWVUYXNrUGFyYW1ldGVycyBwYXJh
bWV0ZXJzKSAtPiAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSwgV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciBlcnJvciwgVmVjdG9yPGNoYXI+IGRhdGEpIFN5bmNocm9ub3VzCisgICAg
TG9hZFN5bmNocm9ub3VzVVJMU2NoZW1lVGFzayhzdHJ1Y3QgV2ViS2l0OjpVUkxTY2hlbWVUYXNr
UGFyYW1ldGVycyBwYXJhbWV0ZXJzKSAtPiAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNw
b25zZSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgVmVjdG9yPHVpbnQ4X3Q+IGRhdGEp
IFN5bmNocm9ub3VzCiAKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgIFNob3Vs
ZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoV2ViQ29yZTo6RnJhbWVJZGVu
dGlmaWVyIGZyYW1lSUQsIHN0cnVjdCBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgZnJhbWVJbmZvLCBi
b29sIG1heVByb21wdCkgLT4gKGVudW06dWludDhfdCBXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlv
bk9yTW90aW9uUGVybWlzc2lvblN0YXRlIHBlcm1pc3Npb25TdGF0ZSkgQXN5bmMKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmgJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBzdHJ1Y3QgVVJMU2NoZW1lVGFza1Bh
cmFtZXRlcnM7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiBjbGFzcyBXZWJQcm9jZXNzUHJveHk7CiAK
LXVzaW5nIFN5bmNMb2FkQ29tcGxldGlvbkhhbmRsZXIgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yJiwgY29uc3QgVmVjdG9yPGNoYXI+Jik+OwordXNpbmcgU3luY0xvYWRDb21wbGV0aW9u
SGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mKT47CiAKIGNsYXNzIFdlYlVSTFNjaGVtZUhhbmRsZXIgOiBwdWJsaWMgUmVmQ291bnRl
ZDxXZWJVUkxTY2hlbWVIYW5kbGVyPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVVJM
U2NoZW1lSGFuZGxlcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hl
bWVUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxT
Y2hlbWVUYXNrLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViVVJMU2NoZW1lVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiwxMCArMjEyLDEw
IEBAIGF1dG8gV2ViVVJMU2NoZW1lVGFzazo6ZGlkQ29tcGxldGUoY29uc3QKICAgICBtX2NvbXBs
ZXRlZCA9IHRydWU7CiAgICAgCiAgICAgaWYgKGlzU3luYygpKSB7Ci0gICAgICAgIFZlY3Rvcjxj
aGFyPiBkYXRhOworICAgICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICAgICAgaWYgKG1f
c3luY0RhdGEpIHsKICAgICAgICAgICAgIGRhdGEucmVzaXplKG1fc3luY0RhdGEtPnNpemUoKSk7
Ci0gICAgICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KG1fc3luY0RhdGEtPmRhdGEoKSksIG1fc3luY0RhdGEtPnNpemUoKSk7CisgICAgICAg
ICAgICBtZW1jcHkoZGF0YS5kYXRhKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KG1fc3luY0RhdGEtPmRhdGEoKSksIG1fc3luY0RhdGEtPnNpemUoKSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBtX3N5bmNDb21wbGV0aW9uSGFuZGxlcihtX3N5bmNSZXNwb25zZSwgZXJyb3IsIFdU
Rk1vdmUoZGF0YSkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1l
VGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVt
ZVRhc2suaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
VVJMU2NoZW1lVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHN0cnVjdCBV
UkxTY2hlbWVUYXNrUGFyYW1ldGVyczsKIGNsYXNzIFdlYlVSTFNjaGVtZUhhbmRsZXI7CiBjbGFz
cyBXZWJQYWdlUHJveHk7CiAKLXVzaW5nIFN5bmNMb2FkQ29tcGxldGlvbkhhbmRsZXIgPSBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgVmVjdG9yPGNoYXI+Jik+OwordXNpbmcg
U3luY0xvYWRDb21wbGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3Im
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mKT47CiAKIGNsYXNzIFdlYlVSTFNjaGVtZVRhc2sgOiBw
dWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpVUkxTY2hlbWVUYXNrPiwg
cHVibGljIEluc3RhbmNlQ291bnRlZDxXZWJVUkxTY2hlbWVUYXNrPiB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoV2ViVVJMU2NoZW1lVGFzayk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMzgsMTMgKzIz
MzgsMTQgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudChXS1BhZwogICAgICAg
ICAgICAgaWYgKG1fY2xpZW50LmNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKHRvSW1wbChtX2NsaWVudC5jb3B5V2ViQ3J5cHRvTWFzdGVyS2V5
KHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSkpOwogCi0gICAgICAgICAg
ICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogI2lmIEVOQUJMRShXRUJfQ1JZUFRPKQotICAg
ICAgICAgICAgaWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkpCisg
ICAgICAgICAgICBhdXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsK
KyAgICAgICAgICAgIGlmICghbWFzdGVyS2V5KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKFdURk1vdmUoKm1hc3Rl
cktleSkpOworI2Vsc2UKKyAgICAgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShudWxs
cHRyLCAwKTsKICNlbmRpZgotCi0gICAgICAgICAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUo
bWFzdGVyS2V5LmRhdGEoKSwgbWFzdGVyS2V5LnNpemUoKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBSZWZQdHI8QVBJOjpTdHJpbmc+IHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhX
ZWJQYWdlUHJveHkmIHBhZ2UsIHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgUmVmUHRyPEFQ
STo6U3RyaW5nPiYgY2hhbGxlbmdlU3RyaW5nLCBjb25zdCBVUkwmIHVybCkgb3ZlcnJpZGUKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TRGF0
YT4gcHJvZHVjZUNsaWVudERhCiAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpAIndlYmF1
dGhuLmdldCIgZm9yS2V5OkAidHlwZSJdOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgW2Rp
Y3Rpb25hcnkgc2V0T2JqZWN0OldURjo6YmFzZTY0VVJMRW5jb2RlKGNoYWxsZW5nZS5ieXRlcywg
Y2hhbGxlbmdlLmxlbmd0aCkgZm9yS2V5OkAiY2hhbGxlbmdlIl07CisgICAgW2RpY3Rpb25hcnkg
c2V0T2JqZWN0OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNoYWxsZW5nZS5ieXRlcywgY2hhbGxl
bmdlLmxlbmd0aCkgZm9yS2V5OkAiY2hhbGxlbmdlIl07CiAgICAgW2RpY3Rpb25hcnkgc2V0T2Jq
ZWN0Om9yaWdpbiBmb3JLZXk6QCJvcmlnaW4iXTsKIAogICAgIHJldHVybiBbTlNKU09OU2VyaWFs
aXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6ZGljdGlvbmFyeS5nZXQoKSBvcHRpb25zOk5TSlNP
TldyaXRpbmdTb3J0ZWRLZXlzIGVycm9yOm5pbF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2ViQXV0
b21hdGlvblNlc3Npb25DYWlyby5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2ViQXV0b21hdGlvblNlc3Npb25DYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIE9wdGlvbmFsPFN0cmlu
Zz4gYmFzZTY0RW5jb2RlZFBORwogICAgIGlmIChwbmdEYXRhLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBiYXNlNjRFbmNvZGUocG5nRGF0YSk7
CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKHBuZ0RhdGEpOwogfQogCiBPcHRpb25h
bDxTdHJpbmc+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwbGF0Zm9ybUdldEJhc2U2NEVuY29kZWRQ
TkdEYXRhKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9u
U3RhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTExMzUsMTEgKzExMzUsMTEgQEAgUmVmUHRyPEFQ
STo6RGF0YT4gTmF2aWdhdGlvblN0YXRlOjpOYXZpZwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJDcnlwdG9NYXN0ZXJLZXlGb3JXZWJWaWV3KSB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90
PiBtYXN0ZXJLZXk7Ci0gICAgICAgIGlmICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSht
YXN0ZXJLZXkpKQorICAgICAgICBhdXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJDcnlwdG9NYXN0
ZXJLZXkoKTsKKyAgICAgICAgaWYgKCFtYXN0ZXJLZXkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgICAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUobWFzdGVyS2V5LmRhdGEo
KSwgbWFzdGVyS2V5LnNpemUoKSk7CisgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShX
VEZNb3ZlKCptYXN0ZXJLZXkpKTsKICAgICB9CiAKICAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0
ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDEzICsxOTQsMTEgQEAgdm9pZCBSZW1vdGVJbnNw
ZWN0b3JDbGllbnQ6OnNldHVwQ29ubmVjdAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
dEJhY2tlbmRDb21tYW5kcyhjb25zdCBjaGFyKiBiYWNrZW5kQ29tbWFuZHMpCiB7CiAgICAgaWYg
KCFiYWNrZW5kQ29tbWFuZHMgfHwgIWJhY2tlbmRDb21tYW5kc1swXSkgewotICAgICAgICBtX2Jh
Y2tlbmRDb21tYW5kc1VSTCA9IFN0cmluZygpOworICAgICAgICBtX2JhY2tlbmRDb21tYW5kc1VS
TCA9IHsgfTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZlY3RvcjxjaGFyPiBiYXNl
NjREYXRhOwotICAgIGJhc2U2NEVuY29kZShiYWNrZW5kQ29tbWFuZHMsIHN0cmxlbihiYWNrZW5k
Q29tbWFuZHMpLCBiYXNlNjREYXRhKTsKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9ICJkYXRh
OnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgbV9iYWNrZW5kQ29t
bWFuZHNVUkwgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiwgYmFz
ZTY0RW5jb2RlZChiYWNrZW5kQ29tbWFuZHMsIHN0cmxlbihiYWNrZW5kQ29tbWFuZHMpKSk7CiB9
CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpjb25uZWN0aW9uRGlkQ2xvc2UoKQpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHlHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMTYgKzEzOSwx
OCBAQCB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtCiAgICAgaWYgKGd0
a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAhPSBH
VEtfUkVTUE9OU0VfQUNDRVBUKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8Y2hhcj4g
ZGF0YVZlY3RvcjsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcjsKICAgICBDU3RyaW5n
IGRhdGFTdHJpbmc7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgaWYgKCFiYXNl
NjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAg
ICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50LCBCYXNlNjREZWNv
ZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICBpZiAoIWRlY29kZWREYXRhKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkYXRhVmVjdG9yLnNocmlua1RvRml0KCk7Cisg
ICAgICAgIGRlY29kZWREYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgICAgICBkYXRhVmVjdG9yID0g
V1RGTW92ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxzZQogICAgICAgICBkYXRhU3RyaW5nID0g
Y29udGVudC51dGY4KCk7CiAKLSAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNO
dWxsKCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOworICAgIGNvbnN0
IGNoYXIqIGRhdGEgPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcuZGF0YSgpIDog
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YVZlY3Rvci5kYXRhKCkpOwogICAgIHNpemVfdCBk
YXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgpIDog
ZGF0YVZlY3Rvci5zaXplKCk7CiAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihn
dGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKICAgICBHVW5pcXVlUHRyPGNoYXI+
IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0
b3JVSVByb3h5R3RrLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTM4LDE2ICs1MzgsMTggQEAgdm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybVNhdmUoYwogICAgIGlmIChndGtfbmF0aXZlX2RpYWxvZ19ydW4oR1RLX05BVElWRV9ESUFM
T0coZGlhbG9nLmdldCgpKSkgIT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRh
dGFWZWN0b3I7CiAgICAgQ1N0cmluZyBkYXRhU3RyaW5nOwogICAgIGlmIChiYXNlNjRFbmNvZGVk
KSB7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2
NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNv
ZGUoY29udGVudCwgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKTsKKyAgICAg
ICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YVZl
Y3Rvci5zaHJpbmtUb0ZpdCgpOworICAgICAgICBkZWNvZGVkRGF0YS0+c2hyaW5rVG9GaXQoKTsK
KyAgICAgICAgZGF0YVZlY3RvciA9IFdURk1vdmUoKmRlY29kZWREYXRhKTsKICAgICB9IGVsc2UK
ICAgICAgICAgZGF0YVN0cmluZyA9IGNvbnRlbnQudXRmOCgpOwogCi0gICAgY29uc3QgY2hhciog
ZGF0YSA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiBkYXRhVmVj
dG9yLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkg
PyBkYXRhU3RyaW5nLmRhdGEoKSA6IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGFWZWN0b3Iu
ZGF0YSgpKTsKICAgICBzaXplX3QgZGF0YUxlbmd0aCA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8g
ZGF0YVN0cmluZy5sZW5ndGgoKSA6IGRhdGFWZWN0b3Iuc2l6ZSgpOwogICAgIEdSZWZQdHI8R0Zp
bGU+IGZpbGUgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZShjaG9vc2VyKSk7
CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYklu
c3BlY3RvclVJUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCShyZXZpc2lv
biAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90
ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMCArMTc0
LDEwIEBAIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm0KICAgICAgICAg
bV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJM
KTsKIAogICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICAgICAgVmVjdG9yPGNo
YXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQs
IEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICBhdXRvIGRlY29kZWREYXRhID0g
YmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBh
ZGRpbmcpOworICAgICAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0
TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0LnNp
emUoKV0pOworICAgICAgICAgICAgYXV0byBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEg
YWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGVjb2RlZERhdGEtPmRhdGEoKSBsZW5ndGg6ZGVjb2RlZERh
dGEtPnNpemUoKV0pOwogICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0dWFs
VVJMIGF0b21pY2FsbHk6WUVTXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbY29udGVu
dENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4
U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSVByb3h5
TWFjLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUw
OSwxMCArNTA5LDEwIEBAIHZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKGMK
ICAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwg
YWN0dWFsVVJMKTsKIAogICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICAgICAg
VmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRD
b3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICBhdXRvIGRlY29k
ZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBCYXNlNjREZWNvZGVPcHRpb25zOjpW
YWxpZGF0ZVBhZGRpbmcpOworICAgICAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVu
dCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5n
dGg6b3V0LnNpemUoKV0pOworICAgICAgICAgICAgYXV0byBkYXRhQ29udGVudCA9IGFkb3B0TlMo
W1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGVjb2RlZERhdGEtPmRhdGEoKSBsZW5ndGg6
ZGVjb2RlZERhdGEtPnNpemUoKV0pOwogICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9V
Ukw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1v
dGVJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVu
dDo6c2V0QmFja2VuZENvCiAgICAgaWYgKCFldmVudC5tZXNzYWdlIHx8IGV2ZW50Lm1lc3NhZ2Ut
PmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwg
PSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2Rl
KGV2ZW50Lm1lc3NhZ2UtPnV0ZjgoKSkpOworICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gbWFr
ZVN0cmluZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoZXZl
bnQubWVzc2FnZS0+dXRmOCgpKSk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpz
ZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50JiBldmVudCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2Nv
YS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5t
bQkod29ya2luZyBjb3B5KQpAQCAtODIsMTAgKzgyLDggQEAgc3RhdGljIGlubGluZSBIYXNoU2V0
PFN0cmluZz4gcHJvZHVjZUhhcwogewogICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CiAgICAg
Zm9yIChhdXRvJiBjcmVkZW50aWFsRGVzY3JpcHRvciA6IGNyZWRlbnRpYWxEZXNjcmlwdG9ycykg
ewotICAgICAgICBpZiAoZW1wdHlUcmFuc3BvcnRzT3JDb250YWluKGNyZWRlbnRpYWxEZXNjcmlw
dG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKQotICAgICAg
ICAgICAgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IudHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFs
VHlwZTo6UHVibGljS2V5Ci0gICAgICAgICAgICAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZl
Y3Rvci5zaXplKCkgPT0gY3JlZGVudGlhbElkTGVuZ3RoKQotICAgICAgICAgICAgcmVzdWx0LmFk
ZChiYXNlNjRFbmNvZGUoY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3IuZGF0YSgpLCBjcmVk
ZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkpKTsKKyAgICAgICAgaWYgKGVtcHR5VHJh
bnNwb3J0c09yQ29udGFpbihjcmVkZW50aWFsRGVzY3JpcHRvci50cmFuc3BvcnRzLCBBdXRoZW50
aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IudHlwZSA9
PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5ICYmIGNyZWRlbnRpYWxEZXNjcmlw
dG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCisgICAgICAgICAgICBy
ZXN1bHQuYWRkKGJhc2U2NEVuY29kZVRvU3RyaW5nKGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVj
dG9yLmRhdGEoKSwgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgpKSk7CiAgICAg
fQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yNDEsNyArMjM5LDcgQEAgdm9pZCBMb2NhbEF1
dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKAogICAgICAgICBpZiAobm90Rm91bmQgIT0gbV9l
eGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRNYXRjaGluZyhbJmV4Y2x1ZGVDcmVkZW50aWFsSWRzXSAo
YXV0byYgY3JlZGVudGlhbCkgewogICAgICAgICAgICAgYXV0byogcmF3SWQgPSBjcmVkZW50aWFs
LT5yYXdJZCgpOwogICAgICAgICAgICAgQVNTRVJUKHJhd0lkKTsKLSAgICAgICAgICAgIHJldHVy
biBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGUocmF3SWQtPmRhdGEo
KSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVk
ZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5kYXRhKCksIHJh
d0lkLT5ieXRlTGVuZ3RoKCkpKTsKICAgICAgICAgfSkpIHsKICAgICAgICAgICAgIHJlY2VpdmVF
eGNlcHRpb24oeyBOb3RBbGxvd2VkRXJyb3IsICJBdCBsZWFzdCBvbmUgY3JlZGVudGlhbCBtYXRj
aGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVudGlhbHMgbGlzdCBpbiB0aGUgcGxhdGZv
cm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4iX3MgfSwgV2ViQXV0aGVudGljYXRpb25TdGF0dXM6
OkxBRXhjbHVkZUNyZWRlbnRpYWxzTWF0Y2hlZCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01
MTgsNyArNTE2LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCiAg
ICAgICAgIH0KIAogICAgICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7Ci0g
ICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlKHJhd0lk
LT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKSkKKyAgICAgICAgaWYgKGFsbG93Q3JlZGVu
dGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJ
ZC0+Ynl0ZUxlbmd0aCgpKSkpCiAgICAgICAgICAgICBhc3NlcnRpb25SZXNwb25zZXMudW5jaGVj
a2VkQXBwZW5kKGNyZWRlbnRpYWwuY29weVJlZigpKTsKICAgICB9CiAgICAgaWYgKGFzc2VydGlv
blJlc3BvbnNlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0hpZENv
bm5lY3Rpb24uY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tIaWRDb25uZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYxLDE1ICsyNjEsMTMgQEAgdm9pZCBNb2NrSGlkQ29ubmVjdGlvbjo6ZmVlZFJl
cG9ydHMoKQogICAgICAgICBpZiAoc3RhZ2VzTWF0Y2goKSAmJiBtX2NvbmZpZ3VyYXRpb24uaGlk
LT5lcnJvciA9PSBNb2NrOjpIaWRFcnJvcjo6VW5zdXBwb3J0ZWRPcHRpb25zICYmIChtX3JlcXVp
cmVSZXNpZGVudEtleSB8fCBtX3JlcXVpcmVVc2VyVmVyaWZpY2F0aW9uKSkKICAgICAgICAgICAg
IG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9I
aWREZXZpY2VDb21tYW5kOjprQ2JvciwgeyBzdGF0aWNfY2FzdDx1aW50OF90PihDdGFwRGV2aWNl
UmVzcG9uc2VDb2RlOjprQ3RhcDJFcnJVbnN1cHBvcnRlZE9wdGlvbikgfSk7CiAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHBheWxvYWQ7CiAgICAgICAgICAgICBB
U1NFUlQoIW1fY29uZmlndXJhdGlvbi5oaWQtPnBheWxvYWRCYXNlNjQuaXNFbXB0eSgpKTsKLSAg
ICAgICAgICAgIGF1dG8gc3RhdHVzID0gYmFzZTY0RGVjb2RlKG1fY29uZmlndXJhdGlvbi5oaWQt
PnBheWxvYWRCYXNlNjRbMF0sIHBheWxvYWQpOworICAgICAgICAgICAgYXV0byBwYXlsb2FkID0g
YmFzZTY0RGVjb2RlKG1fY29uZmlndXJhdGlvbi5oaWQtPnBheWxvYWRCYXNlNjRbMF0pOwogICAg
ICAgICAgICAgbV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NC5yZW1vdmUoMCk7Ci0g
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN0YXR1cywgc3RhdHVzKTsKICAgICAgICAgICAgIGlm
ICghbV9jb25maWd1cmF0aW9uLmhpZC0+aXNVMmYpCi0gICAgICAgICAgICAgICAgbWVzc2FnZSA9
IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNv
bW1hbmQ6OmtDYm9yLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hp
ZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6
a0Nib3IsIFdURk1vdmUoKnBheWxvYWQpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBG
aWRvSGlkRGV2aWNlQ29tbWFuZDo6a01zZywgcGF5bG9hZCk7CisgICAgICAgICAgICAgICAgbWVz
c2FnZSA9IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hpZERl
dmljZUNvbW1hbmQ6OmtNc2csIFdURk1vdmUoKnBheWxvYWQpKTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9N
b2NrTG9jYWxDb25uZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
TW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYy
LDcgQEAgdm9pZCBNb2NrTG9jYWxDb25uZWN0aW9uOjpmaWx0ZXJSZXNwb25zZQogICAgIGZvciAo
OyBpdHIgIT0gcmVzcG9uc2VzLmVuZCgpOyArK2l0cikgewogICAgICAgICBhdXRvKiByYXdJZCA9
IGl0ci0+Z2V0KCkucmF3SWQoKTsKICAgICAgICAgQVNTRVJUKHJhd0lkKTsKLSAgICAgICAgYXV0
byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZShyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxl
bmd0aCgpKTsKKyAgICAgICAgYXV0byByYXdJZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5n
KHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpOwogICAgICAgICBpZiAocmF3SWRC
YXNlNjQgPT0gcHJlZmVycmVkQ3JlZGVudGlhbElkQmFzZTY0KQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVy
U3RyYXRlZ3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NzgsNyArNTc4LDcgQEAgT3B0aW9uYWw8V2ViTG9hZGVyU3RyYXRlZ3k6OlN5bmNM
b2FkUmVzdQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgV2ViTG9hZGVyU3RyYXRlZ3k6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyLCB1bnNp
Z25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9saWN5LCAg
Y29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBvcmlnaW5h
bFJlcXVlc3RIZWFkZXJzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgV2ViTG9hZGVyU3RyYXRlZ3k6Omxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyLCB1bnNpZ25l
ZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9saWN5LCAgY29u
c3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBvcmlnaW5hbFJl
cXVlc3RIZWFkZXJzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBhdXRvKiB3ZWJGcmFtZUxvYWRl
ckNsaWVudCA9IHRvV2ViRnJhbWVMb2FkZXJDbGllbnQoZnJhbWVMb2FkZXIuY2xpZW50KCkpOwog
ICAgIGF1dG8qIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyAmd2ViRnJhbWVMb2Fk
ZXJDbGllbnQtPndlYkZyYW1lKCkgOiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5oCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJh
dGVneS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB+V2Vi
TG9hZGVyU3RyYXRlZ3koKSBmaW5hbDsKICAgICAKICAgICB2b2lkIGxvYWRSZXNvdXJjZShXZWJD
b3JlOjpGcmFtZSYsIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlJiwgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZGVyT3B0aW9ucyYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoUmVmUHRyPFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyPiYmKT4mJikg
ZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6OkZyYW1l
TG9hZGVyJiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBj
b25zdCBXZWJDb3JlOjpGZXRjaE9wdGlvbnMmLCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFw
JiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBW
ZWN0b3I8Y2hhcj4mIGRhdGEpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25v
dXNseShXZWJDb3JlOjpGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRl
bnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50
Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgV2ViQ29yZTo6RmV0Y2hPcHRpb25zJiwgY29uc3QgV2Vi
Q29yZTo6SFRUUEhlYWRlck1hcCYsIFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSBmaW5hbDsKICAgICB2b2lk
IHBhZ2VMb2FkQ29tcGxldGVkKFdlYkNvcmU6OlBhZ2UmKSBmaW5hbDsKICAgICB2b2lkIGJyb3dz
aW5nQ29udGV4dFJlbW92ZWQoV2ViQ29yZTo6RnJhbWUmKSBmaW5hbDsKIApAQCAtMTAxLDcgKzEw
MSw3IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IFN5bmNMb2FkUmVzdWx0IHsKICAgICAgICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKICAgICAgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciBlcnJvcjsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBkYXRhOwogICAgIH07CiAgICAgT3B0aW9uYWw8U3luY0xvYWRSZXN1bHQ+IHRy
eUxvYWRpbmdTeW5jaHJvbm91c2x5VXNpbmdVUkxTY2hlbWVIYW5kbGVyKFdlYkNvcmU6OkZyYW1l
TG9hZGVyJiwgUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0Jik7CiAgICAgU3luY0xvYWRSZXN1bHQgbG9hZERhdGFVUkxTeW5jaHJvbm91c2x5KGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJv
eHkuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw3IEBAIHZvaWQgV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5OjpzdGFydE5ld1QKICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zdGFydExvYWRpbmcoKTsKIH0KIAotdm9pZCBXZWJVUkxT
Y2hlbWVIYW5kbGVyUHJveHk6OmxvYWRTeW5jaHJvbm91c2x5KFJlc291cmNlTG9hZElkZW50aWZp
ZXIgbG9hZElkZW50aWZpZXIsIFdlYkZyYW1lJiB3ZWJGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVzb3VyY2VFcnJvciYg
ZXJyb3IsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5
Ojpsb2FkU3luY2hyb25vdXNseShSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGxvYWRJZGVudGlmaWVy
LCBXZWJGcmFtZSYgd2ViRnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291cmNlRXJyb3ImIGVycm9yLCBWZWN0b3I8dWlu
dDhfdD4mIGRhdGEpCiB7CiAgICAgZGF0YS5zaHJpbmsoMCk7CiAgICAgaWYgKCFtX3dlYlBhZ2Uu
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TG9hZFN5bmNocm9ub3VzVVJMU2NoZW1l
VGFzayhVUkxTY2hlbWVUYXNrUGFyYW1ldGVycyB7IG1faWRlbnRpZmllciwgbG9hZElkZW50aWZp
ZXIsIHJlcXVlc3QsIHdlYkZyYW1lLmluZm8oKSB9KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
TG9hZFN5bmNocm9ub3VzVVJMU2NoZW1lVGFzazo6UmVwbHkocmVzcG9uc2UsIGVycm9yLCBkYXRh
KSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVt
ZUhhbmRsZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFy
dE5ld1Rhc2soV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXImLCBXZWJGcmFtZSYpOwogICAgIHZvaWQg
c3RvcEFsbFRhc2tzKCk7CiAKLSAgICB2b2lkIGxvYWRTeW5jaHJvbm91c2x5KFJlc291cmNlTG9h
ZElkZW50aWZpZXIsIFdlYkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBWZWN0
b3I8Y2hhcj4mKTsKKyAgICB2b2lkIGxvYWRTeW5jaHJvbm91c2x5KFJlc291cmNlTG9hZElkZW50
aWZpZXIsIFdlYkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYsIFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBWZWN0b3I8dWlu
dDhfdD4mKTsKIAogICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lk
ZW50aWZpZXI7IH0KICAgICBXZWJQYWdlJiBwYWdlKCkgeyByZXR1cm4gbV93ZWJQYWdlOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktp
dExlZ2FjeS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0w
NS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEJh
c2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVu
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6CisgICAgICAg
IFVwZGF0ZSB0byBtYXRjaCBuZXcgc2lnbmF0dXJlLiBjaGFyIC0+IHVpbnQ4X3QuCisKIDIwMjEt
MDUtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUg
RmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoKSB0byBGaWxlU3lzdGVtOjpmaWxlU2l6ZSgpCkluZGV4
OiBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVk
dWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9y
dC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6bG9hZFJlc291CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiBmcmFtZUxv
YWRlciwgdW5zaWduZWQgbG9uZywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGll
bnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBGZXRjaE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IEhU
VFBIZWFkZXJNYXAmLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciwgdW5z
aWduZWQgbG9uZywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGllbnRDcmVkZW50
aWFsUG9saWN5LCBjb25zdCBGZXRjaE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IEhUVFBIZWFkZXJN
YXAmLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShmcmFtZUxvYWRlci5uZXR3b3JraW5nQ29udGV4dCgpLCByZXF1ZXN0LCBv
cHRpb25zLmNyZWRlbnRpYWxzID09IEZldGNoT3B0aW9uczo6Q3JlZGVudGlhbHM6Ok9taXQgPyBT
dG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2UgOiBTdG9yZWRDcmVkZW50aWFsc1BvbGlj
eTo6VXNlLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwogfQpJbmRleDogU291cmNlL1dlYktpdExl
Z2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNj
aGVkdWxlci5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNv
cmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKIAog
ICAgIHZvaWQgbG9hZFJlc291cmNlKFdlYkNvcmU6OkZyYW1lJiwgV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2UmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkZXJPcHRpb25zJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8V2ViQ29yZTo6
U3VicmVzb3VyY2VMb2FkZXI+JiYpPiYmKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25nLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5
LCBjb25zdCBXZWJDb3JlOjpGZXRjaE9wdGlvbnMmLCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVy
TWFwJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
LCBWZWN0b3I8Y2hhcj4mKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBsb25nLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBX
ZWJDb3JlOjpGZXRjaE9wdGlvbnMmLCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiwgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8
dWludDhfdD4mKSBmaW5hbDsKICAgICB2b2lkIHBhZ2VMb2FkQ29tcGxldGVkKFdlYkNvcmU6OlBh
Z2UmKSBmaW5hbDsKICAgICB2b2lkIGJyb3dzaW5nQ29udGV4dFJlbW92ZWQoV2ViQ29yZTo6RnJh
bWUmKSBmaW5hbDsKIApJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdG8gbWF0
Y2ggbW9yZSBtb2Rlcm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5tbToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6d3JhcENyeXB0b0tleSBjb25zdCk6Cisg
ICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnVud3JhcENyeXB0b0tleSBjb25zdCk6CisgICAgICAg
IFVwZGF0ZSB0byB1c2UgbmV3IE9wdGlvbmFsIHJldHVybmluZyBkZWZhdWx0V2ViQ3J5cHRvTWFz
dGVyS2V5KCkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQu
bW06CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2F2ZSk6CisgICAgICAg
IFVwZGF0ZSB0byB1c2UgbmV3IE9wdGlvbmFsIHJldHVybmluZyBiYXNlNjREZWNvZGUoKS4KKwog
MjAyMS0wNS0xNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBE
ZWxldGUgV2ViU1FMIGNvZGUgZnJvbSBXZWJLaXQyCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNjYsMjggKzEwNjYsMzQg
QEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsU2NyZWVuRm9yRQogCiBib29sIFdlYkNo
cm9tZUNsaWVudDo6d3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgVmVj
dG9yPHVpbnQ4X3Q+JiB3cmFwcGVkS2V5KSBjb25zdAogewotICAgIFZlY3Rvcjx1aW50OF90PiBt
YXN0ZXJLZXk7CiAgICAgU0VMIHNlbGVjdG9yID0gQHNlbGVjdG9yKHdlYkNyeXB0b01hc3Rlcktl
eUZvcldlYlZpZXc6KTsKICAgICBpZiAoW1ttX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNU
b1NlbGVjdG9yOnNlbGVjdG9yXSkgewogICAgICAgICBOU0RhdGEgKmtleURhdGEgPSBDYWxsVUlE
ZWxlZ2F0ZShtX3dlYlZpZXcsIHNlbGVjdG9yKTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1h
c3RlcktleTsKICAgICAgICAgbWFzdGVyS2V5LmFwcGVuZChzdGF0aWNfY2FzdDx1aW50OF90Kj4o
Y29uc3RfY2FzdDx2b2lkKj4oW2tleURhdGEgYnl0ZXNdKSksIFtrZXlEYXRhIGxlbmd0aF0pOwot
ICAgIH0gZWxzZSBpZiAoIWdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkK
KyAgICAgICAgcmV0dXJuIHdyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwga2V5LCB3
cmFwcGVkS2V5KTsKKyAgICB9CisgICAgCisgICAgYXV0byBtYXN0ZXJLZXkgPSBkZWZhdWx0V2Vi
Q3J5cHRvTWFzdGVyS2V5KCk7CisgICAgaWYgKCFtYXN0ZXJLZXkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB3cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIGtl
eSwgd3JhcHBlZEtleSk7CisgICAgcmV0dXJuIHdyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KFdURk1v
dmUoKm1hc3RlcktleSksIGtleSwgd3JhcHBlZEtleSk7CiB9CiAKIGJvb2wgV2ViQ2hyb21lQ2xp
ZW50Ojp1bndyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB3cmFwcGVkS2V5LCBW
ZWN0b3I8dWludDhfdD4mIGtleSkgY29uc3QKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVy
S2V5OwogICAgIFNFTCBzZWxlY3RvciA9IEBzZWxlY3Rvcih3ZWJDcnlwdG9NYXN0ZXJLZXlGb3JX
ZWJWaWV3Oik7CiAgICAgaWYgKFtbbV93ZWJWaWV3IFVJRGVsZWdhdGVdIHJlc3BvbmRzVG9TZWxl
Y3RvcjpzZWxlY3Rvcl0pIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICAg
ICAgICAgTlNEYXRhICprZXlEYXRhID0gQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBzZWxlY3Rv
cik7CiAgICAgICAgIG1hc3RlcktleS5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGNvbnN0
X2Nhc3Q8dm9pZCo+KFtrZXlEYXRhIGJ5dGVzXSkpLCBba2V5RGF0YSBsZW5ndGhdKTsKLSAgICB9
IGVsc2UgaWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9L
ZXkobWFzdGVyS2V5LCB3cmFwcGVkS2V5LCBrZXkpOworICAgIH0KIAotICAgIHJldHVybiB1bndy
YXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwgd3JhcHBlZEtleSwga2V5KTsKKyAgICBh
dXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBpZiAoIW1h
c3RlcktleSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB1bndyYXBTZXJpYWxp
emVkQ3J5cHRvS2V5KFdURk1vdmUoKm1hc3RlcktleSksIHdyYXBwZWRLZXksIGtleSk7CiB9CiAK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xp
ZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MDgsMTAgKzQwOCwxMCBAQCB2b2lkIFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpzYXZlKGNvCiAgICAgICAgIG1fc3VnZ2VzdGVkVG9BY3R1YWxV
UkxNYXAuc2V0KHN1Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVSTCk7CiAKICAgICAgICAgaWYgKGJh
c2U2NEVuY29kZWQpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAg
ICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRp
bmcpKQorICAgICAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50
LCBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICAgICAgaWYg
KCFkZWNvZGVkRGF0YSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBSZXRh
aW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRX
aXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0LnNpemUoKV0pOworICAgICAgICAgICAgUmV0
YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0
V2l0aEJ5dGVzOmRlY29kZWREYXRhLT5kYXRhKCkgbGVuZ3RoOmRlY29kZWREYXRhLT5zaXplKCld
KTsKICAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNh
bGx5OllFU107CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRl
VG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nIGVycm9yOk5VTExdOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NzE1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWlu
aWdAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2Rpbmcg
dG8gbWF0Y2ggbW9yZSBtb2Rlcm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdG8gdXNlIHVwZGF0ZWQgYmFz
ZTY0IGFuZCBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkgcmVsYXRlZAorICAgICAgICBmdW5j
dGlvbnMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHA6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OnN0YXJ0U2VjdXJlQ29ubmVjdGlvbik6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OnRlc3RDZXJ0aWZpY2F0ZSk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OnRlc3RQcml2YXRlS2V5KToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2Nv
YS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Nl
cmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9G
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5t
bToKKyAgICAgICAgKHRlc3RJZGVudGl0eTIpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvRXZlbnRBdHRyaWJ1dGlvbi5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdlbmVy
YXRvci5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
Q29ubmVjdGlvbjo6d2ViU29ja2V0SGFuZHNoYWtlKToKKwogMjAyMS0wNS0xOCAgUm9iaW4gTW9y
aXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgQWlyQWxsb2NhdGVS
ZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcgdXNlIGxlc3MgbWVtb3J5CkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1RDUFNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UQ1BTZXJ2ZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1RDUFNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw5ICsxNTUsOCBAQCB2b2lkIFRD
UFNlcnZlcjo6c3RhcnRTZWN1cmVDb25uZWN0aW9uKFNvCiAgICAgImxkWTlhdmNUR1N3YndvaXVJ
cXYwalRMMWZIRm56eTNSSE1MRGgrTHB2b2xjNURTclNKSENQNVd1SzBlZUpYaHIiCiAgICAgIlQ1
b1FwSEw5ei9jQ0RMQUtDS1JhNHVWMGZoRWRPV0JxeVI5cDh5NWpKdHllNzJ0NkN1RlVWNWlxY3BG
NEJINGYiCiAgICAgImoyVk5Id3NTckp3a0Q0UVVHbFV0SDd2d25RbXlDRnhaTW1XQUpnPT0iKTsK
LSAgICBWZWN0b3I8dWludDhfdD4gY2VydERFUjsKLSAgICBiYXNlNjREZWNvZGUoY2VydFBFTSwg
Y2VydERFUiwgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsKLSAgICBz
c2w6OnVuaXF1ZV9wdHI8Q1JZUFRPX0JVRkZFUj4gY2VydChDUllQVE9fQlVGRkVSX25ldyhjZXJ0
REVSLmRhdGEoKSwgY2VydERFUi5zaXplKCksIG51bGxwdHIpKTsKKyAgICBhdXRvIGNlcnRERVIg
PSBiYXNlNjREZWNvZGUoY2VydFBFTSk7CisgICAgc3NsOjp1bmlxdWVfcHRyPENSWVBUT19CVUZG
RVI+IGNlcnQoQ1JZUFRPX0JVRkZFUl9uZXcoY2VydERFUi0+ZGF0YSgpLCBjZXJ0REVSLT5zaXpl
KCksIG51bGxwdHIpKTsKICAgICBBU1NFUlQoY2VydCk7CiAKICAgICAvLyBUaGlzIGlzIGEgdGVz
dCBrZXkgZnJvbSBCb3JpbmdTU0wuCkBAIC00MTIsOSArNDExLDggQEAgVmVjdG9yPHVpbnQ4X3Q+
IFRDUFNlcnZlcjo6dGVzdENlcnRpZmljYQogICAgICJHM1BGblliVzh1ckgwTlNKRy9XKy85REEr
WTdBYTBjczRUUHB1QkdaME5VMVc5NE9vQ01vNGxrTzZIL3k2TGV1IgogICAgICIzdmpaRDN5OWta
azdtcmU5WEh3a0k4TWRLNXM9Iik7CiAgICAgCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsK
LSAgICBiYXNlNjREZWNvZGUocGVtRW5jb2RlZENlcnRpZmljYXRlLCB2ZWN0b3IsIFdURjo6QmFz
ZTY0RGVjb2RlT3B0aW9uczo6QmFzZTY0RGVmYXVsdCk7Ci0gICAgcmV0dXJuIHZlY3RvcjsKKyAg
ICBhdXRvIGRlY29kZWRDZXJ0aWZpY2F0ZSA9IGJhc2U2NERlY29kZShwZW1FbmNvZGVkQ2VydGlm
aWNhdGUpOworICAgIHJldHVybiBXVEZNb3ZlKCpkZWNvZGVkQ2VydGlmaWNhdGUpOwogfQogCiBW
ZWN0b3I8dWludDhfdD4gVENQU2VydmVyOjp0ZXN0UHJpdmF0ZUtleSgpCkBAIC00NzEsOSArNDY5
LDggQEAgVmVjdG9yPHVpbnQ4X3Q+IFRDUFNlcnZlcjo6dGVzdFByaXZhdGVLZQogICAgICJkRU9i
dmNwU2hQMjJJdE9WalNhbXBSdUF1UkcyNlplbUViR0NJM0o2TXF4M3k2bSs2SHd1bHRzZ3RkekRn
ckZlIgogICAgICJxSmZVOGJiZGJ1MnBpNDdZNEZkSkswSExmZmw1Unc9PSIpOwogCi0gICAgVmVj
dG9yPHVpbnQ4X3Q+IHZlY3RvcjsKLSAgICBiYXNlNjREZWNvZGUocGVtRW5jb2RlZFByaXZhdGVL
ZXksIHZlY3RvciwgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsKLSAg
ICByZXR1cm4gdmVjdG9yOworICAgIGF1dG8gZGVjb2RlZFByaXZhdGVLZXkgPSBiYXNlNjREZWNv
ZGUocGVtRW5jb2RlZFByaXZhdGVLZXkpOworICAgIHJldHVybiBXVEZNb3ZlKCpkZWNvZGVkUHJp
dmF0ZUtleSk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDExICs0MiwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciogYmFz
ZTY0RW5jb2RlZFNpbmZXaXRoCiAKIFRFU1QoSVNPQm94LCBJU09Qcm90ZWN0aW9uU2NoZW1lSW5m
b0JveCkKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gc2luZkFycmF5OwotICAgIEFTU0VSVF9UUlVF
KGJhc2U2NERlY29kZShTdHJpbmdWaWV3KGJhc2U2NEVuY29kZWRTaW5mV2l0aEtleUlEMyksIHNp
bmZBcnJheSkpOwotICAgIEFTU0VSVF9FUSg5N1VMLCBzaW5mQXJyYXkuc2l6ZSgpKTsKKyAgICBh
dXRvIHNpbmZBcnJheSA9IGJhc2U2NERlY29kZShTdHJpbmdWaWV3KGJhc2U2NEVuY29kZWRTaW5m
V2l0aEtleUlEMykpOworICAgIEFTU0VSVF9UUlVFKHNpbmZBcnJheSk7CisgICAgQVNTRVJUX0VR
KDk3VUwsIHNpbmZBcnJheS0+c2l6ZSgpKTsKIAotICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZp
ZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKHNpbmZBcnJheS5kYXRhKCksIHNpbmZBcnJh
eS5zaXplKCkpLCAwLCBzaW5mQXJyYXkuc2l6ZSgpKTsKKyAgICBhdXRvIHZpZXcgPSBKU0M6OkRh
dGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShzaW5mQXJyYXktPmRhdGEoKSwgc2lu
ZkFycmF5LT5zaXplKCkpLCAwLCBzaW5mQXJyYXktPnNpemUoKSk7CiAKICAgICBJU09Qcm90ZWN0
aW9uU2NoZW1lSW5mb0JveCBzaW5mQm94OwogICAgIEFTU0VSVF9UUlVFKHNpbmZCb3gucmVhZCh2
aWV3KSk7CkBAIC03OCwxMSArNzgsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGJhc2U2NEVuY29k
ZWRQc3NoV2l0aAogCiBURVNUKElTT0JveCwgSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94KQog
ewotICAgIFZlY3Rvcjx1aW50OF90PiBwc3NoQXJyYXk7Ci0gICAgQVNTRVJUX1RSVUUoYmFzZTY0
RGVjb2RlKFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2RlZFBzc2hXaXRoQXNzZXRJZCksIHBzc2hBcnJh
eSkpOwotICAgIEFTU0VSVF9FUSgxNzZVTCwgcHNzaEFycmF5LnNpemUoKSk7CisgICAgYXV0byBw
c3NoQXJyYXkgPSBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNvZGVkUHNzaFdpdGhB
c3NldElkKSk7CisgICAgQVNTRVJUX1RSVUUocHNzaEFycmF5KTsKKyAgICBBU1NFUlRfRVEoMTc2
VUwsIHBzc2hBcnJheS0+c2l6ZSgpKTsKIAotICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6
OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKHBzc2hBcnJheS5kYXRhKCksIHBzc2hBcnJheS5z
aXplKCkpLCAwLCBwc3NoQXJyYXkuc2l6ZSgpKTsKKyAgICBhdXRvIHZpZXcgPSBKU0M6OkRhdGFW
aWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShwc3NoQXJyYXktPmRhdGEoKSwgcHNzaEFy
cmF5LT5zaXplKCkpLCAwLCBwc3NoQXJyYXktPnNpemUoKSk7CiAKICAgICBJU09GYWlyUGxheVN0
cmVhbWluZ1Bzc2hCb3ggcHNzaEJveDsKIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1ByaXZhdGVDbGlj
a01lYXN1cmVtZW50Q29jb2EubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIFRFU1QoUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQsIFZhbGlkQmxpbmQKICAgICBhdXRvICpuc1Nwa2lEYXRhID0gKF9fYnJpZGdlIE5TRGF0
YSAqKXNwa2lEYXRhLmdldCgpOwogCiAgICAgLy8gQ29udGludWUgdGhlIHRlc3QuCi0gICAgRVhQ
RUNUX1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVVubGlua2FibGVUb2tlbihXVEY6
OmJhc2U2NFVSTEVuY29kZShuc1Nwa2lEYXRhLmJ5dGVzLCBuc1Nwa2lEYXRhLmxlbmd0aCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShwY20uY2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJsZVRv
a2VuKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKG5zU3BraURhdGEuYnl0ZXMsIG5zU3BraURhdGEu
bGVuZ3RoKSkpOwogICAgIGF1dG8gc291cmNlU2VjcmV0VG9rZW4gPSBwY20udG9rZW5TaWduYXR1
cmVKU09OKCk7CiAgICAgRVhQRUNUX0VRKHNvdXJjZVNlY3JldFRva2VuLT5hc09iamVjdCgpLT5z
aXplKCksIDR1bCk7CiAgICAgRVhQRUNUX1NUUkVRKHNvdXJjZVNlY3JldFRva2VuLT5nZXRTdHJp
bmcoInNvdXJjZV9lbmdhZ2VtZW50X3R5cGUiX3MpLnV0ZjgoKS5kYXRhKCksICJjbGljayIpOwpA
QCAtOTAsMTQgKzkwLDEzIEBAIFRFU1QoUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIFZhbGlkQmxp
bmQKICAgICBFWFBFQ1RfRVEoc291cmNlU2VjcmV0VG9rZW4tPmdldEludGVnZXIoInZlcnNpb24i
X3MpLCAyKTsKIAogICAgIC8vIEdlbmVyYXRlIHRoZSBzaWduYXR1cmUuCi0gICAgVmVjdG9yPHVp
bnQ4X3Q+IGJsaW5kZWRNZXNzYWdlOwotICAgIGJhc2U2NFVSTERlY29kZShzb3VyY2VTZWNyZXRU
b2tlbi0+Z2V0U3RyaW5nKCJzb3VyY2Vfc2VjcmV0X3Rva2VuIl9zKSwgYmxpbmRlZE1lc3NhZ2Up
OworICAgIGF1dG8gYmxpbmRlZE1lc3NhZ2UgPSBiYXNlNjRVUkxEZWNvZGUoc291cmNlU2VjcmV0
VG9rZW4tPmdldFN0cmluZygic291cmNlX3NlY3JldF90b2tlbiJfcykpOwogCi0gICAgYXV0byBi
bGluZGVkU2lnbmF0dXJlID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRXaXRo
TGVuZ3RoOiBtb2R1bHVzTkJ5dGVzXSk7Ci0gICAgY2Nyc2Fic3NhX3NpZ25fYmxpbmRlZF9tZXNz
YWdlKGNpcGhlcnN1aXRlLCByc2FQcml2YXRlS2V5LCBibGluZGVkTWVzc2FnZS5kYXRhKCksIGJs
aW5kZWRNZXNzYWdlLnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAqPihbYmxpbmRlZFNpZ25h
dHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSwgcm5nKTsKKyAg
ICBhdXRvIGJsaW5kZWRTaWduYXR1cmUgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10g
aW5pdFdpdGhMZW5ndGg6bW9kdWx1c05CeXRlc10pOworICAgIGNjcnNhYnNzYV9zaWduX2JsaW5k
ZWRfbWVzc2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJpdmF0ZUtleSwgYmxpbmRlZE1lc3NhZ2UtPmRh
dGEoKSwgYmxpbmRlZE1lc3NhZ2UtPnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAqPihbYmxp
bmRlZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSwg
cm5nKTsKIAogICAgIC8vIENvbnRpbnVlIHRoZSB0ZXN0LgotICAgIEVYUEVDVF9UUlVFKHBjbS5j
YWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VTZWNyZXRUb2tlbihXVEY6OmJhc2U2NFVSTEVuY29kZShb
YmxpbmRlZFNpZ25hdHVyZSBieXRlc10sIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0pKSk7Cisg
ICAgRVhQRUNUX1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVNlY3JldFRva2VuKGJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKFtibGluZGVkU2lnbmF0dXJlIGJ5dGVzXSwgW2JsaW5kZWRT
aWduYXR1cmUgbGVuZ3RoXSkpKTsKICAgICBhdXRvJiBwZXJzaXN0ZW50VG9rZW4gPSBwY20uc291
cmNlVW5saW5rYWJsZVRva2VuKCk7CiAgICAgRVhQRUNUX1RSVUUocGVyc2lzdGVudFRva2VuKTsK
ICAgICBFWFBFQ1RfRkFMU0UocGVyc2lzdGVudFRva2VuLT50b2tlbkJhc2U2NFVSTC5pc0VtcHR5
KCkpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Nlcmlh
bGl6ZWRDcnlwdG9LZXlXcmFwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9jb2NvYS9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5tbQkocmV2aXNpb24g
Mjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Nlcmlh
bGl6ZWRDcnlwdG9LZXlXcmFwLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NCwzNyArNDQsMzcgQEAg
cHVibGljOgogICAgIH0KIH07CiAKLVRFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFRlc3Qs
IEdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpCitURVNUX0YoU2VyaWFsaXplZENyeXB0b0tl
eVdyYXBUZXN0LCBEZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KQogewotICAgIFZlY3Rvcjx1aW50
OF90PiBtYXN0ZXJLZXkxOwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmdldERlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5MSkpOworICAgIGF1dG8gbWFzdGVyS2V5MSA9IFdlYkNv
cmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJL
ZXkxKTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXkyOwotICAgIEVYUEVDVF9UUlVF
KFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5MikpOworICAg
IGF1dG8gbWFzdGVyS2V5MiA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsK
KyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkyKTsKIAogICAgIEVYUEVDVF9UUlVFKG1hc3Rlcktl
eTEgPT0gbWFzdGVyS2V5Mik7CiB9CiAKIFRFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFRl
c3QsIERlbGV0ZURlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IG1hc3RlcktleTE7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNy
eXB0b01hc3RlcktleShtYXN0ZXJLZXkxKSk7CisgICAgYXV0byBtYXN0ZXJLZXkxID0gV2ViQ29y
ZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIEVYUEVDVF9UUlVFKG1hc3Rlcktl
eTEpOwogICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmRlbGV0ZURlZmF1bHRXZWJDcnlwdG9NYXN0
ZXJLZXkoKSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5MjsKLSAgICBFWFBFQ1Rf
VFJVRShXZWJDb3JlOjpnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleTIpKTsK
KyAgICBhdXRvIG1hc3RlcktleTIgPSBXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5
KCk7CisgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5Mik7CiAKICAgICBFWFBFQ1RfVFJVRShtYXN0
ZXJLZXkxICE9IG1hc3RlcktleTIpOwogfQogCiBURVNUX0YoU2VyaWFsaXplZENyeXB0b0tleVdy
YXBUZXN0LCBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFVud3JhcCkKIHsKLSAgICBWZWN0b3I8dWlu
dDhfdD4gbWFzdGVyS2V5OwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmdldERlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSk7CisgICAgYXV0byBtYXN0ZXJLZXkgPSBXZWJDb3Jl
OjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5
KTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBjcnlwdG9LZXkoMTYsIDEpOwogICAgIFZlY3Rvcjx1
aW50OF90PiB3cmFwcGVkS2V5OwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OndyYXBTZXJpYWxp
emVkQ3J5cHRvS2V5KG1hc3RlcktleSwgY3J5cHRvS2V5LCB3cmFwcGVkS2V5KSk7CisgICAgRVhQ
RUNUX1RSVUUoV2ViQ29yZTo6d3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoKm1hc3RlcktleSwgY3J5
cHRvS2V5LCB3cmFwcGVkS2V5KSk7CiAgICAgRVhQRUNUX1RSVUUoY3J5cHRvS2V5ICE9IHdyYXBw
ZWRLZXkpOwogICAgIC8vIGVuc3VyZSB3cmFwcGVkS2V5IGRvZXNuJ3QgY29udGFpbiBjcnlwdG9L
ZXkKICAgICBib29sIG5vdENvbnRhaW5lZCA9IHRydWU7CkBAIC05MCw3ICs5MCw3IEBAIFRFU1Rf
RihTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFRlc3QsIFNlcmkKICAgICBFWFBFQ1RfVFJVRShub3RD
b250YWluZWQpOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVud3JhcHBlZEtleTsKLSAgICBFWFBF
Q1RfVFJVRShXZWJDb3JlOjp1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwgd3Jh
cHBlZEtleSwgdW53cmFwcGVkS2V5KSk7CisgICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6dW53cmFw
U2VyaWFsaXplZENyeXB0b0tleSgqbWFzdGVyS2V5LCB3cmFwcGVkS2V5LCB1bndyYXBwZWRLZXkp
KTsKICAgICBFWFBFQ1RfVFJVRSh1bndyYXBwZWRLZXkgPT0gY3J5cHRvS2V5KTsKIH0KIApJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVu
Z2UubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvQ2hhbGxlbmdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTMgKzE3NiwxMCBA
QCBSZXRhaW5QdHI8U2VjSWRlbnRpdHlSZWY+IHRlc3RJZGVudGl0eTIoCiAgICAgIkpBSDJueEtH
dXF0QUsyaFdiQUN1NjFSVDVnQXFBdi9oQjlKWW5jMk9pUTJWbWpZa09rMkdFZElqbjB4U2dYN1ci
CiAgICAgIm1JL2hIYnhLTUczUmt2OXExQ3grV0IvdjF0OD0iKTsKIAotICAgIFZlY3Rvcjx1aW50
OF90PiBwcml2YXRlS2V5Qnl0ZXM7Ci0gICAgYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRQcml2YXRl
S2V5LCBwcml2YXRlS2V5Qnl0ZXMsIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6QmFzZTY0RGVm
YXVsdCk7CisgICAgYXV0byBwcml2YXRlS2V5Qnl0ZXMgPSBiYXNlNjREZWNvZGUocGVtRW5jb2Rl
ZFByaXZhdGVLZXkpOworICAgIGF1dG8gY2VydGlmaWNhdGVCeXRlcyA9IGJhc2U2NERlY29kZShw
ZW1FbmNvZGVkQ2VydGlmaWNhdGUpOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGNlcnRpZmljYXRl
Qnl0ZXM7Ci0gICAgYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSwgY2VydGlmaWNh
dGVCeXRlcywgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsKLQotICAg
IHJldHVybiBjcmVhdGVUZXN0SWRlbnRpdHkocHJpdmF0ZUtleUJ5dGVzLCBjZXJ0aWZpY2F0ZUJ5
dGVzKTsKKyAgICByZXR1cm4gY3JlYXRlVGVzdElkZW50aXR5KFdURk1vdmUoKnByaXZhdGVLZXlC
eXRlcyksIFdURk1vdmUoKmNlcnRpZmljYXRlQnl0ZXMpKTsKIH0KIAogc3RhdGljIFJldGFpblB0
cjxOU1VSTENyZWRlbnRpYWw+IGNyZWRlbnRpYWxXaXRoSWRlbnRpdHkoKQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJpYnV0aW9uLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRXZlbnRBdHRy
aWJ1dGlvbi5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJpYnV0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTks
NyArMTU5LDcgQEAgVEVTVChFdmVudEF0dHJpYnV0aW9uLCBGcmF1ZFByZXZlbnRpb24pCiAgICAg
YXV0byBzcGtpRGF0YSA9IGFkb3B0Q0YoU2VjS2V5Q29weVN1YmplY3RQdWJsaWNLZXlJbmZvKHNl
Y0tleS5nZXQoKSkpOwogICAgIGF1dG8gKm5zU3BraURhdGEgPSAoX19icmlkZ2UgTlNEYXRhICop
c3BraURhdGEuZ2V0KCk7CiAKLSAgICBhdXRvIGtleURhdGEgPSBXVEY6OmJhc2U2NFVSTEVuY29k
ZShuc1Nwa2lEYXRhLmJ5dGVzLCBuc1Nwa2lEYXRhLmxlbmd0aCk7CisgICAgYXV0byBrZXlEYXRh
ID0gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IobnNTcGtpRGF0YS5ieXRlcywgbnNTcGtpRGF0YS5s
ZW5ndGgpOwogCiAgICAgLy8gVGhlIHNlcnZlci4KICAgICBIVFRQU2VydmVyIHNlcnZlcihbJmRv
bmUsIGNvbm5lY3Rpb25Db3VudCA9IDAsICZyc2FQcml2YXRlS2V5LCAmbW9kdWx1c05CeXRlcywg
JnJuZywgJmtleURhdGEsICZzZWNLZXldIChDb25uZWN0aW9uIGNvbm5lY3Rpb24pIG11dGFibGUg
ewpAQCAtMTg0LDEzICsxODQsMTIgQEAgVEVTVChFdmVudEF0dHJpYnV0aW9uLCBGcmF1ZFByZXZl
bnRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGVuZCA9IHJlcXVlc3QyU3RyaW5n
LmZpbmQoJyInLCBzdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRva2VuID0g
cmVxdWVzdDJTdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBibGluZGVkTWVzc2FnZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJhc2U2NFVSTERlY29kZSh0b2tlbiwgYmxpbmRlZE1lc3NhZ2UpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBibGluZGVkTWVzc2FnZSA9IGJhc2U2NFVSTERl
Y29kZSh0b2tlbik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjY3Jz
YWJzc2FfY2lwaGVyc3VpdGUgKmNpcGhlcnN1aXRlID0gJmNjcnNhYnNzYV9jaXBoZXJzdWl0ZV9y
c2E0MDk2X3NoYTM4NDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gYmxpbmRlZFNpZ25h
dHVyZSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0aExlbmd0aDogbW9k
dWx1c05CeXRlc10pOwotICAgICAgICAgICAgICAgICAgICAgICAgY2Nyc2Fic3NhX3NpZ25fYmxp
bmRlZF9tZXNzYWdlKGNpcGhlcnN1aXRlLCByc2FQcml2YXRlS2V5LCBibGluZGVkTWVzc2FnZS5k
YXRhKCksIGJsaW5kZWRNZXNzYWdlLnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAqPihbYmxp
bmRlZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSwg
cm5nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5saW5rYWJsZVRva2VuID0gV1RG
OjpiYXNlNjRVUkxFbmNvZGUoW2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBbYmxpbmRlZFNpZ25h
dHVyZSBsZW5ndGhdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gYmxpbmRlZFNpZ25h
dHVyZSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0aExlbmd0aDptb2R1
bHVzTkJ5dGVzXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjY3JzYWJzc2Ffc2lnbl9ibGlu
ZGVkX21lc3NhZ2UoY2lwaGVyc3VpdGUsIHJzYVByaXZhdGVLZXksIGJsaW5kZWRNZXNzYWdlLT5k
YXRhKCksIGJsaW5kZWRNZXNzYWdlLT5zaXplKCksIHN0YXRpY19jYXN0PHVpbnQ4X3QgKj4oW2Js
aW5kZWRTaWduYXR1cmUgbXV0YWJsZUJ5dGVzXSksIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0s
IHJuZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVubGlua2FibGVUb2tlbiA9IGJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKFtibGluZGVkU2lnbmF0dXJlIGJ5dGVzXSwgW2JsaW5kZWRT
aWduYXR1cmUgbGVuZ3RoXSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4YW1wbGUg
cmVzcG9uc2U6IHsgInVubGlua2FibGVfdG9rZW4iOiAiQUJDRCIgfS4gIkFCQ0QiIHNob3VsZCBi
ZSBCYXNlNjRVUkwgZW5jb2RlZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVzcG9u
c2UgPSBtYWtlU3RyaW5nKCJIVFRQLzEuMSAyMDAgT0tcclxuIgpAQCAtMjIyLDE4ICsyMjEsMTYg
QEAgVEVTVChFdmVudEF0dHJpYnV0aW9uLCBGcmF1ZFByZXZlbnRpb24pCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKz0ga2V5Lmxlbmd0aCgpICsgMzsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGVuZCA9IHJlcXVlc3Q0
U3RyaW5nLmZpbmQoJyInLCBzdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byB0b2tlbiA9IHJlcXVlc3Q0U3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5k
IC0gc3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiB0b2tlblZlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlNjRVUkxEZWNvZGUodG9rZW4sIHRva2VuVmVjdG9yKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRva2VuRGF0YSA9IGFkb3B0TlMoW1tO
U0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6dG9rZW5WZWN0b3IuZGF0YSgpIGxlbmd0aDp0b2tl
blZlY3Rvci5zaXplKCldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIHRva2VuVmVjdG9yID0gYmFzZTY0VVJMRGVjb2RlKHRva2VuKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRva2VuRGF0YSA9IGFkb3B0TlMoW1tO
U0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6dG9rZW5WZWN0b3ItPmRhdGEoKSBsZW5ndGg6dG9r
ZW5WZWN0b3ItPnNpemUoKV0pOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga2V5ID0gU3RyaW5nKCJzb3VyY2Vfc2VjcmV0X3Rva2VuX3NpZ25hdHVyZSIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gcmVxdWVzdDRTdHJp
bmcuZmluZChrZXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXJ0ICs9IGtleS5sZW5ndGgoKSArIDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kID0gcmVxdWVzdDRTdHJpbmcuZmluZCgnIicsIHN0YXJ0KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHNpZ25hdHVyZSA9IHJlcXVlc3Q0
U3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1cmVWZWN0b3I7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0VVJMRGVjb2RlKHNp
Z25hdHVyZSwgc2lnbmF0dXJlVmVjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvIHNpZ25hdHVyZURhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBp
bml0V2l0aEJ5dGVzOnNpZ25hdHVyZVZlY3Rvci5kYXRhKCkgbGVuZ3RoOnNpZ25hdHVyZVZlY3Rv
ci5zaXplKCldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IHNpZ25hdHVyZVZlY3RvciA9IGJhc2U2NFVSTERlY29kZShzaWduYXR1cmUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2lnbmF0dXJlRGF0YSA9IGFkb3B0
TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2lnbmF0dXJlVmVjdG9yLT5kYXRhKCkg
bGVuZ3RoOnNpZ25hdHVyZVZlY3Rvci0+c2l6ZSgpXSk7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShTZWNLZXlWZXJpZnlTaWduYXR1cmUoc2Vj
S2V5LmdldCgpLCBrU2VjS2V5QWxnb3JpdGhtUlNBU2lnbmF0dXJlTWVzc2FnZVBTU1NIQTM4NCwg
KF9fYnJpZGdlIENGRGF0YVJlZil0b2tlbkRhdGEuZ2V0KCksIChfX2JyaWRnZSBDRkRhdGFSZWYp
c2lnbmF0dXJlRGF0YS5nZXQoKSwgTlVMTCkpOwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tCShyZXZpc2lvbiAyNzc1NjkpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW0JKHdvcmtp
bmcgY29weSkKQEAgLTk4LDggKzk4LDggQEAgVEVTVF9GKFNTTEtleUdlbmVyYXRvclRlc3QsIERl
ZmF1bHRUZXN0KQogICAgIGNoYXIgY2hhbGxlbmdlW10gPSAiMDEyMzQ1Njc4OSI7CiAgICAgYXV0
byByYXdSZXN1bHQgPSBXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmco
MCwgY2hhbGxlbmdlLCB1cmwpOwogICAgIEFTU0VSVF9GQUxTRShyYXdSZXN1bHQuaXNFbXB0eSgp
KTsKLSAgICBWZWN0b3I8dWludDhfdD4gZGVyUmVzdWx0OwotICAgIEFTU0VSVF9UUlVFKGJhc2U2
NERlY29kZShyYXdSZXN1bHQsIGRlclJlc3VsdCkpOworICAgIGF1dG8gZGVyUmVzdWx0ID0gYmFz
ZTY0RGVjb2RlKHJhd1Jlc3VsdCk7CisgICAgQVNTRVJUX1RSVUUoZGVyUmVzdWx0KTsKIAogICAg
IFNlY0FzbjFDb2RlclJlZiBjb2RlciA9IG51bGxwdHI7CiAgICAgQVNTRVJUX0VRKGVyclNlY1N1
Y2Nlc3MsIFNlY0FzbjFDb2RlckNyZWF0ZSgmY29kZXIpKTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBU
RVNUX0YoU1NMS2V5R2VuZXJhdG9yVGVzdCwgRGVmYXVsdFRlc3QpCiAgICAgfSk7CiAKICAgICBT
aWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UgZGVjb2RlZFJlc3VsdCB7IH07Ci0gICAgU2VjQXNu
MUl0ZW0gZGVyUmVzdWx0SXRlbSB7IGRlclJlc3VsdC5zaXplKCksIGRlclJlc3VsdC5kYXRhKCkg
fTsKKyAgICBTZWNBc24xSXRlbSBkZXJSZXN1bHRJdGVtIHsgZGVyUmVzdWx0LT5zaXplKCksIGRl
clJlc3VsdC0+ZGF0YSgpIH07CiAgICAgQVNTRVJUX0VRKGVyclNlY1N1Y2Nlc3MsIFNlY0FzbjFE
ZWNvZGVEYXRhKGNvZGVyLCAmZGVyUmVzdWx0SXRlbSwgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlVGVtcGxhdGUsICZkZWNvZGVkUmVzdWx0KSk7CiAKICAgICAvLyBDaGVjayBjaGFsbGVuZ2UK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0JKHJldmlzaW9uIDI3
NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6d2ViU29ja2V0SGFu
ZHNoYWtlKENvbXAKICAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4od2ViU29ja2V0S2V5R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlE
KSk7CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAgICAgIHNoYTEuY29t
cHV0ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGhhc2guZGF0
YSgpLCBTSEExOjpoYXNoU2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9T
dHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKICAgICAgICAgfTsKIAogICAgICAg
ICBjb25uZWN0aW9uLnNlbmQoSFRUUFJlc3BvbnNlKDEwMSwgewo=
</data>
<flag name="commit-queue"
          id="450144"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429064</attachid>
            <date>2021-05-19 10:24:24 -0700</date>
            <delta_ts>2021-05-19 10:42:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210519102423.patch</filename>
            <type>text/plain</type>
            <size>205846</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnJpbmcgYmFzZTY0IGVuY29kaW5nL2RlY29k
aW5nIHVwIHRvIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucyBieToKKyAgICAgICAgLSBS
ZXBsYWNlIHVzZSBvZiAib3V0IHBhcmFtZXRlciArIGJvb2wiIHdpdGggT3B0aW9uYWwgcmV0dXJu
IHZhbHVlcy4KKyAgICAgICAgLSBVc2luZyBlbnVtIGNsYXNzIGZvciBlbnVtZXJhdGlvbnMuCisg
ICAgICAgIC0gUmVwbGFjaW5nIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlci9Db25z
dFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcgorICAgICAgICAgIHdpdGggYXBwcm9w
cmlhdGUgZnVuY3Rpb24gb3ZlcmxvYWRzLgorCisgICAgICAgIEFsc28gYWRkcyBhIG5ldyBTdHJp
bmdUeXBlQWRhcHRlciBmb3IgaW5saW5lIGJhc2U2NCBlbmNvZGluZyBkYXRhIGluIGVpdGhlciBt
YWtlU3RyaW5nKCkKKyAgICAgICAgb3IgU3RyaW5nQnVpbGRlci4gVG8gbWFrZSB0aGlzIHdvcmss
IGEgZmV3IG1vZGlmaWNhdGlvbnMgd2VyZSBuZWVkIHRvIHRoZSBiYXNlNjRFbmNvZGUoKQorICAg
ICAgICBmdW5jdGlvbnMgdG8gc3VwcG9ydCB0aGUgZml4ZWQgc2l6ZSB3cml0ZVRvKCkgZnVuY3Rp
b24uCisKKyAgICAgICAgRmlyc3QsIHRoZSBsZW5ndGggb2YgdGhlIGVuY29kZWQgZGF0YSBpcyBu
b3cgY29tcHV0ZWQgdXAgZnJvbnQgZGVwZW5kaW5nIG9uIHRoZSBwb2xpY3kuCisgICAgICAgIFRo
aXMgaGFzIGJlZW4gZXh0cmFjdGVkIGludG8gYSBuZXcgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNp
emUoKSBmdW5jdGlvbiB1c2VkIGJ5IGJvdGgKKyAgICAgICAgdGhlIGFkYXB0b3IgYW5kIGJ5IGJh
c2U2NEVuY29kZSB3aGVuIHBhc3NlZCBhIFZlY3Rvci4gUHJldmlvdXNseSwgd2hlbiBlbmNvZGlu
ZyB1c2luZworICAgICAgICBzb21lIHBvbGljaWVzLCB0aGUgc2l6ZSB3YXMgYW4gb3ZlcmVzdGlt
YXRlIGFuZCB0aGUgcmVzdWx0aW5nIFZlY3RvciB3b3VsZCBiZSByZXNpemVkCisgICAgICAgIGRv
d24gYWZ0ZXIgZW5jb2RpbmcuCisKKyAgICAgICAgU2Vjb25kLCBiYXNlNjRFbmNvZGVJbnRlcm5h
bCB3YXMgbWFkZSBpbnRvIGEgdGVtcGxhdGUgZnVuY3Rpb24gdG8gYWxsb3cgZm9yIHR3byBuZXcg
CisgICAgICAgIGJhc2U2NEVuY29kZSBmdW5jdGlvbnMsIG9uZSBvZiB3aGljaCBoYXMgYSBVQ2hh
ciogZGVzdGluYXRpb24uIFRoZXNlIGFyZSB1c2VkIGJ5IHRoZQorICAgICAgICBhZGFwdG9yIHRv
IHdyaXRlIHRoZSBlbmNvZGVkIGRhdGEuCisKKyAgICAgICAgT25lIGFkZGl0aW9uYWwgc21hbGwg
Y2hhbmdlIGlzIHRoYXQgbm93IGEgb3B0aW9uYWwgbWFwIHR5cGUgcGFyYW1ldGVyIGhhcyBiZWVu
IGFkZGVkCisgICAgICAgIHRvIGFsbCB0aGUgZW5jb2RlcnMgdG8gYWxsb3cgdXNpbmcgZWl0aGVy
IHRoZSBkZWZhdWx0IG1hcCBvciB0aGUgVVJMIG9uZSBhcyBkZWZpbmVkIAorICAgICAgICBpbiBS
RkMgNDY0OC4gVGhpcyBzaW1wbGlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RyaW5n
VHlwZUFkYXB0ZXIgYW5kIG1ha2VzIHRoZQorICAgICAgICBiYXNlNjRVUkxFbmNvZGUvYmFzZTY0
VVJMRGVjb2RlIGZ1bmN0aW9ucyBpbnRvIHNpbXBsZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdGhh
dCB1c2UKKyAgICAgICAgdGhlIHJpZ2h0IGRlZmF1bHRzIGZvciB0aGUgZ2VuZXJpYyBlbmNvZGUv
ZGVjb2RlIGZ1bmN0aW9ucy4gCisKKyAgICAgICAgKiB3dGYvdGV4dC9CYXNlNjQuY3BwOgorICAg
ICAgICAoV1RGOjpiYXNlNjRFbmNvZGVJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OmJhc2U2NEVu
Y29kZSk6CisgICAgICAgIChXVEY6OmJhc2U2NERlY29kZUludGVybmFsKToKKyAgICAgICAgKFdU
Rjo6YmFzZTY0RGVjb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRGVjb2RlKToKKyAgICAg
ICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9C
YXNlNjQuaDoKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlKToKKyAgICAgICAgKFdURjo6YmFz
ZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlKToKKyAgICAgICAgKFdU
Rjo6aXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcik6CisgICAgICAgIChXVEY6OmNhbGN1bGF0
ZUJhc2U2NEVuY29kZWRTaXplKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlZCk6CisgICAg
ICAgIChXVEY6OmJhc2U2NFVSTEVuY29kZWQpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRh
cHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6U3RyaW5nVHlwZUFkYXB0ZXIpOgorICAgICAgICAo
V1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6bGVuZ3RoIGNvbnN0
KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46
OmlzOEJpdCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNw
ZWNpZmljYXRpb24+Ojp3cml0ZVRvIGNvbnN0KToKKwogMjAyMS0wNS0xNiAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1vZGVybml6ZSAvIE9wdGltaXplIFNRTGl0
ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb24KSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvQmFzZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2
NC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgICBDb3B5cmlnaHQgKEMpIDIw
MDAtMjAwMSBEYXdpdCBBbGVtYXllaHUgPGFkYXdpdEBrZGUub3JnPgogICAgQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0gICBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICAgQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFy
b2dhLmNvbT4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI1LDEzICsyNSwxNiBAQAogI2luY2x1ZGUg
PHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFj
ZSBXVEYgewogCi1jb25zdCBjaGFyIG5vbkFscGhhYmV0ID0gLTE7Citjb25zdGV4cHIgY29uc3Qg
Y2hhciBub25BbHBoYWJldCA9IC0xOwogCi1zdGF0aWMgY29uc3QgY2hhciBiYXNlNjRFbmNNYXBb
NjRdID0geworY29uc3RleHByIHVuc2lnbmVkIGVuY29kZU1hcFNpemUgPSA2NDsKK2NvbnN0ZXhw
ciB1bnNpZ25lZCBkZWNvZGVNYXBTaXplID0gMTI4OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNl
NjRFbmNNYXBbZW5jb2RlTWFwU2l6ZV0gPSB7CiAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwg
MHg0NSwgMHg0NiwgMHg0NywgMHg0OCwKICAgICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRE
LCAweDRFLCAweDRGLCAweDUwLAogICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4
NTYsIDB4NTcsIDB4NTgsCkBAIC00Miw3ICs0NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2
NEVuY01hcFs2NF0gPSB7CiAgICAgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwg
MHgyQiwgMHgyRgogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RGVjTWFwWzEyOF0gPSB7
CitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjREZWNNYXBbZGVjb2RlTWFwU2l6ZV0gPSB7CiAgICAg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFs
cGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJl
dCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJl
dCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5v
bkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCkBAIC02MSw3ICs2NCw3IEBAIHN0
YXRpYyBjb25zdCBjaGFyIGJhc2U2NERlY01hcFsxMjhdID0gewogICAgIDB4MzEsIDB4MzIsIDB4
MzMsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9
IHsKK3N0YXRpYyBjb25zdCBjaGFyIGJhc2U2NFVSTEVuY01hcFtlbmNvZGVNYXBTaXplXSA9IHsK
ICAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAogICAg
IDB4NDksIDB4NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCiAgICAgMHg1
MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKQEAgLTcyLDcgKzc1
LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0VVJMRW5jTWFwWzY0XSA9IAogICAgIDB4MzQs
IDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4MkQsIDB4NUYKIH07CiAKLXN0YXRpYyBj
b25zdCBjaGFyIGJhc2U2NFVSTERlY01hcFsxMjhdID0geworc3RhdGljIGNvbnN0IGNoYXIgYmFz
ZTY0VVJMRGVjTWFwW2RlY29kZU1hcFNpemVdID0gewogICAgIG5vbkFscGhhYmV0LCBub25BbHBo
YWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQs
IG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQs
IG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25B
bHBoYWJldCwgbm9uQWxwaGFiZXQsCiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25B
bHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFi
ZXQsIG5vbkFscGhhYmV0LApAQCAtOTEsMjQzICs5NCwyNDUgQEAgc3RhdGljIGNvbnN0IGNoYXIg
YmFzZTY0VVJMRGVjTWFwWzEyOF0gPQogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsK
IAotc3RhdGljIGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29k
ZVBvbGljeSBwb2xpY3ksIGNvbnN0IGNoYXIgKCZlbmNvZGVNYXApWzY0XSkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNv
bnN0IHVpbnQ4X3QqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJh
Y3RlclR5cGUqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5n
dGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0g
ICAgb3V0LmNsZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NF
UlQoZGVzdGluYXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRlQmFzZTY0RW5j
b2RlZFNpemUoaW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5ndGgpOwogCi0g
ICAgLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCBy
ZXR1cm4gbm90aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSAi
b3V0TGVuZ3RoIiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhhbiBiZWluZyBw
ZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0gICAgY29uc3Qg
dW5zaWduZWQgbWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2IC8gNCAqIDMg
LSAyOwotICAgIGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVybjsK
KyAgICBhdXRvIGVuY29kZU1hcCA9IChtYXAgPT0gQmFzZTY0RW5jb2RlTWFwOjpVUkwpID8gYmFz
ZTY0VVJMRW5jTWFwIDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9IDA7CiAg
ICAgdW5zaWduZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0gICAgdW5z
aWduZWQgb3V0TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGluc2VydExG
cyA9IChwb2xpY3kgPT0gQmFzZTY0RW5jb2RlUG9saWN5OjpJbnNlcnRMRnMgJiYgZGVzdGluYXRp
b25MZW5ndGggPiBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOwogCi0g
ICAgLy8gRGVhbCB3aXRoIHRoZSA3NiBjaGFyYWN0ZXIgcGVyIGxpbmUgbGltaXQgc3BlY2lmaWVk
IGluIFJGQyAyMDQ1LgotICAgIGJvb2wgaW5zZXJ0TEZzID0gKHBvbGljeSA9PSBCYXNlNjRJbnNl
cnRMRnMgJiYgb3V0TGVuZ3RoID4gNzYpOwotICAgIGlmIChpbnNlcnRMRnMpCi0gICAgICAgIG91
dExlbmd0aCArPSAoKG91dExlbmd0aCAtIDEpIC8gNzYpOwotCi0gICAgaW50IGNvdW50ID0gMDsK
LSAgICBvdXQuZ3JvdyhvdXRMZW5ndGgpOwotCi0gICAgLy8gMy1ieXRlIHRvIDQtYnl0ZSBjb252
ZXJzaW9uICsgMC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgotICAgIGlmIChsZW4g
PiAxKSB7Ci0gICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAgIGlmIChpbnB1dExl
bmd0aCA+IDEpIHsKKyAgICAgICAgd2hpbGUgKHNpZHggPCBpbnB1dExlbmd0aCAtIDIpIHsKICAg
ICAgICAgICAgIGlmIChpbnNlcnRMRnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoY291bnQgJiYg
IShjb3VudCAlIDc2KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOwor
ICAgICAgICAgICAgICAgIGlmIChjb3VudCAmJiAhKGNvdW50ICUgbWF4aW11bUJhc2U2NExpbmVM
ZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25E
YXRhQnVmZmVyW2RpZHgrK10gPSAnXG4nOwogICAgICAgICAgICAgICAgIGNvdW50ICs9IDQ7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtz
aWR4XSA+PiAyKSAmIDA3N107Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFso
KGRhdGFbc2lkeCArIDFdID4+IDQpICYgMDE3KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3Nyld
OwotICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAyXSA+
PiA2KSAmIDAwMykgfCAoKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07Ci0gICAgICAgICAg
ICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFtkYXRhW3NpZHggKyAyXSAmIDA3N107CisKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXRE
YXRhQnVmZmVyW3NpZHggICAgXSA+PiAyKSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlv
bkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsg
MV0gPj4gNCkgJiAwMTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3
KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1h
cFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0gPj4gNikgJiAwMDMpIHwgKChpbnB1dERhdGFC
dWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRh
dGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsgIGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0g
ICAgICAgJiAwNzddOwogICAgICAgICAgICAgc2lkeCArPSAzOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgaWYgKHNpZHggPCBsZW4pIHsKLSAgICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQg
PiAwKSAmJiAhKGNvdW50ICUgNzYpKQotICAgICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7Ci0K
LSAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzdd
OwotICAgICAgICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG91dFtkaWR4Kytd
ID0gZW5jb2RlTWFwWygoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhd
IDw8IDQpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0
YVtzaWR4ICsgMV0gPDwgMikgJiAwNzddOworICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsK
KyAgICAgICAgaWYgKGluc2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgbWF4aW11
bUJhc2U2NExpbmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKSkKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gJ1xuJzsKKworICAgICAgICBkZXN0aW5hdGlvbkRhdGFC
dWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoaW5wdXREYXRhQnVmZmVyW3NpZHhdID4+IDIpICYg
MDc3XTsKKyAgICAgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCAtIDEpIHsKKyAgICAgICAgICAg
IGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVm
ZmVyW3NpZHggKyAxXSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA8PCA0
KSAmIDA3NyldOworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBl
bmNvZGVNYXBbIChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4
XSA8PCA0KSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsr
XSA9IGVuY29kZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzddOwog
ICAgIH0KIAotICAgIC8vIEFkZCBwYWRkaW5nCi0gICAgaWYgKHBvbGljeSA9PSBCYXNlNjRVUkxQ
b2xpY3kpCi0gICAgICAgIG91dC5yZXNpemUoZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdo
aWxlIChkaWR4IDwgb3V0LnNpemUoKSkgewotICAgICAgICAgICAgb3V0W2RpZHhdID0gJz0nOwot
ICAgICAgICAgICAgKytkaWR4OwotICAgICAgICB9Ci0gICAgfQorICAgIEFTU0VSVChwb2xpY3kg
IT0gQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwgfHwgZGlkeCA9PSBkZXN0aW5hdGlvbkxlbmd0aCk7
CisKKyAgICB3aGlsZSAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0aW5h
dGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9ICc9JzsKIH0KIAotU3RyaW5nIGJhc2U2NEVuY29kZShj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVp
bnQ4X3QqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29k
ZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgVmVjdG9yPGNoYXI+
IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBwb2xpY3ksIGJhc2U2NEVuY01hcCk7
Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uTGVuZ3RoID0gY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoaW5wdXRM
ZW5ndGgsIHBvbGljeSk7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBkZXN0aW5hdGlvblZlY3RvcihkZXN0aW5h
dGlvbkxlbmd0aCk7CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoaW5wdXREYXRhQnVmZmVyLCBp
bnB1dExlbmd0aCwgZGVzdGluYXRpb25WZWN0b3IuZGF0YSgpLCBkZXN0aW5hdGlvbkxlbmd0aCwg
cG9saWN5LCBtYXApOworICAgIHJldHVybiBkZXN0aW5hdGlvblZlY3RvcjsKK30KKwordm9pZCBi
YXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExl
bmd0aCwgVUNoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25M
ZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCit7
CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGJhc2U2
NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZm
ZXIpLCBpbnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0aW5hdGlvbkxlbmd0
aCwgcG9saWN5LCBtYXApOwogfQogCi12b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRh
LCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9s
aWN5KQordm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNp
Z25lZCBpbnB1dExlbmd0aCwgTENoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQg
ZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29k
ZU1hcCBtYXApCiB7Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGRhdGEpLCBsZW4sIG91dCwgcG9saWN5LCBiYXNlNjRFbmNNYXApOwor
ICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICBiYXNlNjRF
bmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVy
KSwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgs
IHBvbGljeSwgbWFwKTsKIH0KIAotU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCitWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0
b3IoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBWZWN0
b3I8Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIEJhc2U2NFVSTFBvbGlj
eSwgYmFzZTY0VVJMRW5jTWFwKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJl
c3VsdC5zaXplKCkpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRMZW5ndGgsIHBvbGljeSwg
bWFwKTsKIH0KIAotdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWdu
ZWQgbGVuLCBWZWN0b3I8Y2hhcj4mIG91dCkKK1N0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhj
b25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJhc2U2NEVu
Y29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVu
LCBvdXQsIEJhc2U2NFVSTFBvbGljeSwgYmFzZTY0VVJMRW5jTWFwKTsKKyAgICByZXR1cm4gbWFr
ZVN0cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIHBvbGlj
eSwgbWFwKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIGJvb2wg
YmFzZTY0RGVjb2RlSW50ZXJuYWwoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBTaWdu
ZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXImIG91dCwgdW5zaWduZWQgb3B0aW9ucywgY29u
c3QgY2hhciAoJmRlY29kZU1hcClbMTI4XSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBP
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGlu
cHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNv
ZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewotICAgIG91dC5jbGVh
cigpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWlu
cHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gVmVjdG9yPHVpbnQ4X3Q+IHsgfTsKIAotICAgIG91
dC5ncm93KGxlbmd0aCk7CisgICAgYXV0byBkZWNvZGVNYXAgPSAobWFwID09IEJhc2U2NERlY29k
ZU1hcDo6VVJMKSA/IGJhc2U2NFVSTERlY01hcCA6IGJhc2U2NERlY01hcDsKKworICAgIFZlY3Rv
cjx1aW50OF90PiBkZXN0aW5hdGlvbihpbnB1dExlbmd0aCk7CiAKICAgICB1bnNpZ25lZCBlcXVh
bHNTaWduQ291bnQgPSAwOwotICAgIHVuc2lnbmVkIG91dExlbmd0aCA9IDA7Ci0gICAgYm9vbCBo
YWRFcnJvciA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4IDwgbGVuZ3Ro
OyArK2lkeCkgewotICAgICAgICB1bnNpZ25lZCBjaCA9IGRhdGFbaWR4XTsKKyAgICB1bnNpZ25l
ZCBkZXN0aW5hdGlvbkxlbmd0aCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpZHggPSAwOyBpZHgg
PCBpbnB1dExlbmd0aDsgKytpZHgpIHsKKyAgICAgICAgdW5zaWduZWQgY2ggPSBpbnB1dERhdGFC
dWZmZXJbaWR4XTsKICAgICAgICAgaWYgKGNoID09ICc9JykgewogICAgICAgICAgICAgKytlcXVh
bHNTaWduQ291bnQ7CiAgICAgICAgICAgICAvLyBUaGVyZSBzaG91bGQgbmV2ZXIgYmUgbW9yZSB0
aGFuIDIgcGFkZGluZyBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiBCYXNl
NjRWYWxpZGF0ZVBhZGRpbmcgJiYgZXF1YWxzU2lnbkNvdW50ID4gMikgewotICAgICAgICAgICAg
ICAgIGhhZEVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmIChvcHRpb25zLmNvbnRhaW5zKEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGlu
ZykgJiYgZXF1YWxzU2lnbkNvdW50ID4gMikgeworICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBj
aGFyIGRlY29kZWRDaGFyYWN0ZXIgPSBjaCA8IFdURl9BUlJBWV9MRU5HVEgoZGVjb2RlTWFwKSA/
IGRlY29kZU1hcFtjaF0gOiBub25BbHBoYWJldDsKKyAgICAgICAgICAgIGNoYXIgZGVjb2RlZENo
YXJhY3RlciA9IGNoIDwgZGVjb2RlTWFwU2l6ZSA/IGRlY29kZU1hcFtjaF0gOiBub25BbHBoYWJl
dDsKICAgICAgICAgICAgIGlmIChkZWNvZGVkQ2hhcmFjdGVyICE9IG5vbkFscGhhYmV0KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGVxdWFsc1NpZ25Db3VudCkgewotICAgICAgICAgICAgICAgICAg
ICBoYWRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXRbb3V0TGVuZ3RoKytdID0gZGVjb2RlZENoYXJh
Y3RlcjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zICYgQmFzZTY0SWdub3JlU3Bh
Y2VzQW5kTmV3TGluZXMpCi0gICAgICAgICAgICAgICAgfHwgKCFpc0xhdGluMShjaCkgfHwgIWlz
QVNDSUlTcGFjZShjaCkgfHwgKChvcHRpb25zICYgQmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiKSAm
JiBjaCA9PSAnXHYnKSkpIHsKLSAgICAgICAgICAgICAgICBoYWRFcnJvciA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKGVxdWFsc1NpZ25Db3VudCkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAg
ICBkZXN0aW5hdGlvbltkZXN0aW5hdGlvbkxlbmd0aCsrXSA9IGRlY29kZWRDaGFyYWN0ZXI7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmNvbnRhaW5zKEJhc2U2NERlY29kZU9wdGlv
bnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSB8fCAoIWlzTGF0aW4xKGNoKSB8fCAhaXNBU0NJ
SVNwYWNlKGNoKSB8fCAob3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpEaXNj
YXJkVmVydGljYWxUYWIpICYmIGNoID09ICdcdicpKSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAv
LyBNYWtlIHN1cmUgd2Ugc2hyaW5rIGJhY2sgdGhlIFZlY3RvciBiZWZvcmUgcmV0dXJuaW5nLiBv
dXRMZW5ndGggbWF5IGJlIHNob3J0ZXIgdGhhbiBleHBlY3RlZAorICAgIC8vIE1ha2Ugc3VyZSB3
ZSBzaHJpbmsgYmFjayB0aGUgVmVjdG9yIGJlZm9yZSByZXR1cm5pbmcuIGRlc3RpbmF0aW9uTGVu
Z3RoIG1heSBiZSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQKICAgICAvLyBpbiBjYXNlIG9mIGVycm9y
IG9yIGluIGNhc2Ugb2YgaWdub3JlZCBzcGFjZXMuCi0gICAgaWYgKG91dExlbmd0aCA8IG91dC5z
aXplKCkpCi0gICAgICAgIG91dC5zaHJpbmsob3V0TGVuZ3RoKTsKLQotICAgIGlmIChoYWRFcnJv
cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChkZXN0aW5hdGlvbkxlbmd0aCA8IGRl
c3RpbmF0aW9uLnNpemUoKSkKKyAgICAgICAgZGVzdGluYXRpb24uc2hyaW5rKGRlc3RpbmF0aW9u
TGVuZ3RoKTsKIAotICAgIGlmICghb3V0TGVuZ3RoKQotICAgICAgICByZXR1cm4gIWVxdWFsc1Np
Z25Db3VudDsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKSB7CisgICAgICAgIGlmIChlcXVh
bHNTaWduQ291bnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBy
ZXR1cm4gVmVjdG9yPHVpbnQ4X3Q+IHsgfTsKKyAgICB9CiAKICAgICAvLyBUaGUgc2hvdWxkIGJl
IG5vIHBhZGRpbmcgaWYgbGVuZ3RoIGlzIGEgbXVsdGlwbGUgb2YgNC4KLSAgICAvLyBXZSB1c2Ug
KG91dExlbmd0aCArIGVxdWFsc1NpZ25Db3VudCkgaW5zdGVhZCBvZiBsZW5ndGggYmVjYXVzZSB3
ZSBkb24ndCB3YW50IHRvIGFjY291bnQgZm9yIGlnbm9yZWQgY2hhcmFjdGVycyAoaS5lLiBzcGFj
ZXMpLgotICAgIGlmIChvcHRpb25zICYgQmFzZTY0VmFsaWRhdGVQYWRkaW5nICYmIGVxdWFsc1Np
Z25Db3VudCAmJiAob3V0TGVuZ3RoICsgZXF1YWxzU2lnbkNvdW50KSAlIDQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAvLyBXZSB1c2UgKGRlc3RpbmF0aW9uTGVuZ3RoICsgZXF1YWxzU2ln
bkNvdW50KSBpbnN0ZWFkIG9mIGxlbmd0aCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gYWNjb3Vu
dCBmb3IgaWdub3JlZCBjaGFyYWN0ZXJzIChpLmUuIHNwYWNlcykuCisgICAgaWYgKG9wdGlvbnMu
Y29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKSAmJiBlcXVhbHNT
aWduQ291bnQgJiYgKGRlc3RpbmF0aW9uTGVuZ3RoICsgZXF1YWxzU2lnbkNvdW50KSAlIDQpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAvLyBWYWxpZCBkYXRhIGlzIChuICog
NCArIFswLDIsM10pIGNoYXJhY3RlcnMgbG9uZy4KLSAgICBpZiAoKG91dExlbmd0aCAlIDQpID09
IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGRlc3RpbmF0aW9uTGVuZ3RoICUg
NCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICAvLyA0LWJ5
dGUgdG8gMy1ieXRlIGNvbnZlcnNpb24KLSAgICBvdXRMZW5ndGggLT0gKG91dExlbmd0aCArIDMp
IC8gNDsKLSAgICBpZiAoIW91dExlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRl
c3RpbmF0aW9uTGVuZ3RoIC09IChkZXN0aW5hdGlvbkxlbmd0aCArIDMpIC8gNDsKKyAgICBpZiAo
IWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
dW5zaWduZWQgc2lkeCA9IDA7CiAgICAgdW5zaWduZWQgZGlkeCA9IDA7Ci0gICAgaWYgKG91dExl
bmd0aCA+IDEpIHsKLSAgICAgICAgd2hpbGUgKGRpZHggPCBvdXRMZW5ndGggLSAyKSB7Ci0gICAg
ICAgICAgICBvdXRbZGlkeF0gPSAoKChvdXRbc2lkeF0gPDwgMikgJiAyNTUpIHwgKChvdXRbc2lk
eCArIDFdID4+IDQpICYgMDAzKSk7Ci0gICAgICAgICAgICBvdXRbZGlkeCArIDFdID0gKCgob3V0
W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikgJiAwMTcpKTsK
LSAgICAgICAgICAgIG91dFtkaWR4ICsgMl0gPSAoKChvdXRbc2lkeCArIDJdIDw8IDYpICYgMjU1
KSB8IChvdXRbc2lkeCArIDNdICYgMDc3KSk7CisgICAgaWYgKGRlc3RpbmF0aW9uTGVuZ3RoID4g
MSkgeworICAgICAgICB3aGlsZSAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoIC0gMikgeworICAg
ICAgICAgICAgZGVzdGluYXRpb25bZGlkeCAgICBdID0gKCgoZGVzdGluYXRpb25bc2lkeCAgICBd
IDw8IDIpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lkeCArIDFdID4+IDQpICYgMDAzKSk7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbltkaWR4ICsgMV0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICsg
MV0gPDwgNCkgJiAyNTUpIHwgKChkZXN0aW5hdGlvbltzaWR4ICsgMl0gPj4gMikgJiAwMTcpKTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2RpZHggKyAyXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHgg
KyAyXSA8PCA2KSAmIDI1NSkgfCAgKGRlc3RpbmF0aW9uW3NpZHggKyAzXSAgICAgICAmIDA3Nykp
OwogICAgICAgICAgICAgc2lkeCArPSA0OwogICAgICAgICAgICAgZGlkeCArPSAzOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKGRpZHggPCBvdXRMZW5ndGgpCi0gICAgICAgIG91dFtkaWR4
XSA9ICgoKG91dFtzaWR4XSA8PCAyKSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMV0gPj4gNCkgJiAw
MDMpKTsKKyAgICBpZiAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0aW5h
dGlvbltkaWR4XSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggICAgXSA8PCAyKSAmIDI1NSkgfCAoKGRl
c3RpbmF0aW9uW3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOwogCi0gICAgaWYgKCsrZGlkeCA8IG91
dExlbmd0aCkKLSAgICAgICAgb3V0W2RpZHhdID0gKCgob3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1
NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikgJiAwMTcpKTsKKyAgICBpZiAoKytkaWR4IDwgZGVz
dGluYXRpb25MZW5ndGgpCisgICAgICAgIGRlc3RpbmF0aW9uW2RpZHhdID0gKCgoZGVzdGluYXRp
b25bc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lkeCArIDJdID4+IDIp
ICYgMDE3KSk7CiAKLSAgICBpZiAob3V0TGVuZ3RoIDwgb3V0LnNpemUoKSkKLSAgICAgICAgb3V0
LnNocmluayhvdXRMZW5ndGgpOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGRlc3RpbmF0
aW9uTGVuZ3RoIDwgZGVzdGluYXRpb24uc2l6ZSgpKQorICAgICAgICBkZXN0aW5hdGlvbi5zaHJp
bmsoZGVzdGluYXRpb25MZW5ndGgpOworICAgIHJldHVybiBkZXN0aW5hdGlvbjsKIH0KIAotYm9v
bCBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNv
ZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGluLmxlbmd0aCgpOwotICAgIGlmICghbGVuZ3RoIHx8IGluLmlzOEJpdCgpKQot
ICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFjdGVyczgoKSwgbGVu
Z3RoLCBvdXQsIG9wdGlvbnMsIGJhc2U2NERlY01hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29k
ZUludGVybmFsKGluLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG91dCwgb3B0aW9ucywgYmFzZTY0
RGVjTWFwKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKKyAgICBpZiAo
IWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKKyAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwg
b3B0aW9ucywgbWFwKTsKIH0KIAotYm9vbCBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyBpbiwgU2ln
bmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcgaW5wdXQsIE9w
dGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFw
KQogewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGluLmxlbmd0aCgpOwotICAgIGlmICghbGVuZ3Ro
IHx8IGluLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4u
Y2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvdXQsIG9wdGlvbnMsIGJhc2U2NERlY01hcCk7Ci0gICAg
cmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG91
dCwgb3B0aW9ucywgYmFzZTY0RGVjTWFwKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5s
ZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCB8fCBpbnB1dC5pczhCaXQoKSkKKyAgICAgICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3B0
aW9ucywgbWFwKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFj
dGVyczE2KCksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKIH0KIAotYm9vbCBiYXNlNjREZWNvZGUo
Y29uc3QgVmVjdG9yPGNoYXI+JiBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVy
IG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0
RGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNv
ZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQogewotICAgIG91dC5jbGVh
cigpOworICAgIGlmIChpbnB1dC5zaXplKCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGJhc2U2
NERlY29kZUludGVybmFsKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBvcHRpb25zLCBtYXAp
OworfQogCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJn
ZSwganVzdCByZXR1cm4gbm90aGluZy4KLSAgICBpZiAoaW4uc2l6ZSgpID4gVUlOVF9NQVgpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRp
b25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQoreworICAgIGlmIChpbnB1dC5zaXpl
KCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgb3B0
aW9ucywgbWFwKTsKK30KIAotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oaW4uZGF0YSgpKSwgaW4uc2l6ZSgpLCBvdXQsIG9wdGlv
bnMsIGJhc2U2NERlY01hcCk7CitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIE9wdGlvblNldDxCYXNlNjRE
ZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjREZWNvZGVNYXAgbWFwKQoreworICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChkYXRhLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAK
LWJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgU2lnbmVk
T3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCwgdW5zaWduZWQgb3B0aW9ucykKK09wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2ln
bmVkIGxlbmd0aCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+IG9wdGlvbnMsIEJhc2U2
NERlY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuLCBvdXQsIG9wdGlvbnMsIGJhc2U2
NERlY01hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1ib29s
IGJhc2U2NFVSTERlY29kZShjb25zdCBTdHJpbmcmIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZl
Y3RvckFkYXB0ZXIgb3V0KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNv
ZGUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbi5sZW5n
dGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGJh
c2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0LCBCYXNlNjRE
ZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5h
bChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2NFVS
TERlY01hcCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAgaWYg
KCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJ
bnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIHsgfSwgQmFzZTY0RGVjb2RlTWFw
OjpVUkwpOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJz
MTYoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBiYXNl
NjRVUkxEZWNvZGUoU3RyaW5nVmlldyBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyIG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKFN0cmlu
Z1ZpZXcgaW5wdXQpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3RoKCk7Ci0gICAg
aWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJ
bnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwgYmFz
ZTY0VVJMRGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW4uY2hhcmFj
dGVyczE2KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOwor
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoIHx8
IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5w
dXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKKyAg
ICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2KCksIGxlbmd0
aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
ciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGlucHV0KQogewotICAgIG91dC5jbGVhcigpOworICAgIGlmIChpbnB1
dC5zaXplKCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6VVJMKTsKK30K
IAotICAgIC8vIElmIHRoZSBpbnB1dCBzdHJpbmcgaXMgcGF0aG9sb2dpY2FsbHkgbGFyZ2UsIGp1
c3QgcmV0dXJuIG5vdGhpbmcuCi0gICAgaWYgKGluLnNpemUoKSA+IFVJTlRfTUFYKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoreworICAgIGlmIChpbnB1dC5zaXplKCkgPiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSwgeyB9LCBCYXNl
NjREZWNvZGVNYXA6OlVSTCk7Cit9CiAKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGluLmRhdGEoKSksIGluLnNpemUoKSwgb3V0
LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOworT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChkYXRhLCBsZW5ndGgsIHsgfSwg
QmFzZTY0RGVjb2RlTWFwOjpVUkwpOwogfQogCi1ib29sIGJhc2U2NFVSTERlY29kZShjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
ciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihkYXRhKSwgbGVuLCBvdXQsIEJh
c2U2NERlZmF1bHQsIGJhc2U2NFVSTERlY01hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUlu
dGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgsIHsg
fSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdGV4dC9CYXNlNjQuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dURi93dGYvdGV4
dC9CYXNlNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTkxICsyNywxNDYgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNl
dC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi1lbnVtIEJhc2U2NEVu
Y29kZVBvbGljeSB7Ci0gICAgQmFzZTY0RG9Ob3RJbnNlcnRMRnMsCi0gICAgQmFzZTY0SW5zZXJ0
TEZzLAotICAgIEJhc2U2NFVSTFBvbGljeSAvLyBObyBwYWRkaW5nLCBubyBMRnMuCitlbnVtIGNs
YXNzIEJhc2U2NEVuY29kZVBvbGljeSB7CisgICAgRG9Ob3RJbnNlcnRMRnMsCisgICAgSW5zZXJ0
TEZzLAorICAgIFVSTCAvLyBObyBwYWRkaW5nLCBubyBMRnMuCiB9OwogCi1lbnVtIEJhc2U2NERl
Y29kZU9wdGlvbnMgewotICAgIEJhc2U2NERlZmF1bHQgPSAwLAotICAgIEJhc2U2NFZhbGlkYXRl
UGFkZGluZyA9IDEgPDwgMCwKLSAgICBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyA9IDEg
PDwgMSwKLSAgICBCYXNlNjREaXNjYXJkVmVydGljYWxUYWIgPSAxIDw8IDIsCi19OwotCi1jbGFz
cyBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgewotcHVibGljOgotICAgIFNpZ25l
ZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8Y2hhcj4mIHZlY3RvcikKLSAgICAg
ICAgOiBtX2lzU2lnbmVkKHRydWUpCi0gICAgewotICAgICAgICBtX3ZlY3Rvci5jID0gJnZlY3Rv
cjsKLSAgICB9Ci0gICAgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKFZlY3Rvcjx1
aW50OF90PiYgdmVjdG9yKQotICAgICAgICA6IG1faXNTaWduZWQoZmFsc2UpCi0gICAgewotICAg
ICAgICBtX3ZlY3Rvci51ID0gJnZlY3RvcjsKLSAgICB9Ci0KLSAgICB1aW50OF90KiBkYXRhKCkK
LSAgICB7Ci0gICAgICAgIGlmIChtX2lzU2lnbmVkKQotICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fdmVjdG9yLmMtPmRhdGEoKSk7Ci0gICAgICAgIHJldHVy
biBtX3ZlY3Rvci51LT5kYXRhKCk7Ci0gICAgfQotICAgIAotICAgIHNpemVfdCBzaXplKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzU2lnbmVkKQotICAgICAgICAgICAgcmV0dXJuIG1f
dmVjdG9yLmMtPnNpemUoKTsKLSAgICAgICAgcmV0dXJuIG1fdmVjdG9yLnUtPnNpemUoKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBpZiAobV9pc1NpZ25l
ZCkgewotICAgICAgICAgICAgbV92ZWN0b3IuYy0+Y2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBtX3ZlY3Rvci51LT5jbGVhcigpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGdyb3coc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICBpZiAobV9pc1NpZ25l
ZCkgewotICAgICAgICAgICAgbV92ZWN0b3IuYy0+Z3JvdyhzaXplKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBtX3ZlY3Rvci51LT5ncm93KHNpemUpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIHNocmluayhzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmICht
X2lzU2lnbmVkKSB7Ci0gICAgICAgICAgICBtX3ZlY3Rvci5jLT5zaHJpbmsoc2l6ZSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbV92ZWN0b3IudS0+c2hyaW5rKHNp
emUpOwotICAgIH0KLSAgICAKLSAgICB1aW50OF90JiBvcGVyYXRvcltdKHNpemVfdCBwb3NpdGlv
bikgeyByZXR1cm4gZGF0YSgpW3Bvc2l0aW9uXTsgfQorZW51bSBjbGFzcyBCYXNlNjRFbmNvZGVN
YXAgeyBEZWZhdWx0LCBVUkwgfTsKIAotcHJpdmF0ZToKLSAgICBib29sIG1faXNTaWduZWQ7Ci0g
ICAgdW5pb24gewotICAgICAgICBWZWN0b3I8Y2hhcj4qIGM7Ci0gICAgICAgIFZlY3Rvcjx1aW50
OF90PiogdTsKLSAgICB9IG1fdmVjdG9yOworZW51bSBjbGFzcyBCYXNlNjREZWNvZGVPcHRpb25z
IDogdWludDhfdCB7CisgICAgVmFsaWRhdGVQYWRkaW5nICAgICAgICAgPSAxIDw8IDAsCisgICAg
SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgPSAxIDw8IDEsCisgICAgRGlzY2FyZFZlcnRpY2FsVGFi
ICAgICAgPSAxIDw8IDIsCiB9OwogCi1jbGFzcyBDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVj
dG9yQWRhcHRlciB7Ci1wdWJsaWM6Ci0gICAgQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3Rv
ckFkYXB0ZXIoY29uc3QgVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCi0gICAgICAgIDogbV9pc1NpZ25l
ZChmYWxzZSkKLSAgICB7Ci0gICAgICAgIG1fdmVjdG9yLmMgPSAmdmVjdG9yOwotICAgIH0KLSAg
ICBDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIHZlY3RvcikKLSAgICAgICAgOiBtX2lzU2lnbmVkKHRydWUpCi0gICAgewotICAgICAg
ICBtX3ZlY3Rvci51ID0gJnZlY3RvcjsKLSAgICB9CitlbnVtIGNsYXNzIEJhc2U2NERlY29kZU1h
cCB7IERlZmF1bHQsIFVSTCB9OwogCi0gICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBpZiAobV9pc1NpZ25lZCkKLSAgICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX3ZlY3Rvci5jLT5kYXRhKCkpOwotICAgICAgICBy
ZXR1cm4gbV92ZWN0b3IudS0+ZGF0YSgpOwotICAgIH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAobV9pc1NpZ25lZCkKLSAgICAgICAgICAgIHJldHVybiBtX3Zl
Y3Rvci5jLT5zaXplKCk7Ci0gICAgICAgIHJldHVybiBtX3ZlY3Rvci51LT5zaXplKCk7Ci0gICAg
fQorc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0TGluZUxlbmd0aFdoZW5J
bnNlcnRpbmdMRnMgPSA3NjsKIAotcHJpdmF0ZToKLSAgICBib29sIG1faXNTaWduZWQ7Ci0gICAg
dW5pb24gewotICAgICAgICBjb25zdCBWZWN0b3I8Y2hhcj4qIGM7Ci0gICAgICAgIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiogdTsKLSAgICB9IG1fdmVjdG9yOwotfTsKKy8vIElmIHRoZSBpbnB1dCBz
dHJpbmcgaXMgcGF0aG9sb2dpY2FsbHkgbGFyZ2UsIGp1c3QgcmV0dXJuIG5vdGhpbmcuCisvLyBS
YXRoZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2
YXRpdmUuCitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRFbmNvZGVySW5w
dXRCdWZmZXJTaXplID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gNzcg
KiA3NiAvIDQgKiAzIC0gMjsKKworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2Rl
KGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgVUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFw
ID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJh
c2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2
NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CisKK1dURl9FWFBPUlRfUFJJ
VkFURSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3Qgdm9pZCosIHVu
c2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5z
ZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworVmVj
dG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMs
IEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5j
b2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNl
NjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBDU3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0
RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRF
bmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJh
c2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9s
aWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpE
ZWZhdWx0KTsKK1N0cmluZyBiYXNlNjRFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4m
LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZz
LCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworU3RyaW5nIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBC
YXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNl
NjRFbmNvZGVNYXA6OkRlZmF1bHQpOworCitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiwgT3B0aW9uU2V0PEJhc2U2
NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6
OkRlZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
YmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9
IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9F
WFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25z
dCBWZWN0b3I8dWludDhfdD4mLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7IH0s
IEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JU
X1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3QgVmVj
dG9yPGNoYXI+JiwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjRE
ZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRF
IE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCB1
bnNpZ25lZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNv
ZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOworV1RGX0VYUE9SVF9QUklWQVRFIE9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25l
ZCwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBCYXNlNjREZWNvZGVNYXAg
PSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBi
YXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRF
bmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExGcyk7Ci12b2lkIGJhc2U2NEVuY29kZShD
b25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgVmVjdG9yPGNoYXI+JiwgQmFz
ZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotdm9pZCBiYXNlNjRFbmNv
ZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJh
c2U2NERvTm90SW5zZXJ0TEZzKTsKLVdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5j
b2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9O
b3RJbnNlcnRMRnMpOwotU3RyaW5nIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRD
aGFyVmVjdG9yQWRhcHRlciwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRM
RnMpOwotU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOworaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNl
NjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQoreworICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1ZlY3RvcihpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXAp
OworfQogCi1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5n
JiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRpb25zID0g
QmFzZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoU3Ry
aW5nVmlldywgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRp
b25zID0gQmFzZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNv
ZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVy
LCB1bnNpZ25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBiYXNlNjREZWNvZGUoY29uc3QgY2hhciosIHVuc2lnbmVkLCBTaWduZWRPclVuc2lnbmVk
Q2hhclZlY3RvckFkYXB0ZXIsIHVuc2lnbmVkIG9wdGlvbnMgPSBCYXNlNjREZWZhdWx0KTsKK2lu
bGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPGNo
YXI+JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1h
cCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1
dC5zaXplKCksIHBvbGljeSwgbWFwKTsKK30KIAotaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlKENv
bnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluLCBWZWN0b3I8Y2hhcj4mIG91
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFz
ZTY0RW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGlj
eSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRh
dGEoKSwgaW4uc2l6ZSgpLCBvdXQsIHBvbGljeSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRv
VmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSwgbWFwKTsKIH0KIAot
aW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcmIGluLCBWZWN0b3I8Y2hhcj4m
IG91dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBTdHJpbmcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBiYXNlNjRFbmNvZGUoaW4u
ZGF0YSgpLCBpbi5sZW5ndGgoKSwgb3V0LCBwb2xpY3kpOworICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXApOwogfQog
Ci1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVj
dG9yQWRhcHRlciBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBTdHJpbmcg
YmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4uc2l6ZSgpLCBwb2xpY3kpOworICAgIHJldHVybiBiYXNl
NjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5LCBtYXAp
OwogfQogCi1pbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiBpbiwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSBTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJp
bmcoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2
NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIGlu
Lmxlbmd0aCgpLCBwb2xpY3kpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1
dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CiB9CiAKKwogLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIEFsbCB0aGUgc2FtZSBmdW5jdGlvbnMgbW9kaWZp
ZWQgZm9yIGJhc2U2NHVybCwgYXMgZGVmaW5lZCBpbiBSRkMgNDY0OC4KIC8vIFRoaXMgZm9ybWF0
IHVzZXMgJy0nIGFuZCAnXycgaW5zdGVhZCBvZiAnKycgYW5kICcvJyByZXNwZWN0aXZlbHkuCiAv
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBWZWN0b3I8Y2hhcj4mKTsK
LXZvaWQgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyLCBWZWN0b3I8Y2hhcj4mKTsKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcm
LCBWZWN0b3I8Y2hhcj4mKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rv
cihjb25zdCB2b2lkKiwgdW5zaWduZWQpOworVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29k
ZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3RvcjxjaGFyPiYpOworVmVjdG9yPHVpbnQ4X3Q+
IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmKTsKKworU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7CitTdHJpbmcgYmFzZTY0
VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CitTdHJpbmcgYmFzZTY0
VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+Jik7CitTdHJpbmcgYmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYpOworCitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJik7CitX
VEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNv
ZGUoU3RyaW5nVmlldyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CitXVEZfRVhQT1JU
X1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3Qg
VmVjdG9yPGNoYXI+Jik7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgdWludDhfdCosIHVuc2lnbmVkKTsKK1dURl9FWFBP
UlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShjb25z
dCBjaGFyKiwgdW5zaWduZWQpOworCitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVu
Y29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LCBsZW5ndGgsIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7Cit9CisKK2lubGluZSBWZWN0b3I8dWlu
dDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1
dCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1
dC5zaXplKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7
Cit9CiAKLVdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZv
aWQqLCB1bnNpZ25lZCk7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVkT3JVbnNp
Z25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0
cmluZyYpOworaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihj
b25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1Zl
Y3RvcihpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkws
IEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKK30KIAotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFz
ZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlcik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoU3RyaW5nVmll
dywgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKLVdURl9FWFBPUlRfUFJJVkFU
RSBib29sIGJhc2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBTaWduZWRPclVuc2ln
bmVkQ2hhclZlY3RvckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJM
RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyKTsKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3Io
Y29uc3QgQ1N0cmluZyYgaW5wdXQpCit7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9y
KGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBC
YXNlNjRFbmNvZGVNYXA6OlVSTCk7Cit9CiAKLWlubGluZSB2b2lkIGJhc2U2NFVSTEVuY29kZShD
b25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbiwgVmVjdG9yPGNoYXI+JiBv
dXQpCitpbmxpbmUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IHZvaWQqIGlu
cHV0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgYmFzZTY0VVJMRW5jb2RlKGluLmRhdGEoKSwg
aW4uc2l6ZSgpLCBvdXQpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dCwg
bGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwog
fQogCi1pbmxpbmUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3Rv
cjxjaGFyPiYgb3V0KQoraW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25z
dCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQogewotICAgIGJhc2U2NFVSTEVuY29kZShpbi5kYXRh
KCksIGluLmxlbmd0aCgpLCBvdXQpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhp
bnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2
NEVuY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGUoQ29u
c3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgaW4pCitpbmxpbmUgU3RyaW5nIGJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQpCiB7Ci0gICAg
cmV0dXJuIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLnNpemUoKSk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRF
bmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwogfQogCi1pbmxpbmUgU3Ry
aW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5nJiBpbikKK2lubGluZSBTdHJpbmcgYmFz
ZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3QgQ1N0cmluZyYgaW5wdXQpCiB7Ci0gICAgcmV0dXJu
IGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgQmFzZTY0RW5j
b2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBib29sIGlzQmFzZTY0T3JCYXNlNjRV
UkxDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQpAQCAtMjE5LDE1ICsxNzQsMTE4IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyAKICAgICByZXR1cm4gaXNBU0NJSUFs
cGhhbnVtZXJpYyhjKSB8fCBjID09ICcrJyB8fCBjID09ICcvJyB8fCBjID09ICctJyB8fCBjID09
ICdfJzsKIH0KIAoraW5saW5lIHVuc2lnbmVkIGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKHVu
c2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoreworICAgIGlm
ICghaW5wdXRMZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGlucHV0TGVuZ3Ro
ID4gbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUpCisgICAgICAgIHJldHVybiAw
OworCisgICAgYXV0byBiYXNlUGFkZGVkRW5jb2RlZFNpemUgPSBbJl0geworICAgICAgICByZXR1
cm4gKChpbnB1dExlbmd0aCArIDIpIC8gMykgKiA0OworICAgIH07CisKKyAgICBhdXRvIGJhc2VV
bnBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAgICAgcmV0dXJuICgoaW5wdXRMZW5ndGgg
KiA0KSArIDIpIC8gMzsKKyAgICB9OworCisgICAgc3dpdGNoIChwb2xpY3kpIHsKKyAgICBjYXNl
IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnM6CisgICAgICAgIHJldHVybiBiYXNl
UGFkZGVkRW5jb2RlZFNpemUoKTsKKworICAgIGNhc2UgQmFzZTY0RW5jb2RlUG9saWN5OjpJbnNl
cnRMRnM6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBiYXNlUGFkZGVkRW5jb2RlZFNpemUoKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0gMSkgLyBtYXhpbXVtQmFzZTY0TGlu
ZUxlbmd0aFdoZW5JbnNlcnRpbmdMRnMpOworICAgIH0KKworICAgIGNhc2UgQmFzZTY0RW5jb2Rl
UG9saWN5OjpVUkw6CisgICAgICAgIHJldHVybiBiYXNlVW5wYWRkZWRFbmNvZGVkU2l6ZSgpOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitz
dHJ1Y3QgQmFzZTY0U3BlY2lmaWNhdGlvbiB7CisgICAgY29uc3Qgdm9pZCogaW5wdXREYXRhOwor
ICAgIHVuc2lnbmVkIGlucHV0TGVuZ3RoOworICAgIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3k7
CisgICAgQmFzZTY0RW5jb2RlTWFwIG1hcDsKK307CisKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0
aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qgdm9pZCogaW5wdXREYXRhLCB1bnNpZ25lZCBpbnB1dExl
bmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9O
b3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCBtYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1
bHQpCit7CisgICAgcmV0dXJuIHsgaW5wdXREYXRhLCBpbnB1dExlbmd0aCwgcG9saWN5LCBtYXAg
fTsKK30KKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0
RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcykKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
ZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgcG9saWN5KTsKK30KKworaW5saW5lIEJhc2U2
NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2Vy
dExGcykKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNp
emUoKSwgcG9saWN5KTsKK30KKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5j
b2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJh
c2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCit7CisgICAgcmV0dXJuIGJhc2U2NEVu
Y29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5KTsKK30KKworaW5saW5l
IEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCB2b2lkKiBpbnB1dERh
dGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoKQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlu
cHV0RGF0YSwgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNv
ZGVNYXA6OlVSTCk7Cit9CisKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVu
Y29kZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3sKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2RlUG9saWN5OjpV
UkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKK30KKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRp
b24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQoreworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCBCYXNlNjRFbmNv
ZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworfQorCitpbmxpbmUgQmFzZTY0
U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNvZGVkKGNvbnN0IENTdHJpbmcmIGlucHV0KQorewor
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJh
c2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7Cit9CisKK3RlbXBs
YXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj4geworcHVi
bGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IEJhc2U2NFNwZWNpZmljYXRpb24mIGJh
c2U2NCkKKyAgICAgICAgOiBtX2Jhc2U2NCB7IGJhc2U2NCB9CisgICAgICAgICwgbV9lbmNvZGVk
TGVuZ3RoIHsgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoYmFzZTY0LmlucHV0TGVuZ3RoLCBi
YXNlNjQucG9saWN5KSB9CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5jb2RlZExlbmd0aDsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
dm9pZCB3cml0ZVRvKENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAg
ICAgICAgYmFzZTY0RW5jb2RlKG1fYmFzZTY0LmlucHV0RGF0YSwgbV9iYXNlNjQuaW5wdXRMZW5n
dGgsIGRlc3RpbmF0aW9uLCBtX2VuY29kZWRMZW5ndGgsIG1fYmFzZTY0LnBvbGljeSwgbV9iYXNl
NjQubWFwKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzZTY0U3BlY2lmaWNhdGlvbiBtX2Jh
c2U2NDsKKyAgICB1bnNpZ25lZCBtX2VuY29kZWRMZW5ndGg7Cit9OworCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIAordXNpbmcgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOwogdXNpbmcgV1RGOjpCYXNl
NjRFbmNvZGVQb2xpY3k7Ci11c2luZyBXVEY6OkJhc2U2NERvTm90SW5zZXJ0TEZzOwotdXNpbmcg
V1RGOjpCYXNlNjRJbnNlcnRMRnM7Ci11c2luZyBXVEY6OkJhc2U2NFZhbGlkYXRlUGFkZGluZzsK
LXVzaW5nIFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXM7Ci11c2luZyBXVEY6OkJh
c2U2NERpc2NhcmRWZXJ0aWNhbFRhYjsKLXVzaW5nIFdURjo6YmFzZTY0RW5jb2RlOwogdXNpbmcg
V1RGOjpiYXNlNjREZWNvZGU7Cit1c2luZyBXVEY6OmJhc2U2NEVuY29kZVRvU3RyaW5nOwordXNp
bmcgV1RGOjpiYXNlNjRFbmNvZGVUb1ZlY3RvcjsKK3VzaW5nIFdURjo6YmFzZTY0RW5jb2RlZDsK
K3VzaW5nIFdURjo6YmFzZTY0VVJMRGVjb2RlOwogdXNpbmcgV1RGOjpiYXNlNjRVUkxEZWNvZGU7
Cit1c2luZyBXVEY6OmJhc2U2NFVSTEVuY29kZVRvU3RyaW5nOwordXNpbmcgV1RGOjpiYXNlNjRV
UkxFbmNvZGVUb1ZlY3RvcjsKK3VzaW5nIFdURjo6YmFzZTY0VVJMRW5jb2RlZDsKIHVzaW5nIFdU
Rjo6aXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3RlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI3NzcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI5NCBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3Jl
IG1vZGVybiBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIC0gVXBkYXRlcyB0byB1c2UgbmV3IHNpZ25hdHVyZXMgZm9yIGJh
c2U2NCBlbmNvZGluZy9kZWNvZGluZyBpbmNsdWRpbmcKKyAgICAgICAgICB1dGlsaXppbmcgdGhl
IHN0cmluZyB0eXBlIGFkYXB0b3IgYW5kIG1ha2VTdHJpbmcuCisgICAgICAgIC0gUmVwbGFjZSBv
dXQgcGFyYW1ldGVyIGJhc2VkIGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKSB3aXRoIAor
ICAgICAgICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3Rl
cktleSgpLgorICAgICAgICAtIFVwZGF0ZSBzeW5jaHJvbm91cyBsb2FkaW5nIGNvZGUgcGF0aCB0
byB1c2UgdWludDhfdCogY29uc2lzdGVudGx5IGZvcgorICAgICAgICAgIGRhdGEgYnVmZmVyIHJl
cHJlc2VudGF0aW9uLgorICAgICAgICAtIFJlcGxhY2Ugb3V0IHBhcmFtZXRlcnMgaW4gcXVvdGVk
UHJpbnRhYmxlRW5jb2RlL3F1b3RlZFByaW50YWJsZURlY29kZQorICAgICAgICAgIHdpdGggT3B0
aW9uYWwuCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0
cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleUlEc0tleWlkcyk6CisgICAgICAg
IFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZS4KKworICAgICAgICAoV2ViQ29yZTo6
c2FuaXRpemVLZXlpZHMpOiAKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRW5j
b2RlVG9TdHJpbmcoKQorCisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kv
TGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Np
b25DbGVhcktleTo6dXBkYXRlKTogCisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NERl
Y29kZSgpLgorCisgICAgICAgICogTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50Lm1tOgorICAgICAgICAoV2ViQ29yZTo6anNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZW1JbkNvbnRleHQpOgor
ICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRFbmNvZGVUb1N0cmluZygpLiBSZXBsYWNl
IHN0cmluZyBjb25jYXRlbnRhdGlvbgorICAgICAgICB1c2luZyBvcGVyYXRvcisgd2l0aCBtYWtl
U3RyaW5nKCkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29y
ZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JJ
bnRlcm5hbDo6cHJvZHVjZUNsaWVudERhdGFKc29uKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBu
ZXcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoKS4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXV0
aG4vUHVibGljS2V5Q3JlZGVudGlhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQdWJsaWNLZXlD
cmVkZW50aWFsOjpQdWJsaWNLZXlDcmVkZW50aWFsKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBu
ZXcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoKS4KKworICAgICAgICAqIE1vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVT
ZWNXZWJTb2NrZXRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpn
ZXRFeHBlY3RlZFdlYlNvY2tldEFjY2VwdCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKCkuCisKKyAgICAgICAgKiBjcnlwdG8vU2VyaWFsaXplZENy
eXB0b0tleVdyYXAuaDoKKyAgICAgICAgQ2hhbmdlIGZyb20gb3V0cGFyYW1ldGVyIGJhc2VkIGdl
dERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKSB0byBuZXcKKyAgICAgICAgT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkuCisKKyAgICAgICAgKiBj
cnlwdG8vZ2NyeXB0L0NyeXB0b0tleUVDR0NyeXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVudHMgY29uc3QpOgorICAgICAgICBVcGRh
dGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZygpLgorCisgICAgICAgICogY3J5
cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGUgZm9y
IG5ldyBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkgc2lnbmF0dXJlLgorCisgICAgICAgICog
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tl
eUFFUzo6aW1wb3J0SndrKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6ZXhwb3J0
SndrIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlIC8g
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoKS4KKyAgICAgICAgCisgICAgICAgICogY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5RUMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OmltcG9y
dEp3ayk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZS4KKworICAg
ICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q3J5cHRvS2V5SE1BQzo6aW1wb3J0SndrKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhN
QUM6OmV4cG9ydEp3ayBjb25zdCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVS
TERlY29kZSAvIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKCkuCisKKyAgICAgICAgKiBjcnlwdG8v
a2V5cy9DcnlwdG9LZXlSU0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpp
bXBvcnRKd2spOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpleHBvcnRKd2sgY29u
c3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZygpLgorCisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01h
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVs
ZW1lbnRzIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRW5jb2Rl
VG9TdHJpbmcoKS4KKworICAgICAgICAqIGNyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdy
YXBNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBbmRTdG9yZU1hc3RlcktleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpmaW5kTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNy
eXB0b01hc3RlcktleSk6IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IGRlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkoKSBzaWduYXR1cmUuCisKKyAgICAgICAgKiBjcnlwdG8vb3BlbnNz
bC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE9wZW5TU0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpnZXREZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KTogRGVsZXRlZC4KKyAgICAgICAgVXBkYXRlIGZvciBuZXcgZGVm
YXVsdFdlYkNyeXB0b01hc3RlcktleSgpIHNpZ25hdHVyZS4KKworICAgICAgICAqIGZpbGVhcGkv
RmlsZVJlYWRlckxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVy
Ojpjb252ZXJ0VG9EYXRhVVJMKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoKS4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0OjpjcmVhdGVEaWdlc3QpOgorICAg
ICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRFbmNvZGVUb1N0cmluZygpLgorCisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgIFVwZGF0
ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZSAvIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKCku
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YTo6ZGVjb2RlRGF0
YVRvQ29udGVudCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NEVuY29kZVRvU3Ry
aW5nKCkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDb250ZW50U2VjdXJpdHlQb2xpY3lTSEEyNTZI
YXNoKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlIC8gYmFzZTY0RW5j
b2RlVG9TdHJpbmcoKS4KKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0
d29ya0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcjo6YnVpbGRXZWJTb2Nr
ZXRNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlk
UmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50Ojpn
ZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0
d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXNwb25zZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoUmVzcG9uc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXJj
ZUNvbnRlbnQpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjREZWNvZGUgLyBiYXNl
NjRFbmNvZGVUb1N0cmluZygpLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50Ojpk
YXRhQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hp
dmUpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRFbmNvZGVUb1N0cmluZygpLgor
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgU3dpdGNoIHRv
IHVzaW5nIFZlY3Rvcjx1aW50OF90PiBidWZmZXIgdG8gbWF0Y2ggbmV3IGxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkKKyAgICAgICAgc2lnbmF0dXJlLgorCisgICAgICAgICogbG9hZGVyL0xvYWRl
clN0cmF0ZWd5Lmg6CisgICAgICAgIFN3aXRjaCB0byB1c2luZyBWZWN0b3I8dWludDhfdD4gZm9y
IHRoZSBkYXRhIGJ1ZmZlci4KKworICAgICAgICAqIGxvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6RXBo
ZW1lcmFsU291cmNlTm9uY2U6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNl
IG5ldyBiYXNlNjRVUkxEZWNvZGUuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NERlY29kZS4K
KworICAgICAgICAqIGxvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNSFRNTEFyY2hpdmU6OmdlbmVyYXRlTUhUTUxEYXRhKToKKyAgICAgICAg
U3dpdGNoIHRvIHVzaW5nIG5ldyBiYXNlNjRFbmNvZGUgYW5kIG5ldyBxdW90ZWRQcmludGFibGVF
bmNvZGUuCisKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNSFRNTFBhcnNlcjo6cGFyc2VOZXh0UGFydCk6CisgICAgICAg
IFN3aXRjaCB0byB1c2luZyBuZXcgYmFzZTY0RGVjb2RlIGFuZCBuZXcgcXVvdGVkUHJpbnRhYmxl
RGVjb2RlLgorCisgICAgICAgICogbG9hZGVyL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50
Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2Fs
Y3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJsZVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6
OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VTZWNyZXRU
b2tlbik6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZSAvIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKCkuCisKKyAgICAgICAgKiBwYWdlL0Jhc2U2NFV0aWxpdGllcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNlNjRVdGlsaXRpZXM6OmJ0b2EpOgorICAgICAgICAo
V2ViQ29yZTo6QmFzZTY0VXRpbGl0aWVzOjphdG9iKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBu
ZXcgYmFzZTY0RGVjb2RlIC8gYmFzZTY0RW5jb2RlVG9TdHJpbmcoKS4KKyAgICAKKyAgICAgICAg
KiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6dXNlclN0eWxlU2hlZXRM
b2NhdGlvbkNoYW5nZWQpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjREZWNvZGUu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkQnVmZmVyOjphcHBlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oOgorICAgICAgICBBZGQgb3ZlcmxvYWQgZm9yIGFwcGVuZCB3aGljaCBhbGxvd3MgcGFzc2lu
ZyBpbiBhIHVpbnQ4X3QqLgorCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xl
YXJrZXkvQ0RNQ2xlYXJLZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9y
bWF0KToKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RLZXlpZHNGcm9tQ2VuY0luaXREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RLZXlJZEZyb21XZWJNSW5pdERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRh
KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlIC8gYmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0
U2luZkRhdGEpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjREZWNvZGUuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZh
aXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNl
U2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6cmVxdWVzdExpY2Vuc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1
cGRhdGVMaWNlbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQ
bGF5U3RyZWFtaW5nQVZGT2JqQzo6ZGlkUHJvdmlkZVJlcXVlc3RzKToKKyAgICAgICAgVXBkYXRl
IHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlIC8gYmFzZTY0RW5jb2RlVG9TdHJpbmcoKS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwg
Y29uc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRFbmNvZGVUb1N0cmluZygp
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVVJMKToKKyAgICAgICAgVXBkYXRlIHRvIHVz
ZSBuZXcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZVVuaXF1ZUZvbnROYW1lKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVW5pcXVl
Rm9udE5hbWUpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRFbmNvZGVUb1N0cmlu
ZygpLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAg
ICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NEVuY29kZVRvU3RyaW5nKCkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bG9hZEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICBTd2l0Y2ggdG8gdXNp
bmcgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlciB0byBtYXRjaCBuZXcgbG9hZFJlc291cmNlU3luY2hy
b25vdXNseQorICAgICAgICBzaWduYXR1cmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJjZUhhbmRsZTo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIFN3aXRjaCB0byB1c2luZyBWZWN0
b3I8dWludDhfdD4gYnVmZmVyIHRvIG1hdGNoIG5ldyBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
CisgICAgICAgIHNpZ25hdHVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVu
dGlhbEJhc2UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxCYXNlOjpzZXJpYWxpemF0aW9uRm9yQmFz
aWNBdXRob3JpemF0aW9uSGVhZGVyIGNvbnN0KToKKyAgICAgICAgQWRkIGhlbHBlciB0byBjb25z
dHJ1Y3QgQmFzaWMgYXV0aCBoZWFkZXIgdG8gcmVwbGFjZSBkdXBsaWNhdGVkIGxvZ2ljIGluCisg
ICAgICAgIGNhbGwgc2l0ZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxE
ZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVCYXNl
NjQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRlY29kZUVzY2FwZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OmRlY29kZVN5bmNocm9ub3VzbHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaDoKKyAgICAgICAgVXBk
YXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oOgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGZvciB0
aGUgZGF0YSBidWZmZXIgaW4gdGhlIHN5bmNocm9ub3VzIGxvYWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oOgorICAgICAgICBTd2l0
Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlciB0byBtYXRjaCBuZXcgbG9hZFJlc291
cmNlU3luY2hyb25vdXNseQorICAgICAgICBzaWduYXR1cmUuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIpOgorICAgICAgICBVc2UgbmV3IHNlcmlhbGl6
YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSBoZWxwZXIuCisKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkp
OgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGZvciB0aGUgZGF0YSBi
dWZmZXIgaW4gdGhlIHN5bmNocm9ub3VzIGxvYWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwpOgorICAgICAgICBTd2l0Y2gg
dG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGZvciB0aGUgZGF0YSBidWZmZXIgaW4gdGhlIHN5bmNo
cm9ub3VzIGxvYWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhh
bmRsZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVh
ZGVyKToKKyAgICAgICAgVXNlIG5ldyBzZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9u
SGVhZGVyKCkgaGVscGVyLgorCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxh
dGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5n
IFZlY3Rvcjx1aW50OF90PiBmb3IgdGhlIGRhdGEgYnVmZmVyIGluIHRoZSBzeW5jaHJvbm91cyBs
b2FkLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50
OF90PiBmb3IgdGhlIGRhdGEgYnVmZmVyIGluIHRoZSBzeW5jaHJvbm91cyBsb2FkLgorCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIb3N0VExTQ2VydGlmaWNhdGVTZXQ6OmNvbXB1dGVDZXJ0aWZpY2F0ZUhh
c2gpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRFbmNvZGVUb1N0cmluZygpLgor
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OmRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0YSk6CisgICAgICAgIFN3
aXRjaCB0byByZXR1cm5pbmcgVmVjdG9yPHVpbnQ4X3Q+LgorCisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9RdW90ZWRQcmludGFibGUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvUXVvdGVk
UHJpbnRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OnF1b3RlZFByaW50YWJsZUVuY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpxdW90ZWRQcmludGFibGVEZWNvZGUpOgorICAgICAgICBSZXBsYWNlIHVzZXMgb2Yg
VmVjdG9yPGNoYXI+IHdpdGggVmVjdG9yPHVpbnQ4X3Q+IGFuZCB0aGUgb3V0IHBhcmFtZXRlcnMK
KyAgICAgICAgd2l0aCBPcHRpb25hbCByZXR1cm4gdmFsdWVzLgorCisgICAgICAgICogcGxhdGZv
cm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQ
dWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBi
YXNlNjRFbmNvZGVUb1N0cmluZygpLgorCisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL3NlcnZl
ci9TV1NjcmlwdFN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1dTY3JpcHRTdG9yYWdl
OjpzaGEySGFzaCBjb25zdCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKCkuCisKIDIwMjEtMDUtMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBVc2UgV1RGOjpMb2NrZXIgZm9yIGxvY2tpbmcgQmFzZUF1ZGlvQ29u
dGV4dCdzIGdyYXBoIGxvY2sKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVk
bWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJl
Z2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTUgKzgwLDE0IEBAIHN0YXRpYyBPcHRp
b25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4KICAgICAgICAgaWYgKCFrZXlJRCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFZlY3RvcjxjaGFyPiBrZXlJRERhdGE7Ci0gICAg
ICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pKQorICAg
ICAgICBhdXRvIGtleUlERGF0YSA9IGJhc2U2NFVSTERlY29kZShrZXlJRCk7CisgICAgICAgIGlm
ICgha2V5SUREYXRhKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGtleUlE
RGF0YS5zaXplKCkgPCBrS2V5SWRzTWluS2V5SWRTaXplSW5CeXRlcyB8fCBrZXlJRERhdGEuc2l6
ZSgpID4ga0tleUlkc01heEtleUlkU2l6ZUluQnl0ZXMpCisgICAgICAgIGlmIChrZXlJRERhdGEt
PnNpemUoKSA8IGtLZXlJZHNNaW5LZXlJZFNpemVJbkJ5dGVzIHx8IGtleUlERGF0YS0+c2l6ZSgp
ID4ga0tleUlkc01heEtleUlkU2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgICAgIFJlZjxTaGFyZWRCdWZmZXI+IGtleUlEQnVmZmVyID0gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlJRERhdGEpKTsKLSAgICAgICAga2V5SURzLmFwcGVu
ZChXVEZNb3ZlKGtleUlEQnVmZmVyKSk7CisgICAgICAgIGtleUlEcy5hcHBlbmQoU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoV1RGTW92ZSgqa2V5SUREYXRhKSkpOwogICAgIH0KIAogICAgIHJldHVybiBr
ZXlJRHM7CkBAIC0xMDUsNyArMTA0LDcgQEAgc3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNh
bml0aXplS2V5aQogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAg
ICBhdXRvIGtpZHNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1dG8m
IGJ1ZmZlciA6IGtleUlEQnVmZmVyLnZhbHVlKCkpCi0gICAgICAgIGtpZHNBcnJheS0+cHVzaFN0
cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkp
KTsKKyAgICAgICAga2lkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5n
KGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSkpOwogICAgIG9iamVjdC0+c2V0QXJyYXko
ImtpZHMiLCBXVEZNb3ZlKGtpZHNBcnJheSkpOwogCiAgICAgQ1N0cmluZyBqc29uRGF0YSA9IG9i
amVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9M
ZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xl
YXJLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTMgKzE2OSwxMyBAQCBib29sIENETVNl
c3Npb25DbGVhcktleTo6dXBkYXRlKFVpbnQ4QXJyCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlEYXRhOwot
ICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUocmF3S2V5RGF0YSwga2V5RGF0YSkgfHwga2V5
RGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8ga2V5RGF0YSA9IGJhc2U2NERlY29k
ZShyYXdLZXlEYXRhKTsKKyAgICAgICAgICAgIGlmICgha2V5RGF0YSB8fCBrZXlEYXRhLT5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQ2xlYXJLZXk6
OnVwZGF0ZSglcCkgLSBmYWlsZWQ6IHVuYWJsZSB0byBiYXNlNjQgZGVjb2RlIGtleSIsIHRoaXMp
OwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBtX2NhY2hlZEtleXMuc2V0KGtleUlkLCBXVEZNb3ZlKGtleURhdGEpKTsKKyAgICAgICAgICAg
IG1fY2FjaGVkS2V5cy5zZXQoa2V5SWQsIFdURk1vdmUoKmtleURhdGEpKTsKICAgICAgICAgICAg
IGZvdW5kVmFsaWRLZXkgPSB0cnVlOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFj
ZW1lbnQubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1
Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQz
LDE0ICsyNDMsMTIgQEAgdm9pZCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6cG9zdEV2ZQog
CiBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0KE5TRGF0YSAqZGF0YSwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgSlNDb250ZXh0ICpjb250ZXh0KQogewotICAgIFZlY3Rv
cjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShbZGF0YSBieXRlc10sIFtkYXRh
IGxlbmd0aF0sIGJhc2U2NERhdGEpOwotCisgICAgLy8gRklYTUU6IEFkZCBtYWtlQ0ZTdHJpbmcv
bWFrZU5TU3RyaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IFN0cmluZyBhbGxvY2F0aW9uLgogICAg
IFN0cmluZyBkYXRhNjQ7CiAgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIGRh
dGE2NCA9ICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAg
ICAgICBkYXRhNjQgPSBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBi
YXNlNjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOwogICAgIGVsc2UKLSAg
ICAgICAgZGF0YTY0ID0gImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cisg
ICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsIiwgYmFz
ZTY0RW5jb2RlZChbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0pKTsKIAogICAgIHJldHVybiBb
SlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6KGlkKWRhdGE2NC5jcmVhdGVDRlN0cmluZygpLmdldCgp
IGluQ29udGV4dDpjb250ZXh0XTsKIH0KQEAgLTM0Miw5ICszNDAsNyBAQCBzdGF0aWMgSlNWYWx1
ZSAqanNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlCiAgICAgICAgIGlkIHZhbHVlID0gaXRlbS52YWx1
ZTsKICAgICAgICAgTlNTdHJpbmcgKm1pbWVUeXBlID0gW1tpdGVtIGV4dHJhQXR0cmlidXRlc10g
b2JqZWN0Rm9yS2V5OkAiTUlNRXR5cGUiXTsKICAgICAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNs
YXNzOltOU0RhdGEgY2xhc3NdXSAmJiBtaW1lVHlwZSkgewotICAgICAgICAgICAgVmVjdG9yPGNo
YXI+IGJhc2U2NERhdGE7Ci0gICAgICAgICAgICBiYXNlNjRFbmNvZGUoW3ZhbHVlIGJ5dGVzXSwg
W3ZhbHVlIGxlbmd0aF0sIGJhc2U2NERhdGEpOwotICAgICAgICAgICAgU3RyaW5nIGRhdGE2NCA9
ICJkYXRhOiIgKyBTdHJpbmcobWltZVR5cGUpICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cisg
ICAgICAgICAgICBhdXRvIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgU3RyaW5nKG1pbWVU
eXBlKSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChbdmFsdWUgYnl0ZXNdLCBbdmFsdWUgbGVu
Z3RoXSkpOwogICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OihfX2JyaWRnZSBOU1N0
cmluZyAqKWRhdGE2NC5jcmVhdGVDRlN0cmluZygpLmdldCgpIGZvcktleTpAInZhbHVlIl07CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OnZhbHVlIGZv
cktleTpAInZhbHVlIl07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1
dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JD
b29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgc3RhdGljIFJl
ZjxBcnJheUJ1ZmZlcj4gcHJvZHVjZUNsaWVudERhdAogICAgICAgICBvYmplY3QtPnNldFN0cmlu
ZygidHlwZSJfcywgIndlYmF1dGhuLmdldCJfcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBvYmplY3QtPnNldFN0cmluZygiY2hhbGxlbmdlIl9zLCBXVEY6OmJhc2U2NFVSTEVuY29kZShj
aGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVuZ2UubGVuZ3RoKCkpKTsKKyAgICBvYmplY3QtPnNldFN0
cmluZygiY2hhbGxlbmdlIl9zLCBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjaGFsbGVuZ2UuZGF0
YSgpLCBjaGFsbGVuZ2UubGVuZ3RoKCkpKTsKICAgICBvYmplY3QtPnNldFN0cmluZygib3JpZ2lu
Il9zLCBvcmlnaW4udG9SYXdTdHJpbmcoKSk7CiAKICAgICBhdXRvIHV0ZjhKU09OU3RyaW5nID0g
b2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbC5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5
Q3JlZGVudGlhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgQXV0aGVudGlj
YXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyBQdQogfQogCiBQdWJsaWNLZXlDcmVkZW50aWFs
OjpQdWJsaWNLZXlDcmVkZW50aWFsKFJlZjxBdXRoZW50aWNhdG9yUmVzcG9uc2U+JiYgcmVzcG9u
c2UpCi0gICAgOiBCYXNpY0NyZWRlbnRpYWwoV1RGOjpiYXNlNjRVUkxFbmNvZGUocmVzcG9uc2Ut
PnJhd0lkKCktPmRhdGEoKSwgcmVzcG9uc2UtPnJhd0lkKCktPmJ5dGVMZW5ndGgoKSksIFR5cGU6
OlB1YmxpY0tleSwgRGlzY292ZXJ5OjpSZW1vdGUpCisgICAgOiBCYXNpY0NyZWRlbnRpYWwoYmFz
ZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzcG9uc2UtPnJhd0lkKCktPmRhdGEoKSwgcmVzcG9uc2Ut
PnJhd0lkKCktPmJ5dGVMZW5ndGgoKSksIFR5cGU6OlB1YmxpY0tleSwgRGlzY292ZXJ5OjpSZW1v
dGUpCiAgICAgLCBtX3Jlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKQogewogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhh
bmRzaGFrZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3
ICs5OCw3IEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZWNXZWJTb2NrZXRLZXkoKQogICAgIHN0
YXRpYyBjb25zdCBzaXplX3Qgbm9uY2VTaXplID0gMTY7CiAgICAgdW5zaWduZWQgY2hhciBrZXlb
bm9uY2VTaXplXTsKICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhrZXksIG5vbmNl
U2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShrZXksIG5vbmNlU2l6ZSk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleSwgbm9uY2VTaXplKTsKIH0KIAogU3RyaW5nIFdl
YlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQoY29uc3QgU3RyaW5n
JiBzZWNXZWJTb2NrZXRLZXkpCkBAIC0xMTAsNyArMTEwLDcgQEAgU3RyaW5nIFdlYlNvY2tldEhh
bmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZQogICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4od2ViU29ja2V0S2V5R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlH
VUlEKSk7CiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNo
KTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7
CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKGhhc2guZGF0YSgpLCBTSEExOjpoYXNo
U2l6ZSk7CiB9CiAKIFdlYlNvY2tldEhhbmRzaGFrZTo6V2ViU29ja2V0SGFuZHNoYWtlKGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBjbGllbnRPcmlnaW4sIGJvb2wgYWxsb3dDb29raWVzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3J5cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIC8vIG9mIHByb3RlY3Rpb24gaXMgbm90IHJlcXVpcmVkIGJ5IHRoZSBzcGVjIGFzIG9m
IDExIERlY2VtYmVyIDIwMTQ6CiAvLyBodHRwczovL3d3dy53My5vcmcvVFIvV2ViQ3J5cHRvQVBJ
LyNzZWN1cml0eS1kZXZlbG9wZXJzCiAKLVdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0RGVmYXVsdFdl
YkNyeXB0b01hc3RlcktleShWZWN0b3I8dWludDhfdD4mKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOwogV0VCQ09S
RV9FWFBPUlQgYm9vbCBkZWxldGVEZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CiAKIFdFQkNP
UkVfRVhQT1JUIGJvb2wgd3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBtYXN0ZXJLZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBWZWN0b3I8dWludDhf
dD4mIHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tl
eUVDR0NyeXB0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0tleUVDR0NyeXB0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyMywxMSArNTIzLDExIEBAIGJvb2wgQ3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVt
ZW4KICAgICAgICAgaWYgKHEgJiYgcS0+c2l6ZSgpID09IGN1cnZlVW5jb21wcmVzc2VkUG9pbnRT
aXplKG1fY3VydmUpKSB7CiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYTsKICAgICAgICAg
ICAgIGEuYXBwZW5kKHEtPmRhdGEoKSArIDEsIHVuY29tcHJlc3NlZEZpZWxkRWxlbWVudFNpemUp
OwotICAgICAgICAgICAgandrLnggPSBiYXNlNjRVUkxFbmNvZGUoYSk7CisgICAgICAgICAgICBq
d2sueCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGEpOwogCiAgICAgICAgICAgICBWZWN0b3I8
dWludDhfdD4gYjsKICAgICAgICAgICAgIGIuYXBwZW5kKHEtPmRhdGEoKSArIDEgKyB1bmNvbXBy
ZXNzZWRGaWVsZEVsZW1lbnRTaXplLCB1bmNvbXByZXNzZWRGaWVsZEVsZW1lbnRTaXplKTsKLSAg
ICAgICAgICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2RlKGIpOworICAgICAgICAgICAgandrLnkg
PSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhiKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTQz
LDcgKzU0Myw3IEBAIGJvb2wgQ3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW4KICAg
ICAgICAgICAgICAgICAgICAgKmQgPSBXVEZNb3ZlKHBhZGRlZERhdGEpOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIGp3ay5kID0gYmFzZTY0VVJMRW5jb2RlKCpkKTsKKyAg
ICAgICAgICAgICAgICBqd2suZCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKCpkKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9n
Y3J5cHQvU2VyaWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvU2VyaWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQu
Y3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1Nl
cmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTUg
KzI5LDE0IEBACiAjaWYgRU5BQkxFKFdFQl9DUllQVE8pCiAKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShWZWN0b3I8dWludDhfdD4mIG1h
c3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3Rl
cktleSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBVTlVTRURfUEFSQU0obWFzdGVy
S2V5KTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
CiAvLyBJbml0aWFsbHkgdGhlc2UgaGVscGVyIGZ1bmN0aW9ucyB3ZXJlIGludGVuZGVkIHRvIHBl
cmZvcm0gS0VLIHdyYXBwaW5nIGFuZCB1bndyYXBwaW5nLApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OCwxMCArODgsMTAgQEAgUmVmUHRyPENyeXB0b0tleUFFUz4gQ3J5cHRvS2V5QUVTOjppbXBv
cgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5rLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4gb2N0ZXRTZXF1ZW5j
ZTsKLSAgICBpZiAoIWJhc2U2NFVSTERlY29kZShrZXlEYXRhLmssIG9jdGV0U2VxdWVuY2UpKQor
ICAgIGF1dG8gb2N0ZXRTZXF1ZW5jZSA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmspOworICAg
IGlmICghb2N0ZXRTZXF1ZW5jZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFj
YWxsYmFjayhvY3RldFNlcXVlbmNlLnNpemUoKSAqIDgsIGtleURhdGEuYWxnKSkKKyAgICBpZiAo
IWNhbGxiYWNrKG9jdGV0U2VxdWVuY2UtPnNpemUoKSAqIDgsIGtleURhdGEuYWxnKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKHVzYWdlcyAmJiAha2V5RGF0YS51c2UuaXNOdWxs
KCkgJiYga2V5RGF0YS51c2UgIT0gImVuYyIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
MTAwLDE0ICsxMDAsMTQgQEAgUmVmUHRyPENyeXB0b0tleUFFUz4gQ3J5cHRvS2V5QUVTOjppbXBv
cgogICAgIGlmIChrZXlEYXRhLmV4dCAmJiAha2V5RGF0YS5leHQudmFsdWUoKSAmJiBleHRyYWN0
YWJsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENyeXB0b0tleUFFUyhhbGdvcml0aG0sIFdURk1vdmUob2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3Rh
YmxlLCB1c2FnZXMpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyeXB0b0tleUFFUyhhbGdv
cml0aG0sIFdURk1vdmUoKm9jdGV0U2VxdWVuY2UpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7CiB9
CiAKIEpzb25XZWJLZXkgQ3J5cHRvS2V5QUVTOjpleHBvcnRKd2soKSBjb25zdAogewogICAgIEpz
b25XZWJLZXkgcmVzdWx0OwogICAgIHJlc3VsdC5rdHkgPSAib2N0IjsKLSAgICByZXN1bHQuayA9
IGJhc2U2NFVSTEVuY29kZShtX2tleSk7CisgICAgcmVzdWx0LmsgPSBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZyhtX2tleSk7CiAgICAgcmVzdWx0LmtleV9vcHMgPSB1c2FnZXMoKTsKICAgICByZXN1
bHQuZXh0ID0gZXh0cmFjdGFibGUoKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OCwyMiArOTgsMjIgQEAgUmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6
aW1wb3J0SgogCiAgICAgaWYgKGtleURhdGEueC5pc051bGwoKSB8fCBrZXlEYXRhLnkuaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90PiB4OwotICAg
IGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS54LCB4KSkKKyAgICBhdXRvIHggPSBi
YXNlNjRVUkxEZWNvZGUoa2V5RGF0YS54KTsKKyAgICBpZiAoIXgpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90PiB5OwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxE
ZWNvZGUoa2V5RGF0YS55LCB5KSkKKyAgICBhdXRvIHkgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0
YS55KTsKKyAgICBpZiAoIXkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlE
YXRhLmQuaXNOdWxsKCkpIHsKICAgICAgICAgLy8gaW1wb3J0IHB1YmxpYyBrZXkKLSAgICAgICAg
cmV0dXJuIHBsYXRmb3JtSW1wb3J0SldLUHVibGljKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBX
VEZNb3ZlKHgpLCBXVEZNb3ZlKHkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmV0
dXJuIHBsYXRmb3JtSW1wb3J0SldLUHVibGljKGlkZW50aWZpZXIsICpuYW1lZEN1cnZlLCBXVEZN
b3ZlKCp4KSwgV1RGTW92ZSgqeSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgIH0KIAotICAg
IFZlY3Rvcjx1aW50OF90PiBkOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0
YS5kLCBkKSkKKyAgICBhdXRvIGQgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBp
ZiAoIWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIGltcG9ydCBwcml2YXRlIGtl
eQotICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoaWRlbnRpZmllciwgKm5hbWVk
Q3VydmUsIFdURk1vdmUoeCksIFdURk1vdmUoeSksIFdURk1vdmUoZCksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOworICAgIHJldHVybiBwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoaWRlbnRpZmllciwg
Km5hbWVkQ3VydmUsIFdURk1vdmUoKngpLCBXVEZNb3ZlKCp5KSwgV1RGTW92ZSgqZCksIGV4dHJh
Y3RhYmxlLCB1c2FnZXMpOwogfQogCiBSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjpp
bXBvcnRTcGtpKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBjdXJ2ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwg
Q3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRv
L2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDMsOCArMTAzLDggQEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5rLmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBWZWN0b3I8dWludDhfdD4gb2N0ZXRTZXF1ZW5jZTsK
LSAgICBpZiAoIWJhc2U2NFVSTERlY29kZShrZXlEYXRhLmssIG9jdGV0U2VxdWVuY2UpKQorICAg
IGF1dG8gb2N0ZXRTZXF1ZW5jZSA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmspOworICAgIGlm
ICghb2N0ZXRTZXF1ZW5jZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFjYWxs
YmFjayhoYXNoLCBrZXlEYXRhLmFsZykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTE1
LDE0ICsxMTUsMTQgQEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAog
ICAgIGlmIChrZXlEYXRhLmV4dCAmJiAha2V5RGF0YS5leHQudmFsdWUoKSAmJiBleHRyYWN0YWJs
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQ3J5cHRvS2V5SE1BQzo6
aW1wb3J0UmF3KGxlbmd0aEJpdHMsIGhhc2gsIFdURk1vdmUob2N0ZXRTZXF1ZW5jZSksIGV4dHJh
Y3RhYmxlLCB1c2FnZXMpOworICAgIHJldHVybiBDcnlwdG9LZXlITUFDOjppbXBvcnRSYXcobGVu
Z3RoQml0cywgaGFzaCwgV1RGTW92ZSgqb2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxlLCB1c2Fn
ZXMpOwogfQogCiBKc29uV2ViS2V5IENyeXB0b0tleUhNQUM6OmV4cG9ydEp3aygpIGNvbnN0CiB7
CiAgICAgSnNvbldlYktleSByZXN1bHQ7CiAgICAgcmVzdWx0Lmt0eSA9ICJvY3QiOwotICAgIHJl
c3VsdC5rID0gYmFzZTY0VVJMRW5jb2RlKG1fa2V5KTsKKyAgICByZXN1bHQuayA9IGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKG1fa2V5KTsKICAgICByZXN1bHQua2V5X29wcyA9IHVzYWdlcygpOwog
ICAgIHJlc3VsdC5leHQgPSBleHRyYWN0YWJsZSgpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDY1ICs0NSw4NyBAQCBSZWZQdHI8Q3J5cHRvS2V5UlNBPiBD
cnlwdG9LZXlSU0E6OmltcG9yCiAKICAgICBpZiAoa2V5RGF0YS5uLmlzTnVsbCgpIHx8IGtleURh
dGEuZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IG1vZHVsdXM7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLm4sIG1v
ZHVsdXMpKQorICAgIGF1dG8gbW9kdWx1cyA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLm4pOwor
ICAgIGlmICghbW9kdWx1cykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgLy8gUGVyIFJG
QyA3NTE4IFNlY3Rpb24gNi4zLjEuMTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1
MTgjc2VjdGlvbi02LjMuMS4xCi0gICAgaWYgKCFtb2R1bHVzLmlzRW1wdHkoKSAmJiAhbW9kdWx1
c1swXSkKLSAgICAgICAgbW9kdWx1cy5yZW1vdmUoMCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGV4
cG9uZW50OwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5lLCBleHBvbmVu
dCkpCisgICAgaWYgKCFtb2R1bHVzLT5pc0VtcHR5KCkgJiYgIW1vZHVsdXMtPmF0KDApKQorICAg
ICAgICBtb2R1bHVzLT5yZW1vdmUoMCk7CisgICAgYXV0byBleHBvbmVudCA9IGJhc2U2NFVSTERl
Y29kZShrZXlEYXRhLmUpOworICAgIGlmICghZXhwb25lbnQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGlmIChrZXlEYXRhLmQuaXNOdWxsKCkpIHsKICAgICAgICAgLy8gaW1wb3J0IHB1
YmxpYyBrZXkKLSAgICAgICAgYXV0byBwdWJsaWNLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6Y3JlYXRlUHVibGljKFdURk1vdmUobW9kdWx1cyksIFdURk1vdmUoZXhwb25l
bnQpKTsKKyAgICAgICAgYXV0byBwdWJsaWNLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29t
cG9uZW50czo6Y3JlYXRlUHVibGljKFdURk1vdmUoKm1vZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVu
dCkpOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8x
IGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxkIG5vdCBoYXZlIGFueSBlZmZlY3QgaWYg
aGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0
ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFf
MSksICEhaGFzaCwgKnB1YmxpY0tleUNvbXBvbmVudHMsIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwog
ICAgIH0KIAogICAgIC8vIGltcG9ydCBwcml2YXRlIGtleQotICAgIFZlY3Rvcjx1aW50OF90PiBw
cml2YXRlRXhwb25lbnQ7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLmQs
IHByaXZhdGVFeHBvbmVudCkpCisgICAgYXV0byBwcml2YXRlRXhwb25lbnQgPSBiYXNlNjRVUkxE
ZWNvZGUoa2V5RGF0YS5kKTsKKyAgICBpZiAoIXByaXZhdGVFeHBvbmVudCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEucC5pc051bGwoKSAmJiBrZXlEYXRhLnEuaXNO
dWxsKCkgJiYga2V5RGF0YS5kcC5pc051bGwoKSAmJiBrZXlEYXRhLmRwLmlzTnVsbCgpICYmIGtl
eURhdGEucWkuaXNOdWxsKCkpIHsKLSAgICAgICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9
IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUoV1RGTW92ZShtb2R1bHVzKSwg
V1RGTW92ZShleHBvbmVudCksIFdURk1vdmUocHJpdmF0ZUV4cG9uZW50KSk7CisgICAgICAgIGF1
dG8gcHJpdmF0ZUtleUNvbXBvbmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpjcmVhdGVQ
cml2YXRlKFdURk1vdmUoKm1vZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVudCksIFdURk1vdmUoKnBy
aXZhdGVFeHBvbmVudCkpOwogICAgICAgICAvLyBOb3RpY2U6IENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4gSXQgc2hvdWxkIG5vdCBoYXZlIGFu
eSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51bGxvcHQuCiAgICAgICAgIHJldHVybiBDcnlwdG9L
ZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRzLCBleHRyYWN0YWJs
ZSwgdXNhZ2VzKTsKICAgICB9CiAKICAgICBpZiAoa2V5RGF0YS5wLmlzTnVsbCgpIHx8IGtleURh
dGEucS5pc051bGwoKSB8fCBrZXlEYXRhLmRwLmlzTnVsbCgpIHx8IGtleURhdGEuZHEuaXNOdWxs
KCkgfHwga2V5RGF0YS5xaS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
Q3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGZpcnN0UHJpbWVJbmZvOwotICAgIENy
eXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBzZWNvbmRQcmltZUluZm87Ci0gICAgaWYg
KCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLnAsIGZpcnN0UHJpbWVJbmZvLnByaW1lRmFj
dG9yKSkKKyAgICAKKyAgICBhdXRvIGZpcnN0UHJpbWVGYWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUo
a2V5RGF0YS5wKTsKKyAgICBpZiAoIWZpcnN0UHJpbWVGYWN0b3IpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kcCwgZmlyc3RQ
cmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQpKQorICAgIGF1dG8gZmlyc3RGYWN0b3JDUlRFeHBv
bmVudCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmRwKTsKKyAgICBpZiAoIWZpcnN0RmFjdG9y
Q1JURXhwb25lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghV1RGOjpiYXNl
NjRVUkxEZWNvZGUoa2V5RGF0YS5xLCBzZWNvbmRQcmltZUluZm8ucHJpbWVGYWN0b3IpKQorICAg
IGF1dG8gc2Vjb25kUHJpbWVGYWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5xKTsKKyAg
ICBpZiAoIXNlY29uZFByaW1lRmFjdG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBp
ZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZHEsIHNlY29uZFByaW1lSW5mby5mYWN0
b3JDUlRFeHBvbmVudCkpCisgICAgYXV0byBzZWNvbmRGYWN0b3JDUlRFeHBvbmVudCA9IGJhc2U2
NFVSTERlY29kZShrZXlEYXRhLmRxKTsKKyAgICBpZiAoIXNlY29uZEZhY3RvckNSVEV4cG9uZW50
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2Rl
KGtleURhdGEucWksIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRDb2VmZmljaWVudCkpCisgICAg
YXV0byBzZWNvbmRGYWN0b3JDUlRDb2VmZmljaWVudCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRh
LnFpKTsKKyAgICBpZiAoIXNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBmaXJz
dFByaW1lSW5mbzsKKyAgICBmaXJzdFByaW1lSW5mby5wcmltZUZhY3RvciA9IFdURk1vdmUoKmZp
cnN0UHJpbWVGYWN0b3IpOworICAgIGZpcnN0UHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50ID0g
V1RGTW92ZSgqZmlyc3RGYWN0b3JDUlRFeHBvbmVudCk7CisgICAgCisgICAgQ3J5cHRvS2V5UlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mbzsKKyAgICBzZWNvbmRQcmltZUlu
Zm8ucHJpbWVGYWN0b3IgPSBXVEZNb3ZlKCpzZWNvbmRQcmltZUZhY3Rvcik7CisgICAgc2Vjb25k
UHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50ID0gV1RGTW92ZSgqc2Vjb25kRmFjdG9yQ1JURXhw
b25lbnQpOworICAgIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRDb2VmZmljaWVudCA9IFdURk1v
dmUoKnNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50KTsKKwogICAgIGlmICgha2V5RGF0YS5vdGgp
IHsKLSAgICAgICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBv
bmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEoV1RGTW92ZShtb2R1bHVzKSwg
V1RGTW92ZShleHBvbmVudCksIFdURk1vdmUocHJpdmF0ZUV4cG9uZW50KSwgV1RGTW92ZShmaXJz
dFByaW1lSW5mbyksIFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwgeyB9KTsKKyAgICAgICAgYXV0
byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBvbmVudHM6OmNyZWF0ZVBy
aXZhdGVXaXRoQWRkaXRpb25hbERhdGEoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9u
ZW50KSwgV1RGTW92ZSgqcHJpdmF0ZUV4cG9uZW50KSwgV1RGTW92ZShmaXJzdFByaW1lSW5mbyks
IFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwgeyB9KTsKICAgICAgICAgLy8gTm90aWNlOiBDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuIEl0IHNo
b3VsZCBub3QgaGF2ZSBhbnkgZWZmZWN0IGlmIGhhc2ggaXMgV1RGOjpudWxsb3B0LgogICAgICAg
ICByZXR1cm4gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBoYXNoLnZhbHVlT3IoQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsICpwcml2YXRlS2V5Q29tcG9u
ZW50cywgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgfQogCiAgICAgVmVjdG9yPENyeXB0b0tl
eVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbz4gb3RoZXJQcmltZUluZm9zOwogICAgIGZvciAoY29u
c3QgYXV0byYgdmFsdWUgOiBrZXlEYXRhLm90aC52YWx1ZSgpKSB7Ci0gICAgICAgIENyeXB0b0tl
eVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBpbmZvOwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0
VVJMRGVjb2RlKHZhbHVlLnIsIGluZm8ucHJpbWVGYWN0b3IpKQorICAgICAgICBhdXRvIHByaW1l
RmFjdG9yID0gYmFzZTY0VVJMRGVjb2RlKHZhbHVlLnIpOworICAgICAgICBpZiAoIXByaW1lRmFj
dG9yKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlmICghV1RGOjpiYXNl
NjRVUkxEZWNvZGUodmFsdWUuZCwgaW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisgICAgICAgIGF1
dG8gZmFjdG9yQ1JURXhwb25lbnQgPSBiYXNlNjRVUkxEZWNvZGUodmFsdWUuZCk7CisgICAgICAg
IGlmICghZmFjdG9yQ1JURXhwb25lbnQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZSh2YWx1ZS50LCBpbmZvLmZhY3RvckNSVENv
ZWZmaWNpZW50KSkKKyAgICAgICAgYXV0byBmYWN0b3JDUlRDb2VmZmljaWVudCA9IGJhc2U2NFVS
TERlY29kZSh2YWx1ZS50KTsKKyAgICAgICAgaWYgKCFmYWN0b3JDUlRDb2VmZmljaWVudCkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBvdGhlclByaW1lSW5mb3MuYXBwZW5k
KGluZm8pOworCisgICAgICAgIENyeXB0b0tleVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBpbmZv
OworICAgICAgICBpbmZvLnByaW1lRmFjdG9yID0gV1RGTW92ZSgqcHJpbWVGYWN0b3IpOworICAg
ICAgICBpbmZvLmZhY3RvckNSVEV4cG9uZW50ID0gV1RGTW92ZSgqZmFjdG9yQ1JURXhwb25lbnQp
OworICAgICAgICBpbmZvLmZhY3RvckNSVENvZWZmaWNpZW50ID0gV1RGTW92ZSgqZmFjdG9yQ1JU
Q29lZmZpY2llbnQpOworCisgICAgICAgIG90aGVyUHJpbWVJbmZvcy5hcHBlbmQoV1RGTW92ZShp
bmZvKSk7CiAgICAgfQogCi0gICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tl
eVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEoV1RGTW92ZSht
b2R1bHVzKSwgV1RGTW92ZShleHBvbmVudCksIFdURk1vdmUocHJpdmF0ZUV4cG9uZW50KSwgV1RG
TW92ZShmaXJzdFByaW1lSW5mbyksIFdURk1vdmUoc2Vjb25kUHJpbWVJbmZvKSwgV1RGTW92ZShv
dGhlclByaW1lSW5mb3MpKTsKKyAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRv
S2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3Zl
KCptb2R1bHVzKSwgV1RGTW92ZSgqZXhwb25lbnQpLCBXVEZNb3ZlKCpwcml2YXRlRXhwb25lbnQp
LCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCBXVEZN
b3ZlKG90aGVyUHJpbWVJbmZvcykpOwogICAgIC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6U0hBXzEgaXMganVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUg
YW55IGVmZmVjdCBpZiBoYXNoIGlzIFdURjo6bnVsbG9wdC4KICAgICByZXR1cm4gQ3J5cHRvS2V5
UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBoYXNoLnZhbHVlT3IoQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6U0hBXzEpLCAhIWhhc2gsICpwcml2YXRlS2V5Q29tcG9uZW50cywgZXh0cmFjdGFibGUs
IHVzYWdlcyk7CiB9CkBAIC0xMTgsMzAgKzE0MCwzMCBAQCBKc29uV2ViS2V5IENyeXB0b0tleVJT
QTo6ZXhwb3J0SndrKCkgY29uCiAgICAgYXV0byByc2FDb21wb25lbnRzID0gZXhwb3J0RGF0YSgp
OwogCiAgICAgLy8gcHVibGljIGtleQotICAgIHJlc3VsdC5uID0gYmFzZTY0VVJMRW5jb2RlKHJz
YUNvbXBvbmVudHMtPm1vZHVsdXMoKSk7Ci0gICAgcmVzdWx0LmUgPSBiYXNlNjRVUkxFbmNvZGUo
cnNhQ29tcG9uZW50cy0+ZXhwb25lbnQoKSk7CisgICAgcmVzdWx0Lm4gPSBiYXNlNjRVUkxFbmNv
ZGVUb1N0cmluZyhyc2FDb21wb25lbnRzLT5tb2R1bHVzKCkpOworICAgIHJlc3VsdC5lID0gYmFz
ZTY0VVJMRW5jb2RlVG9TdHJpbmcocnNhQ29tcG9uZW50cy0+ZXhwb25lbnQoKSk7CiAgICAgaWYg
KHJzYUNvbXBvbmVudHMtPnR5cGUoKSA9PSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpUeXBlOjpQ
dWJsaWMpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvLyBwcml2YXRlIGtleQotICAg
IHJlc3VsdC5kID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnByaXZhdGVFeHBvbmVu
dCgpKTsKKyAgICByZXN1bHQuZCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJzYUNvbXBvbmVu
dHMtPnByaXZhdGVFeHBvbmVudCgpKTsKICAgICBpZiAoIXJzYUNvbXBvbmVudHMtPmhhc0FkZGl0
aW9uYWxQcml2YXRlS2V5UGFyYW1ldGVycygpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0g
ICAgcmVzdWx0LnAgPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+Zmlyc3RQcmltZUlu
Zm8oKS5wcmltZUZhY3Rvcik7Ci0gICAgcmVzdWx0LnEgPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29t
cG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkucHJpbWVGYWN0b3IpOwotICAgIHJlc3VsdC5kcCA9
IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5maXJzdFByaW1lSW5mbygpLmZhY3RvckNS
VEV4cG9uZW50KTsKLSAgICByZXN1bHQuZHEgPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50
cy0+c2Vjb25kUHJpbWVJbmZvKCkuZmFjdG9yQ1JURXhwb25lbnQpOwotICAgIHJlc3VsdC5xaSA9
IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JD
UlRDb2VmZmljaWVudCk7CisgICAgcmVzdWx0LnAgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhy
c2FDb21wb25lbnRzLT5maXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9yKTsKKyAgICByZXN1bHQu
cSA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1lSW5m
bygpLnByaW1lRmFjdG9yKTsKKyAgICByZXN1bHQuZHAgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmlu
Zyhyc2FDb21wb25lbnRzLT5maXJzdFByaW1lSW5mbygpLmZhY3RvckNSVEV4cG9uZW50KTsKKyAg
ICByZXN1bHQuZHEgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyc2FDb21wb25lbnRzLT5zZWNv
bmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBvbmVudCk7CisgICAgcmVzdWx0LnFpID0gYmFzZTY0
VVJMRW5jb2RlVG9TdHJpbmcocnNhQ29tcG9uZW50cy0+c2Vjb25kUHJpbWVJbmZvKCkuZmFjdG9y
Q1JUQ29lZmZpY2llbnQpOwogICAgIGlmIChyc2FDb21wb25lbnRzLT5vdGhlclByaW1lSW5mb3Mo
KS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICBWZWN0b3I8UnNhT3Ro
ZXJQcmltZXNJbmZvPiBvdGg7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbmZvIDogcnNhQ29tcG9u
ZW50cy0+b3RoZXJQcmltZUluZm9zKCkpIHsKICAgICAgICAgUnNhT3RoZXJQcmltZXNJbmZvIG90
aGVySW5mbzsKLSAgICAgICAgb3RoZXJJbmZvLnIgPSBiYXNlNjRVUkxFbmNvZGUoaW5mby5wcmlt
ZUZhY3Rvcik7Ci0gICAgICAgIG90aGVySW5mby5kID0gYmFzZTY0VVJMRW5jb2RlKGluZm8uZmFj
dG9yQ1JURXhwb25lbnQpOwotICAgICAgICBvdGhlckluZm8udCA9IGJhc2U2NFVSTEVuY29kZShp
bmZvLmZhY3RvckNSVENvZWZmaWNpZW50KTsKKyAgICAgICAgb3RoZXJJbmZvLnIgPSBiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZyhpbmZvLnByaW1lRmFjdG9yKTsKKyAgICAgICAgb3RoZXJJbmZvLmQg
PSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhpbmZvLmZhY3RvckNSVEV4cG9uZW50KTsKKyAgICAg
ICAgb3RoZXJJbmZvLnQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhpbmZvLmZhY3RvckNSVENv
ZWZmaWNpZW50KTsKICAgICAgICAgb3RoLmFwcGVuZChXVEZNb3ZlKG90aGVySW5mbykpOwogICAg
IH0KICAgICByZXN1bHQub3RoID0gV1RGTW92ZShvdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTcsMTAgKzE5NywxMCBAQCBib29sIENyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxk
RWxlbWVuCiAKICAgICBpZiAoVU5MSUtFTFkoKHNpemUgIT0gcHVibGljS2V5U2l6ZSkgJiYgKHNp
emUgIT0gcHJpdmF0ZUtleVNpemUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGp3ay54
ID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUocmVzdWx0LmRhdGEoKSArIDEsIGtleVNpemVJbkJ5dGVz
KTsKLSAgICBqd2sueSA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHJlc3VsdC5kYXRhKCkgKyBrZXlT
aXplSW5CeXRlcyArIDEsIGtleVNpemVJbkJ5dGVzKTsKKyAgICBqd2sueCA9IGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKHJlc3VsdC5kYXRhKCkgKyAxLCBrZXlTaXplSW5CeXRlcyk7CisgICAgandr
LnkgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQuZGF0YSgpICsga2V5U2l6ZUluQnl0
ZXMgKyAxLCBrZXlTaXplSW5CeXRlcyk7CiAgICAgaWYgKHNpemUgPiBwdWJsaWNLZXlTaXplKQot
ICAgICAgICBqd2suZCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKHJlc3VsdC5kYXRhKCkgKyBwdWJs
aWNLZXlTaXplLCBrZXlTaXplSW5CeXRlcyk7CisgICAgICAgIGp3ay5kID0gYmFzZTY0VVJMRW5j
b2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIHB1YmxpY0tleVNpemUsIGtleVNpemVJbkJ5dGVz
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0IDxDb21t
b25DcnlwdG8vQ29tbW9uU3ltbWV0cmljS2V5d3JhcC5oPgogI2ltcG9ydCA8Y3J0X2V4dGVybnMu
aD4KICNpbXBvcnQgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CisjaW1wb3J0IDx3dGYv
T3B0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+CkBA
IC04MCwxMSArODEsMTEgQEAgc3RhdGljIE5TU3RyaW5nKiBtYXN0ZXJLZXlBY2NvdW50TmFtZUZv
cgogICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImNvbS5hcHBsZS5XZWJL
aXQuV2ViQ3J5cHRvLm1hc3RlcislQCIsIGJ1bmRsZUlkZW50aWZpZXJdOwogfQogCi1zdGF0aWMg
Ym9vbCBjcmVhdGVBbmRTdG9yZU1hc3RlcktleShWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleURh
dGEpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBjcmVhdGVBbmRTdG9yZU1hc3Rl
cktleSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNz
UHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFscykpOwogCi0gICAgbWFzdGVyS2V5RGF0YS5y
ZXNpemUobWFzdGVyS2V5U2l6ZUluQnl0ZXMpOworICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJL
ZXlEYXRhKG1hc3RlcktleVNpemVJbkJ5dGVzKTsKICAgICBhdXRvIHJjID0gQ0NSYW5kb21HZW5l
cmF0ZUJ5dGVzKG1hc3RlcktleURhdGEuZGF0YSgpLCBtYXN0ZXJLZXlEYXRhLnNpemUoKSk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQocmMgPT0ga0NDU3VjY2Vzcyk7CiAKQEAgLTEwNyw3ICsxMDgsNyBA
QCBzdGF0aWMgYm9vbCBjcmVhdGVBbmRTdG9yZU1hc3RlcktleShWZWN0CiAgICAgc3RhdHVzID0g
U2VjQWNjZXNzQ3JlYXRlKChfX2JyaWRnZSBDRlN0cmluZ1JlZilsb2NhbGl6ZWRJdGVtTmFtZSwg
bnVsbHB0ciwgJmFjY2Vzc1JlZik7CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dB
bHdheXMoIkNhbm5vdCBjcmVhdGUgYSBzZWN1cml0eSBhY2Nlc3Mgb2JqZWN0IGZvciBzdG9yaW5n
IFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KICAgICBS
ZXRhaW5QdHI8U2VjQWNjZXNzUmVmPiBhY2Nlc3MgPSBhZG9wdENGKGFjY2Vzc1JlZik7CiAKQEAg
LTEyMCwxOSArMTIxLDE4IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICBpZiAoc3RhdHVzKSB7CiAgICAg
ICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IGNyZWF0ZSBhIHRydXN0ZWQgYXBwbGljYXRpb24gb2Jq
ZWN0IGZvciBzdG9yaW5nIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3Rh
dHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIH0KICAgICBSZXRhaW5QdHI8U2VjVHJ1c3RlZEFwcGxpY2F0aW9uUmVmPiB0cnVzdGVk
QXBwID0gYWRvcHRDRih0cnVzdGVkQXBwUmVmKTsKIAogICAgIHN0YXR1cyA9IFNlY0FDTFNldENv
bnRlbnRzKGFjbCwgKF9fYnJpZGdlIENGQXJyYXlSZWYpQFsgKF9fYnJpZGdlIGlkKXRydXN0ZWRB
cHAuZ2V0KCkgXSwgKF9fYnJpZGdlIENGU3RyaW5nUmVmKWxvY2FsaXplZEl0ZW1OYW1lLCBrU2Vj
S2V5Y2hhaW5Qcm9tcHRSZXF1aXJlUGFzc3BoYXNlKTsKICAgICBpZiAoc3RhdHVzKSB7CiAgICAg
ICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IHNldCBBQ0wgZm9yIFdlYkNyeXB0byBtYXN0ZXIga2V5
LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KICNlbmRpZgogCi0gICAgVmVjdG9yPGNoYXI+
IGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhOwotICAgIGJhc2U2NEVuY29kZShtYXN0ZXJLZXlE
YXRhLCBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YSk7CisgICAgYXV0byBiYXNlNjRFbmNvZGVk
TWFzdGVyS2V5RGF0YSA9IGJhc2U2NEVuY29kZVRvVmVjdG9yKG1hc3RlcktleURhdGEpOwogCiAg
ICAgLy8gQ2Fubm90IHVzZSBrU2VjQ2xhc3NLZXkgYmVjYXVzZSBvZiA8cmRhcjovL3Byb2JsZW0v
MTYwNjgyMDc+LgogICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IEB7CkBAIC0xNTAsMTIg
KzE1MCwxMyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICBzdGF0dXMg
PSBTZWNJdGVtQWRkKChDRkRpY3Rpb25hcnlSZWYpYXR0cmlidXRlcywgbnVsbHB0cik7CiAgICAg
aWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBzdG9yZSBXZWJDcnlw
dG8gbWFzdGVyIGtleSwgZXJyb3IgJWQiLCAoaW50KXN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7CisKKyAgICByZXR1cm4gbWFzdGVyS2V5RGF0YTsKIH0KIAotc3RhdGljIGJvb2wgZmluZE1h
c3RlcktleShWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleURhdGEpCitzdGF0aWMgT3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBmaW5kTWFzdGVyS2V5KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCho
YXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc0NyZWRlbnRpYWxz
KSk7CiAKQEAgLTE3MCwyMCArMTcxLDI1IEBAIHN0YXRpYyBib29sIGZpbmRNYXN0ZXJLZXkoVmVj
dG9yPHVpbnQ4X3QKICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgIGlmIChzdGF0dXMgIT0gZXJy
U2VjSXRlbU5vdEZvdW5kICYmIHN0YXR1cyAhPSBlcnJTZWNVc2VyQ2FuY2VsZWQpCiAgICAgICAg
ICAgICBXVEZMb2dBbHdheXMoIkNvdWxkIG5vdCBmaW5kIFdlYkNyeXB0byBtYXN0ZXIga2V5IGlu
IEtleWNoYWluLCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KICAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBrZXlEYXRhID0gYWRvcHRDRihrZXlEYXRhUmVmKTsKLQotICAgIFZlY3Rvcjx1aW50
OF90PiBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YSA9IHZlY3RvckZyb21OU0RhdGEoKF9fYnJp
ZGdlIE5TRGF0YSAqKWtleURhdGEuZ2V0KCkpOwotICAgIHJldHVybiBiYXNlNjREZWNvZGUoKGNv
bnN0IGNoYXIqKWJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhLmRhdGEoKSwgYmFzZTY0RW5jb2Rl
ZE1hc3RlcktleURhdGEuc2l6ZSgpLCBtYXN0ZXJLZXlEYXRhKTsKKyAgICByZXR1cm4gYmFzZTY0
RGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KENGRGF0YUdldEJ5dGVQdHIoa2V5
RGF0YS5nZXQoKSkpLCBDRkRhdGFHZXRMZW5ndGgoa2V5RGF0YS5nZXQoKSkpOwogfQogCi1ib29s
IGdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkp
CitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQog
ewotICAgIGlmICghZmluZE1hc3RlcktleShtYXN0ZXJLZXkpICYmICFjcmVhdGVBbmRTdG9yZU1h
c3RlcktleShtYXN0ZXJLZXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUkVMRUFTRV9B
U1NFUlQobWFzdGVyS2V5LnNpemUoKSA9PSBtYXN0ZXJLZXlTaXplSW5CeXRlcyk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKGF1dG8gbWFzdGVyS2V5ID0gZmluZE1hc3RlcktleSgpKSB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1hc3RlcktleS0+c2l6ZSgpID09IG1hc3RlcktleVNpemVJ
bkJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIG1hc3RlcktleTsKKyAgICB9CisKKyAgICBpZiAoYXV0
byBtYXN0ZXJLZXkgPSBjcmVhdGVBbmRTdG9yZU1hc3RlcktleSgpKSB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1hc3RlcktleS0+c2l6ZSgpID09IG1hc3RlcktleVNpemVJbkJ5dGVzKTsKKyAg
ICAgICAgcmV0dXJuIG1hc3RlcktleTsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogfQogCiBib29sIGRlbGV0ZURlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvU2VyaWFsaXplZENyeXB0b0tleVdyYXBPcGVuU1NM
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9TZXJpYWxp
emVkQ3J5cHRvS2V5V3JhcE9wZW5TU0wuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE9wZW5TU0wuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMTQgQEAKICNpZiBFTkFCTEUoV0VCX0NSWVBU
TykKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFz
dGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIFVOVVNFRF9QQVJBTShtYXN0ZXJLZXkpOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIC8vIEluaXRpYWxseSB0aGVzZSBoZWxwZXIgZnVu
Y3Rpb25zIHdlcmUgaW50ZW5kZWQgdG8gcGVyZm9ybSBLRUsgd3JhcHBpbmcgYW5kIHVud3JhcHBp
bmcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMywyNiArMzMzLDEyIEBAIHZvaWQgRmlsZVJl
YWRlckxvYWRlcjo6Y29udmVydFRvVGV4dCgpCiAKIHZvaWQgRmlsZVJlYWRlckxvYWRlcjo6Y29u
dmVydFRvRGF0YVVSTCgpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiZGF0YToiKTsKLQogICAgIGlmICghbV9ieXRlc0xvYWRlZCkgewot
ICAgICAgICBtX3N0cmluZ1Jlc3VsdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgbV9z
dHJpbmdSZXN1bHQgPSAiZGF0YToiX3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAobV9kYXRhVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0iKTsKLSAgICBlbHNlCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1f
ZGF0YVR5cGUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiO2Jhc2U2NCwiKTsKLQotICAg
IFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgYmFzZTY0RW5jb2RlKG1fcmF3RGF0YS0+ZGF0YSgpLCBt
X2J5dGVzTG9hZGVkLCBvdXQpOwotICAgIG91dC5hcHBlbmQoJ1wwJyk7Ci0gICAgYnVpbGRlci5h
cHBlbmQob3V0LmRhdGEoKSk7Ci0KLSAgICBtX3N0cmluZ1Jlc3VsdCA9IGJ1aWxkZXIudG9TdHJp
bmcoKTsKKyAgICBtX3N0cmluZ1Jlc3VsdCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbV9kYXRhVHlw
ZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1fZGF0YVR5cGUsICI7
YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQobV9yYXdEYXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQp
KTsKIH0KIAogYm9vbCBGaWxlUmVhZGVyTG9hZGVyOjppc0NvbXBsZXRlZCgpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkocmV2aXNp
b24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOSwxNCArNDI5LDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxE
T01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNIQTE6
OkRpZ2VzdCBhdHRyc0hhc2g7CiAgICAgICAgICAgICBhdHRyc1NIQTEuY29tcHV0ZUhhc2goYXR0
cnNIYXNoKTsKLSAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0gYmFzZTY0RW5jb2RlKGF0
dHJzSGFzaC5kYXRhKCksIDEwKTsKKyAgICAgICAgICAgIGRpZ2VzdC0+YXR0cnNTSEExID0gYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoYXR0cnNIYXNoLmRhdGEoKSwgMTApOwogICAgICAgICAgICAgYWRk
U3RyaW5nVG9TSEExKHNoYTEsIGRpZ2VzdC0+YXR0cnNTSEExKTsKICAgICAgICAgfQogICAgIH0K
IAogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwogICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0g
ICAgZGlnZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlKGhhc2guZGF0YSgpLCAxMCk7CisgICAgZGln
ZXN0LT5zaGExID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIDEwKTsKICAgICBp
ZiAodW51c2VkTm9kZXNNYXApCiAgICAgICAgIHVudXNlZE5vZGVzTWFwLT5hZGQoZGlnZXN0LT5z
aGExLCBkaWdlc3QuZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5OCwxMSArNTk4LDExIEBAIGJvb2wgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpz
aG93Q2VydGlmaWMKICAgICBpZiAoIW1fY2xpZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBpZiAoIWJhc2U2NERlY29kZShzZXJpYWxp
emVkQ2VydGlmaWNhdGUsIGRhdGEpKQorICAgIGF1dG8gZGF0YSA9IGJhc2U2NERlY29kZShzZXJp
YWxpemVkQ2VydGlmaWNhdGUpOworICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBk
YXRhLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEt
PmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKICAgICBPcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNl
cnRpZmljYXRlSW5mbzsKICAgICBkZWNvZGVyID4+IGNlcnRpZmljYXRlSW5mbzsKICAgICBpZiAo
IWNlcnRpZmljYXRlSW5mbykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3Jr
UmVzb3VyY2VzRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDcgKzEwNiw3IEBAIHVuc2lnbmVkIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJj
ZUQKICAgICAgICAgbV9jb250ZW50ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChtX2RhdGFC
dWZmZXItPmRhdGEoKSwgZGF0YUxlbmd0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9iYXNl
NjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0RW5jb2RlKG1fZGF0
YUJ1ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgbV9jb250ZW50ID0gYmFzZTY0
RW5jb2RlZFRvU3RyaW5nKG1fZGF0YUJ1ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKICAgICB9
CiAKICAgICBtX2RhdGFCdWZmZXIgPSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzA5LDcgKzE3MDksNyBAQCBzdGF0aWMgU3Ry
aW5nIGNvbXB1dGVDb250ZW50U2VjdXJpdHlQb2xpCiAgICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQ
QUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNI
QV8yNTYpOwogICAgIGNyeXB0b0RpZ2VzdC0+YWRkQnl0ZXMoY29udGVudC5kYXRhKCksIGNvbnRl
bnQuc2l6ZSgpKTsKICAgICBhdXRvIGRpZ2VzdCA9IGNyeXB0b0RpZ2VzdC0+Y29tcHV0ZUhhc2go
KTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29kZShkaWdlc3Qu
ZGF0YSgpLCBkaWdlc3Quc2l6ZSgpKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1Ni0i
LCBiYXNlNjRFbmNvZGVkKGRpZ2VzdC5kYXRhKCksIGRpZ2VzdC5zaXplKCkpKTsKIH0KIAogUmVm
PFByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5v
ZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JO
ZXR3b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3NSw3ICsxNzUsNyBAQCBSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lPiBi
CiAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZTo6Y3JlYXRlKCkK
ICAgICAgICAgLnNldE9wY29kZShmcmFtZS5vcENvZGUpCiAgICAgICAgIC5zZXRNYXNrKGZyYW1l
Lm1hc2tlZCkKLSAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8gU3Ry
aW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXls
b2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZShmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVu
Z3RoKSkKKyAgICAgICAgLnNldFBheWxvYWREYXRhKGZyYW1lLm9wQ29kZSA9PSAxID8gU3RyaW5n
Ojpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2Fk
TGVuZ3RoKSA6IGJhc2U2NEVuY29kZVRvU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxv
YWRMZW5ndGgpKQogICAgICAgICAuc2V0UGF5bG9hZExlbmd0aChmcmFtZS5wYXlsb2FkTGVuZ3Ro
KQogICAgICAgICAucmVsZWFzZSgpOwogfQpAQCAtNTg2LDcgKzU4Niw3IEBAIHZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlRGEKICAgICAgICAgLy8gT2Z0ZW4gdGhlIGRhdGEg
aXMgdGV4dCBhbmQgd2Ugd291bGQgaGF2ZSBhIGRlY29kZXIsIGJ1dCBmb3Igbm9uLXRleHQgd2Ug
d29uJ3QgaGF2ZSBhIGRlY29kZXIuCiAgICAgICAgIC8vIFN5bmMgWEhScyBtYXkgbm90IGhhdmUg
YSBjYWNoZWQgcmVzb3VyY2UsIHdoaWxlIG5vbi1zeW5jIFhIUnMgdXN1YWxseSB0cmFuc2ZlciBk
YXRhIG92ZXIgb24gY29tcGxldGlvbi4KICAgICAgICAgaWYgKG1fbG9hZGluZ1hIUlN5bmNocm9u
b3VzbHkgJiYgcmVzb3VyY2VEYXRhICYmICFyZXNvdXJjZURhdGEtPmhhc0J1ZmZlcmVkRGF0YSgp
ICYmICFyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCkpCi0gICAgICAgICAgICBtX3Jlc291
cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChyZXF1ZXN0SWQsIGJhc2U2NEVuY29kZShkYXRh
LCBkYXRhTGVuZ3RoKSwgdHJ1ZSk7CisgICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJl
c291cmNlQ29udGVudChyZXF1ZXN0SWQsIGJhc2U2NEVuY29kZVRvU3RyaW5nKGRhdGEsIGRhdGFM
ZW5ndGgpLCB0cnVlKTsKICAgICB9CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGF0YVJl
Y2VpdmVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhTGVu
Z3RoKTsKQEAgLTEwMDQsNyArMTAwNCw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmlu
Zz4gSW5zcGVjdG8KIAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNv
ZGUoZW5jb2RlciwgY2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29k
ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgp
KTsKIH0KIAogV2ViU29ja2V0KiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndlYlNvY2tldEZvclJl
cXVlc3RJZChjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQpCkBA
IC0xMjAyLDExICsxMjAyLDExIEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3Rvck4KICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGRzKFdURk1vdmUoZXhwbGlj
aXRIZWFkZXJzKSk7CiAgICAgfQogICAgIGlmICghIXBvc3REYXRhKSB7Ci0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKHBvc3REYXRhLCBi
dWZmZXIpKQorICAgICAgICBhdXRvIGJ1ZmZlciA9IGJhc2U2NERlY29kZShwb3N0RGF0YSk7Cisg
ICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJV
bmFibGUgdG8gZGVjb2RlIGdpdmVuIHBvc3REYXRhIl9zKTsKIAotICAgICAgICByZXF1ZXN0LnNl
dEhUVFBCb2R5KEZvcm1EYXRhOjpjcmVhdGUoYnVmZmVyKSk7CisgICAgICAgIHJlcXVlc3Quc2V0
SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShXVEZNb3ZlKCpidWZmZXIpKSk7CiAgICAgfQogICAg
IC8vIEZJWE1FOiBmaWd1cmUgb3V0IGhvdyB0byBpZGVudGlmeSB3aGVuIGEgcmVxdWVzdCBoYXMg
YmVlbiBvdmVycmlkZGVuIHdoZW4gd2UgYWRkIHRoaXMgdG8gdGhlIGZyb250ZW5kLgogICAgIHBl
bmRpbmdSZXF1ZXN0LT5jb250aW51ZVdpdGhSZXF1ZXN0KHJlcXVlc3QpOwpAQCAtMTI0MiwxMSAr
MTI0MiwxMSBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOCiAKICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBvdmVycmlkZURhdGE7CiAgICAgaWYgKGJhc2U2NEVuY29k
ZWQpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFiYXNl
NjREZWNvZGUoY29udGVudCwgYnVmZmVyKSkKKyAgICAgICAgYXV0byBidWZmZXIgPSBiYXNlNjRE
ZWNvZGUoY29udGVudCk7CisgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZGVjb2RlIGdpdmVuIGNvbnRlbnQiX3MpOwogCi0g
ICAgICAgIG92ZXJyaWRlRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVy
KSk7CisgICAgICAgIG92ZXJyaWRlRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUo
KmJ1ZmZlcikpOwogICAgIH0gZWxzZQogICAgICAgICBvdmVycmlkZURhdGEgPSBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShjb250ZW50LnV0ZjgoKS5kYXRhKCksIGNvbnRlbnQudXRmOCgpLmxlbmd0aCgp
KTsKIApAQCAtMTI2OCwxMSArMTI2OCwxMSBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JOCiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhOwogICAgIGlmIChi
YXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAg
IGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpCisgICAgICAgIGF1dG8gYnVmZmVy
ID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQpOworICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50
Il9zKTsKIAotICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZm
ZXIpKTsKKyAgICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKmJ1ZmZl
cikpOwogICAgIH0gZWxzZQogICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29u
dGVudC51dGY4KCkuZGF0YSgpLCBjb250ZW50LnV0ZjgoKS5sZW5ndGgoKSk7CiAKQEAgLTE0MDUs
NyArMTQwNSw3IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXIKICAg
ICAgICAgfQogCiAgICAgICAgICpiYXNlNjRFbmNvZGVkID0gdHJ1ZTsKLSAgICAgICAgKnJlc3Vs
dCA9IGJhc2U2NEVuY29kZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOworICAgICAg
ICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+
c2l6ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAg
Ym9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbgogYm9vbCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUsIGNv
bnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJp
bmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2NEVuY29kZSkgewotICAgICAgICAqcmVz
dWx0ID0gYmFzZTY0RW5jb2RlKGRhdGEsIHNpemUpOworICAgICAgICAqcmVzdWx0ID0gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoZGF0YSwgc2l6ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMTEwMiw3ICsxMTAyLDcgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJ
bnNwZWN0bwogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBjcmVhdGUg
d2ViIGFyY2hpdmUgZm9yIG1haW4gZnJhbWUiX3MpOwogCiAgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gYnVmZmVyID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgcmV0dXJu
IGJhc2U2NEVuY29kZShDRkRhdGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExl
bmd0aChidWZmZXIuZ2V0KCkpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoQ0ZE
YXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgp
KSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTE4LDcgKzMxMTgsNyBAQCB1bnNpZ25lZCBsb25nIEZy
YW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTCiAgICAgICAgIEFTU0VSVCghbmV3UmVxdWVzdC5pc051
bGwoKSk7CiAKICAgICAgICAgaWYgKCFkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLm1heWJlTG9hZFN5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNl
LCBkYXRhKSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAgICAgICAg
IFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CiAgICAgICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSgqdGhpcywgaWRl
bnRpZmllciwgbmV3UmVxdWVzdCwgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgb3B0aW9ucywgb3Jp
Z2luYWxSZXF1ZXN0SGVhZGVycywgZXJyb3IsIHJlc3BvbnNlLCBidWZmZXIpOwogICAgICAgICAg
ICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CiAgICAgICAg
ICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLm1heWJlTG9hZEZh
bGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDI3NzU2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBGZXRjaE9wdGlvbnM7CiBjbGFzcyBXRUJDT1JF
X0VYUE9SVCBMb2FkZXJTdHJhdGVneSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZShGcmFtZSYsIENhY2hlZFJlc291cmNlJiwgUmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0
IFJlc291cmNlTG9hZGVyT3B0aW9ucyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiYmKT4mJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KEZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBjb25zdCBGZXRj
aE9wdGlvbnMmLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29u
c3QgRmV0Y2hPcHRpb25zJiwgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHBhZ2VMb2FkQ29tcGxldGVkKFBhZ2UmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGJy
b3dzaW5nQ29udGV4dFJlbW92ZWQoRnJhbWUmKSA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL1ByaXZhdGVDbGlja01lYXN1cmVtZW50LmNwcAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1ByaXZhdGVDbGlja01lYXN1cmVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDEwICsxODksMTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudDo6RXBoZW1lcmFsUwogewogICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBpZiB3
ZSBjYW4gZG8gd2l0aCBhIHNpbXBsZSBsZW5ndGggY2hlY2sgaW5zdGVhZCBvZiBkZWNvZGluZy4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxOTQ1Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKLSAgICBpZiAoIWJhc2U2NFVSTERlY29kZShub25j
ZSwgZGlnZXN0KSkKKyAgICBhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShub25jZSk7Cisg
ICAgaWYgKCFkaWdlc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZGlnZXN0
LnNpemUoKSA9PSBFcGhlbWVyYWxTb3VyY2VOb25jZVJlcXVpcmVkTnVtYmVyT2ZCeXRlczsKKyAg
ICByZXR1cm4gZGlnZXN0LT5zaXplKCkgPT0gRXBoZW1lcmFsU291cmNlTm9uY2VSZXF1aXJlZE51
bWJlck9mQnl0ZXM7CiB9CiAKIHZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OnNldEVwaGVt
ZXJhbFNvdXJjZU5vbmNlKEVwaGVtZXJhbFNvdXJjZU5vbmNlJiYgbm9uY2UpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDE0ICs2OSwxNSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgCiAgICAgaWYgKGJ1ZmZl
ci5wb3NpdGlvbigpID09IGJlZ2luSGFzaFZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKICAgICBTdHJpbmdWaWV3IGhhc2hW
YWx1ZShiZWdpbkhhc2hWYWx1ZSwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbkhhc2hWYWx1ZSk7
Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoaGFzaFZhbHVlLCBkaWdlc3QsIEJhc2U2NFZhbGlkYXRl
UGFkZGluZykpIHsKLSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoaGFzaFZhbHVlLCBkaWdl
c3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CiAKLSAgICByZXR1
cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgV1RGTW92ZShkaWdl
c3QpIH07CisgICAgaWYgKGF1dG8gZGlnZXN0ID0gYmFzZTY0RGVjb2RlKGhhc2hWYWx1ZSwgQmFz
ZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsK
KworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShoYXNoVmFsdWUpKQorICAg
ICAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgV1RG
TW92ZSgqZGlnZXN0KSB9OworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogT3B0aW9u
YWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3Qo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIGJ1ZmZlcikKQEAgLTEyNCwxMyArMTI1LDEzIEBA
IE9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWcKIAogT3B0aW9uYWw8UmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0KGNvbnN0IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QmIGVuY29k
ZWREaWdlc3QpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKLSAgICBpZiAoIWJhc2U2
NERlY29kZShlbmNvZGVkRGlnZXN0LmRpZ2VzdCwgZGlnZXN0LCBCYXNlNjRWYWxpZGF0ZVBhZGRp
bmcpKSB7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGVuY29kZWREaWdlc3QuZGlnZXN0
LCBkaWdlc3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CisgICAg
aWYgKGF1dG8gZGlnZXN0ID0gYmFzZTY0RGVjb2RlKGVuY29kZWREaWdlc3QuZGlnZXN0LCBCYXNl
NjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICByZXR1cm4gUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERpZ2VzdC5hbGdvcml0aG0sIFdURk1vdmUo
KmRpZ2VzdCkgfTsKKworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NFVSTERlY29kZShlbmNv
ZGVkRGlnZXN0LmRpZ2VzdCkpCisgICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QgeyBlbmNvZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZSgqZGlnZXN0KSB9OwogCi0g
ICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGVuY29kZWREaWdlc3QuYWxn
b3JpdGhtLCBXVEZNb3ZlKGRpZ2VzdCkgfTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
CiBzdGF0aWMgUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobSB0b0NyeXB0b0RpZ2VzdEFsZ29y
aXRobShSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG0pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1M
QXJjaGl2ZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw5ICsx
NjcsNyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlCiAKICAgICBm
b3IgKGF1dG8mIHJlc291cmNlIDogcmVzb3VyY2VzKSB7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
Y2xlYXIoKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNvdXJjZUJvdW5k
YXJ5KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQtVHlwZTogIik7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291cmNlLm1pbWVUeXBlKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNvdXJjZUJvdW5kYXJ5LCAiQ29udGVudC1UeXBl
OiAiLCByZXNvdXJjZS5taW1lVHlwZSk7CiAKICAgICAgICAgY29uc3QgY2hhciogY29udGVudEVu
Y29kaW5nID0gbnVsbHB0cjsKICAgICAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSmF2YVNjcmlwdE1JTUVUeXBlKHJlc291cmNlLm1pbWVUeXBlKSB8fCBNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUocmVzb3VyY2UubWltZVR5cGUpKQpAQCAt
MTc3LDI3ICsxNzUsMjIgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gTUhUTUxBcmNoaXZlOjpnZW5lcmF0
ZQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb250ZW50RW5jb2RpbmcgPSBiYXNlNjQ7CiAK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxyXG5Db250ZW50LVRyYW5zZmVyLUVuY29k
aW5nOiAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoY29udGVudEVuY29kaW5nKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxyXG5Db250ZW50LUxvY2F0aW9uOiAiKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmVzb3VyY2UudXJsLnN0cmluZygpKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxyXG5cclxuIik7CisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCJcclxuQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIiwgY29udGVudEVu
Y29kaW5nLCAiXHJcbkNvbnRlbnQtTG9jYXRpb246ICIsIHJlc291cmNlLnVybC5zdHJpbmcoKSwg
IlxyXG5cclxuIik7CiAKICAgICAgICAgYXNjaWlTdHJpbmcgPSBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkudXRmOCgpOwogICAgICAgICBtaHRtbERhdGEtPmFwcGVuZChhc2NpaVN0cmluZy5kYXRh
KCksIGFzY2lpU3RyaW5nLmxlbmd0aCgpKTsKIAogICAgICAgICAvLyBGSVhNRTogaWRlYWxseSB3
ZSB3b3VsZCBlbmNvZGUgdGhlIGNvbnRlbnQgYXMgYSBzdHJlYW0gd2l0aG91dCBoYXZpbmcgdG8g
ZmV0Y2ggaXQgYWxsLgotICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gcmVzb3VyY2UuZGF0YS0+
ZGF0YSgpOworICAgICAgICBhdXRvKiBkYXRhID0gcmVzb3VyY2UuZGF0YS0+ZGF0YUFzVUludDhQ
dHIoKTsKICAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSByZXNvdXJjZS5kYXRhLT5zaXplKCk7
Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkRGF0YTsKICAgICAgICAgaWYgKCFzdHJjbXAo
Y29udGVudEVuY29kaW5nLCBxdW90ZWRQcmludGFibGUpKSB7Ci0gICAgICAgICAgICBxdW90ZWRQ
cmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGEpOworICAgICAgICAg
ICAgYXV0byBlbmNvZGVkRGF0YSA9IHF1b3RlZFByaW50YWJsZUVuY29kZShkYXRhLCBkYXRhTGVu
Z3RoKTsKICAgICAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGVuY29kZWREYXRhLmRhdGEoKSwg
ZW5jb2RlZERhdGEuc2l6ZSgpKTsKICAgICAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKCJcclxu
IiwgMik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoIXN0cmNtcChjb250
ZW50RW5jb2RpbmcsIGJhc2U2NCkpOwogICAgICAgICAgICAgLy8gV2UgYXJlIG5vdCBzcGVjaWZ5
aW5nIGluc2VydExGcyA9IHRydWUgYmVsb3cgYXMgaXQgd291bGQgY3V0IHRoZSBsaW5lcyB3aXRo
IExGcyBhbmQgTUhUTUwgcmVxdWlyZXMgQ1JMRnMuCi0gICAgICAgICAgICBiYXNlNjRFbmNvZGUo
ZGF0YSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGEpOworICAgICAgICAgICAgYXV0byBlbmNvZGVk
RGF0YSA9IGJhc2U2NEVuY29kZVRvVmVjdG9yKGRhdGEsIGRhdGFMZW5ndGgpOwogICAgICAgICAg
ICAgY29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gNzY7CiAgICAgICAgICAgICBzaXpl
X3QgaW5kZXggPSAwOwogICAgICAgICAgICAgc2l6ZV90IGVuY29kZWREYXRhTGVuZ3RoID0gZW5j
b2RlZERhdGEuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0
bWwvTUhUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTIsMTYgKzE5MiwxOSBAQCBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBNSFRNTFBh
cnNlcjo6cGFyCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIFZlY3Rvcjxj
aGFyPiBkYXRhOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIHN3aXRjaCAobWltZUhl
YWRlci5jb250ZW50VHJhbnNmZXJFbmNvZGluZygpKSB7Ci0gICAgY2FzZSBNSU1FSGVhZGVyOjpC
YXNlNjQ6Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVu
dC0+c2l6ZSgpLCBkYXRhKSkgeworICAgIGNhc2UgTUlNRUhlYWRlcjo6QmFzZTY0OiB7CisgICAg
ICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVudC0+ZGF0YUFzVUludDhQ
dHIoKSAgICwgY29udGVudC0+c2l6ZSgpKTsKKyAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkgewog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIGJhc2U2NCBjb250ZW50IGZvciBNSFRNTCBw
YXJ0LiIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KKyAgICAgICAg
ZGF0YSA9IFdURk1vdmUoKmRlY29kZWREYXRhKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAg
IGNhc2UgTUlNRUhlYWRlcjo6UXVvdGVkUHJpbnRhYmxlOgotICAgICAgICBxdW90ZWRQcmludGFi
bGVEZWNvZGUoY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5zaXplKCksIGRhdGEpOworICAgICAg
ICBkYXRhID0gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnRlbnQtPmRhdGFBc1VJbnQ4UHRyKCks
IGNvbnRlbnQtPnNpemUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTUlNRUhlYWRlcjo6
U2V2ZW5CaXQ6CiAgICAgY2FzZSBNSU1FSGVhZGVyOjpCaW5hcnk6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRDb2NvYS5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nv
Y29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0
LDEwICszNCwxMCBAQCBib29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBCiB7
CiAjaWYgSEFWRShSU0FfQlNTQSkKICAgICB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBzZXJ2
ZXJQdWJsaWNLZXlEYXRhOwotICAgICAgICBpZiAoIWJhc2U2NFVSTERlY29kZShzZXJ2ZXJQdWJs
aWNLZXlCYXNlNjRVUkwsIHNlcnZlclB1YmxpY0tleURhdGEpKQorICAgICAgICBhdXRvIHNlcnZl
clB1YmxpY0tleURhdGEgPSBiYXNlNjRVUkxEZWNvZGUoc2VydmVyUHVibGljS2V5QmFzZTY0VVJM
KTsKKyAgICAgICAgaWYgKCFzZXJ2ZXJQdWJsaWNLZXlEYXRhKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBhdXRvIHNlcnZlclB1YmxpY0tleSA9IGFkb3B0TlMoW1tOU0RhdGEg
YWxsb2NdIGluaXRXaXRoQnl0ZXM6c2VydmVyUHVibGljS2V5RGF0YS5kYXRhKCkgbGVuZ3RoOnNl
cnZlclB1YmxpY0tleURhdGEuc2l6ZSgpXSk7CisgICAgICAgIGF1dG8gc2VydmVyUHVibGljS2V5
ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpzZXJ2ZXJQdWJsaWNLZXlE
YXRhLT5kYXRhKCkgbGVuZ3RoOnNlcnZlclB1YmxpY0tleURhdGEtPnNpemUoKV0pOwogCiAgICAg
ICAgIC8vIEZJWE1FKDIyMjAxOCk6IENoZWNrIGVycm9yLgogICAgICAgICBtX3NvdXJjZVVubGlu
a2FibGVUb2tlbi5ibGluZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1JTQUJTU0FUb2tlbkJsaW5k
ZXJJbnN0YW5jZSgpIGluaXRXaXRoUHVibGljS2V5OnNlcnZlclB1YmxpY0tleS5nZXQoKSBlcnJv
cjpudWxscHRyXSk7CkBAIC01MCw3ICs1MCw3IEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQ6OmNhbGN1bGF0ZUEKICAgICBpZiAoIW1fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdU
b2tlbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9zb3VyY2VVbmxpbmthYmxlVG9r
ZW4udmFsdWVCYXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxpbmth
YmxlVG9rZW4ud2FpdGluZ1Rva2VuIGJsaW5kZWRNZXNzYWdlXS5ieXRlcywgW21fc291cmNlVW5s
aW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBibGluZGVkTWVzc2FnZV0ubGVuZ3RoKTsKKyAgICBt
X3NvdXJjZVVubGlua2FibGVUb2tlbi52YWx1ZUJhc2U2NFVSTCA9IGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4gYmxpbmRlZE1lc3Nh
Z2VdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuIGJsaW5kZWRN
ZXNzYWdlXS5sZW5ndGgpOwogICAgIHJldHVybiB0cnVlOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0oc2VydmVyUHVibGljS2V5QmFzZTY0VVJMKTsKQEAgLTY1LDEwICs2NSwxMCBAQCBib29sIFBy
aXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcnZlclJlc3BvbnNlRGF0YTsKLSAg
ICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoc2VydmVyUmVzcG9uc2VCYXNlNjRVUkwsIHNlcnZl
clJlc3BvbnNlRGF0YSkpCisgICAgICAgIGF1dG8gc2VydmVyUmVzcG9uc2VEYXRhID0gYmFzZTY0
VVJMRGVjb2RlKHNlcnZlclJlc3BvbnNlQmFzZTY0VVJMKTsKKyAgICAgICAgaWYgKCFzZXJ2ZXJS
ZXNwb25zZURhdGEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gc2Vy
dmVyUmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZl
clJlc3BvbnNlRGF0YS5kYXRhKCkgbGVuZ3RoOnNlcnZlclJlc3BvbnNlRGF0YS5zaXplKCldKTsK
KyAgICAgICAgYXV0byBzZXJ2ZXJSZXNwb25zZSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGlu
aXRXaXRoQnl0ZXM6c2VydmVyUmVzcG9uc2VEYXRhLT5kYXRhKCkgbGVuZ3RoOnNlcnZlclJlc3Bv
bnNlRGF0YS0+c2l6ZSgpXSk7CiAKICAgICAgICAgLy8gRklYTUUoMjIyMDE4KTogQ2hlY2sgZXJy
b3IuCiAgICAgICAgIG1fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gPSBbbV9zb3Vy
Y2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2VuIGFjdGl2YXRlVG9rZW5XaXRoU2VydmVyUmVz
cG9uc2U6c2VydmVyUmVzcG9uc2UuZ2V0KCkgZXJyb3I6bnVsbHB0cl07CkBAIC03Nyw5ICs3Nyw5
IEBAIGJvb2wgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OmNhbGN1bGF0ZUEKICAgICB9CiAKICAg
ICBTb3VyY2VTZWNyZXRUb2tlbiB0b2tlbjsKLSAgICB0b2tlbi50b2tlbkJhc2U2NFVSTCA9IFdU
Rjo6YmFzZTY0VVJMRW5jb2RlKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHRv
a2VuQ29udGVudF0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHRv
a2VuQ29udGVudF0ubGVuZ3RoKTsKLSAgICB0b2tlbi5rZXlJREJhc2U2NFVSTCA9IFdURjo6YmFz
ZTY0VVJMRW5jb2RlKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIGtleUlkXS5i
eXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRdLmxlbmd0aCk7
Ci0gICAgdG9rZW4uc2lnbmF0dXJlQmFzZTY0VVJMID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoW21f
c291cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gc2lnbmF0dXJlXS5ieXRlcywgW21fc291
cmNlVW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gc2lnbmF0dXJlXS5sZW5ndGgpOworICAgIHRv
a2VuLnRva2VuQmFzZTY0VVJMID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoW21fc291cmNlVW5s
aW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50XS5ieXRlcywgW21fc291cmNlVW5s
aW5rYWJsZVRva2VuLnJlYWR5VG9rZW4gdG9rZW5Db250ZW50XS5sZW5ndGgpOworICAgIHRva2Vu
LmtleUlEQmFzZTY0VVJMID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoW21fc291cmNlVW5saW5r
YWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9r
ZW4ucmVhZHlUb2tlbiBrZXlJZF0ubGVuZ3RoKTsKKyAgICB0b2tlbi5zaWduYXR1cmVCYXNlNjRV
UkwgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVh
ZHlUb2tlbiBzaWduYXR1cmVdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlU
b2tlbiBzaWduYXR1cmVdLmxlbmd0aCk7CiAKICAgICBtX3NvdXJjZVNlY3JldFRva2VuID0gV1RG
TW92ZSh0b2tlbik7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0Jhc2U2NFV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9C
YXNlNjRVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAg
RXhjZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmJ0bwogICAgIGlmICghc3RyaW5n
VG9FbmNvZGUuaXNBbGxMYXRpbjEoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRDaGFyYWN0ZXJFcnJvciB9OwogCi0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShzdHJpbmdUb0Vu
Y29kZS5sYXRpbjEoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5nKHN0cmluZ1Rv
RW5jb2RlLmxhdGluMSgpKTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRp
ZXM6OmF0b2IoY29uc3QgU3RyaW5nJiBlbmNvZGVkU3RyaW5nKQpAQCAtNDYsMTEgKzQ2LDExIEBA
IEV4Y2VwdGlvbk9yPFN0cmluZz4gQmFzZTY0VXRpbGl0aWVzOjphdG8KICAgICBpZiAoZW5jb2Rl
ZFN0cmluZy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgVmVjdG9y
PGNoYXI+IG91dDsKLSAgICBpZiAoIWJhc2U2NERlY29kZShlbmNvZGVkU3RyaW5nLCBvdXQsIEJh
c2U2NFZhbGlkYXRlUGFkZGluZyB8IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzIHwgQmFz
ZTY0RGlzY2FyZFZlcnRpY2FsVGFiKSkKKyAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVj
b2RlKGVuY29kZWRTdHJpbmcsIHsgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5n
LCBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcywgQmFzZTY0RGVj
b2RlT3B0aW9uczo6RGlzY2FyZFZlcnRpY2FsVGFiIH0pOworICAgIGlmICghZGVjb2RlZERhdGEp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAot
ICAgIHJldHVybiBTdHJpbmcob3V0LmRhdGEoKSwgb3V0LnNpemUoKSk7CisgICAgcmV0dXJuIFN0
cmluZyhkZWNvZGVkRGF0YS0+ZGF0YSgpLCBkZWNvZGVkRGF0YS0+c2l6ZSgpKTsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQ4LDkgKzE4NDgsOCBAQCB2b2lk
IFBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkCiAgICAgaWYgKHVybC5wcm90b2Nv
bElzRGF0YSgpICYmIHVybC5zdHJpbmcoKS5zdGFydHNXaXRoKCJkYXRhOnRleHQvY3NzO2NoYXJz
ZXQ9dXRmLTg7YmFzZTY0LCIpKSB7CiAgICAgICAgIG1fZGlkTG9hZFVzZXJTdHlsZVNoZWV0ID0g
dHJ1ZTsKIAotICAgICAgICBWZWN0b3I8Y2hhcj4gc3R5bGVTaGVldEFzVVRGODsKLSAgICAgICAg
aWYgKGJhc2U2NERlY29kZShkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnN0cmluZygpLnN1
YnN0cmluZygzNSkpLCBzdHlsZVNoZWV0QXNVVEY4LCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdM
aW5lcykpCi0gICAgICAgICAgICBtX3VzZXJTdHlsZVNoZWV0ID0gU3RyaW5nOjpmcm9tVVRGOChz
dHlsZVNoZWV0QXNVVEY4LmRhdGEoKSwgc3R5bGVTaGVldEFzVVRGOC5zaXplKCkpOworICAgICAg
ICBpZiAoYXV0byBzdHlsZVNoZWV0QXNVVEY4ID0gYmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vic3RyaW5nKDM1KSksIEJhc2U2NERlY29kZU9wdGlv
bnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSkKKyAgICAgICAgICAgIG1fdXNlclN0eWxlU2hl
ZXQgPSBTdHJpbmc6OmZyb21VVEY4KHN0eWxlU2hlZXRBc1VURjgtPmRhdGEoKSwgc3R5bGVTaGVl
dEFzVVRGOC0+c2l6ZSgpKTsKICAgICB9CiAKICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3Vt
ZW50JiBkb2N1bWVudCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNiArMTg4LDExIEBAIHZvaWQgU2hh
cmVkQnVmZmVyOjphcHBlbmQoY29uc3QgY2hhciogZGEKICAgICBBU1NFUlQoaW50ZXJuYWxseUNv
bnNpc3RlbnQoKSk7CiB9CiAKK3ZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oZGF0YSksIGxlbmd0aCk7Cit9CisKIHZvaWQgU2hhcmVkQnVmZmVyOjphcHBl
bmQoVmVjdG9yPGNoYXI+JiYgZGF0YSkKIHsKICAgICBBU1NFUlQoIW1faGFzQmVlbkNvbWJpbmVk
SW50b09uZVNlZ21lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVm
ZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBhcHBlbmQoY29uc3QgU2hhcmVkQnVmZmVyJik7CiAgICAgdm9pZCBhcHBlbmQoY29uc3Qg
Y2hhciosIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgdWludDhfdCosIHNpemVfdCk7
CiAgICAgdm9pZCBhcHBlbmQoVmVjdG9yPGNoYXI+JiYpOwogCiAgICAgdm9pZCBjbGVhcigpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RN
Q2xlYXJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMiArNzksMTUgQEAgc3RhdGljIE9wdGlvbmFs
PFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPgogICAgICAgICAgICAgaWYgKCFrZXlWYWx1ZSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIEtleUlEVHlwZSBrZXlJ
RERhdGE7Ci0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SGFuZGxlVmFsdWVEYXRhOwot
ICAgICAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlJRCwgeyBrZXlJRERhdGEg
fSkgfHwgIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleVZhbHVlLCB7IGtleUhhbmRsZVZhbHVlRGF0
YSB9KSkKKyAgICAgICAgICAgIGF1dG8ga2V5SUREYXRhID0gYmFzZTY0VVJMRGVjb2RlKGtleUlE
KTsKKyAgICAgICAgICAgIGlmICgha2V5SUREYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgICAgICBhdXRvIGtleUhhbmRsZVZhbHVlRGF0YSA9IGJh
c2U2NFVSTERlY29kZShrZXlWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIWtleUhhbmRsZVZhbHVl
RGF0YSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGRlY29k
ZWRLZXlzLmFwcGVuZChLZXlIYW5kbGU6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0
YXR1czo6VXNhYmxlLCBXVEZNb3ZlKGtleUlERGF0YSksIFdURk1vdmUoa2V5SGFuZGxlVmFsdWVE
YXRhKSkpOworICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtleUhhbmRsZTo6Y3JlYXRl
KENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFdURk1vdmUoKmtleUlERGF0
YSksIFdURk1vdmUoKmtleUhhbmRsZVZhbHVlRGF0YSkpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9KTsKICAgICBpZiAoIXZhbGlkRm9ybWF0KQpAQCAtMjE1LDggKzIxOCw3
IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5aWRzRnIKICAgICAvLyAia2lk
cyIKICAgICAvLyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5
IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5p
bmcgdGhlIGtleSBJRCB2YWx1ZS4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5SWRD
b3VudDsgaSsrKSB7Ci0gICAgICAgIFN0cmluZyBrZXlJZCA9IFdURjo6YmFzZTY0VVJMRW5jb2Rl
KCZkYXRhW2luZGV4XSwgQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpOwotICAgICAgICBrZXlJ
ZHNBcnJheS0+cHVzaFN0cmluZyhrZXlJZCk7CisgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3Ry
aW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKCZkYXRhW2luZGV4XSwgQ2xlYXJLZXk6OktleUlE
U2l6ZUluQnl0ZXMpKTsKICAgICAgICAgaW5kZXggKz0gQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0
ZXM7CiAgICAgfQogCkBAIC0yNDMsOCArMjQ1LDcgQEAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+
IGV4dHJhY3RLZXlJZEZybwogICAgIC8vIFRoZSBmb3JtYXQgaXMgYSBKU09OIG9iamVjdCBjb250
YWluaW5nIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKICAgICAvLyAia2lkcyIKICAgICAvLyBBbiBh
cnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSBiYXNlNjR1
cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtleSBJRCB2
YWx1ZS4KLSAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShpbml0RGF0YS5k
YXRhKCksIGluaXREYXRhLnNpemUoKSk7Ci0gICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5
SWQpOworICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5n
KGluaXREYXRhLmRhdGEoKSwgaW5pdERhdGEuc2l6ZSgpKSk7CiAKICAgICBvYmplY3QtPnNldEFy
cmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNBcnJheSkpOwogICAgIENTdHJpbmcganNvbkRhdGEg
PSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKQEAgLTU4Nyw3ICs1ODgsNyBAQCB2b2lk
IENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTCiAgICAgICAgICAgICBhdXRvIGFy
cmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBrZXkgOiBtX2tleVN0b3JlKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGtleS0+aWQoKS5z
aXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAg
ICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShrZXktPmlkKCku
ZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgYXJyYXktPnB1c2hT
dHJpbmcoYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoa2V5LT5pZCgpLmRhdGEoKSwga2V5LT5pZCgp
LnNpemUoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcm9vdE9iamVjdC0+c2V0QXJy
YXkoImtpZHMiLCBXVEZNb3ZlKGFycmF5KSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDExICsxMTMsMTEgQEAgc3RhdGljIFZl
Y3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4gZXh0cmFjdAogICAgICAgICBpZiAoIWtleUlEKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgVmVjdG9yPGNoYXI+IHNpbmZEYXRhOwotICAg
ICAgICBpZiAoIVdURjo6YmFzZTY0RGVjb2RlKGtleUlELCB7IHNpbmZEYXRhIH0sIFdURjo6QmFz
ZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpKQorICAgICAgICBhdXRvIHNpbmZEYXRhID0gYmFz
ZTY0RGVjb2RlKGtleUlELCBCYXNlNjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdM
aW5lcyk7CisgICAgICAgIGlmICghc2luZkRhdGEpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBzaW5mcy51bmNoZWNrZWRBcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92
ZShzaW5mRGF0YSkpKTsKKyAgICAgICAgc2luZnMudW5jaGVja2VkQXBwZW5kKFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKFdURk1vdmUoKnNpbmZEYXRhKSkpOwogICAgIH0KIAogICAgIHJldHVybiBzaW5m
czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUlu
c3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzE1LDcg
KzcxNSw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAg
ICAgaWRlbnRpZmllciA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmlu
aXREYXRhLT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z10pOwogI2lmIEhBVkUoRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19JTklUREFUQSkKICAgICBlbHNl
IGlmIChpbml0RGF0YVR5cGUgPT0gSW5pdERhdGFSZWdpc3RyeTo6Y2VuY05hbWUoKSkgewotICAg
ICAgICBTdHJpbmcgcHNzaFN0cmluZyA9IGJhc2U2NEVuY29kZShpbml0RGF0YS0+ZGF0YSgpLCBp
bml0RGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgYXV0byBwc3NoU3RyaW5nID0gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoaW5pdERhdGEtPmRhdGEoKSwgaW5pdERhdGEtPnNpemUoKSk7CiAgICAgICAgIGlu
aXRpYWxpemF0aW9uRGF0YSA9IFtOU0pTT05TZXJpYWxpemF0aW9uIGRhdGFXaXRoSlNPTk9iamVj
dDpAeyBAInBzc2giOiAoTlNTdHJpbmcqKXBzc2hTdHJpbmcgfSBvcHRpb25zOk5TSlNPTldyaXRp
bmdQcmV0dHlQcmludGVkIGVycm9yOm5pbF07CiAgICAgfQogI2VuZGlmCkBAIC04NTAsMTEgKzg1
MCwxMSBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nCiAgICAgICAg
ICAgICBpZiAoIWtleUlEU3RyaW5nKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlEVmVjdG9yOwotICAgICAgICAgICAgaWYg
KCFiYXNlNjREZWNvZGUoa2V5SURTdHJpbmcsIGtleUlEVmVjdG9yKSkKKyAgICAgICAgICAgIGF1
dG8ga2V5SURWZWN0b3IgPSBiYXNlNjREZWNvZGUoa2V5SURTdHJpbmcpOworICAgICAgICAgICAg
aWYgKGtleUlEVmVjdG9yKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICAgICAgYXV0byBrZXlJRCA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5SURWZWN0
b3IpKTsKKyAgICAgICAgICAgIGF1dG8ga2V5SUQgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZN
b3ZlKCprZXlJRFZlY3RvcikpOwogICAgICAgICAgICAgYXV0byBmb3VuZEluZGV4ID0gbV9jdXJy
ZW50UmVxdWVzdC52YWx1ZSgpLnJlcXVlc3RzLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIHJlcXVl
c3QpIHsKICAgICAgICAgICAgICAgICBhdXRvIGtleUlEcyA9IGtleUlEc0ZvclJlcXVlc3QocmVx
dWVzdC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGtleUlEcy5maW5kTWF0Y2hpbmco
WyZdKGNvbnN0IFJlZjxTaGFyZWRCdWZmZXI+JiBpZCkgewpAQCAtODg1LDEwICs4ODUsMTAgQEAg
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICAgICAgICAg
IGF1dG8gcGF5bG9hZFN0cmluZyA9IHBheWxvYWRGaW5kUmVzdWx0cy0+dmFsdWUtPmFzU3RyaW5n
KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkU3RyaW5nKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHBheWxv
YWRWZWN0b3I7Ci0gICAgICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUocGF5bG9hZFN0cmlu
ZywgcGF5bG9hZFZlY3RvcikpCisgICAgICAgICAgICAgICAgYXV0byBwYXlsb2FkVmVjdG9yID0g
YmFzZTY0RGVjb2RlKHBheWxvYWRTdHJpbmcpOworICAgICAgICAgICAgICAgIGlmICghcGF5bG9h
ZFZlY3RvcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIGF1dG8gcGF5bG9hZERhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKHBheWxv
YWRWZWN0b3IpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHBheWxvYWREYXRhID0gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoV1RGTW92ZSgqcGF5bG9hZFZlY3RvcikpOwogICAgICAgICAgICAgICAgIFty
ZXF1ZXN0IHByb2Nlc3NDb250ZW50S2V5UmVzcG9uc2U6W1BBTDo6Z2V0QVZDb250ZW50S2V5UmVz
cG9uc2VDbGFzcygpIGNvbnRlbnRLZXlSZXNwb25zZVdpdGhGYWlyUGxheVN0cmVhbWluZ0tleVJl
c3BvbnNlRGF0YTpwYXlsb2FkRGF0YS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCldXTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTE5NSw4ICsxMTk1LDggQEAgdm9p
ZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZwogICAgICAgICAgICAgYXV0byBl
bnRyeSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBhdXRvJiBrZXlJRCA9
IHJlcXVlc3REYXRhLmZpcnN0OwogICAgICAgICAgICAgYXV0byYgcGF5bG9hZCA9IHJlcXVlc3RE
YXRhLnNlY29uZDsKLSAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImtleUlEIiwgYmFzZTY0
RW5jb2RlKGtleUlELT5kYXRhKCksIGtleUlELT5zaXplKCkpKTsKLSAgICAgICAgICAgIGVudHJ5
LT5zZXRTdHJpbmcoInBheWxvYWQiLCBiYXNlNjRFbmNvZGUocGF5bG9hZC5nZXQoKS5ieXRlcywg
cGF5bG9hZC5nZXQoKS5sZW5ndGgpKTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImtl
eUlEIiwgYmFzZTY0RW5jb2RlVG9TdHJpbmcoa2V5SUQtPmRhdGEoKSwga2V5SUQtPnNpemUoKSkp
OworICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygicGF5bG9hZCIsIGJhc2U2NEVuY29kZVRv
U3RyaW5nKHBheWxvYWQuZ2V0KCkuYnl0ZXMsIHBheWxvYWQuZ2V0KCkubGVuZ3RoKSk7CiAgICAg
ICAgICAgICByZXF1ZXN0SlNPTi0+cHVzaE9iamVjdChXVEZNb3ZlKGVudHJ5KSk7CiAgICAgICAg
IH0KICAgICAgICAgYXV0byByZXF1ZXN0QnVmZmVyID0gdXRmOEJ1ZmZlcihyZXF1ZXN0SlNPTi0+
dG9KU09OU3RyaW5nKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAs
MTAgKzEzMCw3IEBAIFN0cmluZyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVIKICAg
ICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwog
Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJ
bWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0
dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNv
ZGVkKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCkpKTsKIH0KIAogVmVj
dG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzQsMTAgKzE3NCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBj
ZkRhdGEoY29uc3QKIAogU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCiB7Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0
RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFz
ZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiAr
IGJhc2U2NERhdGE7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7
YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0
TGVuZ3RoKGRhdGEpKSk7CiB9CiAKIFN0cmluZyBkYXRhVVJMKGNvbnN0IFBpeGVsQnVmZmVyJiBz
b3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHN0YXRpYyBTdHJpbmcg
Y3JlYXRlVW5pcXVlRm9udE5hbWUoKQogICAgIEdVSUQgZm9udFV1aWQ7CiAgICAgQ29DcmVhdGVH
dWlkKCZmb250VXVpZCk7CiAKLSAgICBTdHJpbmcgZm9udE5hbWUgPSBiYXNlNjRFbmNvZGUocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSk7CisgICAg
YXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOwogICAgIEFTU0VSVChmb250TmFtZS5s
ZW5ndGgoKSA8IExGX0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9udE5hbWU7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0
YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24gMjc3NTY5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFN0
cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCiAgICAgR1VJRCBmb250VXVpZDsKICAgICBDb0Ny
ZWF0ZUd1aWQoJmZvbnRVdWlkKTsKIAotICAgIFN0cmluZyBmb250TmFtZSA9IGJhc2U2NEVuY29k
ZShyZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsK
KyAgICBhdXRvIGZvbnROYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oJmZvbnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSk7CiAgICAgQVNTRVJUKGZvbnRO
YW1lLmxlbmd0aCgpIDwgTEZfRkFDRVNJWkUpOwogICAgIHJldHVybiBmb250TmFtZTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1h
Yy5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NT
TEtleUdlbmVyYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw3IEBAIHN0
YXRpYyBTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmcKICAgICBpZiAoU2VjQXNuMUVu
Y29kZUl0ZW0oY29kZXIsICZzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UsIHNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZVRlbXBsYXRlLCAmZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxs
ZW5nZSkgIT0gbm9FcnIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiBi
YXNlNjRFbmNvZGUoZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5EYXRhLCBlbmNv
ZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlLkxlbmd0aCk7CisgICAgcmV0dXJuIGJhc2U2
NEVuY29kZVRvU3RyaW5nKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuRGF0YSwg
ZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpOwogfQogCiBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAkocmV2aXNpb24gMjc3NTY5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgUmVmPFJlc291cmNlSGFu
ZGxlPiBjcmVhdGVCbG9iUmVzCiAgICAgcmV0dXJuIGJsb2JSZWdpc3RyeSgpLmJsb2JSZWdpc3Ry
eUltcGwoKS0+Y3JlYXRlUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50KTsKIH0KIAotc3Rh
dGljIHZvaWQgbG9hZEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQq
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5
LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rv
cjxjaGFyPiYgZGF0YSkKK3N0YXRpYyB2b2lkIGxvYWRCbG9iUmVzb3VyY2VTeW5jaHJvbm91c2x5
KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgYXV0byogYmxvYkRh
dGEgPSBibG9iUmVnaXN0cnkoKS5ibG9iUmVnaXN0cnlJbXBsKCktPmdldEJsb2JEYXRhRnJvbVVS
TChyZXF1ZXN0LnVybCgpKTsKICAgICBCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkoYmxvYkRhdGEsIHJlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVz
b3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcz
LDcgKzczLDcgQEAgbmFtZXNwYWNlIHsKIAogY2xhc3MgQmxvYlJlc291cmNlU3luY2hyb25vdXNM
b2FkZXIgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgewogcHVibGljOgotICAgIEJsb2JS
ZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNl
JiwgVmVjdG9yPGNoYXI+Jik7CisgICAgQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIoUmVz
b3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mKTsKIAogICAg
IHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJl
c3BvbnNlJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgZmluYWw7CiAgICAgdm9pZCBk
aWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIGZpbmFsOwpAQCAt
ODUsMTAgKzg1LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUmVzb3VyY2VFcnJvciYgbV9l
cnJvcjsKICAgICBSZXNvdXJjZVJlc3BvbnNlJiBtX3Jlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFy
PiYgbV9kYXRhOworICAgIFZlY3Rvcjx1aW50OF90PiYgbV9kYXRhOwogfTsKIAotQmxvYlJlc291
cmNlU3luY2hyb25vdXNMb2FkZXI6OkJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291
cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+
JiBkYXRhKQorQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXI6OkJsb2JSZXNvdXJjZVN5bmNo
cm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogICAgIDogbV9lcnJvcihlcnJvcikKICAgICAs
IG1fcmVzcG9uc2UocmVzcG9uc2UpCiAgICAgLCBtX2RhdGEoZGF0YSkKQEAgLTEyMiw3ICsxMjIs
NyBAQCB2b2lkIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRSCiAKICAgICAvLyBS
ZWFkIGFsbCB0aGUgZGF0YS4KICAgICBtX2RhdGEucmVzaXplKHN0YXRpY19jYXN0PHNpemVfdD4o
cmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpKTsKLSAgICBzdGF0aWNfY2FzdDxCbG9i
UmVzb3VyY2VIYW5kbGUqPihoYW5kbGUpLT5yZWFkU3luYyhtX2RhdGEuZGF0YSgpLCBzdGF0aWNf
Y2FzdDxpbnQ+KG1fZGF0YS5zaXplKCkpKTsKKyAgICBzdGF0aWNfY2FzdDxCbG9iUmVzb3VyY2VI
YW5kbGUqPihoYW5kbGUpLT5yZWFkU3luYyhyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2RhdGEu
ZGF0YSgpKSwgc3RhdGljX2Nhc3Q8aW50PihtX2RhdGEuc2l6ZSgpKSk7CiAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKIH0KIApAQCAtMTQxLDcgKzE0MSw3IEBAIFJlZjxCbG9iUmVzb3VyY2VIYW5k
bGU+IEJsb2JSZXNvdXJjZUhhbmQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCbG9iUmVzb3Vy
Y2VIYW5kbGUoYmxvYkRhdGEsIHJlcXVlc3QsIGNsaWVudCwgdHJ1ZSkpOwogfQogCi12b2lkIEJs
b2JSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSogYmxv
YkRhdGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJy
b3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lk
IEJsb2JSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSog
YmxvYkRhdGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYg
ZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEp
CiB7CiAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShyZXF1ZXN0Lmh0dHBN
ZXRob2QoKSwgImdldCIpKSB7CiAgICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJvcih3ZWJLaXRC
bG9iUmVzb3VyY2VEb21haW4sIHN0YXRpY19jYXN0PGludD4oRXJyb3I6Ok1ldGhvZE5vdEFsbG93
ZWQpLCByZXNwb25zZS51cmwoKSwgIlJlcXVlc3QgbWV0aG9kIG11c3QgYmUgR0VUIik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNl
SGFuZGxlLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcg
QEAgY2xhc3MgQmxvYlJlc291cmNlSGFuZGxlIGZpbmFsIDogcHVibGljIAogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8QmxvYlJlc291cmNlSGFuZGxlPiBjcmVhdGVBc3luYyhCbG9iRGF0YSosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50Kik7CiAKLSAgICBzdGF0
aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KEJsb2JEYXRhKiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hh
cj4mIGRhdGEpOworICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQmxv
YkRhdGEqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VS
ZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAKICAgICB2b2lkIHN0YXJ0KCk7CiAg
ICAgaW50IHJlYWRTeW5jKGNoYXIqLCBpbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ3JlZGVudGlhbEJhc2Uu
aCIKIAogI2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05NCw0ICs5NSwxMCBAQCBib29sIENyZWRl
bnRpYWxCYXNlOjpjb21wYXJlKGNvbnN0IENyZWRlCiAgICAgcmV0dXJuIENyZWRlbnRpYWw6OnBs
YXRmb3JtQ29tcGFyZShhLCBiKTsKIH0KIAorU3RyaW5nIENyZWRlbnRpYWxCYXNlOjpzZXJpYWxp
emF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkgY29uc3QKK3sKKyAgICBhdXRvIGNy
ZWRlbnRpYWxTdHJpbmdEYXRhID0gbWFrZVN0cmluZyhtX3VzZXIsICc6JywgbV9wYXNzd29yZCku
dXRmOCgpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJCYXNpYyAiLCBiYXNlNjRFbmNvZGVkKGNy
ZWRlbnRpYWxTdHJpbmdEYXRhKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmgJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCBlbnVtIENyZWRlbnRpYWxQZXJzaXN0ZW5jZSB7CiB9
OwogCiBjbGFzcyBDcmVkZW50aWFsQmFzZSB7Ci0KIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgICAKQEAgLTUyLDYgKzUxLDggQEAgcHVibGljOgog
CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgY29tcGFyZShjb25zdCBDcmVkZW50aWFs
JiwgY29uc3QgQ3JlZGVudGlhbCYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSBjb25zdDsKKwogcHJvdGVjdGVk
OgogICAgIFdFQkNPUkVfRVhQT1JUIENyZWRlbnRpYWxCYXNlKCk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgQ3JlZGVudGlhbEJhc2UoY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3
b3JkLCBDcmVkZW50aWFsUGVyc2lzdGVuY2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDgsMzYgKzE0OCwyNiBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PERlY29kZVRhc2s+IGNyZWF0CiAgICAgKTsKIH0KIAotc3RhdGljIGJvb2wgZGVjb2RlQmFzZTY0
KERlY29kZVRhc2smIHRhc2ssIE1vZGUgbW9kZSkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8dWlu
dDhfdD4+IGRlY29kZUJhc2U2NChjb25zdCBEZWNvZGVUYXNrJiB0YXNrLCBNb2RlIG1vZGUpCiB7
Ci0gICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKLSAgICBpZiAobW9kZSA9PSBNb2RlOjpGb3JnaXZp
bmdCYXNlNjQpIHsKLSAgICAgICAgYXV0byB1bmVzY2FwZWRTdHJpbmcgPSBkZWNvZGVVUkxFc2Nh
cGVTZXF1ZW5jZXModGFzay5lbmNvZGVkRGF0YS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpOwot
ICAgICAgICBpZiAoIWJhc2U2NERlY29kZSh1bmVzY2FwZWRTdHJpbmcsIGJ1ZmZlciwgQmFzZTY0
VmFsaWRhdGVQYWRkaW5nIHwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgfCBCYXNlNjRE
aXNjYXJkVmVydGljYWxUYWIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxz
ZSB7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBNb2RlOjpGb3JnaXZpbmdCYXNlNjQ6
CisgICAgICAgIHJldHVybiBiYXNlNjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRh
c2suZW5jb2RlZERhdGEpLCB7IEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZywg
QmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMsIEJhc2U2NERlY29k
ZU9wdGlvbnM6OkRpc2NhcmRWZXJ0aWNhbFRhYn0pOworCisgICAgY2FzZSBNb2RlOjpMZWdhY3k6
CiAgICAgICAgIC8vIEZpcnN0IHRyeSBiYXNlNjR1cmwuCi0gICAgICAgIGlmICghYmFzZTY0VVJM
RGVjb2RlKHRhc2suZW5jb2RlZERhdGEudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBidWZmZXIp
KSB7Ci0gICAgICAgICAgICAvLyBEaWRuJ3Qgd29yaywgdHJ5IHVuZXNjYXBpbmcgYW5kIGRlY29k
aW5nIGFzIGJhc2U2NC4KLSAgICAgICAgICAgIGF1dG8gdW5lc2NhcGVkU3RyaW5nID0gZGVjb2Rl
VVJMRXNjYXBlU2VxdWVuY2VzKHRhc2suZW5jb2RlZERhdGEudG9TdHJpbmdXaXRob3V0Q29weWlu
ZygpKTsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKHVuZXNjYXBlZFN0cmluZywgYnVm
ZmVyLCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcyB8IEJhc2U2NERpc2NhcmRWZXJ0aWNh
bFRhYikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAg
IGlmIChhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0VVJMRGVjb2RlKHRhc2suZW5jb2RlZERhdGEp
KQorICAgICAgICAgICAgcmV0dXJuIGRlY29kZWREYXRhOworICAgICAgICAvLyBEaWRuJ3Qgd29y
aywgdHJ5IHVuZXNjYXBpbmcgYW5kIGRlY29kaW5nIGFzIGJhc2U2NC4KKyAgICAgICAgcmV0dXJu
IGJhc2U2NERlY29kZShkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModGFzay5lbmNvZGVkRGF0YSks
IHsgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGluZXMsIEJhc2U2NERl
Y29kZU9wdGlvbnM6OkRpc2NhcmRWZXJ0aWNhbFRhYiB9KTsKICAgICB9Ci0gICAgYnVmZmVyLnNo
cmlua1RvRml0KCk7Ci0gICAgdGFzay5yZXN1bHQuZGF0YSA9IFdURk1vdmUoYnVmZmVyKTsKLQot
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBkZWNvZGVFc2NhcGVkKERlY29kZVRh
c2smIHRhc2spCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGRlY29kZUVzY2FwZWQoY29uc3QgRGVj
b2RlVGFzayYgdGFzaykKIHsKICAgICBUZXh0RW5jb2RpbmcgZW5jb2RpbmdGcm9tQ2hhcnNldCh0
YXNrLnJlc3VsdC5jaGFyc2V0KTsKICAgICBhdXRvJiBlbmNvZGluZyA9IGVuY29kaW5nRnJvbUNo
YXJzZXQuaXNWYWxpZCgpID8gZW5jb2RpbmdGcm9tQ2hhcnNldCA6IFVURjhFbmNvZGluZygpOwot
ICAgIGF1dG8gYnVmZmVyID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKHRhc2suZW5j
b2RlZERhdGEsIGVuY29kaW5nKTsKLQotICAgIGJ1ZmZlci5zaHJpbmtUb0ZpdCgpOwotICAgIHRh
c2sucmVzdWx0LmRhdGEgPSBXVEZNb3ZlKGJ1ZmZlcik7CisgICAgcmV0dXJuIGRlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlc0FzRGF0YSh0YXNrLmVuY29kZWREYXRhLCBlbmNvZGluZyk7CiB9CiAKIHN0
YXRpYyBPcHRpb25hbDxSZXN1bHQ+IGRlY29kZVN5bmNocm9ub3VzbHkoRGVjb2RlVGFzayYgdGFz
aywgTW9kZSBtb2RlKQpAQCAtMTg2LDExICsxNzYsMTQgQEAgc3RhdGljIE9wdGlvbmFsPFJlc3Vs
dD4gZGVjb2RlU3luY2hyb25vdQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
aWYgKHRhc2suaXNCYXNlNjQpIHsKLSAgICAgICAgaWYgKCFkZWNvZGVCYXNlNjQodGFzaywgbW9k
ZSkpCisgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBkZWNvZGVCYXNlNjQodGFzaywgbW9kZSk7
CisgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICB0YXNrLnJlc3VsdC5kYXRhID0gV1RGTW92ZSgqZGVjb2RlZERhdGEpOwog
ICAgIH0gZWxzZQotICAgICAgICBkZWNvZGVFc2NhcGVkKHRhc2spOworICAgICAgICB0YXNrLnJl
c3VsdC5kYXRhID0gZGVjb2RlRXNjYXBlZCh0YXNrKTsKIAorICAgIHRhc2sucmVzdWx0LmRhdGEu
c2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gV1RGTW92ZSh0YXNrLnJlc3VsdCk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVy
LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
RGF0YVVSTERlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBzdHJ1Y3Qg
UmVzdWx0IHsKICAgICBTdHJpbmcgbWltZVR5cGU7CiAgICAgU3RyaW5nIGNoYXJzZXQ7CiAgICAg
U3RyaW5nIGNvbnRlbnRUeXBlOwotICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhOwogfTsKIAogdXNpbmcgRGVjb2RlQ29tcGxldGlvbkhhbmRsZXIgPSBXVEY6
OkZ1bmN0aW9uPHZvaWQgKE9wdGlvbmFsPFJlc3VsdD4pPjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OmZhaWx1cmVUaW1lckZpcmVkKCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAot
dm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRD
cmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYg
ZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2
b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkK
IHsKICAgICBpZiAoYXV0byBjb25zdHJ1Y3RvciA9IGJ1aWx0aW5SZXNvdXJjZUhhbmRsZVN5bmNo
cm9ub3VzTG9hZGVyTWFwKCkuZ2V0KHJlcXVlc3QudXJsKCkucHJvdG9jb2woKS50b1N0cmluZ1dp
dGhvdXRDb3B5aW5nKCkpKSB7CiAgICAgICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIHJlcXVlc3Qs
IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAko
cmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIGNsYXNzIEN1cmxS
ZXNvdXJjZUhhbmRsZURlbGVnYXRlOwogY2xhc3MgUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgUmVm
Q291bnRlZDxSZXNvdXJjZUhhbmRsZT4sIHB1YmxpYyBBdXRoZW50aWNhdGlvbkNsaWVudCB7CiBw
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4g
Y3JlYXRlKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNu
aWZmLCBib29sIHNob3VsZENvbnRlbnRFbmNvZGluZ1NuaWZmKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0
KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291
cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdv
cmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZXNvdXJjZUhhbmRsZSgpOwog
CiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDRlVSTENPTk5FQ1RJT04pCkBAIC0xOTMsNyAr
MTkzLDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgUmVmPFJlc291cmNlSGFuZGxlPiAoKkJ1aWx0
aW5Db25zdHJ1Y3RvcikoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhh
bmRsZUNsaWVudCogY2xpZW50KTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJ1aWx0aW5Db25z
dHJ1Y3Rvcihjb25zdCBBdG9tU3RyaW5nJiBwcm90b2NvbCwgQnVpbHRpbkNvbnN0cnVjdG9yKTsK
IAotICAgIHR5cGVkZWYgdm9pZCAoKkJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlcikoTmV0d29ya2lu
Z0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEp
OworICAgIHR5cGVkZWYgdm9pZCAoKkJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlcikoTmV0d29ya2lu
Z0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRh
dGEpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQnVpbHRpblN5bmNocm9ub3VzTG9hZGVyKGNv
bnN0IEF0b21TdHJpbmcmIHByb3RvY29sLCBCdWlsdGluU3luY2hyb25vdXNMb2FkZXIpOwogCiBw
cm90ZWN0ZWQ6CkBAIC0yMTMsNyArMjEzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjaGVkdWxl
RmFpbHVyZShGYWlsdXJlVHlwZSk7CiAKICAgICBib29sIHN0YXJ0KCk7Ci0gICAgc3RhdGljIHZv
aWQgcGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0Kiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNl
RXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBzdGF0
aWMgdm9pZCBwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRl
eHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVz
b3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwog
CiAgICAgdm9pZCByZWZBdXRoZW50aWNhdGlvbkNsaWVudCgpIG92ZXJyaWRlIHsgcmVmKCk7IH0K
ICAgICB2b2lkIGRlcmVmQXV0aGVudGljYXRpb25DbGllbnQoKSBvdmVycmlkZSB7IGRlcmVmKCk7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2Fk
ZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xp
ZW50OjpkaWRSZWNlaXZlCiAKIHZvaWQgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2Vp
dmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3Ro
LCBpbnQgLyplbmNvZGVkRGF0YUxlbmd0aCovKQogewotICAgIG1fZGF0YS5hcHBlbmQoZGF0YSwg
bGVuZ3RoKTsKKyAgICBtX2RhdGEuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGRhdGEpLCBsZW5ndGgpOwogfQogCiB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojpk
aWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNs
aWVudC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKGJvb2wg
YWxsb3cpIHsgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gYWxsb3c7IH0KICAgICBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0K
LSAgICBWZWN0b3I8Y2hhcj4mIG11dGFibGVEYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CisgICAg
VmVjdG9yPHVpbnQ4X3Q+JiBtdXRhYmxlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIGNv
bnN0IFJlc291cmNlRXJyb3ImIGVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvcjsgfQogICAg
IFN5bmNocm9ub3VzTG9hZGVyTWVzc2FnZVF1ZXVlJiBtZXNzYWdlUXVldWUoKSB7IHJldHVybiBt
X21lc3NhZ2VRdWV1ZS5nZXQoKTsgfQogCkBAIC03NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAKICAg
ICBib29sIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyB7IGZhbHNlIH07CiAgICAgUmVzb3VyY2VS
ZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IG1fZGF0YTsKICAgICBSZXNvdXJjZUVycm9yIG1fZXJyb3I7CiAgICAgUmVmPFN5
bmNocm9ub3VzTG9hZGVyTWVzc2FnZVF1ZXVlPiBtX21lc3NhZ2VRdWV1ZTsKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3Vy
Y2VIYW5kbGVDRk5ldC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1LDkgKzg1LDcgQEAgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZEYXRh
UgogCiBzdGF0aWMgdm9pZCBhcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcihSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7Ci0gICAgU3Ry
aW5nIGF1dGhlbnRpY2F0aW9uSGVhZGVyID0gIkJhc2ljICIgKyBiYXNlNjRFbmNvZGUoU3RyaW5n
KGNyZWRlbnRpYWwudXNlcigpICsgIjoiICsgY3JlZGVudGlhbC5wYXNzd29yZCgpKS51dGY4KCkp
OwotCi0gICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkF1dGhv
cml6YXRpb24sIGF1dGhlbnRpY2F0aW9uSGVhZGVyKTsKKyAgICByZXF1ZXN0LnNldEhUVFBIZWFk
ZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlvbiwgY3JlZGVudGlhbC5zZXJpYWxp
emF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkpOwogfQogCiBSZXNvdXJjZUhhbmRs
ZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpCkBAIC01MjQsNyArNTIyLDcgQEAg
c3RhdGljIHZvaWQgZW1wdHlQZXJmb3JtKHZvaWQqKQogewogfQogCi12b2lkIFJlc291cmNlSGFu
ZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBSZXNv
dXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkK
IHsKICAgICBMT0coTmV0d29yaywgIlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHk6JXMgc3N0b3JlZENyZWRlbnRpYWxzUG9saWN5OiV1IiwgcmVxdWVzdC51
cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNv
dXJjZUhhbmRsZUN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNyArMzY4LDcgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6cmVzdGFydFJlcXVlc3RXaXRoQwogICAgIGQtPm1fY3VybFJlcXVl
c3QtPnN0YXJ0KCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291
cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50
aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgQVNTRVJUKCFyZXF1ZXN0LmlzRW1wdHkoKSk7CkBAIC01NjIsOSArNTYy
LDkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxlRGF0YVVSTCgpCiAKICAgICAgICAgLy8g
ZGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRlZC4K
ICAgICAgICAgaWYgKGNsaWVudCgpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0Owot
ICAgICAgICAgICAgaWYgKGJhc2U2NERlY29kZShkYXRhLCBvdXQsIEJhc2U2NElnbm9yZVNwYWNl
c0FuZE5ld0xpbmVzKSAmJiBvdXQuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgICAgICBjbGllbnQo
KS0+ZGlkUmVjZWl2ZUJ1ZmZlcih0aGlzLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShvdXQuZGF0YSgp
LCBvdXQuc2l6ZSgpKSwgb3JpZ2luYWxTaXplKTsKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERh
dGEgPSBiYXNlNjREZWNvZGUoZGF0YSwgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2Vz
QW5kTmV3TGluZXMpOworICAgICAgICAgICAgaWYgKGRlY29kZWREYXRhICYmIGRlY29kZWREYXRh
LT5zaXplKCkgPiAwKQorICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVy
KHRoaXMsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRlY29kZWREYXRhLT5kYXRhKCksIGRlY29kZWRE
YXRhLT5zaXplKCkpLCBvcmlnaW5hbFNpemUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nKGNoYXJzZXQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMu
bW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw5ICs2Nyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRob3Jp
emF0aW9uSGVhZGVyKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ3JlZGVudGlhbCYg
Y3JlZGVudGlhbCkKIHsKLSAgICBTdHJpbmcgYXV0aGVudGljYXRpb25IZWFkZXIgPSAiQmFzaWMg
IiArIGJhc2U2NEVuY29kZShTdHJpbmcoY3JlZGVudGlhbC51c2VyKCkgKyAiOiIgKyBjcmVkZW50
aWFsLnBhc3N3b3JkKCkpLnV0ZjgoKSk7Ci0KLSAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlvbiwgYXV0aGVudGljYXRpb25IZWFkZXIpOwor
ICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0
aW9uLCBjcmVkZW50aWFsLnNlcmlhbGl6YXRpb25Gb3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIo
KSk7CiB9CiAKIHN0YXRpYyBOU09wZXJhdGlvblF1ZXVlICpvcGVyYXRpb25RdWV1ZUZvckFzeW5j
Q2xpZW50cygpCkBAIC0zNTIsNyArMzUwLDcgQEAgQ0ZTdHJpbmdSZWYgUmVzb3VyY2VIYW5kbGU6
OnN5bmNocm9ub3VzTAogICAgIHJldHVybiBDRlNUUigiV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVy
UnVuTG9vcE1vZGUiKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRl
bnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3Jt
TG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgTE9HKE5ldHdvcmss
ICJSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5OiVAIHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5OiV1IiwgcmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlV
cGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcg
QEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZlcnNMbwogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVz
cG9uc2UmLCBWZWN0b3I8Y2hhcj4mKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJj
ZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+JikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0
d29ya1Nlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgICAgICBkaWdl
c3QtPmFkZEJ5dGVzKGNlcnRpZmljYXRlRGF0YS0+ZGF0YSwgY2VydGlmaWNhdGVEYXRhLT5sZW4p
OwogCiAgICAgICAgIGF1dG8gaGFzaCA9IGRpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKLSAgICAgICAg
cmV0dXJuIGJhc2U2NEVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihoYXNoLmRh
dGEoKSksIGhhc2guc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvU3RyaW5n
KGhhc2gpOwogICAgIH0KIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2NlcnRpZmljYXRlczsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVT
ZXF1ZW5jZXMuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDExICsx
NTQsMTEgQEAgU3RyaW5nIGRlY29kZUVzY2FwZVNlcXVlbmNlcyhTdHJpbmdWaWV3IAogICAgIHJl
dHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotaW5saW5lIFZlY3RvcjxjaGFyPiBkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHRFbmNv
ZGluZyYgZW5jb2RpbmcpCitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNv
ZGluZykKIHsKICAgICBBU1NFUlQoZW5jb2RpbmcuaXNWYWxpZCgpKTsKIAotICAgIFZlY3Rvcjxj
aGFyPiByZXN1bHQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKICAgICBzaXplX3QgZGVj
b2RlZFBvc2l0aW9uID0gMDsKICAgICBzaXplX3Qgc2VhcmNoUG9zaXRpb24gPSAwOwogICAgIHdo
aWxlICh0cnVlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFBy
aW50YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9R
dW90ZWRQcmludGFibGUuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhpbXVtTGluZUxlbmd0aCA9IAogCiBzdGF0
aWMgY29uc3QgY2hhciBjcmxmTGluZUVuZGluZ1tdID0gIlxyXG4iOwogCi1zdGF0aWMgc2l6ZV90
IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoY29uc3QgY2hhciogaW5wdXQsIHNpemVfdCBpbnB1
dExlbmd0aCwgc2l6ZV90IGluZGV4KQorc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRpbmdB
dEluZGV4KGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgsIHNpemVfdCBp
bmRleCkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGlu
cHV0TGVuZ3RoKTsKICAgICBpZiAoaW5wdXRbaW5kZXhdID09ICdcbicpCkBAIC01NSwxOSArNTUs
MTkgQEAgc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4KAogICAgIHJldHVy
biAwOwogfQogCi12b2lkIHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8Y2hhcj4m
IGluLCBWZWN0b3I8Y2hhcj4mIG91dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVF
bmNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKIHsKLSAgICBxdW90ZWRQcmludGFi
bGVFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIG91dCk7CisgICAgcmV0dXJuIHF1b3RlZFBy
aW50YWJsZUVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7CiB9CiAKLXZvaWQgcXVv
dGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IGNoYXIqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgs
IFZlY3RvcjxjaGFyPiYgb3V0KQorVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29k
ZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQogewotICAgIG91dC5j
bGVhcigpOwotICAgIG91dC5yZXNlcnZlQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOworICAgIFZlY3Rv
cjx1aW50OF90PiBvdXQ7CisgICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5wdXRMZW5n
dGgpOwogICAgIHNpemVfdCBjdXJyZW50TGluZUxlbmd0aCA9IDA7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgKytpKSB7CiAgICAgICAgIGJvb2wgaXNMYXN0Q2hhcmFj
dGVyID0gKGkgPT0gaW5wdXRMZW5ndGggLSAxKTsKLSAgICAgICAgY2hhciBjdXJyZW50Q2hhcmFj
dGVyID0gaW5wdXRbaV07CisgICAgICAgIHVpbnQ4X3QgY3VycmVudENoYXJhY3RlciA9IGlucHV0
W2ldOwogICAgICAgICBib29sIHJlcXVpcmVzRW5jb2RpbmcgPSBmYWxzZTsKICAgICAgICAgLy8g
QWxsIG5vbi1wcmludGFibGUgQVNDSUkgY2hhcmFjdGVycyBhbmQgPSByZXF1aXJlIGVuY29kaW5n
LgogICAgICAgICBpZiAoKGN1cnJlbnRDaGFyYWN0ZXIgPCAnICcgfHwgY3VycmVudENoYXJhY3Rl
ciA+ICd+JyB8fCBjdXJyZW50Q2hhcmFjdGVyID09ICc9JykgJiYgY3VycmVudENoYXJhY3RlciAh
PSAnXHQnKQpAQCAtMTEyLDE4ICsxMTIsMjAgQEAgdm9pZCBxdW90ZWRQcmludGFibGVFbmNvZGUo
Y29uc3QgY2hhciogaQogICAgICAgICAgICAgY3VycmVudExpbmVMZW5ndGgrKzsKICAgICAgICAg
fQogICAgIH0KKworICAgIHJldHVybiBvdXQ7CiB9CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0KQorVmVjdG9yPHVp
bnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0
KQogewotICAgIHF1b3RlZFByaW50YWJsZURlY29kZShpbi5kYXRhKCksIGluLnNpemUoKSwgb3V0
KTsKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQu
c2l6ZSgpKTsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IGRhdGFMZW5ndGgsIFZlY3RvcjxjaGFyPiYgb3V0KQorVmVjdG9yPHVpbnQ4X3Q+
IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxl
bmd0aCkKIHsKLSAgICBvdXQuY2xlYXIoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0OwogICAg
IGlmICghZGF0YUxlbmd0aCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gb3V0Owog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHsKICAgICAgICAg
Y2hhciBjdXJyZW50Q2hhcmFjdGVyID0gZGF0YVtpXTsKQEAgLTE0OSw4ICsxNTEsOSBAQCB2b2lk
IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBjaGFyKiBkCiAgICAgICAgICAgICBvdXQuYXBw
ZW5kKGxvd2VyQ2hhcmFjdGVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0g
ICAgICAgIG91dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4odG9BU0NJSUhleFZhbHVlKHVwcGVy
Q2hhcmFjdGVyLCBsb3dlckNoYXJhY3RlcikpKTsKKyAgICAgICAgb3V0LmFwcGVuZCh0b0FTQ0lJ
SGV4VmFsdWUodXBwZXJDaGFyYWN0ZXIsIGxvd2VyQ2hhcmFjdGVyKSk7CiAgICAgfQorICAgIHJl
dHVybiBvdXQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVv
dGVkUHJpbnRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9RdW90ZWRQcmludGFibGUuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTkg
KzI4LDE2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgUXVvdGVkUHJpbnRhYmxl
X2gKLSNkZWZpbmUgUXVvdGVkUHJpbnRhYmxlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHF1b3RlZFByaW50
YWJsZUVuY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBWZWN0b3I8Y2hhcj4mKTsKLXZvaWQgcXVv
dGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QsIFZlY3RvcjxjaGFyPiYpOwor
VmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBWZWN0b3I8dWludDhf
dD4mKTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgdWludDhf
dCosIHNpemVfdCk7CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjxj
aGFyPiYsIFZlY3RvcjxjaGFyPiYpOwotdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3Qg
Y2hhciosIHNpemVfdCwgVmVjdG9yPGNoYXI+Jik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJp
bnRhYmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworVmVjdG9yPHVpbnQ4X3Q+IHF1
b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUXVvdGVkUHJpbnRhYmxlX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU1NMS2V5R2Vu
ZXJhdG9yV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsOCArODAsOCBAQCBTdHJpbmcgc2ln
bmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nCiAgICAgICAgIGlmICghQ3J5cHRTaWduQW5k
RW5jb2RlQ2VydGlmaWNhdGUoaENvbnRleHQsIEFUX0tFWUVYQ0hBTkdFLCBYNTA5X0FTTl9FTkNP
RElORywgWDUwOV9LRVlHRU5fUkVRVUVTVF9UT19CRV9TSUdORUQsICZyZXF1ZXN0SW5mbywgJnNp
Z25BbGdvLCAwLCByZWludGVycHJldF9jYXN0PExQQllURT4oYmluYXJ5LmRhdGEoKSksICZkd0Vu
Y29kZWRMZW5ndGgpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAga2V5U3RyaW5nID0g
YmFzZTY0RW5jb2RlKGJpbmFyeSk7Ci0gICAgfSB3aGlsZSgwKTsKKyAgICAgICAga2V5U3RyaW5n
ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYmluYXJ5KTsKKyAgICB9IHdoaWxlICgwKTsKIAogICAg
IGlmIChwUHViSW5mbykKICAgICAgICAgZmFzdEZyZWUocFB1YkluZm8pOwpJbmRleDogU291cmNl
L1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRT
dG9yYWdlLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9z
ZXJ2aWNlL3NlcnZlci9TV1NjcmlwdFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3
ICs1Niw3IEBAIFN0cmluZyBTV1NjcmlwdFN0b3JhZ2U6OnNoYTJIYXNoKGNvbnN0IFMKICAgICBh
dXRvIGlucHV0VXRmOCA9IGlucHV0LnV0ZjgoKTsKICAgICBjcnlwdG8tPmFkZEJ5dGVzKGlucHV0
VXRmOC5kYXRhKCksIGlucHV0VXRmOC5sZW5ndGgoKSk7CiAgICAgYXV0byBoYXNoID0gY3J5cHRv
LT5jb21wdXRlSGFzaCgpOwotICAgIHJldHVybiBXVEY6OmJhc2U2NFVSTEVuY29kZShoYXNoLmRh
dGEoKSwgaGFzaC5zaXplKCkpOworICAgIHJldHVybiBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyho
YXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOwogfQogCiBTdHJpbmcgU1dTY3JpcHRTdG9yYWdlOjpz
aGEySGFzaChjb25zdCBVUkwmIGlucHV0KSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3
NzcxNSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsOTkgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisg
ICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdG8gbWF0Y2ggbW9yZSBtb2Rl
cm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgor
ICAgICAgICAoV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL1dlYlVS
TFNjaGVtZUhhbmRsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFNjaGVtZVRhc2s6OmRpZENvbXBsZXRlKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxv
YWRlclN0cmF0ZWd5Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViVVJMU2NoZW1lSGFuZGxlclByb3h5Ojpsb2FkU3luY2hyb25vdXNseSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oOgorICAgICAgICBV
cGRhdGUgdG8gdXNlIHVpbnQ4X3QqIGRhdGEgYnVmZmVycyBtb3JlIGNvbnNpc3RlbnRseSBmb3Ig
c3luY2hyb25vdXMgbG9hZHMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpzZW5kUmVwbHlUb1N5bmNocm9ub3Vz
UmVxdWVzdCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgdWludDhfdCogZGF0YSBidWZmZXJzIG1v
cmUgY29uc2lzdGVudGx5IGZvciBzeW5jaHJvbm91cyBsb2Fkcy4KKworICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmlyZUNvbnZlcnNpb25SZXF1
ZXN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlIC8gYmFzZTY0
VVJMRW5jb2RlVG9TdHJpbmcoKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtEYXRhVGFza0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjphcHBseUJhc2ljQXV0aG9y
aXphdGlvbkhlYWRlcik6CisgICAgICAgIFVzZSBuZXcgc2VyaWFsaXphdGlvbkZvckJhc2ljQXV0
aG9yaXphdGlvbkhlYWRlcigpIGhlbHBlci4KKworICAgICAgICAqIFNoYXJlZC9BUEkvQVBJRGF0
YS5oOgorICAgICAgICAoQVBJOjpEYXRhOjpjcmVhdGUpOgorICAgICAgICAoQVBJOjpEYXRhOjpm
YXN0RnJlZUJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgQWRkIG5ldyBjcmVhdGUgZnVuY3Rpb24g
dGhhdCB0YWtlcyBvd25lcnNoaXAgb2YgYSBWZWN0b3IncyBidWZmZXIgcmF0aGVyCisgICAgICAg
IHRoYW4gY29weWluZyBpdC4gUmVwbGFjZSB1c2Ugb2Ygc3RhdGljIGZ1bmN0aW9ucyB3aXRoIGlu
bGluZSBsYW1iZGFzIGZvcgorICAgICAgICBmcmVlLWZ1bmN0aW9ucy4KKworICAgICAgICAqIFNo
YXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbToKKyAgICAgICAgKFdlYktpdDo6c2FuZGJv
eEZpbGVQYXRoKToKKyAgICAgICAgVXNlIG1ha2VTdHJpbmcgYW5kIG5ldyBiYXNlNjRVUkxFbmNv
ZGVkKCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwubW06CisgICAgICAgIChwcm9kdWNlQ2xpZW50RGF0YUpzb24pOgorICAgICAgICBV
c2UgbmV3IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QXV0b21hdGlvbi9jYWlyby9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6YmFzZTY0RW5jb2RlZFBOR0RhdGEpOgorICAgICAgICBVc2UgbmV3IGJhc2U2NEVu
Y29kZVRvU3RyaW5nKCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0
YXRlLm1tOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGll
bnQ6OndlYkNyeXB0b01hc3RlcktleSk6CisgICAgICAgIFVzZSBuZXcgZGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSgpIGFuZCBuZXcgYWRvcHRpbmcgQVBJOjpEYXRhOjpjcmVhdGUgZnVuY3Rpb24u
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNr
ZW5kQ29tbWFuZHMpOgorICAgICAgICBVc2UgbmV3IGJhc2U2NEVuY29kZVRvU3RyaW5nKCkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVBy
b3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1TYXZlKToKKyAgICAgICAgVXNlIG5ldyBiYXNlNjREZWNvZGUoKS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUpOgorICAg
ICAgICBVc2UgbmV3IGJhc2U2NERlY29kZSgpLgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3Bl
Y3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAgVXNl
IG5ldyBiYXNlNjREZWNvZGUoKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFj
L1dlYkluc3BlY3RvclVJUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6CisgICAgICAgIFVzZSBuZXcgYmFzZTY0RGVjb2RlKCku
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJh
Y2tlbmRDb21tYW5kcyk6CisgICAgICAgIFVzZSBuZXcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoKS4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhl
bnRpY2F0b3IubW06CisgICAgICAgIChXZWJLaXQ6OkxvY2FsQXV0aGVudGljYXRvckludGVybmFs
Ojpwcm9kdWNlSGFzaFNldCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsQXV0aGVudGljYXRvcjo6
bWFrZUNyZWRlbnRpYWwpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhlbnRpY2F0b3I6Omdl
dEFzc2VydGlvbik6CisgICAgICAgIFVzZSBuZXcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoKS4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tIaWRDb25uZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TW9ja0hpZENvbm5lY3Rpb246OmZlZWRSZXBvcnRz
KToKKyAgICAgICAgVXNlIG5ldyBiYXNlNjREZWNvZGUoKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW06CisgICAgICAg
IChXZWJLaXQ6Ok1vY2tMb2NhbENvbm5lY3Rpb246OmZpbHRlclJlc3BvbnNlcyBjb25zdCk6Cisg
ICAgICAgIFVzZSBuZXcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoKS4KKwogMjAyMS0wNS0xOCAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBhbGxvd3NDb250
ZW50SmF2YVNjcmlwdCBBUEkgbm90IGFwcGxpZWQgZnJvbSBkZWZhdWx0V2VicGFnZVByZWZlcmVu
Y2VzCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIzLDcg
KzIzLDcgQEAKIG1lc3NhZ2VzIC0+IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzIExlZ2Fj
eVJlY2VpdmVyIHsKIAogICAgIFNjaGVkdWxlUmVzb3VyY2VMb2FkKFdlYktpdDo6TmV0d29ya1Jl
c291cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykKLSAgICBQZXJmb3Jt
U3luY2hyb25vdXNMb2FkKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVz
b3VyY2VMb2FkUGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiBkYXRhKSBTeW5j
aHJvbm91cworICAgIFBlcmZvcm1TeW5jaHJvbm91c0xvYWQoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKSAtPiAoV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciBlcnJvciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSwgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgVGVzdFByb2Nlc3NJbmNvbWluZ1N5
bmNNZXNzYWdlc1doZW5XYWl0aW5nRm9yU3luY1JlcGx5KFdlYktpdDo6V2ViUGFnZVByb3h5SWRl
bnRpZmllciBwYWdlSUQpIC0+IChib29sIGhhbmRsZWQpIFN5bmNocm9ub3VzCiAgICAgTG9hZFBp
bmcoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJh
bWV0ZXJzKQogICAgIFJlbW92ZUxvYWRJZGVudGlmaWVyKHVpbnQ2NF90IHJlc291cmNlTG9hZElk
ZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIHZvaWQgc2VuZFJlcGx5VG9TeW5jaHJvbm91
c1JlcXVlcwogICAgIEFTU0VSVChkYXRhLmRlbGF5ZWRSZXBseSk7CiAgICAgQVNTRVJUKCFkYXRh
LnJlc3BvbnNlLmlzTnVsbCgpIHx8ICFkYXRhLmVycm9yLmlzTnVsbCgpKTsKIAotICAgIFZlY3Rv
cjxjaGFyPiByZXNwb25zZUJ1ZmZlcjsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzcG9uc2VCdWZm
ZXI7CiAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPnNpemUoKSkKICAgICAgICAgcmVzcG9uc2VC
dWZmZXIuYXBwZW5kKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVD
bGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzE1LDE0ICszMTUsMTUgQEAgdm9pZCBQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudE1hbmFnZXI6OmZpcgogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBwdWJsaWNLZXlEYXRhOwotICAgICAg
ICBXVEY6OmJhc2U2NFVSTERlY29kZShwdWJsaWNLZXlCYXNlNjRVUkwsIHB1YmxpY0tleURhdGEp
OworICAgICAgICBhdXRvIHB1YmxpY0tleURhdGEgPSBiYXNlNjRVUkxEZWNvZGUocHVibGljS2V5
QmFzZTY0VVJMKTsKKyAgICAgICAgaWYgKCFwdWJsaWNLZXlEYXRhKQorICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIGF1dG8gY3J5cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQ
QUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKLSAgICAgICAgY3J5cHRvLT5h
ZGRCeXRlcyhwdWJsaWNLZXlEYXRhLmRhdGEoKSwgcHVibGljS2V5RGF0YS5zaXplKCkpOworICAg
ICAgICBjcnlwdG8tPmFkZEJ5dGVzKHB1YmxpY0tleURhdGEtPmRhdGEoKSwgcHVibGljS2V5RGF0
YS0+c2l6ZSgpKTsKICAgICAgICAgYXV0byBwdWJsaWNLZXlEYXRhSGFzaCA9IGNyeXB0by0+Y29t
cHV0ZUhhc2goKTsKIAotICAgICAgICBhdXRvIGtleUlEID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUo
cHVibGljS2V5RGF0YUhhc2guZGF0YSgpLCBwdWJsaWNLZXlEYXRhSGFzaC5zaXplKCkpOworICAg
ICAgICBhdXRvIGtleUlEID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocHVibGljS2V5RGF0YUhh
c2guZGF0YSgpLCBwdWJsaWNLZXlEYXRhSGFzaC5zaXplKCkpOwogICAgICAgICBpZiAoa2V5SUQg
IT0gYXR0cmlidXRpb24uc291cmNlVW5saW5rYWJsZVRva2VuKCktPmtleUlEQmFzZTY0VVJMKQog
ICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0Rh
dGFUYXNrQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1LDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAjaWYgVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05FVFdPUktfU0VTU0lP
TikKIHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVu
dGlhbCkKIHsKLSAgICBTdHJpbmcgYXV0aGVudGljYXRpb25IZWFkZXIgPSAiQmFzaWMgIiArIGJh
c2U2NEVuY29kZShTdHJpbmcoY3JlZGVudGlhbC51c2VyKCkgKyAiOiIgKyBjcmVkZW50aWFsLnBh
c3N3b3JkKCkpLnV0ZjgoKSk7Ci0gICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoV2ViQ29y
ZTo6SFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGF1dGhlbnRpY2F0aW9uSGVhZGVyKTsK
KyAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6
QXV0aG9yaXphdGlvbiwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0
aW9uSGVhZGVyKCkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0FQ
SS9BUElEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURh
dGEuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsMTAgQEAgcHVibGljOgogICAgICAgICAg
ICAgbWVtY3B5KGNvcGllZEJ5dGVzLCBieXRlcywgc2l6ZSk7CiAgICAgICAgIH0KIAotICAgICAg
ICByZXR1cm4gY3JlYXRlV2l0aG91dENvcHlpbmcoY29waWVkQnl0ZXMsIHNpemUsIGZhc3RGcmVl
Qnl0ZXMsIG51bGxwdHIpOworICAgICAgICByZXR1cm4gY3JlYXRlV2l0aG91dENvcHlpbmcoY29w
aWVkQnl0ZXMsIHNpemUsIFtdICh1bnNpZ25lZCBjaGFyKiBieXRlcywgY29uc3Qgdm9pZCopIHsK
KyAgICAgICAgICAgIGlmIChieXRlcykKKyAgICAgICAgICAgICAgICBmYXN0RnJlZShzdGF0aWNf
Y2FzdDx2b2lkKj4oYnl0ZXMpKTsKKyAgICAgICAgfSwgbnVsbHB0cik7CiAgICAgfQogICAgIAog
ICAgIHN0YXRpYyBSZWY8RGF0YT4gY3JlYXRlKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYg
YnVmZmVyKQpAQCAtNjgsNiArNzEsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY3JlYXRl
KGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBSZWY8
RGF0YT4gY3JlYXRlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmIGJ1ZmZlcikKKyAgICB7CisgICAg
ICAgIGF1dG8gYnVmZmVyU2l6ZSA9IGJ1ZmZlci5zaXplKCk7CisgICAgICAgIGF1dG8gYnVmZmVy
UG9pbnRlciA9IGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCkubGVha1B0cigpOworICAgICAgICByZXR1
cm4gY3JlYXRlV2l0aG91dENvcHlpbmcoYnVmZmVyUG9pbnRlciwgYnVmZmVyU2l6ZSwgW10gKHVu
c2lnbmVkIGNoYXIqIGJ5dGVzLCBjb25zdCB2b2lkKikgeworICAgICAgICAgICAgaWYgKGJ5dGVz
KQorICAgICAgICAgICAgICAgIFdURjo6VmVjdG9yTWFsbG9jOjpmcmVlKGJ5dGVzKTsKKyAgICAg
ICAgfSwgbnVsbHB0cik7CisgICAgfQorCiAgICAgc3RhdGljIFJlZlB0cjxEYXRhPiBjcmVhdGUo
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7CiAgICAgCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBA
IC05NiwxMiArMTA5LDYgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgZmFzdEZyZWVCeXRlcyh1bnNpZ25lZCBjaGFyKiBieXRlcywgY29uc3Qgdm9pZCopCi0gICAg
ewotICAgICAgICBpZiAoYnl0ZXMpCi0gICAgICAgICAgICBmYXN0RnJlZShzdGF0aWNfY2FzdDx2
b2lkKj4oYnl0ZXMpKTsKLSAgICB9Ci0KICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBtX2J5dGVz
IHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE4ICszMTUsMTMgQEAgc3RhdGljIFN0cmluZyBzYW5k
Ym94RGlyZWN0b3J5KFdlYkNvcmU6OgogCiBzdGF0aWMgU3RyaW5nIHNhbmRib3hGaWxlUGF0aChj
b25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgsIGNvbnN0IENTdHJpbmcmIGhlYWRlcikKIHsKLSAg
ICBTdHJpbmdCdWlsZGVyIHNhbmRib3hGaWxlOwotICAgIHNhbmRib3hGaWxlLmFwcGVuZChkaXJl
Y3RvcnlQYXRoKTsKLSAgICBzYW5kYm94RmlsZS5hcHBlbmQoIi9Db21waWxlZFNhbmRib3grIik7
Ci0KICAgICAvLyBNYWtlIHRoZSBmaWxlbmFtZSBzZW1pLXVuaXF1ZSBiYXNlZCBvbiB0aGUgY29u
dGVudHMgb2YgdGhlIGhlYWRlci4KKwogICAgIGF1dG8gY3J5cHRvID0gUEFMOjpDcnlwdG9EaWdl
c3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBj
cnlwdG8tPmFkZEJ5dGVzKGhlYWRlci5kYXRhKCksIGhlYWRlci5sZW5ndGgoKSk7Ci0gICAgVmVj
dG9yPHVpbnQ4X3Q+IGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7Ci0gICAgU3RyaW5nIHJl
YWRhYmxlSGFzaCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKGhhc2guZGF0YSgpLCBoYXNoLnNpemUo
KSk7CisgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0gICAgc2FuZGJv
eEZpbGUuYXBwZW5kKHJlYWRhYmxlSGFzaCk7Ci0gICAgcmV0dXJuIHNhbmRib3hGaWxlLnRvU3Ry
aW5nKCk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0aCwgIi9Db21waWxlZFNh
bmRib3grIiwgYmFzZTY0VVJMRW5jb2RlZChoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpKTsKIH0K
IAogc3RhdGljIGJvb2wgZW5zdXJlU2FuZGJveENhY2hlRGlyZWN0b3J5KGNvbnN0IFNhbmRib3hJ
bmZvJiBpbmZvKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsNyAr
NTIwLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAogICAgIFN0YXJ0VVJMU2NoZW1l
VGFzayhzdHJ1Y3QgV2ViS2l0OjpVUkxTY2hlbWVUYXNrUGFyYW1ldGVycyBwYXJhbWV0ZXJzKQog
ICAgIFN0b3BVUkxTY2hlbWVUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRf
dCB0YXNrSWRlbnRpZmllcikKLSAgICBMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrKHN0cnVj
dCBXZWJLaXQ6OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpIC0+IChXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9y
LCBWZWN0b3I8Y2hhcj4gZGF0YSkgU3luY2hyb25vdXMKKyAgICBMb2FkU3luY2hyb25vdXNVUkxT
Y2hlbWVUYXNrKHN0cnVjdCBXZWJLaXQ6OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRl
cnMpIC0+IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yIGVycm9yLCBWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKIAogI2lm
IEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgU2hvdWxkQWxsb3dEZXZpY2VPcmllbnRh
dGlvbkFuZE1vdGlvbkFjY2VzcyhXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgc3Ry
dWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFtZUluZm8sIGJvb2wgbWF5UHJvbXB0KSAtPiAo
ZW51bTp1aW50OF90IFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9u
U3RhdGUgcGVybWlzc2lvblN0YXRlKSBBc3luYwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIHN0cnVjdCBVUkxTY2hlbWVUYXNrUGFyYW1ldGVyczsKIGNsYXNzIFdl
YlBhZ2VQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKIAotdXNpbmcgU3luY0xvYWRDb21w
bGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBWZWN0
b3I8Y2hhcj4mKT47Cit1c2luZyBTeW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0gQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpPjsKIAogY2xhc3Mg
V2ViVVJMU2NoZW1lSGFuZGxlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlVSTFNjaGVtZUhhbmRs
ZXI+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxTY2hlbWVIYW5kbGVyKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDEwICsyMTIsMTAgQEAgYXV0byBXZWJVUkxTY2hl
bWVUYXNrOjpkaWRDb21wbGV0ZShjb25zdAogICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKICAgICAK
ICAgICBpZiAoaXNTeW5jKCkpIHsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAg
IFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgICAgICBpZiAobV9zeW5jRGF0YSkgewogICAgICAg
ICAgICAgZGF0YS5yZXNpemUobV9zeW5jRGF0YS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIG1lbWNw
eShkYXRhLmRhdGEoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obV9zeW5jRGF0YS0+
ZGF0YSgpKSwgbV9zeW5jRGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG1lbWNweShkYXRhLmRh
dGEoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9zeW5jRGF0YS0+ZGF0YSgp
KSwgbV9zeW5jRGF0YS0+c2l6ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fc3luY0NvbXBs
ZXRpb25IYW5kbGVyKG1fc3luY1Jlc3BvbnNlLCBlcnJvciwgV1RGTW92ZShkYXRhKSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgc3RydWN0IFVSTFNjaGVtZVRhc2tQYXJhbWV0
ZXJzOwogY2xhc3MgV2ViVVJMU2NoZW1lSGFuZGxlcjsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIAot
dXNpbmcgU3luY0xvYWRDb21wbGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImLCBjb25zdCBWZWN0b3I8Y2hhcj4mKT47Cit1c2luZyBTeW5jTG9hZENvbXBsZXRpb25I
YW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYpPjsKIAogY2xhc3MgV2ViVVJMU2NoZW1lVGFzayA6IHB1YmxpYyBBUEk6Ok9iamVjdElt
cGw8QVBJOjpPYmplY3Q6OlR5cGU6OlVSTFNjaGVtZVRhc2s+LCBwdWJsaWMgSW5zdGFuY2VDb3Vu
dGVkPFdlYlVSTFNjaGVtZVRhc2s+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxT
Y2hlbWVUYXNrKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNw
cAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzOCwxMyArMjMzOCwxNCBAQCB2b2lkIFdLUGFn
ZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KFdLUGFnCiAgICAgICAgICAgICBpZiAobV9jbGllbnQu
Y29weVdlYkNyeXB0b01hc3RlcktleSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
dG9JbXBsKG1fY2xpZW50LmNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkodG9BUEkoJnBhZ2UpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pKSk7CiAKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBt
YXN0ZXJLZXk7CiAjaWYgRU5BQkxFKFdFQl9DUllQVE8pCi0gICAgICAgICAgICBpZiAoIWdldERl
ZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKKyAgICAgICAgICAgIGF1dG8gbWFz
dGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgICAgICAgICAgaWYgKCFt
YXN0ZXJLZXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBy
ZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUoV1RGTW92ZSgqbWFzdGVyS2V5KSk7CisjZWxzZQorICAg
ICAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKG51bGxwdHIsIDApOwogI2VuZGlmCi0K
LSAgICAgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0YSgpLCBt
YXN0ZXJLZXkuc2l6ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIFJlZlB0cjxBUEk6OlN0cmlu
Zz4gc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKFdlYlBhZ2VQcm94eSYgcGFnZSwg
dW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBSZWZQdHI8QVBJOjpTdHJpbmc+JiBjaGFsbGVu
Z2VTdHJpbmcsIGNvbnN0IFVSTCYgdXJsKSBvdmVycmlkZQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw3ICs2OCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNEYXRhPiBwcm9kdWNlQ2xpZW50RGEK
ICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAid2ViYXV0aG4uZ2V0IiBmb3JLZXk6QCJ0
eXBlIl07CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
V1RGOjpiYXNlNjRVUkxFbmNvZGUoY2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2UubGVuZ3RoKSBm
b3JLZXk6QCJjaGFsbGVuZ2UiXTsKKyAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6YmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2UubGVuZ3RoKSBmb3JLZXk6
QCJjaGFsbGVuZ2UiXTsKICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6b3JpZ2luIGZvcktleTpA
Im9yaWdpbiJdOwogCiAgICAgcmV0dXJuIFtOU0pTT05TZXJpYWxpemF0aW9uIGRhdGFXaXRoSlNP
Tk9iamVjdDpkaWN0aW9uYXJ5LmdldCgpIG9wdGlvbnM6TlNKU09OV3JpdGluZ1NvcnRlZEtleXMg
ZXJyb3I6bmlsXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fp
cm8vV2ViQXV0b21hdGlvblNlc3Npb25DYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9jYWlyby9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNhaXJv
LmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9jYWlyby9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksNyArNDksNyBAQCBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBiYXNlNjRFbmNvZGVkUE5H
CiAgICAgaWYgKHBuZ0RhdGEuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShwbmdEYXRhKTsKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcocG5nRGF0YSk7CiB9CiAKIE9wdGlvbmFsPFN0cmluZz4gV2ViQXV0b21h
dGlvblNlc3Npb246OnBsYXRmb3JtR2V0QmFzZTY0RW5jb2RlZFBOR0RhdGEoY29uc3QgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTEzNSwxMSArMTEzNSwxMSBAQCBSZWZQdHI8QVBJOjpEYXRhPiBOYXZpZ2F0aW9u
U3RhdGU6Ok5hdmlnCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFtX25hdmln
YXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYkNyeXB0b01hc3Rlcktl
eUZvcldlYlZpZXcpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKLSAgICAg
ICAgaWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkpCisgICAgICAg
IGF1dG8gbWFzdGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgICAgICBp
ZiAoIW1hc3RlcktleSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIHJl
dHVybiBBUEk6OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0YSgpLCBtYXN0ZXJLZXkuc2l6ZSgp
KTsKKyAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKFdURk1vdmUoKm1hc3RlcktleSkp
OwogICAgIH0KIAogICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0
b3JDbGllbnQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTQsMTMgKzE5NCwxMSBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0dXBD
b25uZWN0CiB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKGNv
bnN0IGNoYXIqIGJhY2tlbmRDb21tYW5kcykKIHsKICAgICBpZiAoIWJhY2tlbmRDb21tYW5kcyB8
fCAhYmFja2VuZENvbW1hbmRzWzBdKSB7Ci0gICAgICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0g
U3RyaW5nKCk7CisgICAgICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0geyB9OwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0
RW5jb2RlKGJhY2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tlbmRDb21tYW5kcyksIGJhc2U2NERh
dGEpOwotICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jh
c2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1ha2VTdHJp
bmcoImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKGJhY2tlbmRD
b21tYW5kcywgc3RybGVuKGJhY2tlbmRDb21tYW5kcykpKTsKIH0KIAogdm9pZCBSZW1vdGVJbnNw
ZWN0b3JDbGllbnQ6OmNvbm5lY3Rpb25EaWRDbG9zZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUd0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSwxNiArMTM5LDE4IEBAIHZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm0KICAgICBpZiAoZ3RrX25hdGl2ZV9kaWFsb2dfcnVu
KEdUS19OQVRJVkVfRElBTE9HKGRpYWxvZy5nZXQoKSkpICE9IEdUS19SRVNQT05TRV9BQ0NFUFQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxjaGFyPiBkYXRhVmVjdG9yOworICAgIFZl
Y3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yOwogICAgIENTdHJpbmcgZGF0YVN0cmluZzsKICAgICBp
ZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBk
YXRhVmVjdG9yLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICBhdXRvIGRlY29kZWRE
YXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQsIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRl
UGFkZGluZyk7CisgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgZGVjb2RlZERhdGEt
PnNocmlua1RvRml0KCk7CisgICAgICAgIGRhdGFWZWN0b3IgPSBXVEZNb3ZlKCpkZWNvZGVkRGF0
YSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGRhdGFTdHJpbmcgPSBjb250ZW50LnV0ZjgoKTsKIAot
ICAgIGNvbnN0IGNoYXIqIGRhdGEgPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcu
ZGF0YSgpIDogZGF0YVZlY3Rvci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZGF0YSA9ICFkYXRh
U3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiByZWludGVycHJldF9jYXN0PGNo
YXIqPihkYXRhVmVjdG9yLmRhdGEoKSk7CiAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAhZGF0YVN0
cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcubGVuZ3RoKCkgOiBkYXRhVmVjdG9yLnNpemUoKTsK
ICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGd0a19maWxlX2Nob29zZXJfZ2V0
X2ZpbGUoY2hvb3NlcikpOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2ZpbGVfZ2V0X3Bh
dGgoZmlsZS5nZXQoKSkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCShy
ZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3Rr
L1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzgsMTYgKzUz
OCwxOCBAQCB2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZShjCiAgICAgaWYg
KGd0a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAh
PSBHVEtfUkVTUE9OU0VfQUNDRVBUKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8Y2hh
cj4gZGF0YVZlY3RvcjsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcjsKICAgICBDU3Ry
aW5nIGRhdGFTdHJpbmc7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgaWYgKCFi
YXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkK
KyAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50LCBCYXNlNjRE
ZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICBpZiAoIWRlY29kZWREYXRh
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkYXRhVmVjdG9yLnNocmlua1RvRml0KCk7
CisgICAgICAgIGRlY29kZWREYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgICAgICBkYXRhVmVjdG9y
ID0gV1RGTW92ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxzZQogICAgICAgICBkYXRhU3RyaW5n
ID0gY29udGVudC51dGY4KCk7CiAKLSAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcu
aXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOworICAgIGNv
bnN0IGNoYXIqIGRhdGEgPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcuZGF0YSgp
IDogcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YVZlY3Rvci5kYXRhKCkpOwogICAgIHNpemVf
dCBkYXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgp
IDogZGF0YVZlY3Rvci5zaXplKCk7CiAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1Jl
ZihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKICAgICBHVW5pcXVlUHRyPGNo
YXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1Jl
bW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEwICsxNzQsMTAgQEAgdm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybQogICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFs
VVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwogCiAgICAgICAgIGlmIChi
YXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAg
ICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRk
aW5nKSkKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNvZGUoY29udGVu
dENvcHksIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAg
ICBhdXRvIGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRl
czpkZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0YS0+c2l6ZSgpXSk7CiAgICAg
ICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNd
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFj
dHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJv
cjpOVUxMXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2Vi
SW5zcGVjdG9yVUlQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVj
dG9yVUlQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTA5LDEwICs1MDksMTAgQEAgdm9p
ZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUoYwogICAgICAgICBtX3N1Z2dlc3Rl
ZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwogCiAgICAg
ICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0Owot
ICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFs
aWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNv
ZGUoY29udGVudENvcHksIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0
YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7Cisg
ICAgICAgICAgICBhdXRvIGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5p
dFdpdGhCeXRlczpkZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0YS0+c2l6ZSgp
XSk7CiAgICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWlj
YWxseTpZRVNdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0
ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZyBlcnJvcjpOVUxMXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5j
cHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2
LDcgKzIwNiw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ28KICAg
ICBpZiAoIWV2ZW50Lm1lc3NhZ2UgfHwgZXZlbnQubWVzc2FnZS0+aXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1ha2VTdHJpbmcoImRhdGE6
dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGUoZXZlbnQubWVzc2FnZS0+dXRm
OCgpKSk7CisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQv
amF2YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChldmVudC5tZXNzYWdlLT51dGY4KCkp
KTsKIH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QoY29uc3Qg
RXZlbnQmIGV2ZW50KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRv
ci5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC04MiwxMCArODIsOCBAQCBzdGF0aWMgaW5saW5lIEhhc2hTZXQ8U3RyaW5nPiBwcm9kdWNlSGFz
CiB7CiAgICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKICAgICBmb3IgKGF1dG8mIGNyZWRlbnRp
YWxEZXNjcmlwdG9yIDogY3JlZGVudGlhbERlc2NyaXB0b3JzKSB7Ci0gICAgICAgIGlmIChlbXB0
eVRyYW5zcG9ydHNPckNvbnRhaW4oY3JlZGVudGlhbERlc2NyaXB0b3IudHJhbnNwb3J0cywgQXV0
aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpCi0gICAgICAgICAgICAmJiBjcmVkZW50aWFs
RGVzY3JpcHRvci50eXBlID09IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkKLSAg
ICAgICAgICAgICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUoKSA9PSBjcmVk
ZW50aWFsSWRMZW5ndGgpCi0gICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVuY29kZShjcmVk
ZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5kYXRhKCksIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlk
VmVjdG9yLnNpemUoKSkpOworICAgICAgICBpZiAoZW1wdHlUcmFuc3BvcnRzT3JDb250YWluKGNy
ZWRlbnRpYWxEZXNjcmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6Oklu
dGVybmFsKSAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09IFB1YmxpY0tleUNyZWRlbnRp
YWxUeXBlOjpQdWJsaWNLZXkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgp
ID09IGNyZWRlbnRpYWxJZExlbmd0aCkKKyAgICAgICAgICAgIHJlc3VsdC5hZGQoYmFzZTY0RW5j
b2RlVG9TdHJpbmcoY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3IuZGF0YSgpLCBjcmVkZW50
aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KQEAgLTI0MSw3ICsyMzksNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNy
ZWRlbnRpYWwoCiAgICAgICAgIGlmIChub3RGb3VuZCAhPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMu
ZmluZE1hdGNoaW5nKFsmZXhjbHVkZUNyZWRlbnRpYWxJZHNdIChhdXRvJiBjcmVkZW50aWFsKSB7
CiAgICAgICAgICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7CiAgICAgICAg
ICAgICBBU1NFUlQocmF3SWQpOwotICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFs
SWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZShyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0
aCgpKSk7CisgICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMuY29udGFpbnMo
YmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkp
OwogICAgICAgICB9KSkgewogICAgICAgICAgICAgcmVjZWl2ZUV4Y2VwdGlvbih7IE5vdEFsbG93
ZWRFcnJvciwgIkF0IGxlYXN0IG9uZSBjcmVkZW50aWFsIG1hdGNoZXMgYW4gZW50cnkgb2YgdGhl
IGV4Y2x1ZGVDcmVkZW50aWFscyBsaXN0IGluIHRoZSBwbGF0Zm9ybSBhdHRhY2hlZCBhdXRoZW50
aWNhdG9yLiJfcyB9LCBXZWJBdXRoZW50aWNhdGlvblN0YXR1czo6TEFFeGNsdWRlQ3JlZGVudGlh
bHNNYXRjaGVkKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTUxOCw3ICs1MTYsNyBAQCB2b2lk
IExvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKCkKICAgICAgICAgfQogCiAgICAgICAg
IGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+cmF3SWQoKTsKLSAgICAgICAgaWYgKGFsbG93Q3Jl
ZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGUocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5
dGVMZW5ndGgoKSkpKQorICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJh
c2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKSkK
ICAgICAgICAgICAgIGFzc2VydGlvblJlc3BvbnNlcy51bmNoZWNrZWRBcHBlbmQoY3JlZGVudGlh
bC5jb3B5UmVmKCkpOwogICAgIH0KICAgICBpZiAoYXNzZXJ0aW9uUmVzcG9uc2VzLmlzRW1wdHko
KSkgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9j
ay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHAJKHJldmlz
aW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9u
L01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsMTUgKzI2
MSwxMyBAQCB2b2lkIE1vY2tIaWRDb25uZWN0aW9uOjpmZWVkUmVwb3J0cygpCiAgICAgICAgIGlm
IChzdGFnZXNNYXRjaCgpICYmIG1fY29uZmlndXJhdGlvbi5oaWQtPmVycm9yID09IE1vY2s6Okhp
ZEVycm9yOjpVbnN1cHBvcnRlZE9wdGlvbnMgJiYgKG1fcmVxdWlyZVJlc2lkZW50S2V5IHx8IG1f
cmVxdWlyZVVzZXJWZXJpZmljYXRpb24pKQogICAgICAgICAgICAgbWVzc2FnZSA9IEZpZG9IaWRN
ZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNvbW1hbmQ6OmtD
Ym9yLCB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEN0YXBEZXZpY2VSZXNwb25zZUNvZGU6OmtDdGFw
MkVyclVuc3VwcG9ydGVkT3B0aW9uKSB9KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBW
ZWN0b3I8dWludDhfdD4gcGF5bG9hZDsKICAgICAgICAgICAgIEFTU0VSVCghbV9jb25maWd1cmF0
aW9uLmhpZC0+cGF5bG9hZEJhc2U2NC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgYXV0byBzdGF0
dXMgPSBiYXNlNjREZWNvZGUobV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NFswXSwg
cGF5bG9hZCk7CisgICAgICAgICAgICBhdXRvIHBheWxvYWQgPSBiYXNlNjREZWNvZGUobV9jb25m
aWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NFswXSk7CiAgICAgICAgICAgICBtX2NvbmZpZ3Vy
YXRpb24uaGlkLT5wYXlsb2FkQmFzZTY0LnJlbW92ZSgwKTsKLSAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQoc3RhdHVzLCBzdGF0dXMpOwogICAgICAgICAgICAgaWYgKCFtX2NvbmZpZ3VyYXRpb24u
aGlkLT5pc1UyZikKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3NhZ2U6OmNy
ZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a0Nib3IsIHBheWxv
YWQpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1f
Y3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21tYW5kOjprQ2JvciwgV1RGTW92ZSgqcGF5
bG9hZCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGaWRv
SGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21tYW5k
OjprTXNnLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1lc3Nh
Z2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a01zZywg
V1RGTW92ZSgqcGF5bG9hZCkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24u
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5l
Y3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIE1vY2tMb2Nh
bENvbm5lY3Rpb246OmZpbHRlclJlc3BvbnNlCiAgICAgZm9yICg7IGl0ciAhPSByZXNwb25zZXMu
ZW5kKCk7ICsraXRyKSB7CiAgICAgICAgIGF1dG8qIHJhd0lkID0gaXRyLT5nZXQoKS5yYXdJZCgp
OwogICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAgICBhdXRvIHJhd0lkQmFzZTY0ID0gYmFz
ZTY0RW5jb2RlKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBh
dXRvIHJhd0lkQmFzZTY0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3
SWQtPmJ5dGVMZW5ndGgoKSk7CiAgICAgICAgIGlmIChyYXdJZEJhc2U2NCA9PSBwcmVmZXJyZWRD
cmVkZW50aWFsSWRCYXNlNjQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRl
Z3kuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0
d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3OCw3ICs1Nzgs
NyBAQCBPcHRpb25hbDxXZWJMb2FkZXJTdHJhdGVneTo6U3luY0xvYWRSZXN1CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotdm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VM
b2FkSWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGllbnRDcmVk
ZW50aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksICBjb25zdCBGZXRjaE9wdGlvbnMm
IG9wdGlvbnMsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIFJl
c291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNo
YXI+JiBkYXRhKQordm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2Fk
SWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGllbnRDcmVkZW50
aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksICBjb25zdCBGZXRjaE9wdGlvbnMmIG9w
dGlvbnMsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIFJlc291
cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhKQogewogICAgIGF1dG8qIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0gdG9XZWJGcmFt
ZUxvYWRlckNsaWVudChmcmFtZUxvYWRlci5jbGllbnQoKSk7CiAgICAgYXV0byogd2ViRnJhbWUg
PSB3ZWJGcmFtZUxvYWRlckNsaWVudCA/ICZ3ZWJGcmFtZUxvYWRlckNsaWVudC0+d2ViRnJhbWUo
KSA6IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJM
b2FkZXJTdHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH5XZWJMb2FkZXJTdHJhdGVneSgpIGZp
bmFsOwogICAgIAogICAgIHZvaWQgbG9hZFJlc291cmNlKFdlYkNvcmU6OkZyYW1lJiwgV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2UmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQ
dHI8V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI+JiYpPiYmKSBmaW5hbDsKLSAgICB2b2lkIGxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCB1bnNpZ25lZCBs
b25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNo
T3B0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkg
ZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6OkZyYW1l
TG9hZGVyJiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBj
b25zdCBXZWJDb3JlOjpGZXRjaE9wdGlvbnMmLCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFw
JiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBW
ZWN0b3I8dWludDhfdD4mIGRhdGEpIGZpbmFsOwogICAgIHZvaWQgcGFnZUxvYWRDb21wbGV0ZWQo
V2ViQ29yZTo6UGFnZSYpIGZpbmFsOwogICAgIHZvaWQgYnJvd3NpbmdDb250ZXh0UmVtb3ZlZChX
ZWJDb3JlOjpGcmFtZSYpIGZpbmFsOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAg
ICBzdHJ1Y3QgU3luY0xvYWRSZXN1bHQgewogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlIHJlc3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yOwotICAg
ICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAg
ICAgfTsKICAgICBPcHRpb25hbDxTeW5jTG9hZFJlc3VsdD4gdHJ5TG9hZGluZ1N5bmNocm9ub3Vz
bHlVc2luZ1VSTFNjaGVtZUhhbmRsZXIoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCBSZXNvdXJjZUxv
YWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICAgICBTeW5j
TG9hZFJlc3VsdCBsb2FkRGF0YVVSTFN5bmNocm9ub3VzbHkoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJV
UkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhh
bmRsZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBXZWJV
UkxTY2hlbWVIYW5kbGVyUHJveHk6OnN0YXJ0TmV3VAogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUtPnN0YXJ0TG9hZGluZygpOwogfQogCi12b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6
bG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBsb2FkSWRlbnRpZmllciwg
V2ViRnJhbWUmIHdlYkZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgVmVjdG9yPGNoYXI+
JiBkYXRhKQordm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OmxvYWRTeW5jaHJvbm91c2x5
KFJlc291cmNlTG9hZElkZW50aWZpZXIgbG9hZElkZW50aWZpZXIsIFdlYkZyYW1lJiB3ZWJGcmFt
ZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAg
ICBkYXRhLnNocmluaygwKTsKICAgICBpZiAoIW1fd2ViUGFnZS5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrKFVSTFNjaGVtZVRhc2tQ
YXJhbWV0ZXJzIHsgbV9pZGVudGlmaWVyLCBsb2FkSWRlbnRpZmllciwgcmVxdWVzdCwgd2ViRnJh
bWUuaW5mbygpIH0pLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpMb2FkU3luY2hyb25vdXNVUkxT
Y2hlbWVUYXNrOjpSZXBseShyZXNwb25zZSwgZXJyb3IsIGRhdGEpKSkgewpJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1l
SGFuZGxlclByb3h5LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0TmV3VGFzayhXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRlciYsIFdlYkZyYW1lJik7CiAgICAgdm9pZCBzdG9wQWxsVGFza3MoKTsKIAot
ICAgIHZvaWQgbG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgV2ViRnJh
bWUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFZlY3RvcjxjaGFyPiYpOworICAgIHZv
aWQgbG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgV2ViRnJhbWUmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFZlY3Rvcjx1aW50OF90PiYpOwogCiAgICAgdWlu
dDY0X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogICAgIFdl
YlBhZ2UmIHBhZ2UoKSB7IHJldHVybiBtX3dlYlBhZ2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXRM
ZWdhY3kvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8
d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29k
aW5nIHRvIG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAgICAgVXBkYXRlIHRvIG1hdGNoIG5l
dyBzaWduYXR1cmUuIGNoYXIgLT4gdWludDhfdC4KKwogMjAyMS0wNS0xNCAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBGaWxlU3lzdGVtOjpnZXRGaWxl
U2l6ZSgpIHRvIEZpbGVTeXN0ZW06OmZpbGVTaXplKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdh
Y3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNj
aGVkdWxlci5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2Vi
Q29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVz
b3UKICAgICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyLCB1bnNpZ25lZCBsb25n
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVudENyZWRlbnRpYWxQb2xpY3ks
IGNvbnN0IEZldGNoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291
cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+
JiBkYXRhKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyLCB1bnNpZ25lZCBsb25nLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IEZl
dGNoT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJyb3Im
IGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRh
KQogewogICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGZyYW1l
TG9hZGVyLm5ldHdvcmtpbmdDb250ZXh0KCksIHJlcXVlc3QsIG9wdGlvbnMuY3JlZGVudGlhbHMg
PT0gRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFsczo6T21pdCA/IFN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5OjpEb05vdFVzZSA6IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UsIGVycm9yLCByZXNw
b25zZSwgZGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0
L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRM
ZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJldmlzaW9u
IDI3NzU2OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGlj
OgogICAgIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCiAgICAgdm9pZCBsb2FkUmVzb3Vy
Y2UoV2ViQ29yZTo6RnJhbWUmLCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSYsIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcj4m
Jik+JiYpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3Jl
OjpGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZl
dGNoT3B0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpIGZp
bmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpGcmFtZUxv
YWRlciYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdl
YkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OkZldGNoT3B0aW9u
cyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYpIGZpbmFsOwog
ICAgIHZvaWQgcGFnZUxvYWRDb21wbGV0ZWQoV2ViQ29yZTo6UGFnZSYpIGZpbmFsOwogICAgIHZv
aWQgYnJvd3NpbmdDb250ZXh0UmVtb3ZlZChXZWJDb3JlOjpGcmFtZSYpIGZpbmFsOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBA
QAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
VXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVybiBXZWJL
aXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2Vi
Q2hyb21lQ2xpZW50Ojp3cmFwQ3J5cHRvS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNocm9tZUNs
aWVudDo6dW53cmFwQ3J5cHRvS2V5IGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcg
T3B0aW9uYWwgcmV0dXJuaW5nIGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKS4KKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbToKKyAgICAgICAgKFdlYklu
c3BlY3RvckZyb250ZW5kQ2xpZW50OjpzYXZlKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcg
T3B0aW9uYWwgcmV0dXJuaW5nIGJhc2U2NERlY29kZSgpLgorCiAyMDIxLTA1LTE1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIERlbGV0ZSBXZWJTUUwgY29kZSBm
cm9tIFdlYktpdDIKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTA2NiwyOCArMTA2NiwzNCBAQCB2b2lkIFdlYkNocm9tZUNs
aWVudDo6ZXhpdEZ1bGxTY3JlZW5Gb3JFCiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojp3cmFwQ3J5
cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBWZWN0b3I8dWludDhfdD4mIHdyYXBw
ZWRLZXkpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICAgICBTRUwg
c2VsZWN0b3IgPSBAc2VsZWN0b3Iod2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmlldzopOwogICAg
IGlmIChbW21fd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3Jd
KSB7CiAgICAgICAgIE5TRGF0YSAqa2V5RGF0YSA9IENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywg
c2VsZWN0b3IpOworICAgICAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogICAgICAgICBt
YXN0ZXJLZXkuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihjb25zdF9jYXN0PHZvaWQqPihb
a2V5RGF0YSBieXRlc10pKSwgW2tleURhdGEgbGVuZ3RoXSk7Ci0gICAgfSBlbHNlIGlmICghZ2V0
RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQorICAgICAgICByZXR1cm4gd3Jh
cFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCBrZXksIHdyYXBwZWRLZXkpOworICAgIH0K
KyAgICAKKyAgICBhdXRvIG1hc3RlcktleSA9IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsK
KyAgICBpZiAoIW1hc3RlcktleSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IHdyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwga2V5LCB3cmFwcGVkS2V5KTsKKyAg
ICByZXR1cm4gd3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoV1RGTW92ZSgqbWFzdGVyS2V5KSwga2V5
LCB3cmFwcGVkS2V5KTsKIH0KIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnVud3JhcENyeXB0b0tl
eShjb25zdCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXksIFZlY3Rvcjx1aW50OF90PiYga2V5
KSBjb25zdAogewotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAgICAgU0VMIHNlbGVj
dG9yID0gQHNlbGVjdG9yKHdlYkNyeXB0b01hc3RlcktleUZvcldlYlZpZXc6KTsKICAgICBpZiAo
W1ttX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkgewor
ICAgICAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogICAgICAgICBOU0RhdGEgKmtleURh
dGEgPSBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIHNlbGVjdG9yKTsKICAgICAgICAgbWFzdGVy
S2V5LmFwcGVuZChzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDx2b2lkKj4oW2tleURh
dGEgYnl0ZXNdKSksIFtrZXlEYXRhIGxlbmd0aF0pOwotICAgIH0gZWxzZSBpZiAoIWdldERlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gdW53cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIHdyYXBw
ZWRLZXksIGtleSk7CisgICAgfQogCi0gICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9L
ZXkobWFzdGVyS2V5LCB3cmFwcGVkS2V5LCBrZXkpOworICAgIGF1dG8gbWFzdGVyS2V5ID0gZGVm
YXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIGlmICghbWFzdGVyS2V5KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoV1RGTW92
ZSgqbWFzdGVyS2V5KSwgd3JhcHBlZEtleSwga2V5KTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQwOCwxMCArNDA4LDEwIEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OnNhdmUoY28KICAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVk
VVJMQ29weSwgYWN0dWFsVVJMKTsKIAogICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAg
ICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2Rl
KGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICBh
dXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQsIEJhc2U2NERlY29kZU9wdGlv
bnM6OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFD
b250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgp
IGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRh
Q29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGVjb2RlZERh
dGEtPmRhdGEoKSBsZW5ndGg6ZGVjb2RlZERhdGEtPnNpemUoKV0pOwogICAgICAgICAgICAgW2Rh
dGFDb250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRv
bWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07Cklu
ZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNzc3MTUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwzMiBAQAorMjAyMS0wNS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAg
ICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVy
biBXZWJLaXQgY29udmVudGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNTkyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVwZGF0ZSB0byB1c2UgdXBkYXRlZCBiYXNlNjQgYW5kIGRlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkoKSByZWxhdGVkCisgICAgICAgIGZ1bmN0aW9ucy4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRD
UFNlcnZlcjo6c3RhcnRTZWN1cmVDb25uZWN0aW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRDUFNlcnZlcjo6dGVzdENlcnRpZmljYXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRD
UFNlcnZlcjo6dGVzdFByaXZhdGVLZXkpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9JU09Cb3guY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1ByaXZhdGVDbGlja01lYXN1
cmVtZW50Q29jb2EubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvU2VyaWFsaXplZENyeXB0b0tleVdy
YXAubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tOgorICAgICAgICAodGVzdElk
ZW50aXR5Mik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVu
dEF0dHJpYnV0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hU
VFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb25uZWN0aW9uOjp3ZWJTb2Nr
ZXRIYW5kc2hha2UpOgorCiAyMDIxLTA1LTE4ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBh
cHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xv
cmluZyB1c2UgbGVzcyBtZW1vcnkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU1LDkgKzE1NSw4IEBAIHZvaWQgVENQU2VydmVyOjpzdGFydFNlY3Vy
ZUNvbm5lY3Rpb24oU28KICAgICAibGRZOWF2Y1RHU3did29pdUlxdjBqVEwxZkhGbnp5M1JITUxE
aCtMcHZvbGM1RFNyU0pIQ1A1V3VLMGVlSlhociIKICAgICAiVDVvUXBITDl6L2NDRExBS0NLUmE0
dVYwZmhFZE9XQnF5UjlwOHk1akp0eWU3MnQ2Q3VGVVY1aXFjcEY0Qkg0ZiIKICAgICAiajJWTkh3
c1NySndrRDRRVUdsVXRIN3Z3blFteUNGeFpNbVdBSmc9PSIpOwotICAgIFZlY3Rvcjx1aW50OF90
PiBjZXJ0REVSOwotICAgIGJhc2U2NERlY29kZShjZXJ0UEVNLCBjZXJ0REVSLCBXVEY6OkJhc2U2
NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwotICAgIHNzbDo6dW5pcXVlX3B0cjxDUllQ
VE9fQlVGRkVSPiBjZXJ0KENSWVBUT19CVUZGRVJfbmV3KGNlcnRERVIuZGF0YSgpLCBjZXJ0REVS
LnNpemUoKSwgbnVsbHB0cikpOworICAgIGF1dG8gY2VydERFUiA9IGJhc2U2NERlY29kZShjZXJ0
UEVNKTsKKyAgICBzc2w6OnVuaXF1ZV9wdHI8Q1JZUFRPX0JVRkZFUj4gY2VydChDUllQVE9fQlVG
RkVSX25ldyhjZXJ0REVSLT5kYXRhKCksIGNlcnRERVItPnNpemUoKSwgbnVsbHB0cikpOwogICAg
IEFTU0VSVChjZXJ0KTsKIAogICAgIC8vIFRoaXMgaXMgYSB0ZXN0IGtleSBmcm9tIEJvcmluZ1NT
TC4KQEAgLTQxMiw5ICs0MTEsOCBAQCBWZWN0b3I8dWludDhfdD4gVENQU2VydmVyOjp0ZXN0Q2Vy
dGlmaWNhCiAgICAgIkczUEZuWWJXOHVySDBOU0pHL1crLzlEQStZN0FhMGNzNFRQcHVCR1owTlUx
Vzk0T29DTW80bGtPNkgveTZMZXUiCiAgICAgIjN2alpEM3k5a1prN21yZTlYSHdrSThNZEs1cz0i
KTsKICAgICAKLSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIGJhc2U2NERlY29kZShw
ZW1FbmNvZGVkQ2VydGlmaWNhdGUsIHZlY3RvciwgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpC
YXNlNjREZWZhdWx0KTsKLSAgICByZXR1cm4gdmVjdG9yOworICAgIGF1dG8gZGVjb2RlZENlcnRp
ZmljYXRlID0gYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0ZSk7CisgICAgcmV0dXJu
IFdURk1vdmUoKmRlY29kZWRDZXJ0aWZpY2F0ZSk7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBUQ1BT
ZXJ2ZXI6OnRlc3RQcml2YXRlS2V5KCkKQEAgLTQ3MSw5ICs0NjksOCBAQCBWZWN0b3I8dWludDhf
dD4gVENQU2VydmVyOjp0ZXN0UHJpdmF0ZUtlCiAgICAgImRFT2J2Y3BTaFAyMkl0T1ZqU2FtcFJ1
QXVSRzI2WmVtRWJHQ0kzSjZNcXgzeTZtKzZId3VsdHNndGR6RGdyRmUiCiAgICAgInFKZlU4YmJk
YnUycGk0N1k0RmRKSzBITGZmbDVSdz09Iik7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9y
OwotICAgIGJhc2U2NERlY29kZShwZW1FbmNvZGVkUHJpdmF0ZUtleSwgdmVjdG9yLCBXVEY6OkJh
c2U2NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwotICAgIHJldHVybiB2ZWN0b3I7Cisg
ICAgYXV0byBkZWNvZGVkUHJpdmF0ZUtleSA9IGJhc2U2NERlY29kZShwZW1FbmNvZGVkUHJpdmF0
ZUtleSk7CisgICAgcmV0dXJuIFdURk1vdmUoKmRlY29kZWRQcml2YXRlS2V5KTsKIH0KICAgICAK
IH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsMTEgKzQyLDExIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBiYXNlNjRFbmNvZGVkU2luZldpdGgK
IAogVEVTVChJU09Cb3gsIElTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94KQogewotICAgIFZlY3Rv
cjx1aW50OF90PiBzaW5mQXJyYXk7Ci0gICAgQVNTRVJUX1RSVUUoYmFzZTY0RGVjb2RlKFN0cmlu
Z1ZpZXcoYmFzZTY0RW5jb2RlZFNpbmZXaXRoS2V5SUQzKSwgc2luZkFycmF5KSk7Ci0gICAgQVNT
RVJUX0VRKDk3VUwsIHNpbmZBcnJheS5zaXplKCkpOworICAgIGF1dG8gc2luZkFycmF5ID0gYmFz
ZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2RlZFNpbmZXaXRoS2V5SUQzKSk7CisgICAg
QVNTRVJUX1RSVUUoc2luZkFycmF5KTsKKyAgICBBU1NFUlRfRVEoOTdVTCwgc2luZkFycmF5LT5z
aXplKCkpOwogCi0gICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKEFycmF5QnVm
ZmVyOjpjcmVhdGUoc2luZkFycmF5LmRhdGEoKSwgc2luZkFycmF5LnNpemUoKSksIDAsIHNpbmZB
cnJheS5zaXplKCkpOworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKHNpbmZBcnJheS0+ZGF0YSgpLCBzaW5mQXJyYXktPnNpemUoKSksIDAs
IHNpbmZBcnJheS0+c2l6ZSgpKTsKIAogICAgIElTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94IHNp
bmZCb3g7CiAgICAgQVNTRVJUX1RSVUUoc2luZkJveC5yZWFkKHZpZXcpKTsKQEAgLTc4LDExICs3
OCwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciogYmFzZTY0RW5jb2RlZFBzc2hXaXRoCiAKIFRFU1Qo
SVNPQm94LCBJU09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3gpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHBzc2hBcnJheTsKLSAgICBBU1NFUlRfVFJVRShiYXNlNjREZWNvZGUoU3RyaW5nVmlldyhi
YXNlNjRFbmNvZGVkUHNzaFdpdGhBc3NldElkKSwgcHNzaEFycmF5KSk7Ci0gICAgQVNTRVJUX0VR
KDE3NlVMLCBwc3NoQXJyYXkuc2l6ZSgpKTsKKyAgICBhdXRvIHBzc2hBcnJheSA9IGJhc2U2NERl
Y29kZShTdHJpbmdWaWV3KGJhc2U2NEVuY29kZWRQc3NoV2l0aEFzc2V0SWQpKTsKKyAgICBBU1NF
UlRfVFJVRShwc3NoQXJyYXkpOworICAgIEFTU0VSVF9FUSgxNzZVTCwgcHNzaEFycmF5LT5zaXpl
KCkpOwogCi0gICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKEFycmF5QnVmZmVy
OjpjcmVhdGUocHNzaEFycmF5LmRhdGEoKSwgcHNzaEFycmF5LnNpemUoKSksIDAsIHBzc2hBcnJh
eS5zaXplKCkpOworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShBcnJheUJ1
ZmZlcjo6Y3JlYXRlKHBzc2hBcnJheS0+ZGF0YSgpLCBwc3NoQXJyYXktPnNpemUoKSksIDAsIHBz
c2hBcnJheS0+c2l6ZSgpKTsKIAogICAgIElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveCBwc3No
Qm94OwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5t
bQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAg
LTgxLDcgKzgxLDcgQEAgVEVTVChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgVmFsaWRCbGluZAog
ICAgIGF1dG8gKm5zU3BraURhdGEgPSAoX19icmlkZ2UgTlNEYXRhICopc3BraURhdGEuZ2V0KCk7
CiAKICAgICAvLyBDb250aW51ZSB0aGUgdGVzdC4KLSAgICBFWFBFQ1RfVFJVRShwY20uY2FsY3Vs
YXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJsZVRva2VuKFdURjo6YmFzZTY0VVJMRW5jb2RlKG5z
U3BraURhdGEuYnl0ZXMsIG5zU3BraURhdGEubGVuZ3RoKSkpOworICAgIEVYUEVDVF9UUlVFKHBj
bS5jYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VVbmxpbmthYmxlVG9rZW4oYmFzZTY0VVJMRW5jb2Rl
VG9TdHJpbmcobnNTcGtpRGF0YS5ieXRlcywgbnNTcGtpRGF0YS5sZW5ndGgpKSk7CiAgICAgYXV0
byBzb3VyY2VTZWNyZXRUb2tlbiA9IHBjbS50b2tlblNpZ25hdHVyZUpTT04oKTsKICAgICBFWFBF
Q1RfRVEoc291cmNlU2VjcmV0VG9rZW4tPmFzT2JqZWN0KCktPnNpemUoKSwgNHVsKTsKICAgICBF
WFBFQ1RfU1RSRVEoc291cmNlU2VjcmV0VG9rZW4tPmdldFN0cmluZygic291cmNlX2VuZ2FnZW1l
bnRfdHlwZSJfcykudXRmOCgpLmRhdGEoKSwgImNsaWNrIik7CkBAIC05MCwxNCArOTAsMTMgQEAg
VEVTVChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgVmFsaWRCbGluZAogICAgIEVYUEVDVF9FUShz
b3VyY2VTZWNyZXRUb2tlbi0+Z2V0SW50ZWdlcigidmVyc2lvbiJfcyksIDIpOwogCiAgICAgLy8g
R2VuZXJhdGUgdGhlIHNpZ25hdHVyZS4KLSAgICBWZWN0b3I8dWludDhfdD4gYmxpbmRlZE1lc3Nh
Z2U7Ci0gICAgYmFzZTY0VVJMRGVjb2RlKHNvdXJjZVNlY3JldFRva2VuLT5nZXRTdHJpbmcoInNv
dXJjZV9zZWNyZXRfdG9rZW4iX3MpLCBibGluZGVkTWVzc2FnZSk7CisgICAgYXV0byBibGluZGVk
TWVzc2FnZSA9IGJhc2U2NFVSTERlY29kZShzb3VyY2VTZWNyZXRUb2tlbi0+Z2V0U3RyaW5nKCJz
b3VyY2Vfc2VjcmV0X3Rva2VuIl9zKSk7CiAKLSAgICBhdXRvIGJsaW5kZWRTaWduYXR1cmUgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdFdpdGhMZW5ndGg6IG1vZHVsdXNOQnl0
ZXNdKTsKLSAgICBjY3JzYWJzc2Ffc2lnbl9ibGluZGVkX21lc3NhZ2UoY2lwaGVyc3VpdGUsIHJz
YVByaXZhdGVLZXksIGJsaW5kZWRNZXNzYWdlLmRhdGEoKSwgYmxpbmRlZE1lc3NhZ2Uuc2l6ZSgp
LCBzdGF0aWNfY2FzdDx1aW50OF90ICo+KFtibGluZGVkU2lnbmF0dXJlIG11dGFibGVCeXRlc10p
LCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdLCBybmcpOworICAgIGF1dG8gYmxpbmRlZFNpZ25h
dHVyZSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0aExlbmd0aDptb2R1
bHVzTkJ5dGVzXSk7CisgICAgY2Nyc2Fic3NhX3NpZ25fYmxpbmRlZF9tZXNzYWdlKGNpcGhlcnN1
aXRlLCByc2FQcml2YXRlS2V5LCBibGluZGVkTWVzc2FnZS0+ZGF0YSgpLCBibGluZGVkTWVzc2Fn
ZS0+c2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50OF90ICo+KFtibGluZGVkU2lnbmF0dXJlIG11dGFi
bGVCeXRlc10pLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdLCBybmcpOwogCiAgICAgLy8gQ29u
dGludWUgdGhlIHRlc3QuCi0gICAgRVhQRUNUX1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVwZGF0ZVNv
dXJjZVNlY3JldFRva2VuKFdURjo6YmFzZTY0VVJMRW5jb2RlKFtibGluZGVkU2lnbmF0dXJlIGJ5
dGVzXSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSkpKTsKKyAgICBFWFBFQ1RfVFJVRShwY20u
Y2FsY3VsYXRlQW5kVXBkYXRlU291cmNlU2VjcmV0VG9rZW4oYmFzZTY0VVJMRW5jb2RlVG9TdHJp
bmcoW2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdKSkp
OwogICAgIGF1dG8mIHBlcnNpc3RlbnRUb2tlbiA9IHBjbS5zb3VyY2VVbmxpbmthYmxlVG9rZW4o
KTsKICAgICBFWFBFQ1RfVFJVRShwZXJzaXN0ZW50VG9rZW4pOwogICAgIEVYUEVDVF9GQUxTRShw
ZXJzaXN0ZW50VG9rZW4tPnRva2VuQmFzZTY0VVJMLmlzRW1wdHkoKSk7CkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvU2VyaWFsaXplZENyeXB0b0tleVdyYXAu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29h
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tCShyZXZpc2lvbiAyNzc1NjkpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvU2VyaWFsaXplZENyeXB0b0tleVdyYXAu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDM3ICs0NCwzNyBAQCBwdWJsaWM6CiAgICAgfQogfTsK
IAotVEVTVF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVzdCwgR2V0RGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSkKK1RFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFRlc3QsIERlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTE7Ci0g
ICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0
ZXJLZXkxKSk7CisgICAgYXV0byBtYXN0ZXJLZXkxID0gV2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSgpOworICAgIEVYUEVDVF9UUlVFKG1hc3RlcktleTEpOwogCi0gICAgVmVjdG9y
PHVpbnQ4X3Q+IG1hc3RlcktleTI7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVs
dFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkyKSk7CisgICAgYXV0byBtYXN0ZXJLZXkyID0g
V2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIEVYUEVDVF9UUlVFKG1h
c3RlcktleTIpOwogCiAgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5MSA9PSBtYXN0ZXJLZXkyKTsK
IH0KIAogVEVTVF9GKFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwVGVzdCwgRGVsZXRlRGVmYXVsdFdl
YkNyeXB0b01hc3RlcktleSkKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5MTsKLSAg
ICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3Rl
cktleTEpKTsKKyAgICBhdXRvIG1hc3RlcktleTEgPSBXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRv
TWFzdGVyS2V5KCk7CisgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5MSk7CiAgICAgRVhQRUNUX1RS
VUUoV2ViQ29yZTo6ZGVsZXRlRGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpKTsKIAotICAgIFZl
Y3Rvcjx1aW50OF90PiBtYXN0ZXJLZXkyOwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmdldERl
ZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5MikpOworICAgIGF1dG8gbWFzdGVyS2V5
MiA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJV
RShtYXN0ZXJLZXkyKTsKIAogICAgIEVYUEVDVF9UUlVFKG1hc3RlcktleTEgIT0gbWFzdGVyS2V5
Mik7CiB9CiAKIFRFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFRlc3QsIFNlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwVW53cmFwKQogewotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7Ci0g
ICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0
ZXJLZXkpKTsKKyAgICBhdXRvIG1hc3RlcktleSA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9N
YXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkpOwogCiAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGNyeXB0b0tleSgxNiwgMSk7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHdyYXBwZWRLZXk7
Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6d3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVy
S2V5LCBjcnlwdG9LZXksIHdyYXBwZWRLZXkpKTsKKyAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjp3
cmFwU2VyaWFsaXplZENyeXB0b0tleSgqbWFzdGVyS2V5LCBjcnlwdG9LZXksIHdyYXBwZWRLZXkp
KTsKICAgICBFWFBFQ1RfVFJVRShjcnlwdG9LZXkgIT0gd3JhcHBlZEtleSk7CiAgICAgLy8gZW5z
dXJlIHdyYXBwZWRLZXkgZG9lc24ndCBjb250YWluIGNyeXB0b0tleQogICAgIGJvb2wgbm90Q29u
dGFpbmVkID0gdHJ1ZTsKQEAgLTkwLDcgKzkwLDcgQEAgVEVTVF9GKFNlcmlhbGl6ZWRDcnlwdG9L
ZXlXcmFwVGVzdCwgU2VyaQogICAgIEVYUEVDVF9UUlVFKG5vdENvbnRhaW5lZCk7CiAKICAgICBW
ZWN0b3I8dWludDhfdD4gdW53cmFwcGVkS2V5OwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OnVu
d3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCB3cmFwcGVkS2V5LCB1bndyYXBwZWRL
ZXkpKTsKKyAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjp1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5
KCptYXN0ZXJLZXksIHdyYXBwZWRLZXksIHVud3JhcHBlZEtleSkpOwogICAgIEVYUEVDVF9UUlVF
KHVud3JhcHBlZEtleSA9PSBjcnlwdG9LZXkpOwogfQogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbQkocmV2aXNpb24gMjc3
NTY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMyArMTc2LDEwIEBAIFJldGFpblB0cjxTZWNJZGVu
dGl0eVJlZj4gdGVzdElkZW50aXR5MigKICAgICAiSkFIMm54S0d1cXRBSzJoV2JBQ3U2MVJUNWdB
cUF2L2hCOUpZbmMyT2lRMlZtallrT2syR0VkSWpuMHhTZ1g3VyIKICAgICAibUkvaEhieEtNRzNS
a3Y5cTFDeCtXQi92MXQ4PSIpOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZhdGVLZXlCeXRl
czsKLSAgICBiYXNlNjREZWNvZGUocGVtRW5jb2RlZFByaXZhdGVLZXksIHByaXZhdGVLZXlCeXRl
cywgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsKKyAgICBhdXRvIHBy
aXZhdGVLZXlCeXRlcyA9IGJhc2U2NERlY29kZShwZW1FbmNvZGVkUHJpdmF0ZUtleSk7CisgICAg
YXV0byBjZXJ0aWZpY2F0ZUJ5dGVzID0gYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0
ZSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gY2VydGlmaWNhdGVCeXRlczsKLSAgICBiYXNlNjRE
ZWNvZGUocGVtRW5jb2RlZENlcnRpZmljYXRlLCBjZXJ0aWZpY2F0ZUJ5dGVzLCBXVEY6OkJhc2U2
NERlY29kZU9wdGlvbnM6OkJhc2U2NERlZmF1bHQpOwotCi0gICAgcmV0dXJuIGNyZWF0ZVRlc3RJ
ZGVudGl0eShwcml2YXRlS2V5Qnl0ZXMsIGNlcnRpZmljYXRlQnl0ZXMpOworICAgIHJldHVybiBj
cmVhdGVUZXN0SWRlbnRpdHkoV1RGTW92ZSgqcHJpdmF0ZUtleUJ5dGVzKSwgV1RGTW92ZSgqY2Vy
dGlmaWNhdGVCeXRlcykpOwogfQogCiBzdGF0aWMgUmV0YWluUHRyPE5TVVJMQ3JlZGVudGlhbD4g
Y3JlZGVudGlhbFdpdGhJZGVudGl0eSgpCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0V2ZW50QXR0cmlidXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJpYnV0aW9uLm1tCShyZXZpc2lv
biAyNzc1NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0V2ZW50
QXR0cmlidXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBURVNUKEV2
ZW50QXR0cmlidXRpb24sIEZyYXVkUHJldmVudGlvbikKICAgICBhdXRvIHNwa2lEYXRhID0gYWRv
cHRDRihTZWNLZXlDb3B5U3ViamVjdFB1YmxpY0tleUluZm8oc2VjS2V5LmdldCgpKSk7CiAgICAg
YXV0byAqbnNTcGtpRGF0YSA9IChfX2JyaWRnZSBOU0RhdGEgKilzcGtpRGF0YS5nZXQoKTsKIAot
ICAgIGF1dG8ga2V5RGF0YSA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKG5zU3BraURhdGEuYnl0ZXMs
IG5zU3BraURhdGEubGVuZ3RoKTsKKyAgICBhdXRvIGtleURhdGEgPSBiYXNlNjRVUkxFbmNvZGVU
b1ZlY3Rvcihuc1Nwa2lEYXRhLmJ5dGVzLCBuc1Nwa2lEYXRhLmxlbmd0aCk7CiAKICAgICAvLyBU
aGUgc2VydmVyLgogICAgIEhUVFBTZXJ2ZXIgc2VydmVyKFsmZG9uZSwgY29ubmVjdGlvbkNvdW50
ID0gMCwgJnJzYVByaXZhdGVLZXksICZtb2R1bHVzTkJ5dGVzLCAmcm5nLCAma2V5RGF0YSwgJnNl
Y0tleV0gKENvbm5lY3Rpb24gY29ubmVjdGlvbikgbXV0YWJsZSB7CkBAIC0xODQsMTMgKzE4NCwx
MiBAQCBURVNUKEV2ZW50QXR0cmlidXRpb24sIEZyYXVkUHJldmVudGlvbikKICAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gZW5kID0gcmVxdWVzdDJTdHJpbmcuZmluZCgnIicsIHN0YXJ0KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdG9rZW4gPSByZXF1ZXN0MlN0cmluZy5zdWJz
dHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGJsaW5kZWRNZXNzYWdlOwotICAgICAgICAgICAgICAgICAgICAgICAgYmFz
ZTY0VVJMRGVjb2RlKHRva2VuLCBibGluZGVkTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGJsaW5kZWRNZXNzYWdlID0gYmFzZTY0VVJMRGVjb2RlKHRva2VuKTsKIAogICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNjcnNhYnNzYV9jaXBoZXJzdWl0ZSAq
Y2lwaGVyc3VpdGUgPSAmY2Nyc2Fic3NhX2NpcGhlcnN1aXRlX3JzYTQwOTZfc2hhMzg0OwotICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBibGluZGVkU2lnbmF0dXJlID0gYWRvcHROUyhbW05T
TXV0YWJsZURhdGEgYWxsb2NdIGluaXRXaXRoTGVuZ3RoOiBtb2R1bHVzTkJ5dGVzXSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjY3JzYWJzc2Ffc2lnbl9ibGluZGVkX21lc3NhZ2UoY2lwaGVy
c3VpdGUsIHJzYVByaXZhdGVLZXksIGJsaW5kZWRNZXNzYWdlLmRhdGEoKSwgYmxpbmRlZE1lc3Nh
Z2Uuc2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50OF90ICo+KFtibGluZGVkU2lnbmF0dXJlIG11dGFi
bGVCeXRlc10pLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdLCBybmcpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byB1bmxpbmthYmxlVG9rZW4gPSBXVEY6OmJhc2U2NFVSTEVuY29kZShb
YmxpbmRlZFNpZ25hdHVyZSBieXRlc10sIFtibGluZGVkU2lnbmF0dXJlIGxlbmd0aF0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBibGluZGVkU2lnbmF0dXJlID0gYWRvcHROUyhbW05T
TXV0YWJsZURhdGEgYWxsb2NdIGluaXRXaXRoTGVuZ3RoOm1vZHVsdXNOQnl0ZXNdKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNjcnNhYnNzYV9zaWduX2JsaW5kZWRfbWVzc2FnZShjaXBoZXJz
dWl0ZSwgcnNhUHJpdmF0ZUtleSwgYmxpbmRlZE1lc3NhZ2UtPmRhdGEoKSwgYmxpbmRlZE1lc3Nh
Z2UtPnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAqPihbYmxpbmRlZFNpZ25hdHVyZSBtdXRh
YmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSwgcm5nKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gdW5saW5rYWJsZVRva2VuID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJp
bmcoW2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBbYmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdKTsK
IAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhhbXBsZSByZXNwb25zZTogeyAidW5saW5r
YWJsZV90b2tlbiI6ICJBQkNEIiB9LiAiQUJDRCIgc2hvdWxkIGJlIEJhc2U2NFVSTCBlbmNvZGVk
LgogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byByZXNwb25zZSA9IG1ha2VTdHJpbmcoIkhU
VFAvMS4xIDIwMCBPS1xyXG4iCkBAIC0yMjIsMTggKzIyMSwxNiBAQCBURVNUKEV2ZW50QXR0cmli
dXRpb24sIEZyYXVkUHJldmVudGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFydCArPSBrZXkubGVuZ3RoKCkgKyAzOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gZW5kID0gcmVxdWVzdDRTdHJpbmcuZmluZCgnIicsIHN0
YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRva2Vu
ID0gcmVxdWVzdDRTdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRva2VuVmVj
dG9yOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NFVSTERl
Y29kZSh0b2tlbiwgdG9rZW5WZWN0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gdG9rZW5EYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdp
dGhCeXRlczp0b2tlblZlY3Rvci5kYXRhKCkgbGVuZ3RoOnRva2VuVmVjdG9yLnNpemUoKV0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdG9rZW5WZWN0b3Ig
PSBiYXNlNjRVUkxEZWNvZGUodG9rZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gdG9rZW5EYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdp
dGhCeXRlczp0b2tlblZlY3Rvci0+ZGF0YSgpIGxlbmd0aDp0b2tlblZlY3Rvci0+c2l6ZSgpXSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBTdHJpbmco
InNvdXJjZV9zZWNyZXRfdG9rZW5fc2lnbmF0dXJlIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhcnQgPSByZXF1ZXN0NFN0cmluZy5maW5kKGtleSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKz0ga2V5Lmxlbmd0aCgp
ICsgMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSByZXF1
ZXN0NFN0cmluZy5maW5kKCciJywgc3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gc2lnbmF0dXJlID0gcmVxdWVzdDRTdHJpbmcuc3Vic3RyaW5nKHN0
YXJ0LCBlbmQgLSBzdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHNpZ25hdHVyZVZlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiYXNlNjRVUkxEZWNvZGUoc2lnbmF0dXJlLCBzaWduYXR1cmVW
ZWN0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2ln
bmF0dXJlRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2lnbmF0
dXJlVmVjdG9yLmRhdGEoKSBsZW5ndGg6c2lnbmF0dXJlVmVjdG9yLnNpemUoKV0pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2lnbmF0dXJlVmVjdG9yID0g
YmFzZTY0VVJMRGVjb2RlKHNpZ25hdHVyZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBzaWduYXR1cmVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdFdpdGhCeXRlczpzaWduYXR1cmVWZWN0b3ItPmRhdGEoKSBsZW5ndGg6c2lnbmF0dXJlVmVj
dG9yLT5zaXplKCldKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVYUEVDVF9UUlVFKFNlY0tleVZlcmlmeVNpZ25hdHVyZShzZWNLZXkuZ2V0KCksIGtTZWNLZXlB
bGdvcml0aG1SU0FTaWduYXR1cmVNZXNzYWdlUFNTU0hBMzg0LCAoX19icmlkZ2UgQ0ZEYXRhUmVm
KXRva2VuRGF0YS5nZXQoKSwgKF9fYnJpZGdlIENGRGF0YVJlZilzaWduYXR1cmVEYXRhLmdldCgp
LCBOVUxMKSk7CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdl
bmVyYXRvci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9T
U0xLZXlHZW5lcmF0b3IubW0JKHJldmlzaW9uIDI3NzU2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvbWFjL1NTTEtleUdlbmVyYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAtOTgsOCAr
OTgsOCBAQCBURVNUX0YoU1NMS2V5R2VuZXJhdG9yVGVzdCwgRGVmYXVsdFRlc3QpCiAgICAgY2hh
ciBjaGFsbGVuZ2VbXSA9ICIwMTIzNDU2Nzg5IjsKICAgICBhdXRvIHJhd1Jlc3VsdCA9IFdlYkNv
cmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZygwLCBjaGFsbGVuZ2UsIHVybCk7
CiAgICAgQVNTRVJUX0ZBTFNFKHJhd1Jlc3VsdC5pc0VtcHR5KCkpOwotICAgIFZlY3Rvcjx1aW50
OF90PiBkZXJSZXN1bHQ7Ci0gICAgQVNTRVJUX1RSVUUoYmFzZTY0RGVjb2RlKHJhd1Jlc3VsdCwg
ZGVyUmVzdWx0KSk7CisgICAgYXV0byBkZXJSZXN1bHQgPSBiYXNlNjREZWNvZGUocmF3UmVzdWx0
KTsKKyAgICBBU1NFUlRfVFJVRShkZXJSZXN1bHQpOwogCiAgICAgU2VjQXNuMUNvZGVyUmVmIGNv
ZGVyID0gbnVsbHB0cjsKICAgICBBU1NFUlRfRVEoZXJyU2VjU3VjY2VzcywgU2VjQXNuMUNvZGVy
Q3JlYXRlKCZjb2RlcikpOwpAQCAtMTA4LDcgKzEwOCw3IEBAIFRFU1RfRihTU0xLZXlHZW5lcmF0
b3JUZXN0LCBEZWZhdWx0VGVzdCkKICAgICB9KTsKIAogICAgIFNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZSBkZWNvZGVkUmVzdWx0IHsgfTsKLSAgICBTZWNBc24xSXRlbSBkZXJSZXN1bHRJdGVt
IHsgZGVyUmVzdWx0LnNpemUoKSwgZGVyUmVzdWx0LmRhdGEoKSB9OworICAgIFNlY0FzbjFJdGVt
IGRlclJlc3VsdEl0ZW0geyBkZXJSZXN1bHQtPnNpemUoKSwgZGVyUmVzdWx0LT5kYXRhKCkgfTsK
ICAgICBBU1NFUlRfRVEoZXJyU2VjU3VjY2VzcywgU2VjQXNuMURlY29kZURhdGEoY29kZXIsICZk
ZXJSZXN1bHRJdGVtLCBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VUZW1wbGF0ZSwgJmRlY29k
ZWRSZXN1bHQpKTsKIAogICAgIC8vIENoZWNrIGNoYWxsZW5nZQpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQkocmV2aXNpb24gMjc3NTY5KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDQsNyAr
MzQ0LDcgQEAgdm9pZCBDb25uZWN0aW9uOjp3ZWJTb2NrZXRIYW5kc2hha2UoQ29tcAogICAgICAg
ICAgICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJT
b2NrZXRLZXlHVUlEKSwgc3RybGVuKHdlYlNvY2tldEtleUdVSUQpKTsKICAgICAgICAgICAgIFNI
QTE6OkRpZ2VzdCBoYXNoOwogICAgICAgICAgICAgc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAg
ICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXpl
KTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEoKSwg
U0hBMTo6aGFzaFNpemUpOwogICAgICAgICB9OwogCiAgICAgICAgIGNvbm5lY3Rpb24uc2VuZChI
VFRQUmVzcG9uc2UoMTAxLCB7Cg==
</data>
<flag name="commit-queue"
          id="450146"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429068</attachid>
            <date>2021-05-19 10:41:02 -0700</date>
            <delta_ts>2021-05-19 11:43:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225920-20210519104101.patch</filename>
            <type>text/plain</type>
            <size>205877</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRv
IG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgQnJpbmcgYmFzZTY0IGVuY29kaW5nL2RlY29kaW5n
IHVwIHRvIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucyBieToKKyAgICAgICAgLSBSZXBs
YWNlIHVzZSBvZiAib3V0IHBhcmFtZXRlciArIGJvb2wiIHdpdGggT3B0aW9uYWwgcmV0dXJuIHZh
bHVlcy4KKyAgICAgICAgLSBVc2luZyBlbnVtIGNsYXNzIGZvciBlbnVtZXJhdGlvbnMuCisgICAg
ICAgIC0gUmVwbGFjaW5nIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlci9Db25zdFNp
Z25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcgorICAgICAgICAgIHdpdGggYXBwcm9wcmlh
dGUgZnVuY3Rpb24gb3ZlcmxvYWRzLgorCisgICAgICAgIEFsc28gYWRkcyBhIG5ldyBTdHJpbmdU
eXBlQWRhcHRlciBmb3IgaW5saW5lIGJhc2U2NCBlbmNvZGluZyBkYXRhIGluIGVpdGhlciBtYWtl
U3RyaW5nKCkKKyAgICAgICAgb3IgU3RyaW5nQnVpbGRlci4gVG8gbWFrZSB0aGlzIHdvcmssIGEg
ZmV3IG1vZGlmaWNhdGlvbnMgd2VyZSBuZWVkIHRvIHRoZSBiYXNlNjRFbmNvZGUoKQorICAgICAg
ICBmdW5jdGlvbnMgdG8gc3VwcG9ydCB0aGUgZml4ZWQgc2l6ZSB3cml0ZVRvKCkgZnVuY3Rpb24u
CisKKyAgICAgICAgRmlyc3QsIHRoZSBsZW5ndGggb2YgdGhlIGVuY29kZWQgZGF0YSBpcyBub3cg
Y29tcHV0ZWQgdXAgZnJvbnQgZGVwZW5kaW5nIG9uIHRoZSBwb2xpY3kuCisgICAgICAgIFRoaXMg
aGFzIGJlZW4gZXh0cmFjdGVkIGludG8gYSBuZXcgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUo
KSBmdW5jdGlvbiB1c2VkIGJ5IGJvdGgKKyAgICAgICAgdGhlIGFkYXB0b3IgYW5kIGJ5IGJhc2U2
NEVuY29kZSB3aGVuIHBhc3NlZCBhIFZlY3Rvci4gUHJldmlvdXNseSwgd2hlbiBlbmNvZGluZyB1
c2luZworICAgICAgICBzb21lIHBvbGljaWVzLCB0aGUgc2l6ZSB3YXMgYW4gb3ZlcmVzdGltYXRl
IGFuZCB0aGUgcmVzdWx0aW5nIFZlY3RvciB3b3VsZCBiZSByZXNpemVkCisgICAgICAgIGRvd24g
YWZ0ZXIgZW5jb2RpbmcuCisKKyAgICAgICAgU2Vjb25kLCBiYXNlNjRFbmNvZGVJbnRlcm5hbCB3
YXMgbWFkZSBpbnRvIGEgdGVtcGxhdGUgZnVuY3Rpb24gdG8gYWxsb3cgZm9yIHR3byBuZXcgCisg
ICAgICAgIGJhc2U2NEVuY29kZSBmdW5jdGlvbnMsIG9uZSBvZiB3aGljaCBoYXMgYSBVQ2hhciog
ZGVzdGluYXRpb24uIFRoZXNlIGFyZSB1c2VkIGJ5IHRoZQorICAgICAgICBhZGFwdG9yIHRvIHdy
aXRlIHRoZSBlbmNvZGVkIGRhdGEuCisKKyAgICAgICAgT25lIGFkZGl0aW9uYWwgc21hbGwgY2hh
bmdlIGlzIHRoYXQgbm93IGEgb3B0aW9uYWwgbWFwIHR5cGUgcGFyYW1ldGVyIGhhcyBiZWVuIGFk
ZGVkCisgICAgICAgIHRvIGFsbCB0aGUgZW5jb2RlcnMgdG8gYWxsb3cgdXNpbmcgZWl0aGVyIHRo
ZSBkZWZhdWx0IG1hcCBvciB0aGUgVVJMIG9uZSBhcyBkZWZpbmVkIAorICAgICAgICBpbiBSRkMg
NDY0OC4gVGhpcyBzaW1wbGlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RyaW5nVHlw
ZUFkYXB0ZXIgYW5kIG1ha2VzIHRoZQorICAgICAgICBiYXNlNjRVUkxFbmNvZGUvYmFzZTY0VVJM
RGVjb2RlIGZ1bmN0aW9ucyBpbnRvIHNpbXBsZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdGhhdCB1
c2UKKyAgICAgICAgdGhlIHJpZ2h0IGRlZmF1bHRzIGZvciB0aGUgZ2VuZXJpYyBlbmNvZGUvZGVj
b2RlIGZ1bmN0aW9ucy4gCisKKyAgICAgICAgKiB3dGYvdGV4dC9CYXNlNjQuY3BwOgorICAgICAg
ICAoV1RGOjpiYXNlNjRFbmNvZGVJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29k
ZSk6CisgICAgICAgIChXVEY6OmJhc2U2NERlY29kZUludGVybmFsKToKKyAgICAgICAgKFdURjo6
YmFzZTY0RGVjb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRGVjb2RlKToKKyAgICAgICAg
KFdURjo6YmFzZTY0VVJMRW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9CYXNl
NjQuaDoKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0
RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlKToKKyAgICAgICAgKFdURjo6
aXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcik6CisgICAgICAgIChXVEY6OmNhbGN1bGF0ZUJh
c2U2NEVuY29kZWRTaXplKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlZCk6CisgICAgICAg
IChXVEY6OmJhc2U2NFVSTEVuY29kZWQpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRl
cjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6U3RyaW5nVHlwZUFkYXB0ZXIpOgorICAgICAgICAoV1RG
OjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6bGVuZ3RoIGNvbnN0KToK
KyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46Omlz
OEJpdCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNp
ZmljYXRpb24+Ojp3cml0ZVRvIGNvbnN0KToKKwogMjAyMS0wNS0xOCAgUm9iaW4gTW9yaXNzZXQg
IDxybW9yaXNzZXRAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgQWlyQWxsb2NhdGVSZWdpc3Rl
cnNCeUdyYXBoQ29sb3JpbmcgdXNlIGxlc3MgbWVtb3J5CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90
ZXh0L0Jhc2U2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQu
Y3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICAgQ29weXJpZ2h0IChDKSAyMDAw
LTIwMDEgRGF3aXQgQWxlbWF5ZWh1IDxhZGF3aXRAa2RlLm9yZz4KICAgIENvcHlyaWdodCAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgotICAgQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAgIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAgIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9n
YS5jb20+CiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yNSwxMyArMjUsMTYgQEAKICNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KIAogI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKIAotY29uc3QgY2hhciBub25BbHBoYWJldCA9IC0xOworY29uc3RleHByIGNvbnN0IGNo
YXIgbm9uQWxwaGFiZXQgPSAtMTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RW5jTWFwWzY0
XSA9IHsKK2NvbnN0ZXhwciB1bnNpZ25lZCBlbmNvZGVNYXBTaXplID0gNjQ7Citjb25zdGV4cHIg
dW5zaWduZWQgZGVjb2RlTWFwU2l6ZSA9IDEyODsKKworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0
RW5jTWFwW2VuY29kZU1hcFNpemVdID0gewogICAgIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4
NDUsIDB4NDYsIDB4NDcsIDB4NDgsCiAgICAgMHg0OSwgMHg0QSwgMHg0QiwgMHg0QywgMHg0RCwg
MHg0RSwgMHg0RiwgMHg1MCwKICAgICAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2
LCAweDU3LCAweDU4LApAQCAtNDIsNyArNDUsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRF
bmNNYXBbNjRdID0gewogICAgIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4
MkIsIDB4MkYKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NERlY01hcFsxMjhdID0gewor
c3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0RGVjTWFwW2RlY29kZU1hcFNpemVdID0gewogICAgIG5v
bkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBo
YWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwKICAgICBub25BbHBo
YWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQs
IG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCiAgICAgbm9uQWxwaGFiZXQs
IG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25B
bHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LApAQCAtNjEsNyArNjQsNyBAQCBzdGF0
aWMgY29uc3QgY2hhciBiYXNlNjREZWNNYXBbMTI4XSA9IHsKICAgICAweDMxLCAweDMyLCAweDMz
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9u
QWxwaGFiZXQKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NFVSTEVuY01hcFs2NF0gPSB7
CitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRVUkxFbmNNYXBbZW5jb2RlTWFwU2l6ZV0gPSB7CiAg
ICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwKICAgICAw
eDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAweDRGLCAweDUwLAogICAgIDB4NTEs
IDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCkBAIC03Miw3ICs3NSw3
IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NFVSTEVuY01hcFs2NF0gPSAKICAgICAweDM0LCAw
eDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDJELCAweDVGCiB9OwogCi1zdGF0aWMgY29u
c3QgY2hhciBiYXNlNjRVUkxEZWNNYXBbMTI4XSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyIGJhc2U2
NFVSTERlY01hcFtkZWNvZGVNYXBTaXplXSA9IHsKICAgICBub25BbHBoYWJldCwgbm9uQWxwaGFi
ZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsCiAgICAgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBu
b25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LAogICAgIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwKQEAgLTkxLDI0MyArOTQsMjQ1IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJh
c2U2NFVSTERlY01hcFsxMjhdID0KICAgICAweDMxLCAweDMyLCAweDMzLCBub25BbHBoYWJldCwg
bm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQKIH07CiAK
LXN0YXRpYyBpbmxpbmUgdm9pZCBiYXNlNjRFbmNvZGVJbnRlcm5hbChjb25zdCB1bnNpZ25lZCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQ
b2xpY3kgcG9saWN5LCBjb25zdCBjaGFyICgmZW5jb2RlTWFwKVs2NF0pCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgdm9pZCBiYXNlNjRFbmNvZGVJbnRlcm5hbChjb25z
dCB1aW50OF90KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBDaGFyYWN0
ZXJUeXBlKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAg
IG91dC5jbGVhcigpOwotICAgIGlmICghbGVuKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJU
KGRlc3RpbmF0aW9uTGVuZ3RoID4gMCk7CisgICAgQVNTRVJUKGNhbGN1bGF0ZUJhc2U2NEVuY29k
ZWRTaXplKGlucHV0TGVuZ3RoLCBwb2xpY3kpID09IGRlc3RpbmF0aW9uTGVuZ3RoKTsKIAotICAg
IC8vIElmIHRoZSBpbnB1dCBzdHJpbmcgaXMgcGF0aG9sb2dpY2FsbHkgbGFyZ2UsIGp1c3QgcmV0
dXJuIG5vdGhpbmcuCi0gICAgLy8gTm90ZTogS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgIm91
dExlbmd0aCIgY29tcHV0YXRpb24gYmVsb3cuCi0gICAgLy8gUmF0aGVyIHRoYW4gYmVpbmcgcGVy
ZmVjdGx5IHByZWNpc2UsIHRoaXMgaXMgYSBiaXQgY29uc2VydmF0aXZlLgotICAgIGNvbnN0IHVu
c2lnbmVkIG1heElucHV0QnVmZmVyU2l6ZSA9IFVJTlRfTUFYIC8gNzcgKiA3NiAvIDQgKiAzIC0g
MjsKLSAgICBpZiAobGVuID4gbWF4SW5wdXRCdWZmZXJTaXplKQotICAgICAgICByZXR1cm47Cisg
ICAgYXV0byBlbmNvZGVNYXAgPSAobWFwID09IEJhc2U2NEVuY29kZU1hcDo6VVJMKSA/IGJhc2U2
NFVSTEVuY01hcCA6IGJhc2U2NEVuY01hcDsKIAogICAgIHVuc2lnbmVkIHNpZHggPSAwOwogICAg
IHVuc2lnbmVkIGRpZHggPSAwOworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKIAotICAgIHVuc2ln
bmVkIG91dExlbmd0aCA9ICgobGVuICsgMikgLyAzKSAqIDQ7CisgICAgYm9vbCBpbnNlcnRMRnMg
PSAocG9saWN5ID09IEJhc2U2NEVuY29kZVBvbGljeTo6SW5zZXJ0TEZzICYmIGRlc3RpbmF0aW9u
TGVuZ3RoID4gbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKTsKIAotICAg
IC8vIERlYWwgd2l0aCB0aGUgNzYgY2hhcmFjdGVyIHBlciBsaW5lIGxpbWl0IHNwZWNpZmllZCBp
biBSRkMgMjA0NS4KLSAgICBib29sIGluc2VydExGcyA9IChwb2xpY3kgPT0gQmFzZTY0SW5zZXJ0
TEZzICYmIG91dExlbmd0aCA+IDc2KTsKLSAgICBpZiAoaW5zZXJ0TEZzKQotICAgICAgICBvdXRM
ZW5ndGggKz0gKChvdXRMZW5ndGggLSAxKSAvIDc2KTsKLQotICAgIGludCBjb3VudCA9IDA7Ci0g
ICAgb3V0Lmdyb3cob3V0TGVuZ3RoKTsKLQotICAgIC8vIDMtYnl0ZSB0byA0LWJ5dGUgY29udmVy
c2lvbiArIDAtNjMgdG8gYXNjaWkgcHJpbnRhYmxlIGNvbnZlcnNpb24KLSAgICBpZiAobGVuID4g
MSkgewotICAgICAgICB3aGlsZSAoc2lkeCA8IGxlbiAtIDIpIHsKKyAgICBpZiAoaW5wdXRMZW5n
dGggPiAxKSB7CisgICAgICAgIHdoaWxlIChzaWR4IDwgaW5wdXRMZW5ndGggLSAyKSB7CiAgICAg
ICAgICAgICBpZiAoaW5zZXJ0TEZzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvdW50ICYmICEo
Y291bnQgJSA3NikpCi0gICAgICAgICAgICAgICAgICAgIG91dFtkaWR4KytdID0gJ1xuJzsKKyAg
ICAgICAgICAgICAgICBpZiAoY291bnQgJiYgIShjb3VudCAlIG1heGltdW1CYXNlNjRMaW5lTGVu
Z3RoV2hlbkluc2VydGluZ0xGcykpCisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0
YUJ1ZmZlcltkaWR4KytdID0gJ1xuJzsKICAgICAgICAgICAgICAgICBjb3VudCArPSA0OwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lk
eF0gPj4gMikgJiAwNzddOwotICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChk
YXRhW3NpZHggKyAxXSA+PiA0KSAmIDAxNykgfCAoKGRhdGFbc2lkeF0gPDwgNCkgJiAwNzcpXTsK
LSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWygoZGF0YVtzaWR4ICsgMl0gPj4g
NikgJiAwMDMpIHwgKChkYXRhW3NpZHggKyAxXSA8PCAyKSAmIDA3NyldOwotICAgICAgICAgICAg
b3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbZGF0YVtzaWR4ICsgMl0gJiAwNzddOworCisgICAgICAg
ICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsgKGlucHV0RGF0
YUJ1ZmZlcltzaWR4ICAgIF0gPj4gMikgJiAwNzddOworICAgICAgICAgICAgZGVzdGluYXRpb25E
YXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBbKChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFd
ID4+IDQpICYgMDE3KSB8ICgoaW5wdXREYXRhQnVmZmVyW3NpZHggICAgXSA8PCA0KSAmIDA3Nyld
OworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBb
KChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDJdID4+IDYpICYgMDAzKSB8ICgoaW5wdXREYXRhQnVm
ZmVyW3NpZHggKyAxXSA8PCAyKSAmIDA3NyldOworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRh
QnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBbICBpbnB1dERhdGFCdWZmZXJbc2lkeCArIDJdICAg
ICAgICYgMDc3XTsKICAgICAgICAgICAgIHNpZHggKz0gMzsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmIChzaWR4IDwgbGVuKSB7Ci0gICAgICAgIGlmIChpbnNlcnRMRnMgJiYgKGNvdW50ID4g
MCkgJiYgIShjb3VudCAlIDc2KSkKLSAgICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOwotCi0g
ICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWyhkYXRhW3NpZHhdID4+IDIpICYgMDc3XTsK
LSAgICAgICAgaWYgKHNpZHggPCBsZW4gLSAxKSB7Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9
IGVuY29kZU1hcFsoKGRhdGFbc2lkeCArIDFdID4+IDQpICYgMDE3KSB8ICgoZGF0YVtzaWR4XSA8
PCA0KSAmIDA3NyldOwotICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFb
c2lkeCArIDFdIDw8IDIpICYgMDc3XTsKKyAgICBpZiAoc2lkeCA8IGlucHV0TGVuZ3RoKSB7Cisg
ICAgICAgIGlmIChpbnNlcnRMRnMgJiYgKGNvdW50ID4gMCkgJiYgIShjb3VudCAlIG1heGltdW1C
YXNlNjRMaW5lTGVuZ3RoV2hlbkluc2VydGluZ0xGcykpCisgICAgICAgICAgICBkZXN0aW5hdGlv
bkRhdGFCdWZmZXJbZGlkeCsrXSA9ICdcbic7CisKKyAgICAgICAgZGVzdGluYXRpb25EYXRhQnVm
ZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBbKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA+PiAyKSAmIDA3
N107CisgICAgICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGggLSAxKSB7CisgICAgICAgICAgICBk
ZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZl
cltzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeF0gPDwgNCkg
JiAwNzcpXTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5j
b2RlTWFwWyAoaW5wdXREYXRhQnVmZmVyW3NpZHggKyAxXSA8PCAyKSAmIDA3N107CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0g
PDwgNCkgJiAwNzddOworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10g
PSBlbmNvZGVNYXBbIChpbnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3XTsKICAg
ICB9CiAKLSAgICAvLyBBZGQgcGFkZGluZwotICAgIGlmIChwb2xpY3kgPT0gQmFzZTY0VVJMUG9s
aWN5KQotICAgICAgICBvdXQucmVzaXplKGRpZHgpOwotICAgIGVsc2UgewotICAgICAgICB3aGls
ZSAoZGlkeCA8IG91dC5zaXplKCkpIHsKLSAgICAgICAgICAgIG91dFtkaWR4XSA9ICc9JzsKLSAg
ICAgICAgICAgICsrZGlkeDsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQocG9saWN5ICE9
IEJhc2U2NEVuY29kZVBvbGljeTo6VVJMIHx8IGRpZHggPT0gZGVzdGluYXRpb25MZW5ndGgpOwor
CisgICAgd2hpbGUgKGRpZHggPCBkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgZGVzdGluYXRp
b25EYXRhQnVmZmVyW2RpZHgrK10gPSAnPSc7CiB9CiAKLVN0cmluZyBiYXNlNjRFbmNvZGUoY29u
c3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5
KQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRFbmNvZGVJbnRlcm5hbChjb25zdCB1aW50
OF90KiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIFZlY3RvcjxjaGFyPiBy
ZXN1bHQ7Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGRhdGEpLCBsZW5ndGgsIHJlc3VsdCwgcG9saWN5LCBiYXNlNjRFbmNNYXApOwot
ICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgYXV0
byBkZXN0aW5hdGlvbkxlbmd0aCA9IGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGlucHV0TGVu
Z3RoLCBwb2xpY3kpOworICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBWZWN0b3I8dWludDhfdD4gZGVzdGluYXRpb25WZWN0b3IoZGVzdGluYXRp
b25MZW5ndGgpOworICAgIGJhc2U2NEVuY29kZUludGVybmFsKGlucHV0RGF0YUJ1ZmZlciwgaW5w
dXRMZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBv
bGljeSwgbWFwKTsKKyAgICByZXR1cm4gZGVzdGluYXRpb25WZWN0b3I7Cit9CisKK3ZvaWQgYmFz
ZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVu
Z3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQorewor
ICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICBiYXNlNjRF
bmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVy
KSwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgs
IHBvbGljeSwgbWFwKTsKIH0KIAotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogZGF0YSwg
dW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hhcj4mIG91dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSkKK3ZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWdu
ZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRl
c3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRFbmNvZGVN
YXAgbWFwKQogewotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuLCBvdXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAg
ICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm47CisgICAgYmFzZTY0RW5j
b2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciks
IGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIGRlc3RpbmF0aW9uTGVuZ3RoLCBw
b2xpY3ksIG1hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKQorVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9y
KGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgVmVjdG9y
PGNoYXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBCYXNlNjRVUkxQb2xpY3ks
IGJhc2U2NFVSTEVuY01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1
bHQuc2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBwb2xpY3ksIG1h
cCk7CiB9CiAKLXZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVk
IGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQpCitTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29u
c3Qgdm9pZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKIHsKLSAgICBiYXNlNjRFbmNv
ZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbiwg
b3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7CisgICAgcmV0dXJuIG1ha2VT
dHJpbmcoYmFzZTY0RW5jb2RlZChpbnB1dERhdGFCdWZmZXIsIGlucHV0TGVuZ3RoLCBwb2xpY3ks
IG1hcCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBib29sIGJh
c2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgU2lnbmVk
T3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyJiBvdXQsIHVuc2lnbmVkIG9wdGlvbnMsIGNvbnN0
IGNoYXIgKCZkZWNvZGVNYXApWzEyOF0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgT3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBpbnB1
dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVjb2Rl
T3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICBvdXQuY2xlYXIo
KTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFpbnB1
dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIFZlY3Rvcjx1aW50OF90PiB7IH07CiAKLSAgICBvdXQu
Z3JvdyhsZW5ndGgpOworICAgIGF1dG8gZGVjb2RlTWFwID0gKG1hcCA9PSBCYXNlNjREZWNvZGVN
YXA6OlVSTCkgPyBiYXNlNjRVUkxEZWNNYXAgOiBiYXNlNjREZWNNYXA7CisKKyAgICBWZWN0b3I8
dWludDhfdD4gZGVzdGluYXRpb24oaW5wdXRMZW5ndGgpOwogCiAgICAgdW5zaWduZWQgZXF1YWxz
U2lnbkNvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBvdXRMZW5ndGggPSAwOwotICAgIGJvb2wgaGFk
RXJyb3IgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsg
KytpZHgpIHsKLSAgICAgICAgdW5zaWduZWQgY2ggPSBkYXRhW2lkeF07CisgICAgdW5zaWduZWQg
ZGVzdGluYXRpb25MZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4IDwg
aW5wdXRMZW5ndGg7ICsraWR4KSB7CisgICAgICAgIHVuc2lnbmVkIGNoID0gaW5wdXREYXRhQnVm
ZmVyW2lkeF07CiAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKICAgICAgICAgICAgICsrZXF1YWxz
U2lnbkNvdW50OwogICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIG5ldmVyIGJlIG1vcmUgdGhh
biAyIHBhZGRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChvcHRpb25zICYgQmFzZTY0
VmFsaWRhdGVQYWRkaW5nICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKLSAgICAgICAgICAgICAg
ICBoYWRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBp
ZiAob3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcp
ICYmIGVxdWFsc1NpZ25Db3VudCA+IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2hh
ciBkZWNvZGVkQ2hhcmFjdGVyID0gY2ggPCBXVEZfQVJSQVlfTEVOR1RIKGRlY29kZU1hcCkgPyBk
ZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFiZXQ7CisgICAgICAgICAgICBjaGFyIGRlY29kZWRDaGFy
YWN0ZXIgPSBjaCA8IGRlY29kZU1hcFNpemUgPyBkZWNvZGVNYXBbY2hdIDogbm9uQWxwaGFiZXQ7
CiAgICAgICAgICAgICBpZiAoZGVjb2RlZENoYXJhY3RlciAhPSBub25BbHBoYWJldCkgewotICAg
ICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAg
aGFkRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgb3V0W291dExlbmd0aCsrXSA9IGRlY29kZWRDaGFyYWN0
ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucyAmIEJhc2U2NElnbm9yZVNwYWNl
c0FuZE5ld0xpbmVzKQotICAgICAgICAgICAgICAgIHx8ICghaXNMYXRpbjEoY2gpIHx8ICFpc0FT
Q0lJU3BhY2UoY2gpIHx8ICgob3B0aW9ucyAmIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikgJiYg
Y2ggPT0gJ1x2JykpKSB7Ci0gICAgICAgICAgICAgICAgaGFkRXJyb3IgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291bnQpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25bZGVzdGluYXRpb25MZW5ndGgrK10gPSBkZWNvZGVkQ2hhcmFjdGVyOworICAg
ICAgICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5jb250YWlucyhCYXNlNjREZWNvZGVPcHRpb25z
OjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykgfHwgKCFpc0xhdGluMShjaCkgfHwgIWlzQVNDSUlT
cGFjZShjaCkgfHwgKG9wdGlvbnMuY29udGFpbnMoQmFzZTY0RGVjb2RlT3B0aW9uczo6RGlzY2Fy
ZFZlcnRpY2FsVGFiKSAmJiBjaCA9PSAnXHYnKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8g
TWFrZSBzdXJlIHdlIHNocmluayBiYWNrIHRoZSBWZWN0b3IgYmVmb3JlIHJldHVybmluZy4gb3V0
TGVuZ3RoIG1heSBiZSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQKKyAgICAvLyBNYWtlIHN1cmUgd2Ug
c2hyaW5rIGJhY2sgdGhlIFZlY3RvciBiZWZvcmUgcmV0dXJuaW5nLiBkZXN0aW5hdGlvbkxlbmd0
aCBtYXkgYmUgc2hvcnRlciB0aGFuIGV4cGVjdGVkCiAgICAgLy8gaW4gY2FzZSBvZiBlcnJvciBv
ciBpbiBjYXNlIG9mIGlnbm9yZWQgc3BhY2VzLgotICAgIGlmIChvdXRMZW5ndGggPCBvdXQuc2l6
ZSgpKQotICAgICAgICBvdXQuc2hyaW5rKG91dExlbmd0aCk7Ci0KLSAgICBpZiAoaGFkRXJyb3Ip
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZGVzdGluYXRpb25MZW5ndGggPCBkZXN0
aW5hdGlvbi5zaXplKCkpCisgICAgICAgIGRlc3RpbmF0aW9uLnNocmluayhkZXN0aW5hdGlvbkxl
bmd0aCk7CiAKLSAgICBpZiAoIW91dExlbmd0aCkKLSAgICAgICAgcmV0dXJuICFlcXVhbHNTaWdu
Q291bnQ7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkgeworICAgICAgICBpZiAoZXF1YWxz
U2lnbkNvdW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0
dXJuIFZlY3Rvcjx1aW50OF90PiB7IH07CisgICAgfQogCiAgICAgLy8gVGhlIHNob3VsZCBiZSBu
byBwYWRkaW5nIGlmIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIDQuCi0gICAgLy8gV2UgdXNlIChv
dXRMZW5ndGggKyBlcXVhbHNTaWduQ291bnQpIGluc3RlYWQgb2YgbGVuZ3RoIGJlY2F1c2Ugd2Ug
ZG9uJ3Qgd2FudCB0byBhY2NvdW50IGZvciBpZ25vcmVkIGNoYXJhY3RlcnMgKGkuZS4gc3BhY2Vz
KS4KLSAgICBpZiAob3B0aW9ucyAmIEJhc2U2NFZhbGlkYXRlUGFkZGluZyAmJiBlcXVhbHNTaWdu
Q291bnQgJiYgKG91dExlbmd0aCArIGVxdWFsc1NpZ25Db3VudCkgJSA0KQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgLy8gV2UgdXNlIChkZXN0aW5hdGlvbkxlbmd0aCArIGVxdWFsc1NpZ25D
b3VudCkgaW5zdGVhZCBvZiBsZW5ndGggYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGFjY291bnQg
Zm9yIGlnbm9yZWQgY2hhcmFjdGVycyAoaS5lLiBzcGFjZXMpLgorICAgIGlmIChvcHRpb25zLmNv
bnRhaW5zKEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZykgJiYgZXF1YWxzU2ln
bkNvdW50ICYmIChkZXN0aW5hdGlvbkxlbmd0aCArIGVxdWFsc1NpZ25Db3VudCkgJSA0KQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gVmFsaWQgZGF0YSBpcyAobiAqIDQg
KyBbMCwyLDNdKSBjaGFyYWN0ZXJzIGxvbmcuCi0gICAgaWYgKChvdXRMZW5ndGggJSA0KSA9PSAx
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKChkZXN0aW5hdGlvbkxlbmd0aCAlIDQp
ID09IDEpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgLy8gNC1ieXRl
IHRvIDMtYnl0ZSBjb252ZXJzaW9uCi0gICAgb3V0TGVuZ3RoIC09IChvdXRMZW5ndGggKyAzKSAv
IDQ7Ci0gICAgaWYgKCFvdXRMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZXN0
aW5hdGlvbkxlbmd0aCAtPSAoZGVzdGluYXRpb25MZW5ndGggKyAzKSAvIDQ7CisgICAgaWYgKCFk
ZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIHVu
c2lnbmVkIHNpZHggPSAwOwogICAgIHVuc2lnbmVkIGRpZHggPSAwOwotICAgIGlmIChvdXRMZW5n
dGggPiAxKSB7Ci0gICAgICAgIHdoaWxlIChkaWR4IDwgb3V0TGVuZ3RoIC0gMikgewotICAgICAg
ICAgICAgb3V0W2RpZHhdID0gKCgob3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHgg
KyAxXSA+PiA0KSAmIDAwMykpOwotICAgICAgICAgICAgb3V0W2RpZHggKyAxXSA9ICgoKG91dFtz
aWR4ICsgMV0gPDwgNCkgJiAyNTUpIHwgKChvdXRbc2lkeCArIDJdID4+IDIpICYgMDE3KSk7Ci0g
ICAgICAgICAgICBvdXRbZGlkeCArIDJdID0gKCgob3V0W3NpZHggKyAyXSA8PCA2KSAmIDI1NSkg
fCAob3V0W3NpZHggKyAzXSAmIDA3NykpOworICAgIGlmIChkZXN0aW5hdGlvbkxlbmd0aCA+IDEp
IHsKKyAgICAgICAgd2hpbGUgKGRpZHggPCBkZXN0aW5hdGlvbkxlbmd0aCAtIDIpIHsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uW2RpZHggICAgXSA9ICgoKGRlc3RpbmF0aW9uW3NpZHggICAgXSA8
PCAyKSAmIDI1NSkgfCAoKGRlc3RpbmF0aW9uW3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOworICAg
ICAgICAgICAgZGVzdGluYXRpb25bZGlkeCArIDFdID0gKCgoZGVzdGluYXRpb25bc2lkeCArIDFd
IDw8IDQpICYgMjU1KSB8ICgoZGVzdGluYXRpb25bc2lkeCArIDJdID4+IDIpICYgMDE3KSk7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbltkaWR4ICsgMl0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICsg
Ml0gPDwgNikgJiAyNTUpIHwgIChkZXN0aW5hdGlvbltzaWR4ICsgM10gICAgICAgJiAwNzcpKTsK
ICAgICAgICAgICAgIHNpZHggKz0gNDsKICAgICAgICAgICAgIGRpZHggKz0gMzsKICAgICAgICAg
fQogICAgIH0KIAotICAgIGlmIChkaWR4IDwgb3V0TGVuZ3RoKQotICAgICAgICBvdXRbZGlkeF0g
PSAoKChvdXRbc2lkeF0gPDwgMikgJiAyNTUpIHwgKChvdXRbc2lkeCArIDFdID4+IDQpICYgMDAz
KSk7CisgICAgaWYgKGRpZHggPCBkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgZGVzdGluYXRp
b25bZGlkeF0gPSAoKChkZXN0aW5hdGlvbltzaWR4ICAgIF0gPDwgMikgJiAyNTUpIHwgKChkZXN0
aW5hdGlvbltzaWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsKIAotICAgIGlmICgrK2RpZHggPCBvdXRM
ZW5ndGgpCi0gICAgICAgIG91dFtkaWR4XSA9ICgoKG91dFtzaWR4ICsgMV0gPDwgNCkgJiAyNTUp
IHwgKChvdXRbc2lkeCArIDJdID4+IDIpICYgMDE3KSk7CisgICAgaWYgKCsrZGlkeCA8IGRlc3Rp
bmF0aW9uTGVuZ3RoKQorICAgICAgICBkZXN0aW5hdGlvbltkaWR4XSA9ICgoKGRlc3RpbmF0aW9u
W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKGRlc3RpbmF0aW9uW3NpZHggKyAyXSA+PiAyKSAm
IDAxNykpOwogCi0gICAgaWYgKG91dExlbmd0aCA8IG91dC5zaXplKCkpCi0gICAgICAgIG91dC5z
aHJpbmsob3V0TGVuZ3RoKTsKLQotICAgIHJldHVybiB0cnVlOworICAgIGlmIChkZXN0aW5hdGlv
bkxlbmd0aCA8IGRlc3RpbmF0aW9uLnNpemUoKSkKKyAgICAgICAgZGVzdGluYXRpb24uc2hyaW5r
KGRlc3RpbmF0aW9uTGVuZ3RoKTsKKyAgICByZXR1cm4gZGVzdGluYXRpb247CiB9CiAKLWJvb2wg
YmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9y
QWRhcHRlciBvdXQsIHVuc2lnbmVkIG9wdGlvbnMpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2Rl
T3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICB1bnNpZ25lZCBs
ZW5ndGggPSBpbi5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8fCBpbi5pczhCaXQoKSkKLSAg
ICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3RlcnM4KCksIGxlbmd0
aCwgb3V0LCBvcHRpb25zLCBiYXNlNjREZWNNYXApOwotICAgIHJldHVybiBiYXNlNjREZWNvZGVJ
bnRlcm5hbChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQsIG9wdGlvbnMsIGJhc2U2NERl
Y01hcCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CisgICAgaWYgKCFs
ZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CisgICAgcmV0
dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIG9w
dGlvbnMsIG1hcCk7CiB9CiAKLWJvb2wgYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcgaW4sIFNpZ25l
ZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBvdXQsIHVuc2lnbmVkIG9wdGlvbnMpCitPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShTdHJpbmdWaWV3IGlucHV0LCBPcHRp
b25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkK
IHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpbi5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCB8
fCBpbi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGluLmNo
YXJhY3RlcnM4KCksIGxlbmd0aCwgb3V0LCBvcHRpb25zLCBiYXNlNjREZWNNYXApOwotICAgIHJl
dHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoLCBvdXQs
IG9wdGlvbnMsIGJhc2U2NERlY01hcCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5wdXQubGVu
Z3RoKCk7CisgICAgaWYgKCFsZW5ndGggfHwgaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVy
biBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1dC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG9wdGlv
bnMsIG1hcCk7CisgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3Rl
cnMxNigpLCBsZW5ndGgsIG9wdGlvbnMsIG1hcCk7CiB9CiAKLWJvb2wgYmFzZTY0RGVjb2RlKGNv
bnN0IFZlY3RvcjxjaGFyPiYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBv
dXQsIHVuc2lnbmVkIG9wdGlvbnMpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERl
Y29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2Rl
T3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKIHsKLSAgICBvdXQuY2xlYXIo
KTsKKyAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBiYXNlNjRE
ZWNvZGVJbnRlcm5hbChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgb3B0aW9ucywgbWFwKTsK
K30KIAotICAgIC8vIElmIHRoZSBpbnB1dCBzdHJpbmcgaXMgcGF0aG9sb2dpY2FsbHkgbGFyZ2Us
IGp1c3QgcmV0dXJuIG5vdGhpbmcuCi0gICAgaWYgKGluLnNpemUoKSA+IFVJTlRfTUFYKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9u
cz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKK3sKKyAgICBpZiAoaW5wdXQuc2l6ZSgp
ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIG9wdGlv
bnMsIG1hcCk7Cit9CiAKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KGluLmRhdGEoKSksIGluLnNpemUoKSwgb3V0LCBvcHRpb25z
LCBiYXNlNjREZWNNYXApOworT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUo
Y29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBPcHRpb25TZXQ8QmFzZTY0RGVj
b2RlT3B0aW9ucz4gb3B0aW9ucywgQmFzZTY0RGVjb2RlTWFwIG1hcCkKK3sKKyAgICByZXR1cm4g
YmFzZTY0RGVjb2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCBvcHRpb25zLCBtYXApOwogfQogCi1i
b29sIGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFNpZ25lZE9y
VW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBvdXQsIHVuc2lnbmVkIG9wdGlvbnMpCitPcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiBvcHRpb25zLCBCYXNlNjRE
ZWNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBvcHRpb25zLCBiYXNlNjRE
ZWNNYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCwgb3B0aW9ucywgbWFwKTsKIH0KIAotYm9vbCBi
YXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJiBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyIG91dCkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFN0cmluZyYgaW5wdXQpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW4ubGVuZ3Ro
KCk7Ci0gICAgaWYgKCFsZW5ndGggfHwgaW4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBiYXNl
NjREZWNvZGVJbnRlcm5hbChpbi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVm
YXVsdCwgYmFzZTY0VVJMRGVjTWFwKTsKLSAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwo
aW4uY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgb3V0LCBCYXNlNjREZWZhdWx0LCBiYXNlNjRVUkxE
ZWNNYXApOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworICAgIGlmICgh
bGVuZ3RoIHx8IGlucHV0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB7IH0sIEJhc2U2NERlY29kZU1hcDo6
VVJMKTsKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoaW5wdXQuY2hhcmFjdGVyczE2
KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CiB9CiAKLWJvb2wgYmFzZTY0
VVJMRGVjb2RlKFN0cmluZ1ZpZXcgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
ciBvdXQpCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NFVSTERlY29kZShTdHJpbmdW
aWV3IGlucHV0KQogewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGluLmxlbmd0aCgpOwotICAgIGlm
ICghbGVuZ3RoIHx8IGluLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50
ZXJuYWwoaW4uY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBvdXQsIEJhc2U2NERlZmF1bHQsIGJhc2U2
NFVSTERlY01hcCk7Ci0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGluLmNoYXJhY3Rl
cnMxNigpLCBsZW5ndGgsIG91dCwgQmFzZTY0RGVmYXVsdCwgYmFzZTY0VVJMRGVjTWFwKTsKKyAg
ICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCB8fCBp
bnB1dC5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0
LmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7CisgICAg
cmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKGlucHV0LmNoYXJhY3RlcnMxNigpLCBsZW5ndGgs
IHsgfSwgQmFzZTY0RGVjb2RlTWFwOjpVUkwpOwogfQogCi1ib29sIGJhc2U2NFVSTERlY29kZShj
b25zdCBWZWN0b3I8Y2hhcj4mIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIg
b3V0KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBpbnB1dCkKIHsKLSAgICBvdXQuY2xlYXIoKTsKKyAgICBpZiAoaW5wdXQu
c2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChpbnB1
dC5kYXRhKCksIGlucHV0LnNpemUoKSwgeyB9LCBCYXNlNjREZWNvZGVNYXA6OlVSTCk7Cit9CiAK
LSAgICAvLyBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdlLCBqdXN0
IHJldHVybiBub3RoaW5nLgotICAgIGlmIChpbi5zaXplKCkgPiBVSU5UX01BWCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUo
Y29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKK3sKKyAgICBpZiAoaW5wdXQuc2l6ZSgpID4gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbChyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCksIHsgfSwgQmFzZTY0
RGVjb2RlTWFwOjpVUkwpOworfQogCi0gICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihpbi5kYXRhKCkpLCBpbi5zaXplKCksIG91dCwg
QmFzZTY0RGVmYXVsdCwgYmFzZTY0VVJMRGVjTWFwKTsKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkK
K3sKKyAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWwoZGF0YSwgbGVuZ3RoLCB7IH0sIEJh
c2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAotYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hh
ciogZGF0YSwgdW5zaWduZWQgbGVuLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIg
b3V0KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hh
ciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNl
NjREZWZhdWx0LCBiYXNlNjRVUkxEZWNNYXApOworICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRl
cm5hbChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoLCB7IH0s
IEJhc2U2NERlY29kZU1hcDo6VVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L3RleHQvQmFzZTY0LmgJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQv
QmFzZTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE5MSArMjcsMTQ2IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAotZW51bSBCYXNlNjRFbmNv
ZGVQb2xpY3kgewotICAgIEJhc2U2NERvTm90SW5zZXJ0TEZzLAotICAgIEJhc2U2NEluc2VydExG
cywKLSAgICBCYXNlNjRVUkxQb2xpY3kgLy8gTm8gcGFkZGluZywgbm8gTEZzLgorZW51bSBjbGFz
cyBCYXNlNjRFbmNvZGVQb2xpY3kgeworICAgIERvTm90SW5zZXJ0TEZzLAorICAgIEluc2VydExG
cywKKyAgICBVUkwgLy8gTm8gcGFkZGluZywgbm8gTEZzLgogfTsKIAotZW51bSBCYXNlNjREZWNv
ZGVPcHRpb25zIHsKLSAgICBCYXNlNjREZWZhdWx0ID0gMCwKLSAgICBCYXNlNjRWYWxpZGF0ZVBh
ZGRpbmcgPSAxIDw8IDAsCi0gICAgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgPSAxIDw8
IDEsCi0gICAgQmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiID0gMSA8PCAyLAotfTsKLQotY2xhc3Mg
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIHsKLXB1YmxpYzoKLSAgICBTaWduZWRP
clVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIoVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCi0gICAgICAg
IDogbV9pc1NpZ25lZCh0cnVlKQotICAgIHsKLSAgICAgICAgbV92ZWN0b3IuYyA9ICZ2ZWN0b3I7
Ci0gICAgfQotICAgIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8dWlu
dDhfdD4mIHZlY3RvcikKLSAgICAgICAgOiBtX2lzU2lnbmVkKGZhbHNlKQotICAgIHsKLSAgICAg
ICAgbV92ZWN0b3IudSA9ICZ2ZWN0b3I7Ci0gICAgfQotCi0gICAgdWludDhfdCogZGF0YSgpCi0g
ICAgewotICAgICAgICBpZiAobV9pc1NpZ25lZCkKLSAgICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihtX3ZlY3Rvci5jLT5kYXRhKCkpOwotICAgICAgICByZXR1cm4g
bV92ZWN0b3IudS0+ZGF0YSgpOwotICAgIH0KLSAgICAKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAobV9pc1NpZ25lZCkKLSAgICAgICAgICAgIHJldHVybiBtX3Zl
Y3Rvci5jLT5zaXplKCk7Ci0gICAgICAgIHJldHVybiBtX3ZlY3Rvci51LT5zaXplKCk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1faXNTaWduZWQp
IHsKLSAgICAgICAgICAgIG1fdmVjdG9yLmMtPmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgbV92ZWN0b3IudS0+Y2xlYXIoKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBncm93KHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgaWYgKG1faXNTaWduZWQp
IHsKLSAgICAgICAgICAgIG1fdmVjdG9yLmMtPmdyb3coc2l6ZSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgbV92ZWN0b3IudS0+Z3JvdyhzaXplKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBzaHJpbmsoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICBpZiAobV9p
c1NpZ25lZCkgewotICAgICAgICAgICAgbV92ZWN0b3IuYy0+c2hyaW5rKHNpemUpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1fdmVjdG9yLnUtPnNocmluayhzaXpl
KTsKLSAgICB9Ci0gICAgCi0gICAgdWludDhfdCYgb3BlcmF0b3JbXShzaXplX3QgcG9zaXRpb24p
IHsgcmV0dXJuIGRhdGEoKVtwb3NpdGlvbl07IH0KK2VudW0gY2xhc3MgQmFzZTY0RW5jb2RlTWFw
IHsgRGVmYXVsdCwgVVJMIH07CiAKLXByaXZhdGU6Ci0gICAgYm9vbCBtX2lzU2lnbmVkOwotICAg
IHVuaW9uIHsKLSAgICAgICAgVmVjdG9yPGNoYXI+KiBjOwotICAgICAgICBWZWN0b3I8dWludDhf
dD4qIHU7Ci0gICAgfSBtX3ZlY3RvcjsKK2VudW0gY2xhc3MgQmFzZTY0RGVjb2RlT3B0aW9ucyA6
IHVpbnQ4X3QgeworICAgIFZhbGlkYXRlUGFkZGluZyAgICAgICAgID0gMSA8PCAwLAorICAgIEln
bm9yZVNwYWNlc0FuZE5ld0xpbmVzID0gMSA8PCAxLAorICAgIERpc2NhcmRWZXJ0aWNhbFRhYiAg
ICAgID0gMSA8PCAyLAogfTsKIAotY2xhc3MgQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3Rv
ckFkYXB0ZXIgewotcHVibGljOgotICAgIENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9yKQotICAgICAgICA6IG1faXNTaWduZWQo
ZmFsc2UpCi0gICAgewotICAgICAgICBtX3ZlY3Rvci5jID0gJnZlY3RvcjsKLSAgICB9Ci0gICAg
Q29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiB2ZWN0b3IpCi0gICAgICAgIDogbV9pc1NpZ25lZCh0cnVlKQotICAgIHsKLSAgICAgICAg
bV92ZWN0b3IudSA9ICZ2ZWN0b3I7Ci0gICAgfQorZW51bSBjbGFzcyBCYXNlNjREZWNvZGVNYXAg
eyBEZWZhdWx0LCBVUkwgfTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdAotICAg
IHsKLSAgICAgICAgaWYgKG1faXNTaWduZWQpCi0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV92ZWN0b3IuYy0+ZGF0YSgpKTsKLSAgICAgICAgcmV0
dXJuIG1fdmVjdG9yLnUtPmRhdGEoKTsKLSAgICB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgaWYgKG1faXNTaWduZWQpCi0gICAgICAgICAgICByZXR1cm4gbV92ZWN0
b3IuYy0+c2l6ZSgpOwotICAgICAgICByZXR1cm4gbV92ZWN0b3IudS0+c2l6ZSgpOwotICAgIH0K
K3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4aW11bUJhc2U2NExpbmVMZW5ndGhXaGVuSW5z
ZXJ0aW5nTEZzID0gNzY7CiAKLXByaXZhdGU6Ci0gICAgYm9vbCBtX2lzU2lnbmVkOwotICAgIHVu
aW9uIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+KiBjOwotICAgICAgICBjb25zdCBWZWN0
b3I8dWludDhfdD4qIHU7Ci0gICAgfSBtX3ZlY3RvcjsKLX07CisvLyBJZiB0aGUgaW5wdXQgc3Ry
aW5nIGlzIHBhdGhvbG9naWNhbGx5IGxhcmdlLCBqdXN0IHJldHVybiBub3RoaW5nLgorLy8gUmF0
aGVyIHRoYW4gYmVpbmcgcGVyZmVjdGx5IHByZWNpc2UsIHRoaXMgaXMgYSBiaXQgY29uc2VydmF0
aXZlLgorc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtQmFzZTY0RW5jb2RlcklucHV0
QnVmZmVyU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIDc3ICog
NzYgLyA0ICogMyAtIDI7CisKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShj
b25zdCB2b2lkKiwgdW5zaWduZWQsIFVDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGlj
eSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9
IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNl
NjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBMQ2hhciosIHVuc2lnbmVkLCBCYXNlNjRF
bmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRF
bmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworCitXVEZfRVhQT1JUX1BSSVZB
VEUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IHZvaWQqLCB1bnNp
Z25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2Vy
dExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1ZlY3Rv
cjx1aW50OF90PiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mLCBC
YXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBC
YXNlNjRFbmNvZGVNYXAgPSBCYXNlNjRFbmNvZGVNYXA6OkRlZmF1bHQpOworVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29k
ZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVmYXVsdCk7CitWZWN0b3I8dWludDhfdD4gYmFzZTY0
RW5jb2RlVG9WZWN0b3IoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2
NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVu
Y29kZU1hcDo6RGVmYXVsdCk7CisKK1dURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5j
b2RlVG9TdHJpbmcoY29uc3Qgdm9pZCosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBC
YXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgPSBCYXNl
NjRFbmNvZGVNYXA6OkRlZmF1bHQpOworU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGlj
eTo6RG9Ob3RJbnNlcnRMRnMsIEJhc2U2NEVuY29kZU1hcCA9IEJhc2U2NEVuY29kZU1hcDo6RGVm
YXVsdCk7CitTdHJpbmcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoY29uc3QgVmVjdG9yPGNoYXI+Jiwg
QmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywg
QmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0KTsKK1N0cmluZyBiYXNl
NjRFbmNvZGVUb1N0cmluZyhjb25zdCBDU3RyaW5nJiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RW5jb2RlUG9saWN5OjpEb05vdEluc2VydExGcywgQmFzZTY0RW5jb2RlTWFwID0gQmFzZTY0
RW5jb2RlTWFwOjpEZWZhdWx0KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYsIE9wdGlvblNldDxCYXNlNjRE
ZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpE
ZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJh
c2U2NERlY29kZShTdHJpbmdWaWV3LCBPcHRpb25TZXQ8QmFzZTY0RGVjb2RlT3B0aW9ucz4gPSB7
IH0sIEJhc2U2NERlY29kZU1hcCA9IEJhc2U2NERlY29kZU1hcDo6RGVmYXVsdCk7CitXVEZfRVhQ
T1JUX1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjREZWNvZGUoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiwgT3B0aW9uU2V0PEJhc2U2NERlY29kZU9wdGlvbnM+ID0geyB9LCBC
YXNlNjREZWNvZGVNYXAgPSBCYXNlNjREZWNvZGVNYXA6OkRlZmF1bHQpOworV1RGX0VYUE9SVF9Q
UklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3Rv
cjxjaGFyPiYsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVj
b2RlTWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBP
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCB1aW50OF90KiwgdW5z
aWduZWQsIE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2Rl
TWFwID0gQmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+IGJhc2U2NERlY29kZShjb25zdCBjaGFyKiwgdW5zaWduZWQs
IE9wdGlvblNldDxCYXNlNjREZWNvZGVPcHRpb25zPiA9IHsgfSwgQmFzZTY0RGVjb2RlTWFwID0g
QmFzZTY0RGVjb2RlTWFwOjpEZWZhdWx0KTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFz
ZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoQ29u
c3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIsIFZlY3RvcjxjaGFyPiYsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLXZvaWQgYmFzZTY0RW5jb2Rl
KGNvbnN0IENTdHJpbmcmLCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjREb05vdEluc2VydExGcyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NEVuY29k
ZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90
SW5zZXJ0TEZzKTsKLVN0cmluZyBiYXNlNjRFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZz
KTsKLVN0cmluZyBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVuY29kZVBvbGlj
eSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0
RW5jb2RlVG9WZWN0b3IoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0RW5jb2Rl
UG9saWN5IHBvbGljeSwgQmFzZTY0RW5jb2RlTWFwIG1hcCkKK3sKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9WZWN0b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsK
K30KIAotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IFN0cmluZyYs
IFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgdW5zaWduZWQgb3B0aW9ucyA9IEJh
c2U2NERlZmF1bHQpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKFN0cmlu
Z1ZpZXcsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgdW5zaWduZWQgb3B0aW9u
cyA9IEJhc2U2NERlZmF1bHQpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2Rl
KGNvbnN0IFZlY3RvcjxjaGFyPiYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwg
dW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENo
YXJWZWN0b3JBZGFwdGVyLCB1bnNpZ25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7Citpbmxp
bmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3RvcjxjaGFy
PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXAp
Cit7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQu
c2l6ZSgpLCBwb2xpY3ksIG1hcCk7Cit9CiAKLWlubGluZSB2b2lkIGJhc2U2NEVuY29kZShDb25z
dFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbiwgVmVjdG9yPGNoYXI+JiBvdXQs
IEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2
NEVuY29kZVRvVmVjdG9yKGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kg
cG9saWN5LCBCYXNlNjRFbmNvZGVNYXAgbWFwKQogewotICAgIGJhc2U2NEVuY29kZShpbi5kYXRh
KCksIGluLnNpemUoKSwgb3V0LCBwb2xpY3kpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1Zl
Y3RvcihpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBwb2xpY3ksIG1hcCk7CiB9CiAKLWlu
bGluZSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiBpbiwgVmVjdG9yPGNoYXI+JiBv
dXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCitpbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGlj
eSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgYmFzZTY0RW5jb2RlKGluLmRh
dGEoKSwgaW4ubGVuZ3RoKCksIG91dCwgcG9saWN5KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
VG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsKIH0KIAot
aW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3Rv
ckFkYXB0ZXIgaW4sIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCitpbmxpbmUgU3RyaW5nIGJh
c2U2NEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW5wdXQsIEJhc2U2NEVuY29k
ZVBvbGljeSBwb2xpY3ksIEJhc2U2NEVuY29kZU1hcCBtYXApCiB7Ci0gICAgcmV0dXJuIGJhc2U2
NEVuY29kZShpbi5kYXRhKCksIGluLnNpemUoKSwgcG9saWN5KTsKKyAgICByZXR1cm4gYmFzZTY0
RW5jb2RlVG9TdHJpbmcoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSwgbWFwKTsK
IH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3kpCitpbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZVRvU3RyaW5n
KGNvbnN0IENTdHJpbmcmIGlucHV0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBCYXNlNjRF
bmNvZGVNYXAgbWFwKQogewotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaW4uZGF0YSgpLCBpbi5s
ZW5ndGgoKSwgcG9saWN5KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQu
ZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgcG9saWN5LCBtYXApOwogfQogCisKIC8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CiAvLyBBbGwgdGhlIHNhbWUgZnVuY3Rpb25zIG1vZGlmaWVk
IGZvciBiYXNlNjR1cmwsIGFzIGRlZmluZWQgaW4gUkZDIDQ2NDguCiAvLyBUaGlzIGZvcm1hdCB1
c2VzICctJyBhbmQgJ18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5LgogLy8g
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
YmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgVmVjdG9yPGNoYXI+Jik7Ci12
b2lkIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
ciwgVmVjdG9yPGNoYXI+Jik7Ci12b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCBDU3RyaW5nJiwg
VmVjdG9yPGNoYXI+Jik7CitWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3Io
Y29uc3Qgdm9pZCosIHVuc2lnbmVkKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNvZGVU
b1ZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKK1ZlY3Rvcjx1aW50OF90PiBiYXNlNjRV
UkxFbmNvZGVUb1ZlY3Rvcihjb25zdCBWZWN0b3I8Y2hhcj4mKTsKK1ZlY3Rvcjx1aW50OF90PiBi
YXNlNjRVUkxFbmNvZGVUb1ZlY3Rvcihjb25zdCBDU3RyaW5nJik7CisKK1N0cmluZyBiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiwgdW5zaWduZWQpOworU3RyaW5nIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworU3RyaW5nIGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKGNvbnN0IFZlY3RvcjxjaGFyPiYpOworU3RyaW5nIGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKKworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFN0cmluZyYpOworV1RG
X0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2Rl
KFN0cmluZ1ZpZXcpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworV1RGX0VYUE9SVF9Q
UklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZl
Y3RvcjxjaGFyPiYpOworV1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gYmFzZTY0VVJMRGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCB1bnNpZ25lZCk7CitXVEZfRVhQT1JU
X1BSSVZBVEUgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBiYXNlNjRVUkxEZWNvZGUoY29uc3Qg
Y2hhciosIHVuc2lnbmVkKTsKKworaW5saW5lIFZlY3Rvcjx1aW50OF90PiBiYXNlNjRVUkxFbmNv
ZGVUb1ZlY3Rvcihjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGVUb1ZlY3RvcihpbnB1dCwgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xp
Y3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworfQorCitpbmxpbmUgVmVjdG9yPHVpbnQ4
X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQp
Cit7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZVRvVmVjdG9yKGlucHV0LmRhdGEoKSwgaW5wdXQu
c2l6ZSgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOwor
fQogCi1XVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lk
KiwgdW5zaWduZWQpOwotU3RyaW5nIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlcik7Ci1TdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJp
bmcmKTsKK2lubGluZSBWZWN0b3I8dWludDhfdD4gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoY29u
c3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9WZWN0
b3IoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBC
YXNlNjRFbmNvZGVNYXA6OlVSTCk7Cit9CiAKLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2
NFVSTERlY29kZShjb25zdCBTdHJpbmcmLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJMRGVjb2RlKFN0cmluZ1ZpZXcs
IFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgU2lnbmVkT3JVbnNpZ25l
ZENoYXJWZWN0b3JBZGFwdGVyKTsKLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2NFVSTERl
Y29kZShjb25zdCBjaGFyKiwgdW5zaWduZWQsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlcik7CitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGNv
bnN0IENTdHJpbmcmIGlucHV0KQoreworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1ZlY3Rvcihp
bnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFz
ZTY0RW5jb2RlTWFwOjpVUkwpOworfQogCi1pbmxpbmUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoQ29u
c3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgaW4sIFZlY3RvcjxjaGFyPiYgb3V0
KQoraW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCB2b2lkKiBpbnB1
dCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGJhc2U2NFVSTEVuY29kZShpbi5kYXRhKCksIGlu
LnNpemUoKSwgb3V0KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5wdXQsIGxl
bmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0K
IAotaW5saW5lIHZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmIGluLCBWZWN0b3I8
Y2hhcj4mIG91dCkKK2lubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKIHsKLSAgICBiYXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgp
LCBpbi5sZW5ndGgoKSwgb3V0KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaW5w
dXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJMLCBCYXNlNjRF
bmNvZGVNYXA6OlVSTCk7CiB9CiAKLWlubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKENvbnN0
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluKQoraW5saW5lIFN0cmluZyBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIGlucHV0KQogewotICAgIHJl
dHVybiBiYXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCkpOworICAgIHJldHVybiBi
YXNlNjRFbmNvZGVUb1N0cmluZyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5j
b2RlUG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKIH0KIAotaW5saW5lIFN0cmlu
ZyBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4pCitpbmxpbmUgU3RyaW5nIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKGNvbnN0IENTdHJpbmcmIGlucHV0KQogewotICAgIHJldHVybiBi
YXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgpLCBpbi5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGJhc2U2
NEVuY29kZVRvU3RyaW5nKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIEJhc2U2NEVuY29k
ZVBvbGljeTo6VVJMLCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2U2NE9yQmFzZTY0VVJM
Q2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKQEAgLTIxOSwxNSArMTc0LDExOCBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgCiAgICAgcmV0dXJuIGlzQVNDSUlBbHBo
YW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLycgfHwgYyA9PSAnLScgfHwgYyA9PSAn
Xyc7CiB9CiAKK2lubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZSh1bnNp
Z25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3sKKyAgICBpZiAo
IWlucHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpbnB1dExlbmd0aCA+
IG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRCdWZmZXJTaXplKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGF1dG8gYmFzZVBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAgICAgcmV0dXJu
ICgoaW5wdXRMZW5ndGggKyAyKSAvIDMpICogNDsKKyAgICB9OworCisgICAgYXV0byBiYXNlVW5w
YWRkZWRFbmNvZGVkU2l6ZSA9IFsmXSB7CisgICAgICAgIHJldHVybiAoKGlucHV0TGVuZ3RoICog
NCkgKyAyKSAvIDM7CisgICAgfTsKKworICAgIHN3aXRjaCAocG9saWN5KSB7CisgICAgY2FzZSBC
YXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzOgorICAgICAgICByZXR1cm4gYmFzZVBh
ZGRlZEVuY29kZWRTaXplKCk7CisKKyAgICBjYXNlIEJhc2U2NEVuY29kZVBvbGljeTo6SW5zZXJ0
TEZzOiB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gYmFzZVBhZGRlZEVuY29kZWRTaXplKCk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQgKyAoKHJlc3VsdCAtIDEpIC8gbWF4aW11bUJhc2U2NExpbmVM
ZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKTsKKyAgICB9CisKKyAgICBjYXNlIEJhc2U2NEVuY29kZVBv
bGljeTo6VVJMOgorICAgICAgICByZXR1cm4gYmFzZVVucGFkZGVkRW5jb2RlZFNpemUoKTsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3Ry
dWN0IEJhc2U2NFNwZWNpZmljYXRpb24geworICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKKyAg
ICB1bnNpZ25lZCBpbnB1dExlbmd0aDsKKyAgICBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5Owor
ICAgIEJhc2U2NEVuY29kZU1hcCBtYXA7Cit9OworCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlv
biBiYXNlNjRFbmNvZGVkKGNvbnN0IHZvaWQqIGlucHV0RGF0YSwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNlNjRFbmNvZGVQb2xpY3k6OkRvTm90
SW5zZXJ0TEZzLCBCYXNlNjRFbmNvZGVNYXAgbWFwID0gQmFzZTY0RW5jb2RlTWFwOjpEZWZhdWx0
KQoreworICAgIHJldHVybiB7IGlucHV0RGF0YSwgaW5wdXRMZW5ndGgsIHBvbGljeSwgbWFwIH07
Cit9CisKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBpbnB1dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVu
Y29kZVBvbGljeTo6RG9Ob3RJbnNlcnRMRnMpCit7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQo
aW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIHBvbGljeSk7Cit9CisKK2lubGluZSBCYXNlNjRT
cGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSA9IEJhc2U2NEVuY29kZVBvbGljeTo6RG9Ob3RJbnNlcnRM
RnMpCit7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXpl
KCksIHBvbGljeSk7Cit9CisKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29k
ZWQoY29uc3QgQ1N0cmluZyYgaW5wdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kgPSBCYXNl
NjRFbmNvZGVQb2xpY3k6OkRvTm90SW5zZXJ0TEZzKQoreworICAgIHJldHVybiBiYXNlNjRFbmNv
ZGVkKGlucHV0LmRhdGEoKSwgaW5wdXQubGVuZ3RoKCksIHBvbGljeSk7Cit9CisKK2lubGluZSBC
YXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NFVSTEVuY29kZWQoY29uc3Qgdm9pZCogaW5wdXREYXRh
LCB1bnNpZ25lZCBpbnB1dExlbmd0aCkKK3sKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1
dERhdGEsIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2Rl
TWFwOjpVUkwpOworfQorCitpbmxpbmUgQmFzZTY0U3BlY2lmaWNhdGlvbiBiYXNlNjRVUkxFbmNv
ZGVkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCit7CisgICAgcmV0dXJuIGJhc2U2NEVu
Y29kZWQoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksIEJhc2U2NEVuY29kZVBvbGljeTo6VVJM
LCBCYXNlNjRFbmNvZGVNYXA6OlVSTCk7Cit9CisKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9u
IGJhc2U2NFVSTEVuY29kZWQoY29uc3QgVmVjdG9yPGNoYXI+JiBpbnB1dCkKK3sKKyAgICByZXR1
cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgQmFzZTY0RW5jb2Rl
UG9saWN5OjpVUkwsIEJhc2U2NEVuY29kZU1hcDo6VVJMKTsKK30KKworaW5saW5lIEJhc2U2NFNw
ZWNpZmljYXRpb24gYmFzZTY0VVJMRW5jb2RlZChjb25zdCBDU3RyaW5nJiBpbnB1dCkKK3sKKyAg
ICByZXR1cm4gYmFzZTY0RW5jb2RlZChpbnB1dC5kYXRhKCksIGlucHV0Lmxlbmd0aCgpLCBCYXNl
NjRFbmNvZGVQb2xpY3k6OlVSTCwgQmFzZTY0RW5jb2RlTWFwOjpVUkwpOworfQorCit0ZW1wbGF0
ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+IHsKK3B1Ymxp
YzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBCYXNlNjRTcGVjaWZpY2F0aW9uJiBiYXNl
NjQpCisgICAgICAgIDogbV9iYXNlNjQgeyBiYXNlNjQgfQorICAgICAgICAsIG1fZW5jb2RlZExl
bmd0aCB7IGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1dExlbmd0aCwgYmFz
ZTY0LnBvbGljeSkgfQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2VuY29kZWRMZW5ndGg7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZv
aWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKiBkZXN0aW5hdGlvbikgY29uc3QKKyAgICB7CisgICAg
ICAgIGJhc2U2NEVuY29kZShtX2Jhc2U2NC5pbnB1dERhdGEsIG1fYmFzZTY0LmlucHV0TGVuZ3Ro
LCBkZXN0aW5hdGlvbiwgbV9lbmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3ksIG1fYmFzZTY0
Lm1hcCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2U2NFNwZWNpZmljYXRpb24gbV9iYXNl
NjQ7CisgICAgdW5zaWduZWQgbV9lbmNvZGVkTGVuZ3RoOworfTsKKwogfSAvLyBuYW1lc3BhY2Ug
V1RGCiAKK3VzaW5nIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczsKIHVzaW5nIFdURjo6QmFzZTY0
RW5jb2RlUG9saWN5OwotdXNpbmcgV1RGOjpCYXNlNjREb05vdEluc2VydExGczsKLXVzaW5nIFdU
Rjo6QmFzZTY0SW5zZXJ0TEZzOwotdXNpbmcgV1RGOjpCYXNlNjRWYWxpZGF0ZVBhZGRpbmc7Ci11
c2luZyBXVEY6OkJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzOwotdXNpbmcgV1RGOjpCYXNl
NjREaXNjYXJkVmVydGljYWxUYWI7Ci11c2luZyBXVEY6OmJhc2U2NEVuY29kZTsKIHVzaW5nIFdU
Rjo6YmFzZTY0RGVjb2RlOwordXNpbmcgV1RGOjpiYXNlNjRFbmNvZGVUb1N0cmluZzsKK3VzaW5n
IFdURjo6YmFzZTY0RW5jb2RlVG9WZWN0b3I7Cit1c2luZyBXVEY6OmJhc2U2NEVuY29kZWQ7Cit1
c2luZyBXVEY6OmJhc2U2NFVSTERlY29kZTsKIHVzaW5nIFdURjo6YmFzZTY0VVJMRGVjb2RlOwor
dXNpbmcgV1RGOjpiYXNlNjRVUkxFbmNvZGVUb1N0cmluZzsKK3VzaW5nIFdURjo6YmFzZTY0VVJM
RW5jb2RlVG9WZWN0b3I7Cit1c2luZyBXVEY6OmJhc2U2NFVSTEVuY29kZWQ7CiB1c2luZyBXVEY6
OmlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
Nzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyOTQgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgor
CisgICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdG8gbWF0Y2ggbW9yZSBt
b2Rlcm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1l
ei4KKworICAgICAgICAtIFVwZGF0ZXMgdG8gdXNlIG5ldyBzaWduYXR1cmVzIGZvciBiYXNlNjQg
ZW5jb2RpbmcvZGVjb2RpbmcgaW5jbHVkaW5nCisgICAgICAgICAgdXRpbGl6aW5nIHRoZSBzdHJp
bmcgdHlwZSBhZGFwdG9yIGFuZCBtYWtlU3RyaW5nLgorICAgICAgICAtIFJlcGxhY2Ugb3V0IHBh
cmFtZXRlciBiYXNlZCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkgd2l0aCAKKyAgICAg
ICAgICBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXko
KS4KKyAgICAgICAgLSBVcGRhdGUgc3luY2hyb25vdXMgbG9hZGluZyBjb2RlIHBhdGggdG8gdXNl
IHVpbnQ4X3QqIGNvbnNpc3RlbnRseSBmb3IKKyAgICAgICAgICBkYXRhIGJ1ZmZlciByZXByZXNl
bnRhdGlvbi4KKyAgICAgICAgLSBSZXBsYWNlIG91dCBwYXJhbWV0ZXJzIGluIHF1b3RlZFByaW50
YWJsZUVuY29kZS9xdW90ZWRQcmludGFibGVEZWNvZGUKKyAgICAgICAgICB3aXRoIE9wdGlvbmFs
LgorCisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RLZXlJRHNLZXlpZHMpOgorICAgICAgICBVcGRh
dGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUuCisKKyAgICAgICAgKFdlYkNvcmU6OnNhbml0
aXplS2V5aWRzKTogCisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTEVuY29kZVRv
U3RyaW5nKCkKKworICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2Fj
eUNETVNlc3Npb25DbGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQ2xl
YXJLZXk6OnVwZGF0ZSk6IAorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjREZWNvZGUo
KS4KKworICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dC5tbToKKyAgICAgICAgKFdlYkNvcmU6OmpzVmFsdWVXaXRoRGF0YUluQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGVtSW5Db250ZXh0KToKKyAgICAg
ICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoKS4gUmVwbGFjZSBzdHJp
bmcgY29uY2F0ZW50YXRpb24KKyAgICAgICAgdXNpbmcgb3BlcmF0b3IrIHdpdGggbWFrZVN0cmlu
ZygpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGljYXRvckNvb3JkaW5hdG9ySW50ZXJu
YWw6OnByb2R1Y2VDbGllbnREYXRhSnNvbik6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKCkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL1B1
YmxpY0tleUNyZWRlbnRpYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVu
dGlhbDo6UHVibGljS2V5Q3JlZGVudGlhbCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKCkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMv
V2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlU2VjV2Vi
U29ja2V0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhw
ZWN0ZWRXZWJTb2NrZXRBY2NlcHQpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRV
UkxFbmNvZGVUb1N0cmluZygpLgorCisgICAgICAgICogY3J5cHRvL1NlcmlhbGl6ZWRDcnlwdG9L
ZXlXcmFwLmg6CisgICAgICAgIENoYW5nZSBmcm9tIG91dHBhcmFtZXRlciBiYXNlZCBnZXREZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCkgdG8gbmV3CisgICAgICAgIE9wdGlvbmFsPFZlY3Rvcjx1
aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpLgorCisgICAgICAgICogY3J5cHRv
L2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9L
ZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRv
IHVzZSBuZXcgYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoKS4KKworICAgICAgICAqIGNyeXB0by9n
Y3J5cHQvU2VyaWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpnZXREZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KTogRGVsZXRlZC4KKyAgICAgICAgVXBkYXRlIGZvciBuZXcg
ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpIHNpZ25hdHVyZS4KKworICAgICAgICAqIGNyeXB0
by9rZXlzL0NyeXB0b0tleUFFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlBRVM6
OmltcG9ydEp3ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlBRVM6OmV4cG9ydEp3ayBj
b25zdCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZSAvIGJhc2U2
NFVSTEVuY29kZVRvU3RyaW5nKCkuCisgICAgICAgIAorICAgICAgICAqIGNyeXB0by9rZXlzL0Ny
eXB0b0tleUVDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUVDOjppbXBvcnRKd2sp
OgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUuCisKKyAgICAgICAg
KiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0
b0tleUhNQUM6OmltcG9ydEp3ayk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjpl
eHBvcnRKd2sgY29uc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNv
ZGUgLyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZygpLgorCisgICAgICAgICogY3J5cHRvL2tleXMv
Q3J5cHRvS2V5UlNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleVJTQTo6aW1wb3J0
SndrKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleVJTQTo6ZXhwb3J0SndrIGNvbnN0KToK
KyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0VVJMRGVjb2RlIC8gYmFzZTY0VVJMRW5j
b2RlVG9TdHJpbmcoKS4KKworICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW50
cyBjb25zdCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTEVuY29kZVRvU3Ry
aW5nKCkuCisKKyAgICAgICAgKiBjcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kU3RvcmVNYXN0ZXJLZXkpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZE1hc3RlcktleSk6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0V2Vi
Q3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9N
YXN0ZXJLZXkpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBkZWZhdWx0V2ViQ3J5
cHRvTWFzdGVyS2V5KCkgc2lnbmF0dXJlLgorCisgICAgICAgICogY3J5cHRvL29wZW5zc2wvU2Vy
aWFsaXplZENyeXB0b0tleVdyYXBPcGVuU1NMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGVmYXVsdFdlYkNy
eXB0b01hc3RlcktleSk6IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IGRlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkoKSBzaWduYXR1cmUuCisKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVS
ZWFkZXJMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcjo6Y29u
dmVydFRvRGF0YVVSTCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NEVuY29kZVRv
U3RyaW5nKCkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAg
VXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoKS4KKworICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q2VydGlmaWNhdGUpOgorICAgICAgICBVcGRhdGUgdG8g
dXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZygpLgorCisg
ICAgICAgICogaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGE6OmRlY29kZURhdGFUb0Nv
bnRlbnQpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRFbmNvZGVUb1N0cmluZygp
LgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaCk6
CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NERlY29kZSAvIGJhc2U2NEVuY29kZVRv
U3RyaW5nKCkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3I6OmJ1aWxkV2ViU29ja2V0TWVz
c2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZFJlY2Vp
dmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Z2V0U2Vy
aWFsaXplZENlcnRpZmljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6aW50ZXJjZXB0V2l0aFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
TmV0d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250
ZW50KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlIC8gYmFzZTY0RW5j
b2RlVG9TdHJpbmcoKS4KKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFn
ZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNv
bnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjphcmNoaXZlKToK
KyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoKS4KKworICAg
ICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIFN3aXRjaCB0byB1c2lu
ZyBWZWN0b3I8dWludDhfdD4gYnVmZmVyIHRvIG1hdGNoIG5ldyBsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5CisgICAgICAgIHNpZ25hdHVyZS4KKworICAgICAgICAqIGxvYWRlci9Mb2FkZXJTdHJh
dGVneS5oOgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVpbnQ4X3Q+IGZvciB0aGUg
ZGF0YSBidWZmZXIuCisKKyAgICAgICAgKiBsb2FkZXIvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkVwaGVtZXJh
bFNvdXJjZU5vbmNlOjppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcg
YmFzZTY0VVJMRGVjb2RlLgorCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjREZWNvZGUuCisKKyAg
ICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TUhUTUxBcmNoaXZlOjpnZW5lcmF0ZU1IVE1MRGF0YSk6CisgICAgICAgIFN3aXRj
aCB0byB1c2luZyBuZXcgYmFzZTY0RW5jb2RlIGFuZCBuZXcgcXVvdGVkUHJpbnRhYmxlRW5jb2Rl
LgorCisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TUhUTUxQYXJzZXI6OnBhcnNlTmV4dFBhcnQpOgorICAgICAgICBTd2l0
Y2ggdG8gdXNpbmcgbmV3IGJhc2U2NERlY29kZSBhbmQgbmV3IHF1b3RlZFByaW50YWJsZURlY29k
ZS4KKworICAgICAgICAqIGxvYWRlci9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29h
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OmNhbGN1bGF0
ZUFuZFVwZGF0ZVNvdXJjZVVubGlua2FibGVUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQW5kVXBkYXRlU291cmNlU2VjcmV0VG9rZW4p
OgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxEZWNvZGUgLyBiYXNlNjRVUkxF
bmNvZGVUb1N0cmluZygpLgorCisgICAgICAgICogcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QmFzZTY0VXRpbGl0aWVzOjpidG9hKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhc2U2NFV0aWxpdGllczo6YXRvYik6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJh
c2U2NERlY29kZSAvIGJhc2U2NEVuY29kZVRvU3RyaW5nKCkuCisgICAgCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRp
b25DaGFuZ2VkKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlLgorCisg
ICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoK
KyAgICAgICAgQWRkIG92ZXJsb2FkIGZvciBhcHBlbmQgd2hpY2ggYWxsb3dzIHBhc3NpbmcgaW4g
YSB1aW50OF90Ki4KKworICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5
L0NETUNsZWFyS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGljZW5zZUZvcm1hdCk6
CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpleHRyYWN0S2V5SWRGcm9tV2ViTUluaXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6Cisg
ICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29kZSAvIGJhc2U2NFVSTEVuY29k
ZVRvU3RyaW5nKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
Q0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdFNpbmZE
YXRhKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RGVjb2RlLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnJlcXVlc3RMaWNlbnNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRl
TGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0
cmVhbWluZ0FWRk9iakM6OmRpZFByb3ZpZGVSZXF1ZXN0cyk6CisgICAgICAgIFVwZGF0ZSB0byB1
c2UgbmV3IGJhc2U2NERlY29kZSAvIGJhc2U2NEVuY29kZVRvU3RyaW5nKCkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0
KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3
IGJhc2U2NEVuY29kZVRvU3RyaW5nKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVV
bmlxdWVGb250TmFtZSk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NEVuY29kZVRv
U3RyaW5nKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVVuaXF1ZUZvbnRO
YW1lKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoKS4K
KworICAgICAgICAqIHBsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOgorICAgICAgICBV
cGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRFbmNvZGVUb1N0cmluZygpLgorCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omxv
YWRCbG9iUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIFZl
Y3Rvcjx1aW50OF90PiBidWZmZXIgdG8gbWF0Y2ggbmV3IGxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkKKyAgICAgICAgc2lnbmF0dXJlLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291
cmNlSGFuZGxlLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgVmVjdG9yPHVp
bnQ4X3Q+IGJ1ZmZlciB0byBtYXRjaCBuZXcgbG9hZFJlc291cmNlU3luY2hyb25vdXNseQorICAg
ICAgICBzaWduYXR1cmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxC
YXNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsQmFzZTo6c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0
aG9yaXphdGlvbkhlYWRlciBjb25zdCk6CisgICAgICAgIEFkZCBoZWxwZXIgdG8gY29uc3RydWN0
IEJhc2ljIGF1dGggaGVhZGVyIHRvIHJlcGxhY2UgZHVwbGljYXRlZCBsb2dpYyBpbgorICAgICAg
ICBjYWxsIHNpdGVzLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVVJMRGVjb2Rlcjo6ZGVjb2RlQmFzZTY0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVFc2NhcGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpkZWNvZGVTeW5jaHJvbm91c2x5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmg6CisgICAgICAgIFVwZGF0ZSB0
byB1c2UgbmV3IGJhc2U2NERlY29kZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuaDoKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90PiBmb3IgdGhlIGRh
dGEgYnVmZmVyIGluIHRoZSBzeW5jaHJvbm91cyBsb2FkLgorCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
eW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgU3dpdGNoIHRv
IHVzaW5nIFZlY3Rvcjx1aW50OF90PiBidWZmZXIgdG8gbWF0Y2ggbmV3IGxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkKKyAgICAgICAgc2lnbmF0dXJlLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5
QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKToKKyAgICAgICAgVXNlIG5ldyBzZXJpYWxpemF0aW9u
Rm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkgaGVscGVyLgorCisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAg
ICAgICAgU3dpdGNoIHRvIHVzaW5nIFZlY3Rvcjx1aW50OF90PiBmb3IgdGhlIGRhdGEgYnVmZmVy
IGluIHRoZSBzeW5jaHJvbm91cyBsb2FkLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
dXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKToKKyAgICAgICAgU3dpdGNoIHRvIHVz
aW5nIFZlY3Rvcjx1aW50OF90PiBmb3IgdGhlIGRhdGEgYnVmZmVyIGluIHRoZSBzeW5jaHJvbm91
cyBsb2FkLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjphcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcik6
CisgICAgICAgIFVzZSBuZXcgc2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRl
cigpIGhlbHBlci4KKworICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3Jt
TG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIFN3aXRjaCB0byB1c2luZyBWZWN0
b3I8dWludDhfdD4gZm9yIHRoZSBkYXRhIGJ1ZmZlciBpbiB0aGUgc3luY2hyb25vdXMgbG9hZC4K
KworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNl
U3luY2hyb25vdXNseSk6CisgICAgICAgIFN3aXRjaCB0byB1c2luZyBWZWN0b3I8dWludDhfdD4g
Zm9yIHRoZSBkYXRhIGJ1ZmZlciBpbiB0aGUgc3luY2hyb25vdXMgbG9hZC4KKworICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SG9zdFRMU0NlcnRpZmljYXRlU2V0Ojpjb21wdXRlQ2VydGlmaWNhdGVIYXNoKToK
KyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0RW5jb2RlVG9TdHJpbmcoKS4KKworICAg
ICAgICAqIHBsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEpOgorICAgICAgICBTd2l0Y2gg
dG8gcmV0dXJuaW5nIFZlY3Rvcjx1aW50OF90Pi4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQv
UXVvdGVkUHJpbnRhYmxlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50
YWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6bGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpxdW90ZWRQcmludGFibGVFbmNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6cXVvdGVkUHJpbnRhYmxlRGVjb2RlKToKKyAgICAgICAgUmVwbGFjZSB1c2VzIG9mIFZlY3Rv
cjxjaGFyPiB3aXRoIFZlY3Rvcjx1aW50OF90PiBhbmQgdGhlIG91dCBwYXJhbWV0ZXJzCisgICAg
ICAgIHdpdGggT3B0aW9uYWwgcmV0dXJuIHZhbHVlcy4KKworICAgICAgICAqIHBsYXRmb3JtL3dp
bi9TU0xLZXlHZW5lcmF0b3JXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2lnbmVkUHVibGlj
S2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgYmFzZTY0
RW5jb2RlVG9TdHJpbmcoKS4KKworICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dT
Y3JpcHRTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNXU2NyaXB0U3RvcmFnZTo6c2hh
Mkhhc2ggY29uc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBiYXNlNjRVUkxFbmNvZGVU
b1N0cmluZygpLgorCiAyMDIxLTA1LTE5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CiAKICAgICAgICAgW0hhcmRlbmluZ10gQ0FSaW5nQnVmZmVyIHNob3VsZCB2YWxpZGF0ZSB0aGUg
c3RvcmFnZSBzaXplIGJlZm9yZSBhZG9wdGluZyBpdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3Bw
CShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1l
ZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwxNSArODAsMTQg
QEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPgogICAgICAgICBpZiAo
IWtleUlEKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgVmVjdG9yPGNoYXI+IGtl
eUlERGF0YTsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlJRCwgeyBrZXlJ
RERhdGEgfSkpCisgICAgICAgIGF1dG8ga2V5SUREYXRhID0gYmFzZTY0VVJMRGVjb2RlKGtleUlE
KTsKKyAgICAgICAgaWYgKCFrZXlJRERhdGEpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBpZiAoa2V5SUREYXRhLnNpemUoKSA8IGtLZXlJZHNNaW5LZXlJZFNpemVJbkJ5dGVzIHx8
IGtleUlERGF0YS5zaXplKCkgPiBrS2V5SWRzTWF4S2V5SWRTaXplSW5CeXRlcykKKyAgICAgICAg
aWYgKGtleUlERGF0YS0+c2l6ZSgpIDwga0tleUlkc01pbktleUlkU2l6ZUluQnl0ZXMgfHwga2V5
SUREYXRhLT5zaXplKCkgPiBrS2V5SWRzTWF4S2V5SWRTaXplSW5CeXRlcykKICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4ga2V5SURC
dWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGtleUlERGF0YSkpOwotICAgICAg
ICBrZXlJRHMuYXBwZW5kKFdURk1vdmUoa2V5SURCdWZmZXIpKTsKKyAgICAgICAga2V5SURzLmFw
cGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCprZXlJRERhdGEpKSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGtleUlEczsKQEAgLTEwNSw3ICsxMDQsNyBAQCBzdGF0aWMgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gc2FuaXRpemVLZXlpCiAgICAgYXV0byBvYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIGF1dG8ga2lkc0FycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwog
ICAgIGZvciAoYXV0byYgYnVmZmVyIDoga2V5SURCdWZmZXIudmFsdWUoKSkKLSAgICAgICAga2lk
c0FycmF5LT5wdXNoU3RyaW5nKFdURjo6YmFzZTY0VVJMRW5jb2RlKGJ1ZmZlci0+ZGF0YSgpLCBi
dWZmZXItPnNpemUoKSkpOworICAgICAgICBraWRzQXJyYXktPnB1c2hTdHJpbmcoYmFzZTY0VVJM
RW5jb2RlVG9TdHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSk7CiAgICAgb2Jq
ZWN0LT5zZXRBcnJheSgia2lkcyIsIFdURk1vdmUoa2lkc0FycmF5KSk7CiAKICAgICBDU3RyaW5n
IGpzb25EYXRhID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xl
YXJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVk
bWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHAJKHJldmlzaW9uIDI3Nzcy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2Fj
eUNETVNlc3Npb25DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwxMyArMTY5LDEz
IEBAIGJvb2wgQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoVWludDhBcnIKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGtleURhdGE7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShyYXdLZXlEYXRhLCBr
ZXlEYXRhKSB8fCBrZXlEYXRhLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBrZXlEYXRh
ID0gYmFzZTY0RGVjb2RlKHJhd0tleURhdGEpOworICAgICAgICAgICAgaWYgKCFrZXlEYXRhIHx8
IGtleURhdGEtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNl
c3Npb25DbGVhcktleTo6dXBkYXRlKCVwKSAtIGZhaWxlZDogdW5hYmxlIHRvIGJhc2U2NCBkZWNv
ZGUga2V5IiwgdGhpcyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIG1fY2FjaGVkS2V5cy5zZXQoa2V5SWQsIFdURk1vdmUoa2V5RGF0YSkp
OworICAgICAgICAgICAgbV9jYWNoZWRLZXlzLnNldChrZXlJZCwgV1RGTW92ZSgqa2V5RGF0YSkp
OwogICAgICAgICAgICAgZm91bmRWYWxpZEtleSA9IHRydWU7CiAgICAgICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudC5tbQkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDMsMTQgKzI0MywxMiBAQCB2b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50Ojpwb3N0RXZlCiAKIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQo
TlNEYXRhICpkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBKU0NvbnRleHQgKmNvbnRleHQp
CiB7Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKFtkYXRh
IGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSwgYmFzZTY0RGF0YSk7Ci0KKyAgICAvLyBGSVhNRTogQWRk
IG1ha2VDRlN0cmluZy9tYWtlTlNTdHJpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkgU3RyaW5nIGFs
bG9jYXRpb24uCiAgICAgU3RyaW5nIGRhdGE2NDsKICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHko
KSkKLSAgICAgICAgZGF0YTY0ID0gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJh
c2U2NERhdGE7CisgICAgICAgIGRhdGE2NCA9IG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUs
ICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKSk7
CiAgICAgZWxzZQotICAgICAgICBkYXRhNjQgPSAiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiICsg
YmFzZTY0RGF0YTsKKyAgICAgICAgZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L3BsYWlu
O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSkpOwog
CiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDooaWQpZGF0YTY0LmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQpAQCAtMzQyLDkgKzM0MCw3IEBA
IHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGUKICAgICAgICAgaWQgdmFs
dWUgPSBpdGVtLnZhbHVlOwogICAgICAgICBOU1N0cmluZyAqbWltZVR5cGUgPSBbW2l0ZW0gZXh0
cmFBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJNSU1FdHlwZSJdOwogICAgICAgICBpZiAoW3Zh
bHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dICYmIG1pbWVUeXBlKSB7Ci0gICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICAgICAgICAgIGJhc2U2NEVuY29kZShb
dmFsdWUgYnl0ZXNdLCBbdmFsdWUgbGVuZ3RoXSwgYmFzZTY0RGF0YSk7Ci0gICAgICAgICAgICBT
dHJpbmcgZGF0YTY0ID0gImRhdGE6IiArIFN0cmluZyhtaW1lVHlwZSkgKyAiO2Jhc2U2NCwiICsg
YmFzZTY0RGF0YTsKKyAgICAgICAgICAgIGF1dG8gZGF0YTY0ID0gbWFrZVN0cmluZygiZGF0YToi
LCBTdHJpbmcobWltZVR5cGUpLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKFt2YWx1ZSBieXRl
c10sIFt2YWx1ZSBsZW5ndGhdKSk7CiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
KF9fYnJpZGdlIE5TU3RyaW5nICopZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9yS2V5
OkAidmFsdWUiXTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRP
YmplY3Q6dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0b3JDb29yZGluYXRvci5j
cHAJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NyBAQCBzdGF0aWMgUmVmPEFycmF5QnVmZmVyPiBwcm9kdWNlQ2xpZW50RGF0CiAgICAgICAgIG9i
amVjdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCAid2ViYXV0aG4uZ2V0Il9zKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIFdURjo6YmFz
ZTY0VVJMRW5jb2RlKGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOworICAg
IG9iamVjdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2UiX3MsIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5n
KGNoYWxsZW5nZS5kYXRhKCksIGNoYWxsZW5nZS5sZW5ndGgoKSkpOwogICAgIG9iamVjdC0+c2V0
U3RyaW5nKCJvcmlnaW4iX3MsIG9yaWdpbi50b1Jhd1N0cmluZygpKTsKIAogICAgIGF1dG8gdXRm
OEpTT05TdHJpbmcgPSBvYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50
aWFsLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQs
NyBAQCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIFB1CiB9CiAKIFB1Ymxp
Y0tleUNyZWRlbnRpYWw6OlB1YmxpY0tleUNyZWRlbnRpYWwoUmVmPEF1dGhlbnRpY2F0b3JSZXNw
b25zZT4mJiByZXNwb25zZSkKLSAgICA6IEJhc2ljQ3JlZGVudGlhbChXVEY6OmJhc2U2NFVSTEVu
Y29kZShyZXNwb25zZS0+cmF3SWQoKS0+ZGF0YSgpLCByZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZUxl
bmd0aCgpKSwgVHlwZTo6UHVibGljS2V5LCBEaXNjb3Zlcnk6OlJlbW90ZSkKKyAgICA6IEJhc2lj
Q3JlZGVudGlhbChiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXNwb25zZS0+cmF3SWQoKS0+ZGF0
YSgpLCByZXNwb25zZS0+cmF3SWQoKS0+Ynl0ZUxlbmd0aCgpKSwgVHlwZTo6UHVibGljS2V5LCBE
aXNjb3Zlcnk6OlJlbW90ZSkKICAgICAsIG1fcmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSkpCiB7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIFN0cmluZyBnZW5lcmF0ZVNlY1dlYlNvY2tl
dEtleSgpCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBub25jZVNpemUgPSAxNjsKICAgICB1bnNp
Z25lZCBjaGFyIGtleVtub25jZVNpemVdOwogICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFs
dWVzKGtleSwgbm9uY2VTaXplKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGtleSwgbm9uY2VT
aXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoa2V5LCBub25jZVNpemUpOwog
fQogCiBTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlYlNvY2tldEFjY2Vw
dChjb25zdCBTdHJpbmcmIHNlY1dlYlNvY2tldEtleSkKQEAgLTExMCw3ICsxMTAsNyBAQCBTdHJp
bmcgV2ViU29ja2V0SGFuZHNoYWtlOjpnZXRFeHBlY3RlZFdlCiAgICAgc2hhMS5hZGRCeXRlcyhy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih3ZWJTb2NrZXRLZXlHVUlEKSwgc3RybGVu
KHdlYlNvY2tldEtleUdVSUQpKTsKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICBzaGExLmNv
bXB1dGVIYXNoKGhhc2gpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaGFzaC5kYXRhKCksIFNI
QTE6Omhhc2hTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRh
KCksIFNIQTE6Omhhc2hTaXplKTsKIH0KIAogV2ViU29ja2V0SGFuZHNoYWtlOjpXZWJTb2NrZXRI
YW5kc2hha2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0
cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGNsaWVudE9yaWdpbiwgYm9vbCBhbGxvd0Nv
b2tpZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU2VyaWFsaXplZENyeXB0b0tleVdy
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU2VyaWFsaXplZENyeXB0
b0tleVdyYXAuaAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL1Nl
cmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogLy8gb2YgcHJvdGVjdGlvbiBpcyBub3QgcmVxdWlyZWQgYnkg
dGhlIHNwZWMgYXMgb2YgMTEgRGVjZW1iZXIgMjAxNDoKIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9XZWJDcnlwdG9BUEkvI3NlY3VyaXR5LWRldmVsb3BlcnMKIAotV0VCQ09SRV9FWFBPUlQgYm9v
bCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYpOworV0VCQ09S
RV9FWFBPUlQgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVy
S2V5KCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGRlbGV0ZURlZmF1bHRXZWJDcnlwdG9NYXN0ZXJL
ZXkoKTsKIAogV0VCQ09SRV9FWFBPUlQgYm9vbCB3cmFwU2VyaWFsaXplZENyeXB0b0tleShjb25z
dCBWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXks
IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9n
Y3J5cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tleUVDR0NyeXB0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIzLDExICs1MjMsMTEgQEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZv
cm1BZGRGaWVsZEVsZW1lbgogICAgICAgICBpZiAocSAmJiBxLT5zaXplKCkgPT0gY3VydmVVbmNv
bXByZXNzZWRQb2ludFNpemUobV9jdXJ2ZSkpIHsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBhOwogICAgICAgICAgICAgYS5hcHBlbmQocS0+ZGF0YSgpICsgMSwgdW5jb21wcmVzc2VkRmll
bGRFbGVtZW50U2l6ZSk7Ci0gICAgICAgICAgICBqd2sueCA9IGJhc2U2NFVSTEVuY29kZShhKTsK
KyAgICAgICAgICAgIGp3ay54ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoYSk7CiAKICAgICAg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiBiOwogICAgICAgICAgICAgYi5hcHBlbmQocS0+ZGF0YSgp
ICsgMSArIHVuY29tcHJlc3NlZEZpZWxkRWxlbWVudFNpemUsIHVuY29tcHJlc3NlZEZpZWxkRWxl
bWVudFNpemUpOwotICAgICAgICAgICAgandrLnkgPSBiYXNlNjRVUkxFbmNvZGUoYik7CisgICAg
ICAgICAgICBqd2sueSA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGIpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC01NDMsNyArNTQzLDcgQEAgYm9vbCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRG
aWVsZEVsZW1lbgogICAgICAgICAgICAgICAgICAgICAqZCA9IFdURk1vdmUocGFkZGVkRGF0YSk7
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgandrLmQgPSBiYXNlNjRVUkxF
bmNvZGUoKmQpOworICAgICAgICAgICAgICAgIGp3ay5kID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJp
bmcoKmQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcEdDcnlwdC5jcHAJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nY3J5cHQvU2VyaWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSwxNSArMjksMTQgQEAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKIAogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rv
cjx1aW50OF90PiYgbWFzdGVyS2V5KQorT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFVOVVNF
RF9QQVJBTShtYXN0ZXJLZXkpOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiB9CiAKIC8vIEluaXRpYWxseSB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zIHdlcmUg
aW50ZW5kZWQgdG8gcGVyZm9ybSBLRUsgd3JhcHBpbmcgYW5kIHVud3JhcHBpbmcsCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAJKHJldmlzaW9uIDI3
NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDEwICs4OCwxMCBAQCBSZWZQdHI8Q3J5cHRvS2V5QUVTPiBDcnlw
dG9LZXlBRVM6OmltcG9yCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRh
LmsuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90
PiBvY3RldFNlcXVlbmNlOwotICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuaywgb2N0
ZXRTZXF1ZW5jZSkpCisgICAgYXV0byBvY3RldFNlcXVlbmNlID0gYmFzZTY0VVJMRGVjb2RlKGtl
eURhdGEuayk7CisgICAgaWYgKCFvY3RldFNlcXVlbmNlKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBpZiAoIWNhbGxiYWNrKG9jdGV0U2VxdWVuY2Uuc2l6ZSgpICogOCwga2V5RGF0YS5h
bGcpKQorICAgIGlmICghY2FsbGJhY2sob2N0ZXRTZXF1ZW5jZS0+c2l6ZSgpICogOCwga2V5RGF0
YS5hbGcpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAodXNhZ2VzICYmICFrZXlE
YXRhLnVzZS5pc051bGwoKSAmJiBrZXlEYXRhLnVzZSAhPSAiZW5jIikKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0xMDAsMTQgKzEwMCwxNCBAQCBSZWZQdHI8Q3J5cHRvS2V5QUVTPiBDcnlw
dG9LZXlBRVM6OmltcG9yCiAgICAgaWYgKGtleURhdGEuZXh0ICYmICFrZXlEYXRhLmV4dC52YWx1
ZSgpICYmIGV4dHJhY3RhYmxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5QUVTKGFsZ29yaXRobSwgV1RGTW92ZShvY3RldFNlcXVl
bmNlKSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3J5
cHRvS2V5QUVTKGFsZ29yaXRobSwgV1RGTW92ZSgqb2N0ZXRTZXF1ZW5jZSksIGV4dHJhY3RhYmxl
LCB1c2FnZXMpKTsKIH0KIAogSnNvbldlYktleSBDcnlwdG9LZXlBRVM6OmV4cG9ydEp3aygpIGNv
bnN0CiB7CiAgICAgSnNvbldlYktleSByZXN1bHQ7CiAgICAgcmVzdWx0Lmt0eSA9ICJvY3QiOwot
ICAgIHJlc3VsdC5rID0gYmFzZTY0VVJMRW5jb2RlKG1fa2V5KTsKKyAgICByZXN1bHQuayA9IGJh
c2U2NFVSTEVuY29kZVRvU3RyaW5nKG1fa2V5KTsKICAgICByZXN1bHQua2V5X29wcyA9IHVzYWdl
cygpOwogICAgIHJlc3VsdC5leHQgPSBleHRyYWN0YWJsZSgpOwogICAgIHJldHVybiByZXN1bHQ7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCShyZXZp
c2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDIyICs5OCwyMiBAQCBSZWZQdHI8Q3J5cHRvS2V5RUM+
IENyeXB0b0tleUVDOjppbXBvcnRKCiAKICAgICBpZiAoa2V5RGF0YS54LmlzTnVsbCgpIHx8IGtl
eURhdGEueS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IHg7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLngsIHgpKQor
ICAgIGF1dG8geCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLngpOworICAgIGlmICgheCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHk7Ci0gICAgaWYgKCFX
VEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLnksIHkpKQorICAgIGF1dG8geSA9IGJhc2U2NFVS
TERlY29kZShrZXlEYXRhLnkpOworICAgIGlmICgheSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgaWYgKGtleURhdGEuZC5pc051bGwoKSkgewogICAgICAgICAvLyBpbXBvcnQgcHVibGlj
IGtleQotICAgICAgICByZXR1cm4gcGxhdGZvcm1JbXBvcnRKV0tQdWJsaWMoaWRlbnRpZmllciwg
Km5hbWVkQ3VydmUsIFdURk1vdmUoeCksIFdURk1vdmUoeSksIGV4dHJhY3RhYmxlLCB1c2FnZXMp
OworICAgICAgICByZXR1cm4gcGxhdGZvcm1JbXBvcnRKV0tQdWJsaWMoaWRlbnRpZmllciwgKm5h
bWVkQ3VydmUsIFdURk1vdmUoKngpLCBXVEZNb3ZlKCp5KSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7
CiAgICAgfQogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGQ7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVS
TERlY29kZShrZXlEYXRhLmQsIGQpKQorICAgIGF1dG8gZCA9IGJhc2U2NFVSTERlY29kZShrZXlE
YXRhLmQpOworICAgIGlmICghZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgLy8gaW1w
b3J0IHByaXZhdGUga2V5Ci0gICAgcmV0dXJuIHBsYXRmb3JtSW1wb3J0SldLUHJpdmF0ZShpZGVu
dGlmaWVyLCAqbmFtZWRDdXJ2ZSwgV1RGTW92ZSh4KSwgV1RGTW92ZSh5KSwgV1RGTW92ZShkKSwg
ZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgcmV0dXJuIHBsYXRmb3JtSW1wb3J0SldLUHJpdmF0
ZShpZGVudGlmaWVyLCAqbmFtZWRDdXJ2ZSwgV1RGTW92ZSgqeCksIFdURk1vdmUoKnkpLCBXVEZN
b3ZlKCpkKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiB9CiAKIFJlZlB0cjxDcnlwdG9LZXlFQz4g
Q3J5cHRvS2V5RUM6OmltcG9ydFNwa2koQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIGN1cnZlLCBWZWN0b3I8dWludDhfdD4mJiBrZXlEYXRhLCBib29s
IGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZXMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcAkocmV2aXNpb24gMjc3NzI4
KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMyw4ICsxMDMsOCBAQCBSZWZQdHI8Q3J5cHRvS2V5SE1BQz4gQ3J5cHRv
S2V5SE1BQzo6aW1wCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmsu
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFZlY3Rvcjx1aW50OF90PiBv
Y3RldFNlcXVlbmNlOwotICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuaywgb2N0ZXRT
ZXF1ZW5jZSkpCisgICAgYXV0byBvY3RldFNlcXVlbmNlID0gYmFzZTY0VVJMRGVjb2RlKGtleURh
dGEuayk7CisgICAgaWYgKCFvY3RldFNlcXVlbmNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBpZiAoIWNhbGxiYWNrKGhhc2gsIGtleURhdGEuYWxnKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0xMTUsMTQgKzExNSwxNCBAQCBSZWZQdHI8Q3J5cHRvS2V5SE1BQz4gQ3J5cHRv
S2V5SE1BQzo6aW1wCiAgICAgaWYgKGtleURhdGEuZXh0ICYmICFrZXlEYXRhLmV4dC52YWx1ZSgp
ICYmIGV4dHJhY3RhYmxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBD
cnlwdG9LZXlITUFDOjppbXBvcnRSYXcobGVuZ3RoQml0cywgaGFzaCwgV1RGTW92ZShvY3RldFNl
cXVlbmNlKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgcmV0dXJuIENyeXB0b0tleUhNQUM6
OmltcG9ydFJhdyhsZW5ndGhCaXRzLCBoYXNoLCBXVEZNb3ZlKCpvY3RldFNlcXVlbmNlKSwgZXh0
cmFjdGFibGUsIHVzYWdlcyk7CiB9CiAKIEpzb25XZWJLZXkgQ3J5cHRvS2V5SE1BQzo6ZXhwb3J0
SndrKCkgY29uc3QKIHsKICAgICBKc29uV2ViS2V5IHJlc3VsdDsKICAgICByZXN1bHQua3R5ID0g
Im9jdCI7Ci0gICAgcmVzdWx0LmsgPSBiYXNlNjRVUkxFbmNvZGUobV9rZXkpOworICAgIHJlc3Vs
dC5rID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcobV9rZXkpOwogICAgIHJlc3VsdC5rZXlfb3Bz
ID0gdXNhZ2VzKCk7CiAgICAgcmVzdWx0LmV4dCA9IGV4dHJhY3RhYmxlKCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNB
LmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5UlNBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNjUgKzQ1LDg3IEBAIFJlZlB0cjxD
cnlwdG9LZXlSU0E+IENyeXB0b0tleVJTQTo6aW1wb3IKIAogICAgIGlmIChrZXlEYXRhLm4uaXNO
dWxsKCkgfHwga2V5RGF0YS5lLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBWZWN0b3I8dWludDhfdD4gbW9kdWx1czsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2Rl
KGtleURhdGEubiwgbW9kdWx1cykpCisgICAgYXV0byBtb2R1bHVzID0gYmFzZTY0VVJMRGVjb2Rl
KGtleURhdGEubik7CisgICAgaWYgKCFtb2R1bHVzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAvLyBQZXIgUkZDIDc1MTggU2VjdGlvbiA2LjMuMS4xOiBodHRwczovL3Rvb2xzLmlldGYu
b3JnL2h0bWwvcmZjNzUxOCNzZWN0aW9uLTYuMy4xLjEKLSAgICBpZiAoIW1vZHVsdXMuaXNFbXB0
eSgpICYmICFtb2R1bHVzWzBdKQotICAgICAgICBtb2R1bHVzLnJlbW92ZSgwKTsKLSAgICBWZWN0
b3I8dWludDhfdD4gZXhwb25lbnQ7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlE
YXRhLmUsIGV4cG9uZW50KSkKKyAgICBpZiAoIW1vZHVsdXMtPmlzRW1wdHkoKSAmJiAhbW9kdWx1
cy0+YXQoMCkpCisgICAgICAgIG1vZHVsdXMtPnJlbW92ZSgwKTsKKyAgICBhdXRvIGV4cG9uZW50
ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZSk7CisgICAgaWYgKCFleHBvbmVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEuZC5pc051bGwoKSkgewogICAgICAg
ICAvLyBpbXBvcnQgcHVibGljIGtleQotICAgICAgICBhdXRvIHB1YmxpY0tleUNvbXBvbmVudHMg
PSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpjcmVhdGVQdWJsaWMoV1RGTW92ZShtb2R1bHVzKSwg
V1RGTW92ZShleHBvbmVudCkpOworICAgICAgICBhdXRvIHB1YmxpY0tleUNvbXBvbmVudHMgPSBD
cnlwdG9LZXlSU0FDb21wb25lbnRzOjpjcmVhdGVQdWJsaWMoV1RGTW92ZSgqbW9kdWx1cyksIFdU
Rk1vdmUoKmV4cG9uZW50KSk7CiAgICAgICAgIC8vIE5vdGljZTogQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6U0hBXzEgaXMganVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91bGQgbm90IGhhdmUg
YW55IGVmZmVjdCBpZiBoYXNoIGlzIFdURjo6bnVsbG9wdC4KICAgICAgICAgcmV0dXJuIENyeXB0
b0tleVJTQTo6Y3JlYXRlKGFsZ29yaXRobSwgaGFzaC52YWx1ZU9yKENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXI6OlNIQV8xKSwgISFoYXNoLCAqcHVibGljS2V5Q29tcG9uZW50cywgZXh0cmFjdGFi
bGUsIHVzYWdlcyk7CiAgICAgfQogCiAgICAgLy8gaW1wb3J0IHByaXZhdGUga2V5Ci0gICAgVmVj
dG9yPHVpbnQ4X3Q+IHByaXZhdGVFeHBvbmVudDsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVj
b2RlKGtleURhdGEuZCwgcHJpdmF0ZUV4cG9uZW50KSkKKyAgICBhdXRvIHByaXZhdGVFeHBvbmVu
dCA9IGJhc2U2NFVSTERlY29kZShrZXlEYXRhLmQpOworICAgIGlmICghcHJpdmF0ZUV4cG9uZW50
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5wLmlzTnVsbCgpICYm
IGtleURhdGEucS5pc051bGwoKSAmJiBrZXlEYXRhLmRwLmlzTnVsbCgpICYmIGtleURhdGEuZHAu
aXNOdWxsKCkgJiYga2V5RGF0YS5xaS5pc051bGwoKSkgewotICAgICAgICBhdXRvIHByaXZhdGVL
ZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShXVEZN
b3ZlKG1vZHVsdXMpLCBXVEZNb3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQp
KTsKKyAgICAgICAgYXV0byBwcml2YXRlS2V5Q29tcG9uZW50cyA9IENyeXB0b0tleVJTQUNvbXBv
bmVudHM6OmNyZWF0ZVByaXZhdGUoV1RGTW92ZSgqbW9kdWx1cyksIFdURk1vdmUoKmV4cG9uZW50
KSwgV1RGTW92ZSgqcHJpdmF0ZUV4cG9uZW50KSk7CiAgICAgICAgIC8vIE5vdGljZTogQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEgaXMganVzdCBhIHBsYWNlaG9sZGVyLiBJdCBzaG91
bGQgbm90IGhhdmUgYW55IGVmZmVjdCBpZiBoYXNoIGlzIFdURjo6bnVsbG9wdC4KICAgICAgICAg
cmV0dXJuIENyeXB0b0tleVJTQTo6Y3JlYXRlKGFsZ29yaXRobSwgaGFzaC52YWx1ZU9yKENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xKSwgISFoYXNoLCAqcHJpdmF0ZUtleUNvbXBvbmVu
dHMsIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgIH0KIAogICAgIGlmIChrZXlEYXRhLnAuaXNO
dWxsKCkgfHwga2V5RGF0YS5xLmlzTnVsbCgpIHx8IGtleURhdGEuZHAuaXNOdWxsKCkgfHwga2V5
RGF0YS5kcS5pc051bGwoKSB8fCBrZXlEYXRhLnFpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpQcmltZUluZm8gZmlyc3RQcmlt
ZUluZm87Ci0gICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1l
SW5mbzsKLSAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleURhdGEucCwgZmlyc3RQcmlt
ZUluZm8ucHJpbWVGYWN0b3IpKQorICAgIAorICAgIGF1dG8gZmlyc3RQcmltZUZhY3RvciA9IGJh
c2U2NFVSTERlY29kZShrZXlEYXRhLnApOworICAgIGlmICghZmlyc3RQcmltZUZhY3RvcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlE
YXRhLmRwLCBmaXJzdFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCkpCisgICAgYXV0byBmaXJz
dEZhY3RvckNSVEV4cG9uZW50ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZHApOworICAgIGlm
ICghZmlyc3RGYWN0b3JDUlRFeHBvbmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
aWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlEYXRhLnEsIHNlY29uZFByaW1lSW5mby5wcmlt
ZUZhY3RvcikpCisgICAgYXV0byBzZWNvbmRQcmltZUZhY3RvciA9IGJhc2U2NFVSTERlY29kZShr
ZXlEYXRhLnEpOworICAgIGlmICghc2Vjb25kUHJpbWVGYWN0b3IpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5kcSwgc2Vjb25k
UHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50KSkKKyAgICBhdXRvIHNlY29uZEZhY3RvckNSVEV4
cG9uZW50ID0gYmFzZTY0VVJMRGVjb2RlKGtleURhdGEuZHEpOworICAgIGlmICghc2Vjb25kRmFj
dG9yQ1JURXhwb25lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghV1RGOjpi
YXNlNjRVUkxEZWNvZGUoa2V5RGF0YS5xaSwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZm
aWNpZW50KSkKKyAgICBhdXRvIHNlY29uZEZhY3RvckNSVENvZWZmaWNpZW50ID0gYmFzZTY0VVJM
RGVjb2RlKGtleURhdGEucWkpOworICAgIGlmICghc2Vjb25kRmFjdG9yQ1JUQ29lZmZpY2llbnQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6
UHJpbWVJbmZvIGZpcnN0UHJpbWVJbmZvOworICAgIGZpcnN0UHJpbWVJbmZvLnByaW1lRmFjdG9y
ID0gV1RGTW92ZSgqZmlyc3RQcmltZUZhY3Rvcik7CisgICAgZmlyc3RQcmltZUluZm8uZmFjdG9y
Q1JURXhwb25lbnQgPSBXVEZNb3ZlKCpmaXJzdEZhY3RvckNSVEV4cG9uZW50KTsKKyAgICAKKyAg
ICBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpQcmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOworICAg
IHNlY29uZFByaW1lSW5mby5wcmltZUZhY3RvciA9IFdURk1vdmUoKnNlY29uZFByaW1lRmFjdG9y
KTsKKyAgICBzZWNvbmRQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZNb3ZlKCpzZWNv
bmRGYWN0b3JDUlRFeHBvbmVudCk7CisgICAgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZm
aWNpZW50ID0gV1RGTW92ZSgqc2Vjb25kRmFjdG9yQ1JUQ29lZmZpY2llbnQpOworCiAgICAgaWYg
KCFrZXlEYXRhLm90aCkgewotICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5
cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZN
b3ZlKG1vZHVsdXMpLCBXVEZNb3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRlRXhwb25lbnQp
LCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCB7IH0p
OworICAgICAgICBhdXRvIHByaXZhdGVLZXlDb21wb25lbnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9u
ZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShXVEZNb3ZlKCptb2R1bHVzKSwg
V1RGTW92ZSgqZXhwb25lbnQpLCBXVEZNb3ZlKCpwcml2YXRlRXhwb25lbnQpLCBXVEZNb3ZlKGZp
cnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUluZm8pLCB7IH0pOwogICAgICAgICAv
LyBOb3RpY2U6IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xIGlzIGp1c3QgYSBwbGFj
ZWhvbGRlci4gSXQgc2hvdWxkIG5vdCBoYXZlIGFueSBlZmZlY3QgaWYgaGFzaCBpcyBXVEY6Om51
bGxvcHQuCiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhh
c2gudmFsdWVPcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnBy
aXZhdGVLZXlDb21wb25lbnRzLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICB9CiAKICAgICBW
ZWN0b3I8Q3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclByaW1lSW5mb3M7
CiAgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6IGtleURhdGEub3RoLnZhbHVlKCkpIHsKLSAg
ICAgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87Ci0gICAgICAgIGlm
ICghV1RGOjpiYXNlNjRVUkxEZWNvZGUodmFsdWUuciwgaW5mby5wcmltZUZhY3RvcikpCisgICAg
ICAgIGF1dG8gcHJpbWVGYWN0b3IgPSBiYXNlNjRVUkxEZWNvZGUodmFsdWUucik7CisgICAgICAg
IGlmICghcHJpbWVGYWN0b3IpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
aWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZSh2YWx1ZS5kLCBpbmZvLmZhY3RvckNSVEV4cG9uZW50
KSkKKyAgICAgICAgYXV0byBmYWN0b3JDUlRFeHBvbmVudCA9IGJhc2U2NFVSTERlY29kZSh2YWx1
ZS5kKTsKKyAgICAgICAgaWYgKCFmYWN0b3JDUlRFeHBvbmVudCkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKHZhbHVlLnQsIGlu
Zm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQpKQorICAgICAgICBhdXRvIGZhY3RvckNSVENvZWZmaWNp
ZW50ID0gYmFzZTY0VVJMRGVjb2RlKHZhbHVlLnQpOworICAgICAgICBpZiAoIWZhY3RvckNSVENv
ZWZmaWNpZW50KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG90aGVyUHJp
bWVJbmZvcy5hcHBlbmQoaW5mbyk7CisKKyAgICAgICAgQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6
UHJpbWVJbmZvIGluZm87CisgICAgICAgIGluZm8ucHJpbWVGYWN0b3IgPSBXVEZNb3ZlKCpwcmlt
ZUZhY3Rvcik7CisgICAgICAgIGluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBXVEZNb3ZlKCpmYWN0
b3JDUlRFeHBvbmVudCk7CisgICAgICAgIGluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQgPSBXVEZN
b3ZlKCpmYWN0b3JDUlRDb2VmZmljaWVudCk7CisKKyAgICAgICAgb3RoZXJQcmltZUluZm9zLmFw
cGVuZChXVEZNb3ZlKGluZm8pKTsKICAgICB9CiAKLSAgICBhdXRvIHByaXZhdGVLZXlDb21wb25l
bnRzID0gQ3J5cHRvS2V5UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFs
RGF0YShXVEZNb3ZlKG1vZHVsdXMpLCBXVEZNb3ZlKGV4cG9uZW50KSwgV1RGTW92ZShwcml2YXRl
RXhwb25lbnQpLCBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmltZUlu
Zm8pLCBXVEZNb3ZlKG90aGVyUHJpbWVJbmZvcykpOworICAgIGF1dG8gcHJpdmF0ZUtleUNvbXBv
bmVudHMgPSBDcnlwdG9LZXlSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlV2l0aEFkZGl0aW9u
YWxEYXRhKFdURk1vdmUoKm1vZHVsdXMpLCBXVEZNb3ZlKCpleHBvbmVudCksIFdURk1vdmUoKnBy
aXZhdGVFeHBvbmVudCksIFdURk1vdmUoZmlyc3RQcmltZUluZm8pLCBXVEZNb3ZlKHNlY29uZFBy
aW1lSW5mbyksIFdURk1vdmUob3RoZXJQcmltZUluZm9zKSk7CiAgICAgLy8gTm90aWNlOiBDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuIEl0IHNo
b3VsZCBub3QgaGF2ZSBhbnkgZWZmZWN0IGlmIGhhc2ggaXMgV1RGOjpudWxsb3B0LgogICAgIHJl
dHVybiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gudmFsdWVPcihDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgKnByaXZhdGVLZXlDb21wb25lbnRz
LCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKIH0KQEAgLTExOCwzMCArMTQwLDMwIEBAIEpzb25XZWJL
ZXkgQ3J5cHRvS2V5UlNBOjpleHBvcnRKd2soKSBjb24KICAgICBhdXRvIHJzYUNvbXBvbmVudHMg
PSBleHBvcnREYXRhKCk7CiAKICAgICAvLyBwdWJsaWMga2V5Ci0gICAgcmVzdWx0Lm4gPSBiYXNl
NjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+bW9kdWx1cygpKTsKLSAgICByZXN1bHQuZSA9IGJh
c2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRzLT5leHBvbmVudCgpKTsKKyAgICByZXN1bHQubiA9
IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJzYUNvbXBvbmVudHMtPm1vZHVsdXMoKSk7CisgICAg
cmVzdWx0LmUgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyc2FDb21wb25lbnRzLT5leHBvbmVu
dCgpKTsKICAgICBpZiAocnNhQ29tcG9uZW50cy0+dHlwZSgpID09IENyeXB0b0tleVJTQUNvbXBv
bmVudHM6OlR5cGU6OlB1YmxpYykKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIC8vIHBy
aXZhdGUga2V5Ci0gICAgcmVzdWx0LmQgPSBiYXNlNjRVUkxFbmNvZGUocnNhQ29tcG9uZW50cy0+
cHJpdmF0ZUV4cG9uZW50KCkpOworICAgIHJlc3VsdC5kID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJp
bmcocnNhQ29tcG9uZW50cy0+cHJpdmF0ZUV4cG9uZW50KCkpOwogICAgIGlmICghcnNhQ29tcG9u
ZW50cy0+aGFzQWRkaXRpb25hbFByaXZhdGVLZXlQYXJhbWV0ZXJzKCkpCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAKLSAgICByZXN1bHQucCA9IGJhc2U2NFVSTEVuY29kZShyc2FDb21wb25lbnRz
LT5maXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9yKTsKLSAgICByZXN1bHQucSA9IGJhc2U2NFVS
TEVuY29kZShyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5wcmltZUZhY3Rvcik7Ci0g
ICAgcmVzdWx0LmRwID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPmZpcnN0UHJpbWVJ
bmZvKCkuZmFjdG9yQ1JURXhwb25lbnQpOwotICAgIHJlc3VsdC5kcSA9IGJhc2U2NFVSTEVuY29k
ZShyc2FDb21wb25lbnRzLT5zZWNvbmRQcmltZUluZm8oKS5mYWN0b3JDUlRFeHBvbmVudCk7Ci0g
ICAgcmVzdWx0LnFpID0gYmFzZTY0VVJMRW5jb2RlKHJzYUNvbXBvbmVudHMtPnNlY29uZFByaW1l
SW5mbygpLmZhY3RvckNSVENvZWZmaWNpZW50KTsKKyAgICByZXN1bHQucCA9IGJhc2U2NFVSTEVu
Y29kZVRvU3RyaW5nKHJzYUNvbXBvbmVudHMtPmZpcnN0UHJpbWVJbmZvKCkucHJpbWVGYWN0b3Ip
OworICAgIHJlc3VsdC5xID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocnNhQ29tcG9uZW50cy0+
c2Vjb25kUHJpbWVJbmZvKCkucHJpbWVGYWN0b3IpOworICAgIHJlc3VsdC5kcCA9IGJhc2U2NFVS
TEVuY29kZVRvU3RyaW5nKHJzYUNvbXBvbmVudHMtPmZpcnN0UHJpbWVJbmZvKCkuZmFjdG9yQ1JU
RXhwb25lbnQpOworICAgIHJlc3VsdC5kcSA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJzYUNv
bXBvbmVudHMtPnNlY29uZFByaW1lSW5mbygpLmZhY3RvckNSVEV4cG9uZW50KTsKKyAgICByZXN1
bHQucWkgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyc2FDb21wb25lbnRzLT5zZWNvbmRQcmlt
ZUluZm8oKS5mYWN0b3JDUlRDb2VmZmljaWVudCk7CiAgICAgaWYgKHJzYUNvbXBvbmVudHMtPm90
aGVyUHJpbWVJbmZvcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAg
IFZlY3RvcjxSc2FPdGhlclByaW1lc0luZm8+IG90aDsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGlu
Zm8gOiByc2FDb21wb25lbnRzLT5vdGhlclByaW1lSW5mb3MoKSkgewogICAgICAgICBSc2FPdGhl
clByaW1lc0luZm8gb3RoZXJJbmZvOwotICAgICAgICBvdGhlckluZm8uciA9IGJhc2U2NFVSTEVu
Y29kZShpbmZvLnByaW1lRmFjdG9yKTsKLSAgICAgICAgb3RoZXJJbmZvLmQgPSBiYXNlNjRVUkxF
bmNvZGUoaW5mby5mYWN0b3JDUlRFeHBvbmVudCk7Ci0gICAgICAgIG90aGVySW5mby50ID0gYmFz
ZTY0VVJMRW5jb2RlKGluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQpOworICAgICAgICBvdGhlcklu
Zm8uciA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGluZm8ucHJpbWVGYWN0b3IpOworICAgICAg
ICBvdGhlckluZm8uZCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGluZm8uZmFjdG9yQ1JURXhw
b25lbnQpOworICAgICAgICBvdGhlckluZm8udCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGlu
Zm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQpOwogICAgICAgICBvdGguYXBwZW5kKFdURk1vdmUob3Ro
ZXJJbmZvKSk7CiAgICAgfQogICAgIHJlc3VsdC5vdGggPSBXVEZNb3ZlKG90aCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAkocmV2aXNpb24g
Mjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5NywxMCArMTk3LDEwIEBAIGJvb2wgQ3J5cHRvS2V5RUM6OnBs
YXRmb3JtQWRkRmllbGRFbGVtZW4KIAogICAgIGlmIChVTkxJS0VMWSgoc2l6ZSAhPSBwdWJsaWNL
ZXlTaXplKSAmJiAoc2l6ZSAhPSBwcml2YXRlS2V5U2l6ZSkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgandrLnggPSBXVEY6OmJhc2U2NFVSTEVuY29kZShyZXN1bHQuZGF0YSgpICsgMSwg
a2V5U2l6ZUluQnl0ZXMpOwotICAgIGp3ay55ID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUocmVzdWx0
LmRhdGEoKSArIGtleVNpemVJbkJ5dGVzICsgMSwga2V5U2l6ZUluQnl0ZXMpOworICAgIGp3ay54
ID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocmVzdWx0LmRhdGEoKSArIDEsIGtleVNpemVJbkJ5
dGVzKTsKKyAgICBqd2sueSA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHJlc3VsdC5kYXRhKCkg
KyBrZXlTaXplSW5CeXRlcyArIDEsIGtleVNpemVJbkJ5dGVzKTsKICAgICBpZiAoc2l6ZSA+IHB1
YmxpY0tleVNpemUpCi0gICAgICAgIGp3ay5kID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUocmVzdWx0
LmRhdGEoKSArIHB1YmxpY0tleVNpemUsIGtleVNpemVJbkJ5dGVzKTsKKyAgICAgICAgandrLmQg
PSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhyZXN1bHQuZGF0YSgpICsgcHVibGljS2V5U2l6ZSwg
a2V5U2l6ZUluQnl0ZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vbWFjL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMu
bW0JKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvU2VyaWFs
aXplZENyeXB0b0tleVdyYXBNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbXBvcnQgPENvbW1vbkNyeXB0by9Db21tb25TeW1tZXRyaWNLZXl3cmFwLmg+CiAjaW1wb3J0
IDxjcnRfZXh0ZXJucy5oPgogI2ltcG9ydCA8d3RmL0NyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaD4K
KyNpbXBvcnQgPHd0Zi9PcHRpb25hbC5oPgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2Uu
aD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2Vj
dXJpdHlTUEkuaD4KQEAgLTgwLDExICs4MSwxMSBAQCBzdGF0aWMgTlNTdHJpbmcqIG1hc3Rlcktl
eUFjY291bnROYW1lRm9yCiAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
Y29tLmFwcGxlLldlYktpdC5XZWJDcnlwdG8ubWFzdGVyKyVAIiwgYnVuZGxlSWRlbnRpZmllcl07
CiB9CiAKLXN0YXRpYyBib29sIGNyZWF0ZUFuZFN0b3JlTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90
PiYgbWFzdGVyS2V5RGF0YSkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGNyZWF0
ZUFuZFN0b3JlTWFzdGVyS2V5KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChoYXNQcm9jZXNzUHJp
dmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc0NyZWRlbnRpYWxzKSk7CiAKLSAgICBt
YXN0ZXJLZXlEYXRhLnJlc2l6ZShtYXN0ZXJLZXlTaXplSW5CeXRlcyk7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IG1hc3RlcktleURhdGEobWFzdGVyS2V5U2l6ZUluQnl0ZXMpOwogICAgIGF1dG8gcmMg
PSBDQ1JhbmRvbUdlbmVyYXRlQnl0ZXMobWFzdGVyS2V5RGF0YS5kYXRhKCksIG1hc3RlcktleURh
dGEuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChyYyA9PSBrQ0NTdWNjZXNzKTsKIApAQCAt
MTA3LDcgKzEwOCw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUFuZFN0b3JlTWFzdGVyS2V5KFZlY3QK
ICAgICBzdGF0dXMgPSBTZWNBY2Nlc3NDcmVhdGUoKF9fYnJpZGdlIENGU3RyaW5nUmVmKWxvY2Fs
aXplZEl0ZW1OYW1lLCBudWxscHRyLCAmYWNjZXNzUmVmKTsKICAgICBpZiAoc3RhdHVzKSB7CiAg
ICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IGNyZWF0ZSBhIHNlY3VyaXR5IGFjY2VzcyBvYmpl
Y3QgZm9yIHN0b3JpbmcgV2ViQ3J5cHRvIG1hc3RlciBrZXksIGVycm9yICVkIiwgKGludClzdGF0
dXMpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogICAgIFJldGFpblB0cjxTZWNBY2Nlc3NSZWY+IGFjY2VzcyA9IGFkb3B0Q0YoYWNj
ZXNzUmVmKTsKIApAQCAtMTIwLDE5ICsxMjEsMTggQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfQkVHSU4KIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogICAgIGlmIChz
dGF0dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3QgY3JlYXRlIGEgdHJ1c3RlZCBh
cHBsaWNhdGlvbiBvYmplY3QgZm9yIHN0b3JpbmcgV2ViQ3J5cHRvIG1hc3RlciBrZXksIGVycm9y
ICVkIiwgKGludClzdGF0dXMpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfQogICAgIFJldGFpblB0cjxTZWNUcnVzdGVkQXBwbGljYXRp
b25SZWY+IHRydXN0ZWRBcHAgPSBhZG9wdENGKHRydXN0ZWRBcHBSZWYpOwogCiAgICAgc3RhdHVz
ID0gU2VjQUNMU2V0Q29udGVudHMoYWNsLCAoX19icmlkZ2UgQ0ZBcnJheVJlZilAWyAoX19icmlk
Z2UgaWQpdHJ1c3RlZEFwcC5nZXQoKSBdLCAoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpbG9jYWxpemVk
SXRlbU5hbWUsIGtTZWNLZXljaGFpblByb21wdFJlcXVpcmVQYXNzcGhhc2UpOwogICAgIGlmIChz
dGF0dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3Qgc2V0IEFDTCBmb3IgV2ViQ3J5
cHRvIG1hc3RlciBrZXksIGVycm9yICVkIiwgKGludClzdGF0dXMpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogI2VuZGlmCiAKLSAg
ICBWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGE7Ci0gICAgYmFzZTY0RW5j
b2RlKG1hc3RlcktleURhdGEsIGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhKTsKKyAgICBhdXRv
IGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhID0gYmFzZTY0RW5jb2RlVG9WZWN0b3IobWFzdGVy
S2V5RGF0YSk7CiAKICAgICAvLyBDYW5ub3QgdXNlIGtTZWNDbGFzc0tleSBiZWNhdXNlIG9mIDxy
ZGFyOi8vcHJvYmxlbS8xNjA2ODIwNz4uCiAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0g
QHsKQEAgLTE1MCwxMiArMTUwLDEzIEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VO
RAogICAgIHN0YXR1cyA9IFNlY0l0ZW1BZGQoKENGRGljdGlvbmFyeVJlZilhdHRyaWJ1dGVzLCBu
dWxscHRyKTsKICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90
IHN0b3JlIFdlYkNyeXB0byBtYXN0ZXIga2V5LCBlcnJvciAlZCIsIChpbnQpc3RhdHVzKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBtYXN0ZXJLZXlEYXRhOwogfQogCi1zdGF0
aWMgYm9vbCBmaW5kTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5RGF0YSkKK3N0
YXRpYyBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGZpbmRNYXN0ZXJLZXkoKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNj
ZXNzQ3JlZGVudGlhbHMpKTsKIApAQCAtMTcwLDIwICsxNzEsMjUgQEAgc3RhdGljIGJvb2wgZmlu
ZE1hc3RlcktleShWZWN0b3I8dWludDhfdAogICAgIGlmIChzdGF0dXMpIHsKICAgICAgICAgaWYg
KHN0YXR1cyAhPSBlcnJTZWNJdGVtTm90Rm91bmQgJiYgc3RhdHVzICE9IGVyclNlY1VzZXJDYW5j
ZWxlZCkKICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ291bGQgbm90IGZpbmQgV2ViQ3J5cHRv
IG1hc3RlciBrZXkgaW4gS2V5Y2hhaW4sIGVycm9yICVkIiwgKGludClzdGF0dXMpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogICAg
IFJldGFpblB0cjxDRkRhdGFSZWY+IGtleURhdGEgPSBhZG9wdENGKGtleURhdGFSZWYpOwotCi0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGJhc2U2NEVuY29kZWRNYXN0ZXJLZXlEYXRhID0gdmVjdG9yRnJv
bU5TRGF0YSgoX19icmlkZ2UgTlNEYXRhICopa2V5RGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIGJh
c2U2NERlY29kZSgoY29uc3QgY2hhciopYmFzZTY0RW5jb2RlZE1hc3RlcktleURhdGEuZGF0YSgp
LCBiYXNlNjRFbmNvZGVkTWFzdGVyS2V5RGF0YS5zaXplKCksIG1hc3RlcktleURhdGEpOworICAg
IHJldHVybiBiYXNlNjREZWNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oQ0ZEYXRh
R2V0Qnl0ZVB0cihrZXlEYXRhLmdldCgpKSksIENGRGF0YUdldExlbmd0aChrZXlEYXRhLmdldCgp
KSk7CiB9CiAKLWJvb2wgZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShWZWN0b3I8dWludDhf
dD4mIG1hc3RlcktleSkKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVmYXVsdFdlYkNyeXB0
b01hc3RlcktleSgpCiB7Ci0gICAgaWYgKCFmaW5kTWFzdGVyS2V5KG1hc3RlcktleSkgJiYgIWNy
ZWF0ZUFuZFN0b3JlTWFzdGVyS2V5KG1hc3RlcktleSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBSRUxFQVNFX0FTU0VSVChtYXN0ZXJLZXkuc2l6ZSgpID09IG1hc3RlcktleVNpemVJbkJ5
dGVzKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYXV0byBtYXN0ZXJLZXkgPSBmaW5kTWFz
dGVyS2V5KCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWFzdGVyS2V5LT5zaXplKCkgPT0g
bWFzdGVyS2V5U2l6ZUluQnl0ZXMpOworICAgICAgICByZXR1cm4gbWFzdGVyS2V5OworICAgIH0K
KworICAgIGlmIChhdXRvIG1hc3RlcktleSA9IGNyZWF0ZUFuZFN0b3JlTWFzdGVyS2V5KCkpIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWFzdGVyS2V5LT5zaXplKCkgPT0gbWFzdGVyS2V5U2l6
ZUluQnl0ZXMpOworICAgICAgICByZXR1cm4gbWFzdGVyS2V5OworICAgIH0KKworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CiAKIGJvb2wgZGVsZXRlRGVmYXVsdFdlYkNyeXB0b01hc3Rlcktl
eSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcE9wZW5TU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9v
cGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwT3BlblNTTC5jcHAJKHJldmlzaW9uIDI3Nzcy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL1NlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwT3BlblNTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwxNCBAQAogI2lmIEVO
QUJMRShXRUJfQ1JZUFRPKQogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGdldERlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCitPcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogLy8gSW5pdGlhbGx5IHRo
ZXNlIGhlbHBlciBmdW5jdGlvbnMgd2VyZSBpbnRlbmRlZCB0byBwZXJmb3JtIEtFSyB3cmFwcGlu
ZyBhbmQgdW53cmFwcGluZywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRl
ckxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyTG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9GaWxlUmVhZGVyTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDI2ICszMzMsMTIg
QEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9UZXh0KCkKIAogdm9pZCBGaWxlUmVh
ZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRhVVJMKCkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJkYXRhOiIpOwotCiAgICAgaWYgKCFtX2J5
dGVzTG9hZGVkKSB7Ci0gICAgICAgIG1fc3RyaW5nUmVzdWx0ID0gYnVpbGRlci50b1N0cmluZygp
OworICAgICAgICBtX3N0cmluZ1Jlc3VsdCA9ICJkYXRhOiJfczsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChtX2RhdGFUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwotICAgIGVsc2UKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQobV9kYXRhVHlwZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI7YmFz
ZTY0LCIpOwotCi0gICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICBiYXNlNjRFbmNvZGUobV9yYXdE
YXRhLT5kYXRhKCksIG1fYnl0ZXNMb2FkZWQsIG91dCk7Ci0gICAgb3V0LmFwcGVuZCgnXDAnKTsK
LSAgICBidWlsZGVyLmFwcGVuZChvdXQuZGF0YSgpKTsKLQotICAgIG1fc3RyaW5nUmVzdWx0ID0g
YnVpbGRlci50b1N0cmluZygpOworICAgIG1fc3RyaW5nUmVzdWx0ID0gbWFrZVN0cmluZygiZGF0
YToiLCBtX2RhdGFUeXBlLmlzRW1wdHkoKSA/ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iIDog
bV9kYXRhVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChtX3Jhd0RhdGEtPmRhdGEoKSwg
bV9ieXRlc0xvYWRlZCkpOwogfQogCiBib29sIEZpbGVSZWFkZXJMb2FkZXI6OmlzQ29tcGxldGVk
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBv
cnQuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9N
UGF0Y2hTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI5LDE0ICs0MjksMTQgQEAgc3Rk
Ojp1bmlxdWVfcHRyPERPTVBhdGNoU3VwcG9ydDo6RGlnZXN0PgogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgU0hBMTo6RGlnZXN0IGF0dHJzSGFzaDsKICAgICAgICAgICAgIGF0dHJzU0hBMS5j
b21wdXRlSGFzaChhdHRyc0hhc2gpOwotICAgICAgICAgICAgZGlnZXN0LT5hdHRyc1NIQTEgPSBi
YXNlNjRFbmNvZGUoYXR0cnNIYXNoLmRhdGEoKSwgMTApOworICAgICAgICAgICAgZGlnZXN0LT5h
dHRyc1NIQTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhhdHRyc0hhc2guZGF0YSgpLCAxMCk7CiAg
ICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5hdHRyc1NIQTEpOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgU0hBMTo6RGlnZXN0IGhhc2g7CiAgICAgc2hhMS5jb21wdXRl
SGFzaChoYXNoKTsKLSAgICBkaWdlc3QtPnNoYTEgPSBiYXNlNjRFbmNvZGUoaGFzaC5kYXRhKCks
IDEwKTsKKyAgICBkaWdlc3QtPnNoYTEgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhoYXNoLmRhdGEo
KSwgMTApOwogICAgIGlmICh1bnVzZWROb2Rlc01hcCkKICAgICAgICAgdW51c2VkTm9kZXNNYXAt
PmFkZChkaWdlc3QtPnNoYTEsIGRpZ2VzdC5nZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCShyZXZpc2lvbiAy
Nzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDExICs1OTgsMTEgQEAgYm9vbCBJbnNwZWN0b3JG
cm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghbV9jbGllbnQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGlmICghYmFzZTY0
RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSwgZGF0YSkpCisgICAgYXV0byBkYXRhID0gYmFz
ZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSk7CisgICAgaWYgKCFkYXRhKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIo
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
IGRlY29kZXIoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOwogICAgIE9wdGlvbmFsPENlcnRp
ZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogICAgIGRlY29kZXIgPj4gY2VydGlmaWNhdGVJ
bmZvOwogICAgIGlmICghY2VydGlmaWNhdGVJbmZvKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCShyZXZpc2lvbiAyNzc3Mjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdW5zaWduZWQgTmV0d29ya1Jlc291cmNl
c0RhdGE6OlJlc291cmNlRAogICAgICAgICBtX2NvbnRlbnQgPSBtX2RlY29kZXItPmRlY29kZUFu
ZEZsdXNoKG1fZGF0YUJ1ZmZlci0+ZGF0YSgpLCBkYXRhTGVuZ3RoKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBtX2Jhc2U2NEVuY29kZWQgPSB0cnVlOwotICAgICAgICBtX2NvbnRlbnQgPSBiYXNl
NjRFbmNvZGUobV9kYXRhQnVmZmVyLT5kYXRhKCksIGRhdGFMZW5ndGgpOworICAgICAgICBtX2Nv
bnRlbnQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhtX2RhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUxl
bmd0aCk7CiAgICAgfQogCiAgICAgbV9kYXRhQnVmZmVyID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwOSw3ICsxNzA5LDcg
QEAgc3RhdGljIFN0cmluZyBjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saQogICAgIGF1dG8gY3J5
cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6
QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVzKGNvbnRlbnQu
ZGF0YSgpLCBjb250ZW50LnNpemUoKSk7CiAgICAgYXV0byBkaWdlc3QgPSBjcnlwdG9EaWdlc3Qt
PmNvbXB1dGVIYXNoKCk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1Ni0iLCBiYXNlNjRF
bmNvZGUoZGlnZXN0LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOworICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlZChkaWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgp
KSk7CiB9CiAKIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVp
bGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVz
TWFwKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3
b3JrQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpXZWJT
b2NrZXRGcmFtZT4gYgogICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJh
bWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAu
c2V0TWFzayhmcmFtZS5tYXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENv
ZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9h
ZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNlNjRFbmNvZGUoZnJhbWUucGF5bG9hZCwgZnJh
bWUucGF5bG9hZExlbmd0aCkpCisgICAgICAgIC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENvZGUg
PT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9hZCwg
ZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNlNjRFbmNvZGVUb1N0cmluZyhmcmFtZS5wYXlsb2Fk
LCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSkKICAgICAgICAgLnNldFBheWxvYWRMZW5ndGgoZnJhbWUu
cGF5bG9hZExlbmd0aCkKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KQEAgLTU4Niw3ICs1ODYsNyBA
QCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZURhCiAgICAgICAgIC8vIE9m
dGVuIHRoZSBkYXRhIGlzIHRleHQgYW5kIHdlIHdvdWxkIGhhdmUgYSBkZWNvZGVyLCBidXQgZm9y
IG5vbi10ZXh0IHdlIHdvbid0IGhhdmUgYSBkZWNvZGVyLgogICAgICAgICAvLyBTeW5jIFhIUnMg
bWF5IG5vdCBoYXZlIGEgY2FjaGVkIHJlc291cmNlLCB3aGlsZSBub24tc3luYyBYSFJzIHVzdWFs
bHkgdHJhbnNmZXIgZGF0YSBvdmVyIG9uIGNvbXBsZXRpb24uCiAgICAgICAgIGlmIChtX2xvYWRp
bmdYSFJTeW5jaHJvbm91c2x5ICYmIHJlc291cmNlRGF0YSAmJiAhcmVzb3VyY2VEYXRhLT5oYXNC
dWZmZXJlZERhdGEoKSAmJiAhcmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpKQotICAgICAg
ICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQocmVxdWVzdElkLCBiYXNl
NjRFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCksIHRydWUpOworICAgICAgICAgICAgbV9yZXNvdXJj
ZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQocmVxdWVzdElkLCBiYXNlNjRFbmNvZGVUb1N0cmlu
ZyhkYXRhLCBkYXRhTGVuZ3RoKSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmRhdGFSZWNlaXZlZChyZXF1ZXN0SWQsIHRpbWVzdGFtcCgpLCBkYXRhTGVuZ3RoLCBl
bmNvZGVkRGF0YUxlbmd0aCk7CkBAIC0xMDA0LDcgKzEwMDQsNyBAQCBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvCiAKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVy
IGVuY29kZXI7CiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvPjo6ZW5jb2RlKGVuY29kZXIsIGNlcnRpZmljYXRlLnZhbHVlKCkpOwotICAgIHJldHVy
biBiYXNlNjRFbmNvZGUoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOwor
ICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVy
LmJ1ZmZlclNpemUoKSk7CiB9CiAKIFdlYlNvY2tldCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3
ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYg
cmVxdWVzdElkKQpAQCAtMTIwMiwxMSArMTIwMiwxMSBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JOCiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkcyhX
VEZNb3ZlKGV4cGxpY2l0SGVhZGVycykpOwogICAgIH0KICAgICBpZiAoISFwb3N0RGF0YSkgewot
ICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29k
ZShwb3N0RGF0YSwgYnVmZmVyKSkKKyAgICAgICAgYXV0byBidWZmZXIgPSBiYXNlNjREZWNvZGUo
cG9zdERhdGEpOworICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBwb3N0RGF0YSJfcyk7CiAKLSAgICAg
ICAgcmVxdWVzdC5zZXRIVFRQQm9keShGb3JtRGF0YTo6Y3JlYXRlKGJ1ZmZlcikpOworICAgICAg
ICByZXF1ZXN0LnNldEhUVFBCb2R5KEZvcm1EYXRhOjpjcmVhdGUoV1RGTW92ZSgqYnVmZmVyKSkp
OwogICAgIH0KICAgICAvLyBGSVhNRTogZmlndXJlIG91dCBob3cgdG8gaWRlbnRpZnkgd2hlbiBh
IHJlcXVlc3QgaGFzIGJlZW4gb3ZlcnJpZGRlbiB3aGVuIHdlIGFkZCB0aGlzIHRvIHRoZSBmcm9u
dGVuZC4KICAgICBwZW5kaW5nUmVxdWVzdC0+Y29udGludWVXaXRoUmVxdWVzdChyZXF1ZXN0KTsK
QEAgLTEyNDIsMTEgKzEyNDIsMTEgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yTgogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gb3ZlcnJpZGVEYXRhOwogICAgIGlm
IChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAg
ICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpCisgICAgICAgIGF1dG8gYnVm
ZmVyID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQpOworICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBjb250
ZW50Il9zKTsKIAotICAgICAgICBvdmVycmlkZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShX
VEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICBvdmVycmlkZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShXVEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVsc2UKICAgICAgICAgb3ZlcnJpZGVEYXRh
ID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC51dGY4KCkuZGF0YSgpLCBjb250ZW50LnV0
ZjgoKS5sZW5ndGgoKSk7CiAKQEAgLTEyNjgsMTEgKzEyNjgsMTEgQEAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTgogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0
YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVm
ZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBidWZmZXIpKQorICAgICAg
ICBhdXRvIGJ1ZmZlciA9IGJhc2U2NERlY29kZShjb250ZW50KTsKKyAgICAgICAgaWYgKCFidWZm
ZXIpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUg
Z2l2ZW4gY29udGVudCJfcyk7CiAKLSAgICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShX
VEZNb3ZlKCpidWZmZXIpKTsKICAgICB9IGVsc2UKICAgICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwgY29udGVudC51dGY4KCkubGVuZ3RoKCkp
OwogCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2Fj
aGVkUmVzb3VyCiAgICAgICAgIH0KIAogICAgICAgICAqYmFzZTY0RW5jb2RlZCA9IHRydWU7Ci0g
ICAgICAgICpyZXN1bHQgPSBiYXNlNjRFbmNvZGUoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6
ZSgpKTsKKyAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1ZmZlci0+ZGF0
YSgpLCBidWZmZXItPnNpemUoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDcgKzExMyw3IEBAIGJvb2wgSW5zcGVjdG9yUGFnZUFnZW50OjpzaGFyZWRCdWZmZXJDb24KIGJv
b2wgSW5zcGVjdG9yUGFnZUFnZW50OjpkYXRhQ29udGVudChjb25zdCBjaGFyKiBkYXRhLCB1bnNp
Z25lZCBzaXplLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2
NEVuY29kZSwgU3RyaW5nKiByZXN1bHQpCiB7CiAgICAgaWYgKHdpdGhCYXNlNjRFbmNvZGUpIHsK
LSAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZShkYXRhLCBzaXplKTsKKyAgICAgICAgKnJl
c3VsdCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGRhdGEsIHNpemUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTExMDIsNyArMTEwMiw3IEBAIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPFN0cmluZz4gSW5zcGVjdG8KICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3Vs
ZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZvciBtYWluIGZyYW1lIl9zKTsKIAogICAgIFJldGFp
blB0cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigp
OwotICAgIHJldHVybiBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkp
LCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZVRvU3RyaW5nKENGRGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3Ro
KGJ1ZmZlci5nZXQoKSkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExOCw3ICszMTE4LDcgQEAgdW5z
aWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlUwogICAgICAgICBBU1NFUlQoIW5l
d1JlcXVlc3QuaXNOdWxsKCkpOwogCiAgICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIoKS0+YXBw
bGljYXRpb25DYWNoZUhvc3QoKS5tYXliZUxvYWRTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVy
cm9yLCByZXNwb25zZSwgZGF0YSkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7
CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwogICAgICAgICAgICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoKnRoaXMsIGlkZW50aWZpZXIsIG5ld1JlcXVlc3QsIGNsaWVudENyZWRlbnRpYWxQb2xpY3ks
IG9wdGlvbnMsIG9yaWdpbmFsUmVxdWVzdEhlYWRlcnMsIGVycm9yLCByZXNwb25zZSwgYnVmZmVy
KTsKICAgICAgICAgICAgIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZl
cikpOwogICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3Qo
KS5tYXliZUxvYWRGYWxsYmFja1N5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3Bv
bnNlLCBkYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCShy
ZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3ku
aAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdHJ1Y3QgRmV0Y2hPcHRpb25zOwog
Y2xhc3MgV0VCQ09SRV9FWFBPUlQgTG9hZGVyU3RyYXRlZ3kgewogcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UoRnJhbWUmLCBDYWNoZWRSZXNvdXJjZSYsIFJlc291cmNlUmVx
dWVzdCYmLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4mJik+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYsIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ2xpZW50Q3JlZGVudGlhbFBvbGlj
eSwgY29uc3QgRmV0Y2hPcHRpb25zJiwgY29uc3QgSFRUUEhlYWRlck1hcCYsIFJlc291cmNlRXJy
b3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWVMb2FkZXImLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIENsaWVudENyZWRlbnRp
YWxQb2xpY3ksIGNvbnN0IEZldGNoT3B0aW9ucyYsIGNvbnN0IEhUVFBIZWFkZXJNYXAmLCBSZXNv
dXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBwYWdlTG9hZENvbXBsZXRlZChQYWdlJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBicm93c2luZ0NvbnRleHRSZW1vdmVkKEZyYW1lJikgPSAwOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAJ
KHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Qcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwxMCArMTg5LDEwIEBAIGJvb2wg
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkVwaGVtZXJhbFMKIHsKICAgICAvLyBGSVhNRTogSW52
ZXN0aWdhdGUgaWYgd2UgY2FuIGRvIHdpdGggYSBzaW1wbGUgbGVuZ3RoIGNoZWNrIGluc3RlYWQg
b2YgZGVjb2RpbmcuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMTk0NQotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7Ci0gICAgaWYgKCFiYXNlNjRV
UkxEZWNvZGUobm9uY2UsIGRpZ2VzdCkpCisgICAgYXV0byBkaWdlc3QgPSBiYXNlNjRVUkxEZWNv
ZGUobm9uY2UpOworICAgIGlmICghZGlnZXN0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIGRpZ2VzdC5zaXplKCkgPT0gRXBoZW1lcmFsU291cmNlTm9uY2VSZXF1aXJlZE51bWJl
ck9mQnl0ZXM7CisgICAgcmV0dXJuIGRpZ2VzdC0+c2l6ZSgpID09IEVwaGVtZXJhbFNvdXJjZU5v
bmNlUmVxdWlyZWROdW1iZXJPZkJ5dGVzOwogfQogCiB2b2lkIFByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpzZXRFcGhlbWVyYWxTb3VyY2VOb25jZShFcGhlbWVyYWxTb3VyY2VOb25jZSYmIG5vbmNl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdC5jcHAJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OSwxNCArNjksMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAog
ICAgIGlmIChidWZmZXIucG9zaXRpb24oKSA9PSBiZWdpbkhhc2hWYWx1ZSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7CiAgICAgU3Ry
aW5nVmlldyBoYXNoVmFsdWUoYmVnaW5IYXNoVmFsdWUsIGJ1ZmZlci5wb3NpdGlvbigpIC0gYmVn
aW5IYXNoVmFsdWUpOwotICAgIGlmICghYmFzZTY0RGVjb2RlKGhhc2hWYWx1ZSwgZGlnZXN0LCBC
YXNlNjRWYWxpZGF0ZVBhZGRpbmcpKSB7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGhh
c2hWYWx1ZSwgZGlnZXN0KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
fQogCi0gICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0s
IFdURk1vdmUoZGlnZXN0KSB9OworICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NERlY29kZSho
YXNoVmFsdWUsIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZykpCisgICAgICAg
IHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyAqYWxnb3JpdGhtLCBXVEZNb3Zl
KCpkaWdlc3QpIH07CisKKyAgICBpZiAoYXV0byBkaWdlc3QgPSBiYXNlNjRVUkxEZWNvZGUoaGFz
aFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICph
bGdvcml0aG0sIFdURk1vdmUoKmRpZ2VzdCkgfTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiB9CiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9n
cmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBidWZmZXIpCkBAIC0xMjQs
MTMgKzEyNSwxMyBAQCBPcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnCiAK
IE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0JiBlbmNvZGVkRGlnZXN0KQogewotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7Ci0g
ICAgaWYgKCFiYXNlNjREZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdlc3QsIGRpZ2VzdCwgQmFzZTY0
VmFsaWRhdGVQYWRkaW5nKSkgewotICAgICAgICBpZiAoIWJhc2U2NFVSTERlY29kZShlbmNvZGVk
RGlnZXN0LmRpZ2VzdCwgZGlnZXN0KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgfQorICAgIGlmIChhdXRvIGRpZ2VzdCA9IGJhc2U2NERlY29kZShlbmNvZGVkRGlnZXN0
LmRpZ2VzdCwgQmFzZTY0RGVjb2RlT3B0aW9uczo6VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAg
cmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGVuY29kZWREaWdlc3QuYWxnb3Jp
dGhtLCBXVEZNb3ZlKCpkaWdlc3QpIH07CisKKyAgICBpZiAoYXV0byBkaWdlc3QgPSBiYXNlNjRV
UkxEZWNvZGUoZW5jb2RlZERpZ2VzdC5kaWdlc3QpKQorICAgICAgICByZXR1cm4gUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0IHsgZW5jb2RlZERpZ2VzdC5hbGdvcml0aG0sIFdURk1vdmUoKmRp
Z2VzdCkgfTsKIAotICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyBlbmNv
ZGVkRGlnZXN0LmFsZ29yaXRobSwgV1RGTW92ZShkaWdlc3QpIH07CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIH0KIAogc3RhdGljIFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG0gdG9Dcnlw
dG9EaWdlc3RBbGdvcml0aG0oUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0g
YWxnb3JpdGhtKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhU
TUxBcmNoaXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjcsOSArMTY3LDcgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gTUhUTUxBcmNoaXZlOjpnZW5l
cmF0ZQogCiAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IHJlc291cmNlcykgewogICAgICAgICBz
dHJpbmdCdWlsZGVyLmNsZWFyKCk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGVuZE9m
UmVzb3VyY2VCb3VuZGFyeSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJDb250ZW50
LVR5cGU6ICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyZXNvdXJjZS5taW1lVHlw
ZSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGVuZE9mUmVzb3VyY2VCb3VuZGFyeSwg
IkNvbnRlbnQtVHlwZTogIiwgcmVzb3VyY2UubWltZVR5cGUpOwogCiAgICAgICAgIGNvbnN0IGNo
YXIqIGNvbnRlbnRFbmNvZGluZyA9IG51bGxwdHI7CiAgICAgICAgIGlmIChNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShyZXNvdXJjZS5taW1lVHlwZSkgfHwg
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKHJlc291cmNlLm1p
bWVUeXBlKSkKQEAgLTE3NywyNyArMTc1LDIyIEBAIFJlZjxTaGFyZWRCdWZmZXI+IE1IVE1MQXJj
aGl2ZTo6Z2VuZXJhdGUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29udGVudEVuY29kaW5n
ID0gYmFzZTY0OwogCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxuQ29udGVudC1U
cmFuc2Zlci1FbmNvZGluZzogIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGNvbnRl
bnRFbmNvZGluZyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxuQ29udGVudC1M
b2NhdGlvbjogIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291cmNlLnVybC5z
dHJpbmcoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxuXHJcbiIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6
ICIsIGNvbnRlbnRFbmNvZGluZywgIlxyXG5Db250ZW50LUxvY2F0aW9uOiAiLCByZXNvdXJjZS51
cmwuc3RyaW5nKCksICJcclxuXHJcbiIpOwogCiAgICAgICAgIGFzY2lpU3RyaW5nID0gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoYXNj
aWlTdHJpbmcuZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgoKSk7CiAKICAgICAgICAgLy8gRklY
TUU6IGlkZWFsbHkgd2Ugd291bGQgZW5jb2RlIHRoZSBjb250ZW50IGFzIGEgc3RyZWFtIHdpdGhv
dXQgaGF2aW5nIHRvIGZldGNoIGl0IGFsbC4KLSAgICAgICAgY29uc3QgY2hhciogZGF0YSA9IHJl
c291cmNlLmRhdGEtPmRhdGEoKTsKKyAgICAgICAgYXV0byogZGF0YSA9IHJlc291cmNlLmRhdGEt
PmRhdGFBc1VJbnQ4UHRyKCk7CiAgICAgICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gcmVzb3VyY2Uu
ZGF0YS0+c2l6ZSgpOwotICAgICAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZERhdGE7CiAgICAgICAg
IGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgcXVvdGVkUHJpbnRhYmxlKSkgewotICAgICAg
ICAgICAgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgsIGVuY29kZWREYXRh
KTsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBxdW90ZWRQcmludGFibGVFbmNvZGUo
ZGF0YSwgZGF0YUxlbmd0aCk7CiAgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZChlbmNvZGVk
RGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUoKSk7CiAgICAgICAgICAgICBtaHRtbERhdGEt
PmFwcGVuZCgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJU
KCFzdHJjbXAoY29udGVudEVuY29kaW5nLCBiYXNlNjQpKTsKICAgICAgICAgICAgIC8vIFdlIGFy
ZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0cnVlIGJlbG93IGFzIGl0IHdvdWxkIGN1dCB0
aGUgbGluZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJlcXVpcmVzIENSTEZzLgotICAgICAgICAgICAg
YmFzZTY0RW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhKTsKKyAgICAgICAgICAg
IGF1dG8gZW5jb2RlZERhdGEgPSBiYXNlNjRFbmNvZGVUb1ZlY3RvcihkYXRhLCBkYXRhTGVuZ3Ro
KTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhpbXVtTGluZUxlbmd0aCA9IDc2OwogICAg
ICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKICAgICAgICAgICAgIHNpemVfdCBlbmNvZGVkRGF0
YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5jcHAJKHJldmlzaW9uIDI3Nzcy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDE2ICsxOTIsMTkgQEAgUmVmUHRyPEFyY2hpdmVSZXNv
dXJjZT4gTUhUTUxQYXJzZXI6OnBhcgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
LSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBz
d2l0Y2ggKG1pbWVIZWFkZXIuY29udGVudFRyYW5zZmVyRW5jb2RpbmcoKSkgewotICAgIGNhc2Ug
TUlNRUhlYWRlcjo6QmFzZTY0OgotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LT5k
YXRhKCksIGNvbnRlbnQtPnNpemUoKSwgZGF0YSkpIHsKKyAgICBjYXNlIE1JTUVIZWFkZXI6OkJh
c2U2NDogeworICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQt
PmRhdGFBc1VJbnQ4UHRyKCkgICAsIGNvbnRlbnQtPnNpemUoKSk7CisgICAgICAgIGlmICghZGVj
b2RlZERhdGEpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBiYXNlNjQgY29udGVu
dCBmb3IgTUhUTUwgcGFydC4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICB9CisgICAgICAgIGRhdGEgPSBXVEZNb3ZlKCpkZWNvZGVkRGF0YSk7CiAgICAgICAgIGJyZWFr
OworICAgIH0KICAgICBjYXNlIE1JTUVIZWFkZXI6OlF1b3RlZFByaW50YWJsZToKLSAgICAgICAg
cXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+c2l6ZSgpLCBk
YXRhKTsKKyAgICAgICAgZGF0YSA9IHF1b3RlZFByaW50YWJsZURlY29kZShjb250ZW50LT5kYXRh
QXNVSW50OFB0cigpLCBjb250ZW50LT5zaXplKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IE1JTUVIZWFkZXI6OlNldmVuQml0OgogICAgIGNhc2UgTUlNRUhlYWRlcjo6QmluYXJ5OgpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NvY29hL1ByaXZhdGVD
bGlja01lYXN1cmVtZW50Q29jb2EubW0JKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6
Y2FsY3VsYXRlQQogewogI2lmIEhBVkUoUlNBX0JTU0EpCiAgICAgewotICAgICAgICBWZWN0b3I8
dWludDhfdD4gc2VydmVyUHVibGljS2V5RGF0YTsKLSAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNv
ZGUoc2VydmVyUHVibGljS2V5QmFzZTY0VVJMLCBzZXJ2ZXJQdWJsaWNLZXlEYXRhKSkKKyAgICAg
ICAgYXV0byBzZXJ2ZXJQdWJsaWNLZXlEYXRhID0gYmFzZTY0VVJMRGVjb2RlKHNlcnZlclB1Ymxp
Y0tleUJhc2U2NFVSTCk7CisgICAgICAgIGlmICghc2VydmVyUHVibGljS2V5RGF0YSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byBzZXJ2ZXJQdWJsaWNLZXkgPSBhZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZlclB1YmxpY0tleURhdGEuZGF0
YSgpIGxlbmd0aDpzZXJ2ZXJQdWJsaWNLZXlEYXRhLnNpemUoKV0pOworICAgICAgICBhdXRvIHNl
cnZlclB1YmxpY0tleSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2Vy
dmVyUHVibGljS2V5RGF0YS0+ZGF0YSgpIGxlbmd0aDpzZXJ2ZXJQdWJsaWNLZXlEYXRhLT5zaXpl
KCldKTsKIAogICAgICAgICAvLyBGSVhNRSgyMjIwMTgpOiBDaGVjayBlcnJvci4KICAgICAgICAg
bV9zb3VyY2VVbmxpbmthYmxlVG9rZW4uYmxpbmRlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NSU0FC
U1NBVG9rZW5CbGluZGVySW5zdGFuY2UoKSBpbml0V2l0aFB1YmxpY0tleTpzZXJ2ZXJQdWJsaWNL
ZXkuZ2V0KCkgZXJyb3I6bnVsbHB0cl0pOwpAQCAtNTAsNyArNTAsNyBAQCBib29sIFByaXZhdGVD
bGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVBCiAgICAgaWYgKCFtX3NvdXJjZVVubGlua2FibGVU
b2tlbi53YWl0aW5nVG9rZW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fc291cmNl
VW5saW5rYWJsZVRva2VuLnZhbHVlQmFzZTY0VVJMID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoW21f
c291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBibGluZGVkTWVzc2FnZV0uYnl0ZXMs
IFttX3NvdXJjZVVubGlua2FibGVUb2tlbi53YWl0aW5nVG9rZW4gYmxpbmRlZE1lc3NhZ2VdLmxl
bmd0aCk7CisgICAgbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4udmFsdWVCYXNlNjRVUkwgPSBiYXNl
NjRVUkxFbmNvZGVUb1N0cmluZyhbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ud2FpdGluZ1Rva2Vu
IGJsaW5kZWRNZXNzYWdlXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdU
b2tlbiBibGluZGVkTWVzc2FnZV0ubGVuZ3RoKTsKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCk7CkBAIC02NSwxMCArNjUs
MTAgQEAgYm9vbCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6Y2FsY3VsYXRlQQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBzZXJ2ZXJSZXNw
b25zZURhdGE7Ci0gICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKHNlcnZlclJlc3BvbnNlQmFz
ZTY0VVJMLCBzZXJ2ZXJSZXNwb25zZURhdGEpKQorICAgICAgICBhdXRvIHNlcnZlclJlc3BvbnNl
RGF0YSA9IGJhc2U2NFVSTERlY29kZShzZXJ2ZXJSZXNwb25zZUJhc2U2NFVSTCk7CisgICAgICAg
IGlmICghc2VydmVyUmVzcG9uc2VEYXRhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBhdXRvIHNlcnZlclJlc3BvbnNlID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdp
dGhCeXRlczpzZXJ2ZXJSZXNwb25zZURhdGEuZGF0YSgpIGxlbmd0aDpzZXJ2ZXJSZXNwb25zZURh
dGEuc2l6ZSgpXSk7CisgICAgICAgIGF1dG8gc2VydmVyUmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNE
YXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNlcnZlclJlc3BvbnNlRGF0YS0+ZGF0YSgpIGxlbmd0
aDpzZXJ2ZXJSZXNwb25zZURhdGEtPnNpemUoKV0pOwogCiAgICAgICAgIC8vIEZJWE1FKDIyMjAx
OCk6IENoZWNrIGVycm9yLgogICAgICAgICBtX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRv
a2VuID0gW21fc291cmNlVW5saW5rYWJsZVRva2VuLndhaXRpbmdUb2tlbiBhY3RpdmF0ZVRva2Vu
V2l0aFNlcnZlclJlc3BvbnNlOnNlcnZlclJlc3BvbnNlLmdldCgpIGVycm9yOm51bGxwdHJdOwpA
QCAtNzcsOSArNzcsOSBAQCBib29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpjYWxjdWxhdGVB
CiAgICAgfQogCiAgICAgU291cmNlU2VjcmV0VG9rZW4gdG9rZW47Ci0gICAgdG9rZW4udG9rZW5C
YXNlNjRVUkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4u
cmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmJ5dGVzLCBbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4u
cmVhZHlUb2tlbiB0b2tlbkNvbnRlbnRdLmxlbmd0aCk7Ci0gICAgdG9rZW4ua2V5SURCYXNlNjRV
UkwgPSBXVEY6OmJhc2U2NFVSTEVuY29kZShbbV9zb3VyY2VVbmxpbmthYmxlVG9rZW4ucmVhZHlU
b2tlbiBrZXlJZF0uYnl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIGtl
eUlkXS5sZW5ndGgpOwotICAgIHRva2VuLnNpZ25hdHVyZUJhc2U2NFVSTCA9IFdURjo6YmFzZTY0
VVJMRW5jb2RlKFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHNpZ25hdHVyZV0u
Ynl0ZXMsIFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHNpZ25hdHVyZV0ubGVu
Z3RoKTsKKyAgICB0b2tlbi50b2tlbkJhc2U2NFVSTCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5n
KFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHRva2VuQ29udGVudF0uYnl0ZXMs
IFttX3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIHRva2VuQ29udGVudF0ubGVuZ3Ro
KTsKKyAgICB0b2tlbi5rZXlJREJhc2U2NFVSTCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFtt
X3NvdXJjZVVubGlua2FibGVUb2tlbi5yZWFkeVRva2VuIGtleUlkXS5ieXRlcywgW21fc291cmNl
VW5saW5rYWJsZVRva2VuLnJlYWR5VG9rZW4ga2V5SWRdLmxlbmd0aCk7CisgICAgdG9rZW4uc2ln
bmF0dXJlQmFzZTY0VVJMID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoW21fc291cmNlVW5saW5r
YWJsZVRva2VuLnJlYWR5VG9rZW4gc2lnbmF0dXJlXS5ieXRlcywgW21fc291cmNlVW5saW5rYWJs
ZVRva2VuLnJlYWR5VG9rZW4gc2lnbmF0dXJlXS5sZW5ndGgpOwogCiAgICAgbV9zb3VyY2VTZWNy
ZXRUb2tlbiA9IFdURk1vdmUodG9rZW4pOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw3ICszOCw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gQmFzZTY0VXRpbGl0aWVzOjpidG8KICAg
ICBpZiAoIXN0cmluZ1RvRW5jb2RlLmlzQWxsTGF0aW4xKCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAotICAgIHJldHVybiBiYXNlNjRFbmNv
ZGUoc3RyaW5nVG9FbmNvZGUubGF0aW4xKCkpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGVUb1N0
cmluZyhzdHJpbmdUb0VuY29kZS5sYXRpbjEoKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPFN0cmluZz4g
QmFzZTY0VXRpbGl0aWVzOjphdG9iKGNvbnN0IFN0cmluZyYgZW5jb2RlZFN0cmluZykKQEAgLTQ2
LDExICs0NiwxMSBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YXRvCiAg
ICAgaWYgKGVuY29kZWRTdHJpbmcuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IAotICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgaWYgKCFiYXNlNjREZWNvZGUoZW5jb2RlZFN0
cmluZywgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcgfCBCYXNlNjRJZ25vcmVTcGFjZXNBbmRO
ZXdMaW5lcyB8IEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYikpCisgICAgYXV0byBkZWNvZGVkRGF0
YSA9IGJhc2U2NERlY29kZShlbmNvZGVkU3RyaW5nLCB7IEJhc2U2NERlY29kZU9wdGlvbnM6OlZh
bGlkYXRlUGFkZGluZywgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3JlU3BhY2VzQW5kTmV3TGlu
ZXMsIEJhc2U2NERlY29kZU9wdGlvbnM6OkRpc2NhcmRWZXJ0aWNhbFRhYiB9KTsKKyAgICBpZiAo
IWRlY29kZWREYXRhKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3Rl
ckVycm9yIH07CiAKLSAgICByZXR1cm4gU3RyaW5nKG91dC5kYXRhKCksIG91dC5zaXplKCkpOwor
ICAgIHJldHVybiBTdHJpbmcoZGVjb2RlZERhdGEtPmRhdGEoKSwgZGVjb2RlZERhdGEtPnNpemUo
KSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2Miw5ICsx
ODYyLDggQEAgdm9pZCBQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZAogICAgIGlm
ICh1cmwucHJvdG9jb2xJc0RhdGEoKSAmJiB1cmwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiZGF0YTp0
ZXh0L2NzcztjaGFyc2V0PXV0Zi04O2Jhc2U2NCwiKSkgewogICAgICAgICBtX2RpZExvYWRVc2Vy
U3R5bGVTaGVldCA9IHRydWU7CiAKLSAgICAgICAgVmVjdG9yPGNoYXI+IHN0eWxlU2hlZXRBc1VU
Rjg7Ci0gICAgICAgIGlmIChiYXNlNjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVy
bC5zdHJpbmcoKS5zdWJzdHJpbmcoMzUpKSwgc3R5bGVTaGVldEFzVVRGOCwgQmFzZTY0SWdub3Jl
U3BhY2VzQW5kTmV3TGluZXMpKQotICAgICAgICAgICAgbV91c2VyU3R5bGVTaGVldCA9IFN0cmlu
Zzo6ZnJvbVVURjgoc3R5bGVTaGVldEFzVVRGOC5kYXRhKCksIHN0eWxlU2hlZXRBc1VURjguc2l6
ZSgpKTsKKyAgICAgICAgaWYgKGF1dG8gc3R5bGVTaGVldEFzVVRGOCA9IGJhc2U2NERlY29kZShk
ZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnN0cmluZygpLnN1YnN0cmluZygzNSkpLCBCYXNl
NjREZWNvZGVPcHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykpCisgICAgICAgICAgICBt
X3VzZXJTdHlsZVNoZWV0ID0gU3RyaW5nOjpmcm9tVVRGOChzdHlsZVNoZWV0QXNVVEY4LT5kYXRh
KCksIHN0eWxlU2hlZXRBc1VURjgtPnNpemUoKSk7CiAgICAgfQogCiAgICAgZm9yRWFjaERvY3Vt
ZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCwx
MSBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IGNoYXIqIGRhCiAgICAgQVNTRVJU
KGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQogCit2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5k
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXBwZW5kKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBsZW5ndGgpOworfQorCiB2b2lkIFNoYXJl
ZEJ1ZmZlcjo6YXBwZW5kKFZlY3RvcjxjaGFyPiYmIGRhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2hh
c0JlZW5Db21iaW5lZEludG9PbmVTZWdtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5oCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOwogICAgIHZvaWQg
YXBwZW5kKGNvbnN0IGNoYXIqLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpOwogICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxjaGFyPiYmKTsKIAogICAgIHZv
aWQgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAJKHJldmlzaW9u
IDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFy
a2V5L0NETUNsZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTIgKzc5LDE1IEBAIHN0
YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4KICAgICAgICAgICAgIGlmICgh
a2V5VmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBL
ZXlJRFR5cGUga2V5SUREYXRhOwotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUhhbmRs
ZVZhbHVlRGF0YTsKLSAgICAgICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQs
IHsga2V5SUREYXRhIH0pIHx8ICFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlWYWx1ZSwgeyBrZXlI
YW5kbGVWYWx1ZURhdGEgfSkpCisgICAgICAgICAgICBhdXRvIGtleUlERGF0YSA9IGJhc2U2NFVS
TERlY29kZShrZXlJRCk7CisgICAgICAgICAgICBpZiAoIWtleUlERGF0YSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAgICAgYXV0byBrZXlIYW5kbGVW
YWx1ZURhdGEgPSBiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUpOworICAgICAgICAgICAgaWYgKCFr
ZXlIYW5kbGVWYWx1ZURhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5SGFuZGxlOjpjcmVhdGUoQ0RNSW5zdGFuY2VT
ZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3ZlKGtl
eUhhbmRsZVZhbHVlRGF0YSkpKTsKKyAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZChLZXlI
YW5kbGU6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlLCBXVEZN
b3ZlKCprZXlJRERhdGEpLCBXVEZNb3ZlKCprZXlIYW5kbGVWYWx1ZURhdGEpKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSk7CiAgICAgaWYgKCF2YWxpZEZvcm1hdCkKQEAg
LTIxNSw4ICsyMTgsNyBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0Zy
CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50
IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1
ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGtleUlkQ291bnQ7IGkrKykgewotICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJh
c2U2NFVSTEVuY29kZSgmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKTsK
LSAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOworICAgICAgICBrZXlJZHNB
cnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxFbmNvZGVUb1N0cmluZygmZGF0YVtpbmRleF0sIENs
ZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKSk7CiAgICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpL
ZXlJRFNpemVJbkJ5dGVzOwogICAgIH0KIApAQCAtMjQzLDggKzI0NSw3IEBAIHN0YXRpYyBSZWY8
U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5SWRGcm8KICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgSlNP
TiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIG1lbWJlcnM6CiAgICAgLy8gImtpZHMi
CiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBp
cyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250YWluaW5n
IHRoZSBrZXkgSUQgdmFsdWUuCi0gICAgU3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNv
ZGUoaW5pdERhdGEuZGF0YSgpLCBpbml0RGF0YS5zaXplKCkpOwotICAgIGtleUlkc0FycmF5LT5w
dXNoU3RyaW5nKGtleUlkKTsKKyAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhiYXNlNjRVUkxF
bmNvZGVUb1N0cmluZyhpbml0RGF0YS5kYXRhKCksIGluaXREYXRhLnNpemUoKSkpOwogCiAgICAg
b2JqZWN0LT5zZXRBcnJheSgia2lkcyIsIFdURk1vdmUoa2V5SWRzQXJyYXkpKTsKICAgICBDU3Ry
aW5nIGpzb25EYXRhID0gb2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCk7CkBAIC01ODcsNyAr
NTg4LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlUwogICAgICAg
ICAgICAgYXV0byBhcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlTdG9yZSkgewogICAgICAgICAgICAgICAgIEFTU0VS
VChrZXktPmlkKCkuc2l6ZSgpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSk7Ci0gICAgICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNv
ZGUoa2V5LT5pZCgpLmRhdGEoKSwga2V5LT5pZCgpLnNpemUoKSkpOworICAgICAgICAgICAgICAg
IGFycmF5LT5wdXNoU3RyaW5nKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKGtleS0+aWQoKS5kYXRh
KCksIGtleS0+aWQoKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJvb3RP
YmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShhcnJheSkpOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBs
YXlTdHJlYW1pbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAJKHJldmlzaW9uIDI3
NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9D
RE1GYWlyUGxheVN0cmVhbWluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMywxMSArMTEzLDEx
IEBAIHN0YXRpYyBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+IGV4dHJhY3QKICAgICAgICAgaWYg
KCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFZlY3RvcjxjaGFyPiBz
aW5mRGF0YTsKLSAgICAgICAgaWYgKCFXVEY6OmJhc2U2NERlY29kZShrZXlJRCwgeyBzaW5mRGF0
YSB9LCBXVEY6OkJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSkKKyAgICAgICAgYXV0byBz
aW5mRGF0YSA9IGJhc2U2NERlY29kZShrZXlJRCwgQmFzZTY0RGVjb2RlT3B0aW9uczo6SWdub3Jl
U3BhY2VzQW5kTmV3TGluZXMpOworICAgICAgICBpZiAoIXNpbmZEYXRhKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgc2luZnMudW5jaGVja2VkQXBwZW5kKFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKFdURk1vdmUoc2luZkRhdGEpKSk7CisgICAgICAgIHNpbmZzLnVuY2hlY2tlZEFwcGVu
ZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKCpzaW5mRGF0YSkpKTsKICAgICB9CiAKICAg
ICByZXR1cm4gc2luZnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkocmV2aXNpb24g
Mjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTcxNSw3ICs3MTUsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3Ry
ZWFtaW5nCiAgICAgICAgIGlkZW50aWZpZXIgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoRGF0YTppbml0RGF0YS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZW5jb2Rpbmc6TlNVVEY4
U3RyaW5nRW5jb2RpbmddKTsKICNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERB
VEEpCiAgICAgZWxzZSBpZiAoaW5pdERhdGFUeXBlID09IEluaXREYXRhUmVnaXN0cnk6OmNlbmNO
YW1lKCkpIHsKLSAgICAgICAgU3RyaW5nIHBzc2hTdHJpbmcgPSBiYXNlNjRFbmNvZGUoaW5pdERh
dGEtPmRhdGEoKSwgaW5pdERhdGEtPnNpemUoKSk7CisgICAgICAgIGF1dG8gcHNzaFN0cmluZyA9
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGluaXREYXRhLT5kYXRhKCksIGluaXREYXRhLT5zaXplKCkp
OwogICAgICAgICBpbml0aWFsaXphdGlvbkRhdGEgPSBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRh
V2l0aEpTT05PYmplY3Q6QHsgQCJwc3NoIjogKE5TU3RyaW5nKilwc3NoU3RyaW5nIH0gb3B0aW9u
czpOU0pTT05Xcml0aW5nUHJldHR5UHJpbnRlZCBlcnJvcjpuaWxdOwogICAgIH0KICNlbmRpZgpA
QCAtODUwLDExICs4NTAsMTEgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVh
bWluZwogICAgICAgICAgICAgaWYgKCFrZXlJRFN0cmluZykKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlJRFZlY3RvcjsKLSAg
ICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGtleUlEU3RyaW5nLCBrZXlJRFZlY3RvcikpCisg
ICAgICAgICAgICBhdXRvIGtleUlEVmVjdG9yID0gYmFzZTY0RGVjb2RlKGtleUlEU3RyaW5nKTsK
KyAgICAgICAgICAgIGlmIChrZXlJRFZlY3RvcikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgICAgIGF1dG8ga2V5SUQgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZN
b3ZlKGtleUlEVmVjdG9yKSk7CisgICAgICAgICAgICBhdXRvIGtleUlEID0gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoV1RGTW92ZSgqa2V5SURWZWN0b3IpKTsKICAgICAgICAgICAgIGF1dG8gZm91bmRJ
bmRleCA9IG1fY3VycmVudFJlcXVlc3QudmFsdWUoKS5yZXF1ZXN0cy5maW5kTWF0Y2hpbmcoWyZd
IChhdXRvJiByZXF1ZXN0KSB7CiAgICAgICAgICAgICAgICAgYXV0byBrZXlJRHMgPSBrZXlJRHNG
b3JSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBrZXlJRHMu
ZmluZE1hdGNoaW5nKFsmXShjb25zdCBSZWY8U2hhcmVkQnVmZmVyPiYgaWQpIHsKQEAgLTg4NSwx
MCArODg1LDEwIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAg
ICAgICAgICAgICAgICBhdXRvIHBheWxvYWRTdHJpbmcgPSBwYXlsb2FkRmluZFJlc3VsdHMtPnZh
bHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZFN0cmluZykKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBwYXlsb2FkVmVjdG9yOwotICAgICAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2Rl
KHBheWxvYWRTdHJpbmcsIHBheWxvYWRWZWN0b3IpKQorICAgICAgICAgICAgICAgIGF1dG8gcGF5
bG9hZFZlY3RvciA9IGJhc2U2NERlY29kZShwYXlsb2FkU3RyaW5nKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXBheWxvYWRWZWN0b3IpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICBhdXRvIHBheWxvYWREYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
V1RGTW92ZShwYXlsb2FkVmVjdG9yKSk7CisgICAgICAgICAgICAgICAgYXV0byBwYXlsb2FkRGF0
YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoKnBheWxvYWRWZWN0b3IpKTsKICAgICAg
ICAgICAgICAgICBbcmVxdWVzdCBwcm9jZXNzQ29udGVudEtleVJlc3BvbnNlOltQQUw6OmdldEFW
Q29udGVudEtleVJlc3BvbnNlQ2xhc3MoKSBjb250ZW50S2V5UmVzcG9uc2VXaXRoRmFpclBsYXlT
dHJlYW1pbmdLZXlSZXNwb25zZURhdGE6cGF5bG9hZERhdGEtPmNyZWF0ZU5TRGF0YSgpLmdldCgp
XV07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExOTUsOCAr
MTE5NSw4IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAg
ICAgICAgIGF1dG8gZW50cnkgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAg
YXV0byYga2V5SUQgPSByZXF1ZXN0RGF0YS5maXJzdDsKICAgICAgICAgICAgIGF1dG8mIHBheWxv
YWQgPSByZXF1ZXN0RGF0YS5zZWNvbmQ7Ci0gICAgICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJr
ZXlJRCIsIGJhc2U2NEVuY29kZShrZXlJRC0+ZGF0YSgpLCBrZXlJRC0+c2l6ZSgpKSk7Ci0gICAg
ICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJwYXlsb2FkIiwgYmFzZTY0RW5jb2RlKHBheWxvYWQu
Z2V0KCkuYnl0ZXMsIHBheWxvYWQuZ2V0KCkubGVuZ3RoKSk7CisgICAgICAgICAgICBlbnRyeS0+
c2V0U3RyaW5nKCJrZXlJRCIsIGJhc2U2NEVuY29kZVRvU3RyaW5nKGtleUlELT5kYXRhKCksIGtl
eUlELT5zaXplKCkpKTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoInBheWxvYWQiLCBi
YXNlNjRFbmNvZGVUb1N0cmluZyhwYXlsb2FkLmdldCgpLmJ5dGVzLCBwYXlsb2FkLmdldCgpLmxl
bmd0aCkpOwogICAgICAgICAgICAgcmVxdWVzdEpTT04tPnB1c2hPYmplY3QoV1RGTW92ZShlbnRy
eSkpOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gcmVxdWVzdEJ1ZmZlciA9IHV0ZjhCdWZmZXIo
cmVxdWVzdEpTT04tPnRvSlNPTlN0cmluZygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMwLDEwICsxMzAsNyBAQCBTdHJpbmcgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6
OnRvRGF0YVVSCiAgICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biAiZGF0YTosIjsKIAotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVu
Y29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRh
KTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQs
IiwgYmFzZTY0RW5jb2RlZChlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgp
KSk7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEwICsxNzQsNyBAQCBzdGF0aWMgUmV0YWluUHRy
PENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0CiAKIFN0cmluZyBkYXRhVVJMKENGRGF0YVJlZiBkYXRh
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRh
OwotICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5n
dGgoZGF0YSksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSAr
ICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIs
IG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKENGRGF0YUdldEJ5dGVQdHIoZGF0
YSksIENGRGF0YUdldExlbmd0aChkYXRhKSkpOwogfQogCiBTdHJpbmcgZGF0YVVSTChjb25zdCBQ
aXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lv
biAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBz
dGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnROYW1lKCkKICAgICBHVUlEIGZvbnRVdWlkOwog
ICAgIENvQ3JlYXRlR3VpZCgmZm9udFV1aWQpOwogCi0gICAgU3RyaW5nIGZvbnROYW1lID0gYmFz
ZTY0RW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250
VXVpZCkpOworICAgIGF1dG8gZm9udE5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhyZWludGVy
cHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKICAgICBBU1NF
UlQoZm9udE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7CiAgICAgcmV0dXJuIGZvbnROYW1l
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGFDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHJldmlz
aW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3
IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVlRm9udE5hbWUoKQogICAgIEdVSUQgZm9udFV1
aWQ7CiAgICAgQ29DcmVhdGVHdWlkKCZmb250VXVpZCk7CiAKLSAgICBTdHJpbmcgZm9udE5hbWUg
PSBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlkKSwgc2l6ZW9m
KGZvbnRVdWlkKSk7CisgICAgYXV0byBmb250TmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOwogICAg
IEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpFKTsKICAgICByZXR1cm4gZm9u
dE5hbWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJh
dG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xL
ZXlHZW5lcmF0b3JNYWMubW0JKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIxOSw3
ICsyMTksNyBAQCBzdGF0aWMgU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nCiAgICAg
aWYgKFNlY0FzbjFFbmNvZGVJdGVtKGNvZGVyLCAmc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdl
LCBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VUZW1wbGF0ZSwgJmVuY29kZWRTaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2UpICE9IG5vRXJyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
LSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2UuRGF0YSwgZW5jb2RlZFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZS5MZW5ndGgpOworICAg
IHJldHVybiBiYXNlNjRFbmNvZGVUb1N0cmluZyhlbmNvZGVkU2lnbmVkUHVibGljS2V5QW5kQ2hh
bGxlbmdlLkRhdGEsIGVuY29kZWRTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UuTGVuZ3RoKTsK
IH0KIAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJKHJl
dmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJl
Z2lzdHJ5SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIFJl
ZjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlQmxvYlJlcwogICAgIHJldHVybiBibG9iUmVnaXN0cnko
KS5ibG9iUmVnaXN0cnlJbXBsKCktPmNyZWF0ZVJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVu
dCk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvYWRCbG9iUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdv
cmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCitzdGF0aWMgdm9pZCBsb2FkQmxvYlJlc291cmNl
U3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAg
IGF1dG8qIGJsb2JEYXRhID0gYmxvYlJlZ2lzdHJ5KCkuYmxvYlJlZ2lzdHJ5SW1wbCgpLT5nZXRC
bG9iRGF0YUZyb21VUkwocmVxdWVzdC51cmwoKSk7CiAgICAgQmxvYlJlc291cmNlSGFuZGxlOjps
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGJsb2JEYXRhLCByZXF1ZXN0LCBlcnJvciwgcmVzcG9u
c2UsIGRhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVz
b3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSB7CiAKIGNsYXNzIEJsb2JSZXNvdXJj
ZVN5bmNocm9ub3VzTG9hZGVyIDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKIHB1Ymxp
YzoKLSAgICBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiwgUmVz
b3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpOworICAgIEJsb2JSZXNvdXJjZVN5bmNocm9u
b3VzTG9hZGVyKFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4
X3Q+Jik7CiAKICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxl
KiwgUmVzb3VyY2VSZXNwb25zZSYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFs
OwogICAgIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3Im
KSBmaW5hbDsKQEAgLTg1LDEwICs4NSwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlc291
cmNlRXJyb3ImIG1fZXJyb3I7CiAgICAgUmVzb3VyY2VSZXNwb25zZSYgbV9yZXNwb25zZTsKLSAg
ICBWZWN0b3I8Y2hhcj4mIG1fZGF0YTsKKyAgICBWZWN0b3I8dWludDhfdD4mIG1fZGF0YTsKIH07
CiAKLUJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyOjpCbG9iUmVzb3VyY2VTeW5jaHJvbm91
c0xvYWRlcihSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFZlY3RvcjxjaGFyPiYgZGF0YSkKK0Jsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyOjpCbG9i
UmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKICAgICA6IG1fZXJyb3Io
ZXJyb3IpCiAgICAgLCBtX3Jlc3BvbnNlKHJlc3BvbnNlKQogICAgICwgbV9kYXRhKGRhdGEpCkBA
IC0xMjIsNyArMTIyLDcgQEAgdm9pZCBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6ZGlk
UgogCiAgICAgLy8gUmVhZCBhbGwgdGhlIGRhdGEuCiAgICAgbV9kYXRhLnJlc2l6ZShzdGF0aWNf
Y2FzdDxzaXplX3Q+KHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpKSk7Ci0gICAgc3Rh
dGljX2Nhc3Q8QmxvYlJlc291cmNlSGFuZGxlKj4oaGFuZGxlKS0+cmVhZFN5bmMobV9kYXRhLmRh
dGEoKSwgc3RhdGljX2Nhc3Q8aW50PihtX2RhdGEuc2l6ZSgpKSk7CisgICAgc3RhdGljX2Nhc3Q8
QmxvYlJlc291cmNlSGFuZGxlKj4oaGFuZGxlKS0+cmVhZFN5bmMocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4obV9kYXRhLmRhdGEoKSksIHN0YXRpY19jYXN0PGludD4obV9kYXRhLnNpemUoKSkpOwog
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKQEAgLTE0MSw3ICsxNDEsNyBAQCBSZWY8Qmxv
YlJlc291cmNlSGFuZGxlPiBCbG9iUmVzb3VyY2VIYW5kCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQmxvYlJlc291cmNlSGFuZGxlKGJsb2JEYXRhLCByZXF1ZXN0LCBjbGllbnQsIHRydWUpKTsK
IH0KIAotdm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
QmxvYkRhdGEqIGJsb2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291
cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+
JiBkYXRhKQordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoQmxvYkRhdGEqIGJsb2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJl
c291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVp
bnQ4X3Q+JiBkYXRhKQogewogICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
cmVxdWVzdC5odHRwTWV0aG9kKCksICJnZXQiKSkgewogICAgICAgICBlcnJvciA9IFJlc291cmNl
RXJyb3Iod2ViS2l0QmxvYlJlc291cmNlRG9tYWluLCBzdGF0aWNfY2FzdDxpbnQ+KEVycm9yOjpN
ZXRob2ROb3RBbGxvd2VkKSwgcmVzcG9uc2UudXJsKCksICJSZXF1ZXN0IG1ldGhvZCBtdXN0IGJl
IEdFVCIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3Vy
Y2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw3ICs0OCw3IEBAIGNsYXNzIEJsb2JSZXNvdXJjZUhhbmRsZSBmaW5hbCA6IHB1YmxpYyAK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEJsb2JSZXNvdXJjZUhhbmRsZT4gY3JlYXRlQXN5bmMo
QmxvYkRhdGEqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCop
OwogCi0gICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShCbG9iRGF0YSos
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNl
JiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KEJsb2JEYXRhKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJv
ciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgdm9p
ZCBzdGFydCgpOwogICAgIGludCByZWFkU3luYyhjaGFyKiwgaW50KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCShyZXZp
c2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRp
YWxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNy
ZWRlbnRpYWxCYXNlLmgiCiAKICNpbmNsdWRlICJDcmVkZW50aWFsLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvQmFzZTY0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTQsNCArOTUsMTAg
QEAgYm9vbCBDcmVkZW50aWFsQmFzZTo6Y29tcGFyZShjb25zdCBDcmVkZQogICAgIHJldHVybiBD
cmVkZW50aWFsOjpwbGF0Zm9ybUNvbXBhcmUoYSwgYik7CiB9CiAKK1N0cmluZyBDcmVkZW50aWFs
QmFzZTo6c2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpIGNvbnN0Cit7
CisgICAgYXV0byBjcmVkZW50aWFsU3RyaW5nRGF0YSA9IG1ha2VTdHJpbmcobV91c2VyLCAnOics
IG1fcGFzc3dvcmQpLnV0ZjgoKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQmFzaWMgIiwgYmFz
ZTY0RW5jb2RlZChjcmVkZW50aWFsU3RyaW5nRGF0YSkpOworfQorCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxCYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsQmFzZS5oCShyZXZpc2lv
biAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxC
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgZW51bSBDcmVkZW50aWFsUGVy
c2lzdGVuY2UgewogfTsKIAogY2xhc3MgQ3JlZGVudGlhbEJhc2UgewotCiBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICAgCkBAIC01Miw2ICs1MSw4
IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGNvbXBhcmUoY29u
c3QgQ3JlZGVudGlhbCYsIGNvbnN0IENyZWRlbnRpYWwmKTsKIAorICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKCkgY29uc3Q7
CisKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBDcmVkZW50aWFsQmFzZSgpOwogICAg
IFdFQkNPUkVfRVhQT1JUIENyZWRlbnRpYWxCYXNlKGNvbnN0IFN0cmluZyYgdXNlciwgY29uc3Qg
U3RyaW5nJiBwYXNzd29yZCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCShyZXZp
c2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxE
ZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDM2ICsxNDgsMjYgQEAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxEZWNvZGVUYXNrPiBjcmVhdAogICAgICk7CiB9CiAKLXN0YXRpYyBib29s
IGRlY29kZUJhc2U2NChEZWNvZGVUYXNrJiB0YXNrLCBNb2RlIG1vZGUpCitzdGF0aWMgT3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBkZWNvZGVCYXNlNjQoY29uc3QgRGVjb2RlVGFzayYgdGFzaywg
TW9kZSBtb2RlKQogewotICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7Ci0gICAgaWYgKG1vZGUgPT0g
TW9kZTo6Rm9yZ2l2aW5nQmFzZTY0KSB7Ci0gICAgICAgIGF1dG8gdW5lc2NhcGVkU3RyaW5nID0g
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRhc2suZW5jb2RlZERhdGEudG9TdHJpbmdXaXRob3V0
Q29weWluZygpKTsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUodW5lc2NhcGVkU3RyaW5nLCBi
dWZmZXIsIEJhc2U2NFZhbGlkYXRlUGFkZGluZyB8IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xp
bmVzIHwgQmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9IGVsc2UgeworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTW9kZTo6Rm9y
Z2l2aW5nQmFzZTY0OgorICAgICAgICByZXR1cm4gYmFzZTY0RGVjb2RlKGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlcyh0YXNrLmVuY29kZWREYXRhKSwgeyBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxp
ZGF0ZVBhZGRpbmcsIEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVz
LCBCYXNlNjREZWNvZGVPcHRpb25zOjpEaXNjYXJkVmVydGljYWxUYWJ9KTsKKworICAgIGNhc2Ug
TW9kZTo6TGVnYWN5OgogICAgICAgICAvLyBGaXJzdCB0cnkgYmFzZTY0dXJsLgotICAgICAgICBp
ZiAoIWJhc2U2NFVSTERlY29kZSh0YXNrLmVuY29kZWREYXRhLnRvU3RyaW5nV2l0aG91dENvcHlp
bmcoKSwgYnVmZmVyKSkgewotICAgICAgICAgICAgLy8gRGlkbid0IHdvcmssIHRyeSB1bmVzY2Fw
aW5nIGFuZCBkZWNvZGluZyBhcyBiYXNlNjQuCi0gICAgICAgICAgICBhdXRvIHVuZXNjYXBlZFN0
cmluZyA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0YXNrLmVuY29kZWREYXRhLnRvU3RyaW5n
V2l0aG91dENvcHlpbmcoKSk7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZSh1bmVzY2Fw
ZWRTdHJpbmcsIGJ1ZmZlciwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMgfCBCYXNlNjRE
aXNjYXJkVmVydGljYWxUYWIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQorICAgICAgICBpZiAoYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NFVSTERlY29kZSh0YXNr
LmVuY29kZWREYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVkRGF0YTsKKyAgICAgICAg
Ly8gRGlkbid0IHdvcmssIHRyeSB1bmVzY2FwaW5nIGFuZCBkZWNvZGluZyBhcyBiYXNlNjQuCisg
ICAgICAgIHJldHVybiBiYXNlNjREZWNvZGUoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRhc2su
ZW5jb2RlZERhdGEpLCB7IEJhc2U2NERlY29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xp
bmVzLCBCYXNlNjREZWNvZGVPcHRpb25zOjpEaXNjYXJkVmVydGljYWxUYWIgfSk7CiAgICAgfQot
ICAgIGJ1ZmZlci5zaHJpbmtUb0ZpdCgpOwotICAgIHRhc2sucmVzdWx0LmRhdGEgPSBXVEZNb3Zl
KGJ1ZmZlcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgZGVjb2RlRXNj
YXBlZChEZWNvZGVUYXNrJiB0YXNrKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBkZWNvZGVFc2Nh
cGVkKGNvbnN0IERlY29kZVRhc2smIHRhc2spCiB7CiAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5n
RnJvbUNoYXJzZXQodGFzay5yZXN1bHQuY2hhcnNldCk7CiAgICAgYXV0byYgZW5jb2RpbmcgPSBl
bmNvZGluZ0Zyb21DaGFyc2V0LmlzVmFsaWQoKSA/IGVuY29kaW5nRnJvbUNoYXJzZXQgOiBVVEY4
RW5jb2RpbmcoKTsKLSAgICBhdXRvIGJ1ZmZlciA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0Fz
RGF0YSh0YXNrLmVuY29kZWREYXRhLCBlbmNvZGluZyk7Ci0KLSAgICBidWZmZXIuc2hyaW5rVG9G
aXQoKTsKLSAgICB0YXNrLnJlc3VsdC5kYXRhID0gV1RGTW92ZShidWZmZXIpOworICAgIHJldHVy
biBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEodGFzay5lbmNvZGVkRGF0YSwgZW5jb2Rp
bmcpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8UmVzdWx0PiBkZWNvZGVTeW5jaHJvbm91c2x5KERl
Y29kZVRhc2smIHRhc2ssIE1vZGUgbW9kZSkKQEAgLTE4NiwxMSArMTc2LDE0IEBAIHN0YXRpYyBP
cHRpb25hbDxSZXN1bHQ+IGRlY29kZVN5bmNocm9ub3UKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIGlmICh0YXNrLmlzQmFzZTY0KSB7Ci0gICAgICAgIGlmICghZGVjb2RlQmFz
ZTY0KHRhc2ssIG1vZGUpKQorICAgICAgICBhdXRvIGRlY29kZWREYXRhID0gZGVjb2RlQmFzZTY0
KHRhc2ssIG1vZGUpOworICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgdGFzay5yZXN1bHQuZGF0YSA9IFdURk1vdmUoKmRl
Y29kZWREYXRhKTsKICAgICB9IGVsc2UKLSAgICAgICAgZGVjb2RlRXNjYXBlZCh0YXNrKTsKKyAg
ICAgICAgdGFzay5yZXN1bHQuZGF0YSA9IGRlY29kZUVzY2FwZWQodGFzayk7CiAKKyAgICB0YXNr
LnJlc3VsdC5kYXRhLnNocmlua1RvRml0KCk7CiAgICAgcmV0dXJuIFdURk1vdmUodGFzay5yZXN1
bHQpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxE
ZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9E
YXRhVVJMRGVjb2Rlci5oCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAgc3RydWN0IFJlc3VsdCB7CiAgICAgU3RyaW5nIG1pbWVUeXBlOwogICAgIFN0cmluZyBj
aGFyc2V0OwogICAgIFN0cmluZyBjb250ZW50VHlwZTsKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsK
KyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKIH07CiAKIHVzaW5nIERlY29kZUNvbXBsZXRpb25I
YW5kbGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkIChPcHRpb25hbDxSZXN1bHQ+KT47CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNw
cAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lk
IFJlc291cmNlSGFuZGxlOjpmYWlsdXJlVGltZXJGaXJlZCgpCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJl
c291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNo
YXI+JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVz
b3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWlu
dDhfdD4mIGRhdGEpCiB7CiAgICAgaWYgKGF1dG8gY29uc3RydWN0b3IgPSBidWlsdGluUmVzb3Vy
Y2VIYW5kbGVTeW5jaHJvbm91c0xvYWRlck1hcCgpLmdldChyZXF1ZXN0LnVybCgpLnByb3RvY29s
KCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkgewogICAgICAgICBjb25zdHJ1Y3Rvcihjb250
ZXh0LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgZXJyb3IsIHJlc3BvbnNlLCBk
YXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmgJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBA
QCBjbGFzcyBDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTsKIGNsYXNzIFJlc291cmNlSGFuZGxl
IDogcHVibGljIFJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGU+LCBwdWJsaWMgQXV0aGVudGljYXRp
b25DbGllbnQgewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+IGNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNo
b3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3
b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxz
UG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYg
ZGF0YSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hy
b25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVzb3Vy
Y2VIYW5kbGUoKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQ0ZVUkxDT05ORUNUSU9O
KQpAQCAtMTkzLDcgKzE5Myw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFJlZjxSZXNvdXJjZUhh
bmRsZT4gKCpCdWlsdGluQ29uc3RydWN0b3IpKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0
ZXJCdWlsdGluQ29uc3RydWN0b3IoY29uc3QgQXRvbVN0cmluZyYgcHJvdG9jb2wsIEJ1aWx0aW5D
b25zdHJ1Y3Rvcik7CiAKLSAgICB0eXBlZGVmIHZvaWQgKCpCdWlsdGluU3luY2hyb25vdXNMb2Fk
ZXIpKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PGNoYXI+JiBkYXRhKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpCdWlsdGluU3luY2hyb25vdXNMb2Fk
ZXIpKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PHVpbnQ4X3Q+JiBkYXRhKTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJ1aWx0aW5TeW5jaHJv
bm91c0xvYWRlcihjb25zdCBBdG9tU3RyaW5nJiBwcm90b2NvbCwgQnVpbHRpblN5bmNocm9ub3Vz
TG9hZGVyKTsKIAogcHJvdGVjdGVkOgpAQCAtMjEzLDcgKzIxMyw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUpOwogCiAgICAgYm9vbCBzdGFydCgpOwot
ICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3Jr
aW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0
YSk7CisgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5l
dHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhKTsKIAogICAgIHZvaWQgcmVmQXV0aGVudGljYXRpb25DbGllbnQoKSBvdmVycmlk
ZSB7IHJlZigpOyB9CiAgICAgdm9pZCBkZXJlZkF1dGhlbnRpY2F0aW9uQ2xpZW50KCkgb3ZlcnJp
ZGUgeyBkZXJlZigpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5
bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMjc3
NzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRl
ckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBTeW5jaHJv
bm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZQogCiB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xp
ZW50OjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgaW50IC8qZW5jb2RlZERhdGFMZW5ndGgqLykKIHsKLSAgICBtX2RhdGEu
YXBwZW5kKGRhdGEsIGxlbmd0aCk7CisgICAgbV9kYXRhLmFwcGVuZChyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoKTsKIH0KIAogdm9pZCBTeW5jaHJvbm91c0xv
YWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hy
b25vdXNMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0QWxsb3dTdG9yZWRDcmVk
ZW50aWFscyhib29sIGFsbG93KSB7IG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IGFsbG93OyB9
CiAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBt
X3Jlc3BvbnNlOyB9Ci0gICAgVmVjdG9yPGNoYXI+JiBtdXRhYmxlRGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgIFZlY3Rvcjx1aW50OF90PiYgbXV0YWJsZURhdGEoKSB7IHJldHVybiBtX2Rh
dGE7IH0KICAgICBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZXJyb3I7IH0KICAgICBTeW5jaHJvbm91c0xvYWRlck1lc3NhZ2VRdWV1ZSYgbWVzc2FnZVF1ZXVl
KCkgeyByZXR1cm4gbV9tZXNzYWdlUXVldWUuZ2V0KCk7IH0KIApAQCAtNzUsNyArNzUsNyBAQCBw
cml2YXRlOgogCiAgICAgYm9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMgeyBmYWxzZSB9Owog
ICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKLSAgICBWZWN0b3I8Y2hhcj4gbV9kYXRh
OworICAgIFZlY3Rvcjx1aW50OF90PiBtX2RhdGE7CiAgICAgUmVzb3VyY2VFcnJvciBtX2Vycm9y
OwogICAgIFJlZjxTeW5jaHJvbm91c0xvYWRlck1lc3NhZ2VRdWV1ZT4gbV9tZXNzYWdlUXVldWU7
CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSw3IEBAIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgUmV0
YWluUHRyPENGRGF0YVIKIAogc3RhdGljIHZvaWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFk
ZXIoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFs
KQogewotICAgIFN0cmluZyBhdXRoZW50aWNhdGlvbkhlYWRlciA9ICJCYXNpYyAiICsgYmFzZTY0
RW5jb2RlKFN0cmluZyhjcmVkZW50aWFsLnVzZXIoKSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dv
cmQoKSkudXRmOCgpKTsKLQotICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFk
ZXJOYW1lOjpBdXRob3JpemF0aW9uLCBhdXRoZW50aWNhdGlvbkhlYWRlcik7CisgICAgcmVxdWVz
dC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGNyZWRl
bnRpYWwuc2VyaWFsaXphdGlvbkZvckJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcigpKTsKIH0KIAog
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQpAQCAtNTI0
LDcgKzUyMiw3IEBAIHN0YXRpYyB2b2lkIGVtcHR5UGVyZm9ybSh2b2lkKikKIHsKIH0KIAotdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdv
cmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0
b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVy
cm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0
YSkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVz
b3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWlu
dDhfdD4mIGRhdGEpCiB7CiAgICAgTE9HKE5ldHdvcmssICJSZXNvdXJjZUhhbmRsZTo6cGxhdGZv
cm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5OiVzIHNzdG9yZWRDcmVkZW50aWFsc1BvbGljeTol
dSIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1
cmwuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDcg
KzM2OCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlc3RhcnRSZXF1ZXN0V2l0aEMKICAgICBk
LT5tX2N1cmxSZXF1ZXN0LT5zdGFydCgpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0
Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxz
UG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCghcmVxdWVzdC5pc0VtcHR5KCkpOwpA
QCAtNTYyLDkgKzU2Miw5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwoKQog
CiAgICAgICAgIC8vIGRpZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYXVzZSB0aGUgY2xpZW50IHRv
IGJlIGRlbGV0ZWQuCiAgICAgICAgIGlmIChjbGllbnQoKSkgewotICAgICAgICAgICAgVmVjdG9y
PGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmIChiYXNlNjREZWNvZGUoZGF0YSwgb3V0LCBCYXNl
NjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykgJiYgb3V0LnNpemUoKSA+IDApCi0gICAgICAgICAg
ICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIodGhpcywgU2hhcmVkQnVmZmVyOjpjcmVh
dGUob3V0LmRhdGEoKSwgb3V0LnNpemUoKSksIG9yaWdpbmFsU2l6ZSk7CisgICAgICAgICAgICBh
dXRvIGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGRhdGEsIEJhc2U2NERlY29kZU9wdGlvbnM6
Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKTsKKyAgICAgICAgICAgIGlmIChkZWNvZGVkRGF0YSAm
JiBkZWNvZGVkRGF0YS0+c2l6ZSgpID4gMCkKKyAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlk
UmVjZWl2ZUJ1ZmZlcih0aGlzLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkZWNvZGVkRGF0YS0+ZGF0
YSgpLCBkZWNvZGVkRGF0YS0+c2l6ZSgpKSwgb3JpZ2luYWxTaXplKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyhjaGFyc2V0KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291
cmNlSGFuZGxlTWFjLm1tCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NjcsOSArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBzdGF0aWMgdm9pZCBhcHBs
eUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcihSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7Ci0gICAgU3RyaW5nIGF1dGhlbnRpY2F0aW9uSGVh
ZGVyID0gIkJhc2ljICIgKyBiYXNlNjRFbmNvZGUoU3RyaW5nKGNyZWRlbnRpYWwudXNlcigpICsg
IjoiICsgY3JlZGVudGlhbC5wYXNzd29yZCgpKS51dGY4KCkpOwotCi0gICAgcmVxdWVzdC5zZXRI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGF1dGhlbnRpY2F0
aW9uSGVhZGVyKTsKKyAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6QXV0aG9yaXphdGlvbiwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9uRm9yQmFzaWNBdXRob3Jp
emF0aW9uSGVhZGVyKCkpOwogfQogCiBzdGF0aWMgTlNPcGVyYXRpb25RdWV1ZSAqb3BlcmF0aW9u
UXVldWVGb3JBc3luY0NsaWVudHMoKQpAQCAtMzUyLDcgKzM1MCw3IEBAIENGU3RyaW5nUmVmIFJl
c291cmNlSGFuZGxlOjpzeW5jaHJvbm91c0wKICAgICByZXR1cm4gQ0ZTVFIoIldlYkNvcmVTeW5j
aHJvbm91c0xvYWRlclJ1bkxvb3BNb2RlIik7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBs
YXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFJlc291cmNlSGFu
ZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAg
IExPRyhOZXR3b3JrLCAiUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hy
b25vdXNseTolQCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeToldSIsIHJlcXVlc3QubnNVUkxSZXF1
ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KSk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhh
bmRsZVNvdXAuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTI3LDcgKzEyNyw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG8K
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxh
dGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3Im
LCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JikKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6
OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVy
cm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjx1aW50OF90PiYpCiB7CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAkocmV2aXNpb24g
Mjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3
b3JrU2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgZGlnZXN0LT5hZGRCeXRlcyhjZXJ0aWZpY2F0ZURhdGEtPmRhdGEsIGNlcnRpZmlj
YXRlRGF0YS0+bGVuKTsKIAogICAgICAgICBhdXRvIGhhc2ggPSBkaWdlc3QtPmNvbXB1dGVIYXNo
KCk7Ci0gICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oaGFzaC5kYXRhKCkpLCBoYXNoLnNpemUoKSk7CisgICAgICAgIHJldHVybiBiYXNlNjRF
bmNvZGVUb1N0cmluZyhoYXNoKTsKICAgICB9CiAKICAgICBIYXNoU2V0PFN0cmluZz4gbV9jZXJ0
aWZpY2F0ZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2Fw
ZVNlcXVlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
RGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1NCwxMSArMTU0LDExIEBAIFN0cmluZyBkZWNvZGVFc2NhcGVTZXF1ZW5jZXMoU3RyaW5n
VmlldyAKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLWlubGluZSBWZWN0b3I8
Y2hhcj4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKFN0cmluZ1ZpZXcgc3RyaW5nLCBj
b25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQoraW5saW5lIFZlY3Rvcjx1aW50OF90PiBkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHRF
bmNvZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgQVNTRVJUKGVuY29kaW5nLmlzVmFsaWQoKSk7CiAK
LSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAg
ICAgc2l6ZV90IGRlY29kZWRQb3NpdGlvbiA9IDA7CiAgICAgc2l6ZV90IHNlYXJjaFBvc2l0aW9u
ID0gMDsKICAgICB3aGlsZSAodHJ1ZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9RdW90ZWRQcmludGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4aW11bUxpbmVMZW5n
dGggPSAKIAogc3RhdGljIGNvbnN0IGNoYXIgY3JsZkxpbmVFbmRpbmdbXSA9ICJcclxuIjsKIAot
c3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4KGNvbnN0IGNoYXIqIGlucHV0
LCBzaXplX3QgaW5wdXRMZW5ndGgsIHNpemVfdCBpbmRleCkKK3N0YXRpYyBzaXplX3QgbGVuZ3Ro
T2ZMaW5lRW5kaW5nQXRJbmRleChjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVu
Z3RoLCBzaXplX3QgaW5kZXgpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaW5kZXggPCBpbnB1dExlbmd0aCk7CiAgICAgaWYgKGlucHV0W2luZGV4XSA9PSAnXG4nKQpA
QCAtNTUsMTkgKzU1LDE5IEBAIHN0YXRpYyBzaXplX3QgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRl
eCgKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3Qg
VmVjdG9yPGNoYXI+JiBpbiwgVmVjdG9yPGNoYXI+JiBvdXQpCitWZWN0b3I8dWludDhfdD4gcXVv
dGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCiB7Ci0gICAg
cXVvdGVkUHJpbnRhYmxlRW5jb2RlKGluLmRhdGEoKSwgaW4uc2l6ZSgpLCBvdXQpOworICAgIHJl
dHVybiBxdW90ZWRQcmludGFibGVFbmNvZGUoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkpOwog
fQogCi12b2lkIHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBjaGFyKiBpbnB1dCwgc2l6ZV90
IGlucHV0TGVuZ3RoLCBWZWN0b3I8Y2hhcj4mIG91dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQ
cmludGFibGVFbmNvZGUoY29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBpbnB1dExlbmd0aCkK
IHsKLSAgICBvdXQuY2xlYXIoKTsKLSAgICBvdXQucmVzZXJ2ZUNhcGFjaXR5KGlucHV0TGVuZ3Ro
KTsKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0OworICAgIG91dC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGlucHV0TGVuZ3RoKTsKICAgICBzaXplX3QgY3VycmVudExpbmVMZW5ndGggPSAwOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7ICsraSkgewogICAgICAgICBib29s
IGlzTGFzdENoYXJhY3RlciA9IChpID09IGlucHV0TGVuZ3RoIC0gMSk7Ci0gICAgICAgIGNoYXIg
Y3VycmVudENoYXJhY3RlciA9IGlucHV0W2ldOworICAgICAgICB1aW50OF90IGN1cnJlbnRDaGFy
YWN0ZXIgPSBpbnB1dFtpXTsKICAgICAgICAgYm9vbCByZXF1aXJlc0VuY29kaW5nID0gZmFsc2U7
CiAgICAgICAgIC8vIEFsbCBub24tcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMgYW5kID0gcmVx
dWlyZSBlbmNvZGluZy4KICAgICAgICAgaWYgKChjdXJyZW50Q2hhcmFjdGVyIDwgJyAnIHx8IGN1
cnJlbnRDaGFyYWN0ZXIgPiAnficgfHwgY3VycmVudENoYXJhY3RlciA9PSAnPScpICYmIGN1cnJl
bnRDaGFyYWN0ZXIgIT0gJ1x0JykKQEAgLTExMiwxOCArMTEyLDIwIEBAIHZvaWQgcXVvdGVkUHJp
bnRhYmxlRW5jb2RlKGNvbnN0IGNoYXIqIGkKICAgICAgICAgICAgIGN1cnJlbnRMaW5lTGVuZ3Ro
Kys7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4gb3V0OwogfQogCi12b2lkIHF1b3Rl
ZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBWZWN0b3I8Y2hhcj4mIG91
dCkKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBpbnB1dCkKIHsKLSAgICBxdW90ZWRQcmludGFibGVEZWNvZGUoaW4uZGF0YSgpLCBp
bi5zaXplKCksIG91dCk7CisgICAgcmV0dXJuIHF1b3RlZFByaW50YWJsZURlY29kZShpbnB1dC5k
YXRhKCksIGlucHV0LnNpemUoKSk7CiB9CiAKLXZvaWQgcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoLCBWZWN0b3I8Y2hhcj4mIG91dCkKK1Zl
Y3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IGRhdGFMZW5ndGgpCiB7Ci0gICAgb3V0LmNsZWFyKCk7CisgICAgVmVjdG9yPHVpbnQ4
X3Q+IG91dDsKICAgICBpZiAoIWRhdGFMZW5ndGgpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIG91dDsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytp
KSB7CiAgICAgICAgIGNoYXIgY3VycmVudENoYXJhY3RlciA9IGRhdGFbaV07CkBAIC0xNDksOCAr
MTUxLDkgQEAgdm9pZCBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgY2hhciogZAogICAgICAg
ICAgICAgb3V0LmFwcGVuZChsb3dlckNoYXJhY3Rlcik7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQotICAgICAgICBvdXQuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KHRvQVNDSUlI
ZXhWYWx1ZSh1cHBlckNoYXJhY3RlciwgbG93ZXJDaGFyYWN0ZXIpKSk7CisgICAgICAgIG91dC5h
cHBlbmQodG9BU0NJSUhleFZhbHVlKHVwcGVyQ2hhcmFjdGVyLCBsb3dlckNoYXJhY3RlcikpOwog
ICAgIH0KKyAgICByZXR1cm4gb3V0OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDE5ICsyOCwxNiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFF1
b3RlZFByaW50YWJsZV9oCi0jZGVmaW5lIFF1b3RlZFByaW50YWJsZV9oCisjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgVmVjdG9yPGNoYXI+
Jik7Ci12b2lkIHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCBjaGFyKiwgc2l6ZV90LCBWZWN0
b3I8Y2hhcj4mKTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+Jik7CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2Rl
KGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogCi12b2lkIHF1b3RlZFByaW50YWJsZURlY29kZShj
b25zdCBWZWN0b3I8Y2hhcj4mLCBWZWN0b3I8Y2hhcj4mKTsKLXZvaWQgcXVvdGVkUHJpbnRhYmxl
RGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QsIFZlY3RvcjxjaGFyPiYpOworVmVjdG9yPHVpbnQ4
X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKK1ZlY3Rv
cjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFF1b3RlZFByaW50YWJsZV9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9yV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJh
dG9yV2luLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDggKzgwLDgg
QEAgU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZwogICAgICAgICBpZiAo
IUNyeXB0U2lnbkFuZEVuY29kZUNlcnRpZmljYXRlKGhDb250ZXh0LCBBVF9LRVlFWENIQU5HRSwg
WDUwOV9BU05fRU5DT0RJTkcsIFg1MDlfS0VZR0VOX1JFUVVFU1RfVE9fQkVfU0lHTkVELCAmcmVx
dWVzdEluZm8sICZzaWduQWxnbywgMCwgcmVpbnRlcnByZXRfY2FzdDxMUEJZVEU+KGJpbmFyeS5k
YXRhKCkpLCAmZHdFbmNvZGVkTGVuZ3RoKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
IGtleVN0cmluZyA9IGJhc2U2NEVuY29kZShiaW5hcnkpOwotICAgIH0gd2hpbGUoMCk7CisgICAg
ICAgIGtleVN0cmluZyA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJpbmFyeSk7CisgICAgfSB3aGls
ZSAoMCk7CiAKICAgICBpZiAocFB1YkluZm8pCiAgICAgICAgIGZhc3RGcmVlKHBQdWJJbmZvKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9y
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2Vy
dmVyL1NXU2NyaXB0U3RvcmFnZS5jcHAJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTY3JpcHRTdG9yYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNyArNTYsNyBAQCBTdHJpbmcgU1dTY3JpcHRTdG9yYWdlOjpzaGEySGFzaChj
b25zdCBTCiAgICAgYXV0byBpbnB1dFV0ZjggPSBpbnB1dC51dGY4KCk7CiAgICAgY3J5cHRvLT5h
ZGRCeXRlcyhpbnB1dFV0ZjguZGF0YSgpLCBpbnB1dFV0ZjgubGVuZ3RoKCkpOwogICAgIGF1dG8g
aGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKLSAgICByZXR1cm4gV1RGOjpiYXNlNjRVUkxF
bmNvZGUoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0VVJMRW5j
b2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKIH0KIAogU3RyaW5nIFNXU2Ny
aXB0U3RvcmFnZTo6c2hhMkhhc2goY29uc3QgVVJMJiBpbnB1dCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1h
dGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Q2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlVSTFNj
aGVtZVRhc2suY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVUYXNrOjpkaWRDb21w
bGV0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5Lmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6bG9hZFN5bmNocm9ub3VzbHkpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuaDoK
KyAgICAgICAgVXBkYXRlIHRvIHVzZSB1aW50OF90KiBkYXRhIGJ1ZmZlcnMgbW9yZSBjb25zaXN0
ZW50bHkgZm9yIHN5bmNocm9ub3VzIGxvYWRzLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6c2VuZFJlcGx5VG9T
eW5jaHJvbm91c1JlcXVlc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIHVpbnQ4X3QqIGRhdGEg
YnVmZmVycyBtb3JlIGNvbnNpc3RlbnRseSBmb3Igc3luY2hyb25vdXMgbG9hZHMuCisKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcmVDb252
ZXJzaW9uUmVxdWVzdCk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IGJhc2U2NFVSTERlY29k
ZSAvIGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKCkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6YXBwbHlC
YXNpY0F1dGhvcml6YXRpb25IZWFkZXIpOgorICAgICAgICBVc2UgbmV3IHNlcmlhbGl6YXRpb25G
b3JCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoKSBoZWxwZXIuCisKKyAgICAgICAgKiBTaGFyZWQv
QVBJL0FQSURhdGEuaDoKKyAgICAgICAgKEFQSTo6RGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEFQ
STo6RGF0YTo6ZmFzdEZyZWVCeXRlcyk6IERlbGV0ZWQuCisgICAgICAgIEFkZCBuZXcgY3JlYXRl
IGZ1bmN0aW9uIHRoYXQgdGFrZXMgb3duZXJzaGlwIG9mIGEgVmVjdG9yJ3MgYnVmZmVyIHJhdGhl
cgorICAgICAgICB0aGFuIGNvcHlpbmcgaXQuIFJlcGxhY2UgdXNlIG9mIHN0YXRpYyBmdW5jdGlv
bnMgd2l0aCBpbmxpbmUgbGFtYmRhcyBmb3IKKyAgICAgICAgZnJlZS1mdW5jdGlvbnMuCisKKyAg
ICAgICAgKiBTaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW06CisgICAgICAgIChXZWJL
aXQ6OnNhbmRib3hGaWxlUGF0aCk6CisgICAgICAgIFVzZSBtYWtlU3RyaW5nIGFuZCBuZXcgYmFz
ZTY0VVJMRW5jb2RlZCgpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAocHJvZHVjZUNsaWVudERhdGFKc29uKToK
KyAgICAgICAgVXNlIG5ldyBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZygpLgorCisgICAgICAgICog
VUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2ViQXV0b21hdGlvblNlc3Npb25DYWlyby5jcHA6
CisgICAgICAgIChXZWJLaXQ6OmJhc2U2NEVuY29kZWRQTkdEYXRhKToKKyAgICAgICAgVXNlIG5l
dyBiYXNlNjRFbmNvZGVUb1N0cmluZygpLgorCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL05h
dmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZp
Z2F0aW9uQ2xpZW50Ojp3ZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICBVc2UgbmV3IGRlZmF1
bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKSBhbmQgbmV3IGFkb3B0aW5nIEFQSTo6RGF0YTo6Y3JlYXRl
IGZ1bmN0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUlu
c3BlY3RvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUluc3BlY3RvckNsaWVu
dDo6c2V0QmFja2VuZENvbW1hbmRzKToKKyAgICAgICAgVXNlIG5ldyBiYXNlNjRFbmNvZGVUb1N0
cmluZygpLgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5z
cGVjdG9yVUlQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6CisgICAgICAgIFVzZSBuZXcgYmFzZTY0RGVjb2RlKCku
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5
R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1T
YXZlKToKKyAgICAgICAgVXNlIG5ldyBiYXNlNjREZWNvZGUoKS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW06CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6Cisg
ICAgICAgIFVzZSBuZXcgYmFzZTY0RGVjb2RlKCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5z
cGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUpOgorICAgICAgICBVc2UgbmV3IGJhc2U2
NERlY29kZSgpLgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW5zcGVjdG9yQ2xp
ZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMpOgorICAgICAgICBVc2UgbmV3IGJhc2U2NEVuY29kZVRv
U3RyaW5nKCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2Ev
TG9jYWxBdXRoZW50aWNhdG9yLm1tOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhlbnRpY2F0
b3JJbnRlcm5hbDo6cHJvZHVjZUhhc2hTZXQpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhl
bnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxBdXRoZW50
aWNhdG9yOjpnZXRBc3NlcnRpb24pOgorICAgICAgICBVc2UgbmV3IGJhc2U2NEVuY29kZVRvU3Ry
aW5nKCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2Nr
SGlkQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1vY2tIaWRDb25uZWN0aW9uOjpm
ZWVkUmVwb3J0cyk6CisgICAgICAgIFVzZSBuZXcgYmFzZTY0RGVjb2RlKCkuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1t
OgorICAgICAgICAoV2ViS2l0OjpNb2NrTG9jYWxDb25uZWN0aW9uOjpmaWx0ZXJSZXNwb25zZXMg
Y29uc3QpOgorICAgICAgICBVc2UgbmV3IGJhc2U2NEVuY29kZVRvU3RyaW5nKCkuCisKIDIwMjEt
MDUtMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbSGFyZGVu
aW5nXSBDQVJpbmdCdWZmZXIgc2hvdWxkIHZhbGlkYXRlIHRoZSBzdG9yYWdlIHNpemUgYmVmb3Jl
IGFkb3B0aW5nIGl0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4JKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkK
QEAgLTIzLDcgKzIzLDcgQEAKIG1lc3NhZ2VzIC0+IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzIExlZ2FjeVJlY2VpdmVyIHsKIAogICAgIFNjaGVkdWxlUmVzb3VyY2VMb2FkKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykKLSAg
ICBQZXJmb3JtU3luY2hyb25vdXNMb2FkKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJlc291cmNlRXJyb3Ig
ZXJyb3IsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiBk
YXRhKSBTeW5jaHJvbm91cworICAgIFBlcmZvcm1TeW5jaHJvbm91c0xvYWQoV2ViS2l0OjpOZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKSAtPiAoV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNw
b25zZSwgVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgVGVzdFByb2Nlc3NJ
bmNvbWluZ1N5bmNNZXNzYWdlc1doZW5XYWl0aW5nRm9yU3luY1JlcGx5KFdlYktpdDo6V2ViUGFn
ZVByb3h5SWRlbnRpZmllciBwYWdlSUQpIC0+IChib29sIGhhbmRsZWQpIFN5bmNocm9ub3VzCiAg
ICAgTG9hZFBpbmcoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJj
ZUxvYWRQYXJhbWV0ZXJzKQogICAgIFJlbW92ZUxvYWRJZGVudGlmaWVyKHVpbnQ2NF90IHJlc291
cmNlTG9hZElkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIHZvaWQgc2VuZFJlcGx5VG9T
eW5jaHJvbm91c1JlcXVlcwogICAgIEFTU0VSVChkYXRhLmRlbGF5ZWRSZXBseSk7CiAgICAgQVNT
RVJUKCFkYXRhLnJlc3BvbnNlLmlzTnVsbCgpIHx8ICFkYXRhLmVycm9yLmlzTnVsbCgpKTsKIAot
ICAgIFZlY3RvcjxjaGFyPiByZXNwb25zZUJ1ZmZlcjsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVz
cG9uc2VCdWZmZXI7CiAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPnNpemUoKSkKICAgICAgICAg
cmVzcG9uc2VCdWZmZXIuYXBwZW5kKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAJKHJldmlzaW9uIDI3NzcyOCkKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE0ICszMTUsMTUgQEAgdm9pZCBQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcgogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBwdWJsaWNLZXlEYXRh
OwotICAgICAgICBXVEY6OmJhc2U2NFVSTERlY29kZShwdWJsaWNLZXlCYXNlNjRVUkwsIHB1Ymxp
Y0tleURhdGEpOworICAgICAgICBhdXRvIHB1YmxpY0tleURhdGEgPSBiYXNlNjRVUkxEZWNvZGUo
cHVibGljS2V5QmFzZTY0VVJMKTsKKyAgICAgICAgaWYgKCFwdWJsaWNLZXlEYXRhKQorICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gY3J5cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6
OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKLSAgICAgICAg
Y3J5cHRvLT5hZGRCeXRlcyhwdWJsaWNLZXlEYXRhLmRhdGEoKSwgcHVibGljS2V5RGF0YS5zaXpl
KCkpOworICAgICAgICBjcnlwdG8tPmFkZEJ5dGVzKHB1YmxpY0tleURhdGEtPmRhdGEoKSwgcHVi
bGljS2V5RGF0YS0+c2l6ZSgpKTsKICAgICAgICAgYXV0byBwdWJsaWNLZXlEYXRhSGFzaCA9IGNy
eXB0by0+Y29tcHV0ZUhhc2goKTsKIAotICAgICAgICBhdXRvIGtleUlEID0gV1RGOjpiYXNlNjRV
UkxFbmNvZGUocHVibGljS2V5RGF0YUhhc2guZGF0YSgpLCBwdWJsaWNLZXlEYXRhSGFzaC5zaXpl
KCkpOworICAgICAgICBhdXRvIGtleUlEID0gYmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcocHVibGlj
S2V5RGF0YUhhc2guZGF0YSgpLCBwdWJsaWNLZXlEYXRhSGFzaC5zaXplKCkpOwogICAgICAgICBp
ZiAoa2V5SUQgIT0gYXR0cmlidXRpb24uc291cmNlVW5saW5rYWJsZVRva2VuKCktPmtleUlEQmFz
ZTY0VVJMKQogICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0J
KHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAjaWYgVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05FVFdP
UktfU0VTU0lPTikKIHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlh
bCYgY3JlZGVudGlhbCkKIHsKLSAgICBTdHJpbmcgYXV0aGVudGljYXRpb25IZWFkZXIgPSAiQmFz
aWMgIiArIGJhc2U2NEVuY29kZShTdHJpbmcoY3JlZGVudGlhbC51c2VyKCkgKyAiOiIgKyBjcmVk
ZW50aWFsLnBhc3N3b3JkKCkpLnV0ZjgoKSk7Ci0gICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmll
bGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24sIGF1dGhlbnRpY2F0aW9u
SGVhZGVyKTsKKyAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVh
ZGVyTmFtZTo6QXV0aG9yaXphdGlvbiwgY3JlZGVudGlhbC5zZXJpYWxpemF0aW9uRm9yQmFzaWNB
dXRob3JpemF0aW9uSGVhZGVyKCkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
U2hhcmVkL0FQSS9BUElEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQv
QVBJL0FQSURhdGEuaAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQv
QVBJL0FQSURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsMTAgQEAgcHVibGljOgog
ICAgICAgICAgICAgbWVtY3B5KGNvcGllZEJ5dGVzLCBieXRlcywgc2l6ZSk7CiAgICAgICAgIH0K
IAotICAgICAgICByZXR1cm4gY3JlYXRlV2l0aG91dENvcHlpbmcoY29waWVkQnl0ZXMsIHNpemUs
IGZhc3RGcmVlQnl0ZXMsIG51bGxwdHIpOworICAgICAgICByZXR1cm4gY3JlYXRlV2l0aG91dENv
cHlpbmcoY29waWVkQnl0ZXMsIHNpemUsIFtdICh1bnNpZ25lZCBjaGFyKiBieXRlcywgY29uc3Qg
dm9pZCopIHsKKyAgICAgICAgICAgIGlmIChieXRlcykKKyAgICAgICAgICAgICAgICBmYXN0RnJl
ZShzdGF0aWNfY2FzdDx2b2lkKj4oYnl0ZXMpKTsKKyAgICAgICAgfSwgbnVsbHB0cik7CiAgICAg
fQogICAgIAogICAgIHN0YXRpYyBSZWY8RGF0YT4gY3JlYXRlKGNvbnN0IFZlY3Rvcjx1bnNpZ25l
ZCBjaGFyPiYgYnVmZmVyKQpAQCAtNjgsNiArNzEsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gY3JlYXRlKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOwogICAgIH0KIAorICAgIHN0
YXRpYyBSZWY8RGF0YT4gY3JlYXRlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmIGJ1ZmZlcikKKyAg
ICB7CisgICAgICAgIGF1dG8gYnVmZmVyU2l6ZSA9IGJ1ZmZlci5zaXplKCk7CisgICAgICAgIGF1
dG8gYnVmZmVyUG9pbnRlciA9IGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCkubGVha1B0cigpOworICAg
ICAgICByZXR1cm4gY3JlYXRlV2l0aG91dENvcHlpbmcoYnVmZmVyUG9pbnRlciwgYnVmZmVyU2l6
ZSwgW10gKHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBjb25zdCB2b2lkKikgeworICAgICAgICAgICAg
aWYgKGJ5dGVzKQorICAgICAgICAgICAgICAgIFdURjo6VmVjdG9yTWFsbG9jOjpmcmVlKGJ5dGVz
KTsKKyAgICAgICAgfSwgbnVsbHB0cik7CisgICAgfQorCiAgICAgc3RhdGljIFJlZlB0cjxEYXRh
PiBjcmVhdGUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7CiAgICAgCiAjaWYgUExBVEZPUk0o
Q09DT0EpCkBAIC05NiwxMiArMTA5LDYgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgZmFzdEZyZWVCeXRlcyh1bnNpZ25lZCBjaGFyKiBieXRlcywgY29uc3Qgdm9p
ZCopCi0gICAgewotICAgICAgICBpZiAoYnl0ZXMpCi0gICAgICAgICAgICBmYXN0RnJlZShzdGF0
aWNfY2FzdDx2b2lkKj4oYnl0ZXMpKTsKLSAgICB9Ci0KICAgICBjb25zdCB1bnNpZ25lZCBjaGFy
KiBtX2J5dGVzIHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCShy
ZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJv
Y2Vzc01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE4ICszMTUsMTMgQEAgc3RhdGljIFN0
cmluZyBzYW5kYm94RGlyZWN0b3J5KFdlYkNvcmU6OgogCiBzdGF0aWMgU3RyaW5nIHNhbmRib3hG
aWxlUGF0aChjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgsIGNvbnN0IENTdHJpbmcmIGhlYWRl
cikKIHsKLSAgICBTdHJpbmdCdWlsZGVyIHNhbmRib3hGaWxlOwotICAgIHNhbmRib3hGaWxlLmFw
cGVuZChkaXJlY3RvcnlQYXRoKTsKLSAgICBzYW5kYm94RmlsZS5hcHBlbmQoIi9Db21waWxlZFNh
bmRib3grIik7Ci0KICAgICAvLyBNYWtlIHRoZSBmaWxlbmFtZSBzZW1pLXVuaXF1ZSBiYXNlZCBv
biB0aGUgY29udGVudHMgb2YgdGhlIGhlYWRlci4KKwogICAgIGF1dG8gY3J5cHRvID0gUEFMOjpD
cnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2
KTsKICAgICBjcnlwdG8tPmFkZEJ5dGVzKGhlYWRlci5kYXRhKCksIGhlYWRlci5sZW5ndGgoKSk7
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7Ci0gICAg
U3RyaW5nIHJlYWRhYmxlSGFzaCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKGhhc2guZGF0YSgpLCBo
YXNoLnNpemUoKSk7CisgICAgYXV0byBoYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwogCi0g
ICAgc2FuZGJveEZpbGUuYXBwZW5kKHJlYWRhYmxlSGFzaCk7Ci0gICAgcmV0dXJuIHNhbmRib3hG
aWxlLnRvU3RyaW5nKCk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoZGlyZWN0b3J5UGF0aCwgIi9D
b21waWxlZFNhbmRib3grIiwgYmFzZTY0VVJMRW5jb2RlZChoYXNoLmRhdGEoKSwgaGFzaC5zaXpl
KCkpKTsKIH0KIAogc3RhdGljIGJvb2wgZW5zdXJlU2FuZGJveENhY2hlRGlyZWN0b3J5KGNvbnN0
IFNhbmRib3hJbmZvJiBpbmZvKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBA
IC01MjAsNyArNTIwLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAogICAgIFN0YXJ0
VVJMU2NoZW1lVGFzayhzdHJ1Y3QgV2ViS2l0OjpVUkxTY2hlbWVUYXNrUGFyYW1ldGVycyBwYXJh
bWV0ZXJzKQogICAgIFN0b3BVUkxTY2hlbWVUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVy
LCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKLSAgICBMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVU
YXNrKHN0cnVjdCBXZWJLaXQ6OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpIC0+
IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yIGVycm9yLCBWZWN0b3I8Y2hhcj4gZGF0YSkgU3luY2hyb25vdXMKKyAgICBMb2FkU3luY2hy
b25vdXNVUkxTY2hlbWVUYXNrKHN0cnVjdCBXZWJLaXQ6OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJz
IHBhcmFtZXRlcnMpIC0+IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25v
dXMKIAogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgU2hvdWxkQWxsb3dEZXZp
Y2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyhXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJh
bWVJRCwgc3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFtZUluZm8sIGJvb2wgbWF5UHJv
bXB0KSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uT3JNb3Rpb25Q
ZXJtaXNzaW9uU3RhdGUgcGVybWlzc2lvblN0YXRlKSBBc3luYwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIuaAkocmV2aXNpb24gMjc3NzI4KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHN0cnVjdCBVUkxTY2hlbWVUYXNrUGFyYW1ldGVyczsK
IGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKIAotdXNpbmcgU3lu
Y0xvYWRDb21wbGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBj
b25zdCBWZWN0b3I8Y2hhcj4mKT47Cit1c2luZyBTeW5jTG9hZENvbXBsZXRpb25IYW5kbGVyID0g
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpPjsK
IAogY2xhc3MgV2ViVVJMU2NoZW1lSGFuZGxlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlVSTFNj
aGVtZUhhbmRsZXI+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxTY2hlbWVIYW5k
bGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2su
Y3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxT
Y2hlbWVUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDEwICsyMTIsMTAgQEAgYXV0byBX
ZWJVUkxTY2hlbWVUYXNrOjpkaWRDb21wbGV0ZShjb25zdAogICAgIG1fY29tcGxldGVkID0gdHJ1
ZTsKICAgICAKICAgICBpZiAoaXNTeW5jKCkpIHsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7
CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgICAgICBpZiAobV9zeW5jRGF0YSkg
ewogICAgICAgICAgICAgZGF0YS5yZXNpemUobV9zeW5jRGF0YS0+c2l6ZSgpKTsKLSAgICAgICAg
ICAgIG1lbWNweShkYXRhLmRhdGEoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obV9z
eW5jRGF0YS0+ZGF0YSgpKSwgbV9zeW5jRGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG1lbWNw
eShkYXRhLmRhdGEoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9zeW5jRGF0
YS0+ZGF0YSgpKSwgbV9zeW5jRGF0YS0+c2l6ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1f
c3luY0NvbXBsZXRpb25IYW5kbGVyKG1fc3luY1Jlc3BvbnNlLCBlcnJvciwgV1RGTW92ZShkYXRh
KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oCShy
ZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVU
YXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgc3RydWN0IFVSTFNjaGVtZVRh
c2tQYXJhbWV0ZXJzOwogY2xhc3MgV2ViVVJMU2NoZW1lSGFuZGxlcjsKIGNsYXNzIFdlYlBhZ2VQ
cm94eTsKIAotdXNpbmcgU3luY0xvYWRDb21wbGV0aW9uSGFuZGxlciA9IENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImLCBjb25zdCBWZWN0b3I8Y2hhcj4mKT47Cit1c2luZyBTeW5jTG9hZENv
bXBsZXRpb25IYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYpPjsKIAogY2xhc3MgV2ViVVJMU2NoZW1lVGFzayA6IHB1YmxpYyBBUEk6
Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlVSTFNjaGVtZVRhc2s+LCBwdWJsaWMgSW5z
dGFuY2VDb3VudGVkPFdlYlVSTFNjaGVtZVRhc2s+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShXZWJVUkxTY2hlbWVUYXNrKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tQYWdlLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzOCwxMyArMjMzOCwxNCBAQCB2
b2lkIFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KFdLUGFnCiAgICAgICAgICAgICBpZiAo
bV9jbGllbnQuY29weVdlYkNyeXB0b01hc3RlcktleSkKICAgICAgICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYodG9JbXBsKG1fY2xpZW50LmNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkodG9BUEkoJnBh
Z2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKSk7CiAKLSAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBtYXN0ZXJLZXk7CiAjaWYgRU5BQkxFKFdFQl9DUllQVE8pCi0gICAgICAgICAgICBp
ZiAoIWdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKKyAgICAgICAgICAg
IGF1dG8gbWFzdGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgICAgICAg
ICAgaWYgKCFtYXN0ZXJLZXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUoV1RGTW92ZSgqbWFzdGVyS2V5KSk7Cisj
ZWxzZQorICAgICAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKG51bGxwdHIsIDApOwog
I2VuZGlmCi0KLSAgICAgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXku
ZGF0YSgpLCBtYXN0ZXJLZXkuc2l6ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIFJlZlB0cjxB
UEk6OlN0cmluZz4gc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKFdlYlBhZ2VQcm94
eSYgcGFnZSwgdW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBSZWZQdHI8QVBJOjpTdHJpbmc+
JiBjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IFVSTCYgdXJsKSBvdmVycmlkZQpJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWwubW0JKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNEYXRhPiBwcm9kdWNl
Q2xpZW50RGEKICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAid2ViYXV0aG4uZ2V0IiBm
b3JLZXk6QCJ0eXBlIl07CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBbZGljdGlvbmFyeSBz
ZXRPYmplY3Q6V1RGOjpiYXNlNjRVUkxFbmNvZGUoY2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2Uu
bGVuZ3RoKSBmb3JLZXk6QCJjaGFsbGVuZ2UiXTsKKyAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
YmFzZTY0VVJMRW5jb2RlVG9TdHJpbmcoY2hhbGxlbmdlLmJ5dGVzLCBjaGFsbGVuZ2UubGVuZ3Ro
KSBmb3JLZXk6QCJjaGFsbGVuZ2UiXTsKICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6b3JpZ2lu
IGZvcktleTpAIm9yaWdpbiJdOwogCiAgICAgcmV0dXJuIFtOU0pTT05TZXJpYWxpemF0aW9uIGRh
dGFXaXRoSlNPTk9iamVjdDpkaWN0aW9uYXJ5LmdldCgpIG9wdGlvbnM6TlNKU09OV3JpdGluZ1Nv
cnRlZEtleXMgZXJyb3I6bmlsXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vY2Fpcm8vV2ViQXV0b21hdGlvblNlc3Npb25DYWlyby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9jYWlyby9XZWJBdXRvbWF0aW9uU2Vz
c2lvbkNhaXJvLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQXV0b21hdGlvbi9jYWlyby9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBiYXNlNjRF
bmNvZGVkUE5HCiAgICAgaWYgKHBuZ0RhdGEuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShwbmdEYXRhKTsKKyAgICByZXR1
cm4gYmFzZTY0RW5jb2RlVG9TdHJpbmcocG5nRGF0YSk7CiB9CiAKIE9wdGlvbmFsPFN0cmluZz4g
V2ViQXV0b21hdGlvblNlc3Npb246OnBsYXRmb3JtR2V0QmFzZTY0RW5jb2RlZFBOR0RhdGEoY29u
c3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHJldmlzaW9uIDI3Nzcy
OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTEzNSwxMSArMTEzNSwxMSBAQCBSZWZQdHI8QVBJOjpEYXRhPiBO
YXZpZ2F0aW9uU3RhdGU6Ok5hdmlnCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYg
KCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYkNyeXB0
b01hc3RlcktleUZvcldlYlZpZXcpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3Rlcktl
eTsKLSAgICAgICAgaWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkp
CisgICAgICAgIGF1dG8gbWFzdGVyS2V5ID0gZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOwor
ICAgICAgICBpZiAoIW1hc3RlcktleSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0YSgpLCBtYXN0ZXJL
ZXkuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKFdURk1vdmUoKm1h
c3RlcktleSkpOwogICAgIH0KIAogICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1v
dGVJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTQsMTMgKzE5NCwxMSBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVu
dDo6c2V0dXBDb25uZWN0CiB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENv
bW1hbmRzKGNvbnN0IGNoYXIqIGJhY2tlbmRDb21tYW5kcykKIHsKICAgICBpZiAoIWJhY2tlbmRD
b21tYW5kcyB8fCAhYmFja2VuZENvbW1hbmRzWzBdKSB7Ci0gICAgICAgIG1fYmFja2VuZENvbW1h
bmRzVVJMID0gU3RyaW5nKCk7CisgICAgICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0geyB9Owog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0g
ICAgYmFzZTY0RW5jb2RlKGJhY2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tlbmRDb21tYW5kcyks
IGJhc2U2NERhdGEpOwotICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gImRhdGE6dGV4dC9qYXZh
c2NyaXB0O2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9
IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVk
KGJhY2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tlbmRDb21tYW5kcykpKTsKIH0KIAogdm9pZCBS
ZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNvbm5lY3Rpb25EaWRDbG9zZSgpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9n
dGsvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAJKHJldmlzaW9uIDI3NzcyOCkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSwxNiArMTM5LDE4IEBAIHZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm0KICAgICBpZiAoZ3RrX25hdGl2ZV9k
aWFsb2dfcnVuKEdUS19OQVRJVkVfRElBTE9HKGRpYWxvZy5nZXQoKSkpICE9IEdUS19SRVNQT05T
RV9BQ0NFUFQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxjaGFyPiBkYXRhVmVjdG9y
OworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yOwogICAgIENTdHJpbmcgZGF0YVN0cmlu
ZzsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShj
b250ZW50LCBkYXRhVmVjdG9yLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICBhdXRv
IGRlY29kZWREYXRhID0gYmFzZTY0RGVjb2RlKGNvbnRlbnQsIEJhc2U2NERlY29kZU9wdGlvbnM6
OlZhbGlkYXRlUGFkZGluZyk7CisgICAgICAgIGlmICghZGVjb2RlZERhdGEpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgZGVj
b2RlZERhdGEtPnNocmlua1RvRml0KCk7CisgICAgICAgIGRhdGFWZWN0b3IgPSBXVEZNb3ZlKCpk
ZWNvZGVkRGF0YSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGRhdGFTdHJpbmcgPSBjb250ZW50LnV0
ZjgoKTsKIAotICAgIGNvbnN0IGNoYXIqIGRhdGEgPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRh
dGFTdHJpbmcuZGF0YSgpIDogZGF0YVZlY3Rvci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZGF0
YSA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiByZWludGVycHJl
dF9jYXN0PGNoYXIqPihkYXRhVmVjdG9yLmRhdGEoKSk7CiAgICAgc2l6ZV90IGRhdGFMZW5ndGgg
PSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcubGVuZ3RoKCkgOiBkYXRhVmVjdG9y
LnNpemUoKTsKICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGd0a19maWxlX2No
b29zZXJfZ2V0X2ZpbGUoY2hvb3NlcikpOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2Zp
bGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlH
dGsuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MzgsMTYgKzUzOCwxOCBAQCB2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZShj
CiAgICAgaWYgKGd0a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cu
Z2V0KCkpKSAhPSBHVEtfUkVTUE9OU0VfQUNDRVBUKQogICAgICAgICByZXR1cm47CiAKLSAgICBW
ZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcjsK
ICAgICBDU3RyaW5nIGRhdGFTdHJpbmc7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAg
ICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQ
YWRkaW5nKSkKKyAgICAgICAgYXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50
LCBCYXNlNjREZWNvZGVPcHRpb25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICBpZiAoIWRl
Y29kZWREYXRhKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkYXRhVmVjdG9yLnNocmlu
a1RvRml0KCk7CisgICAgICAgIGRlY29kZWREYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgICAgICBk
YXRhVmVjdG9yID0gV1RGTW92ZSgqZGVjb2RlZERhdGEpOwogICAgIH0gZWxzZQogICAgICAgICBk
YXRhU3RyaW5nID0gY29udGVudC51dGY4KCk7CiAKLSAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRh
dGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgp
OworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJp
bmcuZGF0YSgpIDogcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YVZlY3Rvci5kYXRhKCkpOwog
ICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5n
Lmxlbmd0aCgpIDogZGF0YVZlY3Rvci5zaXplKCk7CiAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9
IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKICAgICBHVW5p
cXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHJldmlzaW9uIDI3NzcyOCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEwICsxNzQsMTAgQEAgdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybQogICAgICAgICBtX3N1Z2dlc3Rl
ZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwogCiAgICAg
ICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0Owot
ICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFs
aWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBiYXNlNjREZWNv
ZGUoY29udGVudENvcHksIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFkZGluZyk7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0
YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7Cisg
ICAgICAgICAgICBhdXRvIGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5p
dFdpdGhCeXRlczpkZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0YS0+c2l6ZSgp
XSk7CiAgICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWlj
YWxseTpZRVNdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0
ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZyBlcnJvcjpOVUxMXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0JKHJl
dmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMv
V2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTA5LDEwICs1MDks
MTAgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUoYwogICAgICAgICBt
X3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwp
OwogCiAgICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hh
cj4gb3V0OwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwg
QmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgIGF1dG8gZGVjb2RlZERhdGEgPSBi
YXNlNjREZWNvZGUoY29udGVudENvcHksIEJhc2U2NERlY29kZU9wdGlvbnM6OlZhbGlkYXRlUGFk
ZGluZyk7CisgICAgICAgICAgICBpZiAoIWRlY29kZWREYXRhKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHRO
UyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6
ZSgpXSk7CisgICAgICAgICAgICBhdXRvIGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBh
bGxvY10gaW5pdFdpdGhCeXRlczpkZWNvZGVkRGF0YS0+ZGF0YSgpIGxlbmd0aDpkZWNvZGVkRGF0
YS0+c2l6ZSgpXSk7CiAgICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxV
UkwgYXRvbWljYWxseTpZRVNdOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFtjb250ZW50
Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhT
dHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNr
ZW5kQ28KICAgICBpZiAoIWV2ZW50Lm1lc3NhZ2UgfHwgZXZlbnQubWVzc2FnZS0+aXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1ha2VTdHJp
bmcoImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGUoZXZlbnQubWVz
c2FnZS0+dXRmOCgpKSk7CisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBtYWtlU3RyaW5nKCJk
YXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChldmVudC5tZXNzYWdl
LT51dGY4KCkpKTsKIH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExp
c3QoY29uc3QgRXZlbnQmIGV2ZW50KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0
aGVudGljYXRvci5tbQkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC04MiwxMCArODIsOCBAQCBzdGF0aWMgaW5saW5lIEhhc2hTZXQ8U3RyaW5nPiBw
cm9kdWNlSGFzCiB7CiAgICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKICAgICBmb3IgKGF1dG8m
IGNyZWRlbnRpYWxEZXNjcmlwdG9yIDogY3JlZGVudGlhbERlc2NyaXB0b3JzKSB7Ci0gICAgICAg
IGlmIChlbXB0eVRyYW5zcG9ydHNPckNvbnRhaW4oY3JlZGVudGlhbERlc2NyaXB0b3IudHJhbnNw
b3J0cywgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpCi0gICAgICAgICAgICAmJiBj
cmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJs
aWNLZXkKLSAgICAgICAgICAgICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVjdG9yLnNpemUo
KSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCi0gICAgICAgICAgICByZXN1bHQuYWRkKGJhc2U2NEVu
Y29kZShjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5kYXRhKCksIGNyZWRlbnRpYWxEZXNj
cmlwdG9yLmlkVmVjdG9yLnNpemUoKSkpOworICAgICAgICBpZiAoZW1wdHlUcmFuc3BvcnRzT3JD
b250YWluKGNyZWRlbnRpYWxEZXNjcmlwdG9yLnRyYW5zcG9ydHMsIEF1dGhlbnRpY2F0b3JUcmFu
c3BvcnQ6OkludGVybmFsKSAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09IFB1YmxpY0tl
eUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkgJiYgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0
b3Iuc2l6ZSgpID09IGNyZWRlbnRpYWxJZExlbmd0aCkKKyAgICAgICAgICAgIHJlc3VsdC5hZGQo
YmFzZTY0RW5jb2RlVG9TdHJpbmcoY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3IuZGF0YSgp
LCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkpKTsKICAgICB9CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTI0MSw3ICsyMzksNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRv
cjo6bWFrZUNyZWRlbnRpYWwoCiAgICAgICAgIGlmIChub3RGb3VuZCAhPSBtX2V4aXN0aW5nQ3Jl
ZGVudGlhbHMuZmluZE1hdGNoaW5nKFsmZXhjbHVkZUNyZWRlbnRpYWxJZHNdIChhdXRvJiBjcmVk
ZW50aWFsKSB7CiAgICAgICAgICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7
CiAgICAgICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVD
cmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZShyYXdJZC0+ZGF0YSgpLCByYXdJZC0+
Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgICAgICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxJZHMu
Y29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEoKSwgcmF3SWQtPmJ5dGVM
ZW5ndGgoKSkpOwogICAgICAgICB9KSkgewogICAgICAgICAgICAgcmVjZWl2ZUV4Y2VwdGlvbih7
IE5vdEFsbG93ZWRFcnJvciwgIkF0IGxlYXN0IG9uZSBjcmVkZW50aWFsIG1hdGNoZXMgYW4gZW50
cnkgb2YgdGhlIGV4Y2x1ZGVDcmVkZW50aWFscyBsaXN0IGluIHRoZSBwbGF0Zm9ybSBhdHRhY2hl
ZCBhdXRoZW50aWNhdG9yLiJfcyB9LCBXZWJBdXRoZW50aWNhdGlvblN0YXR1czo6TEFFeGNsdWRl
Q3JlZGVudGlhbHNNYXRjaGVkKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTUxOCw3ICs1MTYs
NyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKCkKICAgICAgICAgfQog
CiAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+cmF3SWQoKTsKLSAgICAgICAgaWYg
KGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGUocmF3SWQtPmRhdGEoKSwg
cmF3SWQtPmJ5dGVMZW5ndGgoKSkpKQorICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNv
bnRhaW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVu
Z3RoKCkpKSkKICAgICAgICAgICAgIGFzc2VydGlvblJlc3BvbnNlcy51bmNoZWNrZWRBcHBlbmQo
Y3JlZGVudGlhbC5jb3B5UmVmKCkpOwogICAgIH0KICAgICBpZiAoYXNzZXJ0aW9uUmVzcG9uc2Vz
LmlzRW1wdHkoKSkgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrSGlkQ29ubmVjdGlvbi5j
cHAJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL01vY2svTW9ja0hpZENvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjEsMTUgKzI2MSwxMyBAQCB2b2lkIE1vY2tIaWRDb25uZWN0aW9uOjpmZWVkUmVwb3J0cygpCiAg
ICAgICAgIGlmIChzdGFnZXNNYXRjaCgpICYmIG1fY29uZmlndXJhdGlvbi5oaWQtPmVycm9yID09
IE1vY2s6OkhpZEVycm9yOjpVbnN1cHBvcnRlZE9wdGlvbnMgJiYgKG1fcmVxdWlyZVJlc2lkZW50
S2V5IHx8IG1fcmVxdWlyZVVzZXJWZXJpZmljYXRpb24pKQogICAgICAgICAgICAgbWVzc2FnZSA9
IEZpZG9IaWRNZXNzYWdlOjpjcmVhdGUobV9jdXJyZW50Q2hhbm5lbCwgRmlkb0hpZERldmljZUNv
bW1hbmQ6OmtDYm9yLCB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEN0YXBEZXZpY2VSZXNwb25zZUNv
ZGU6OmtDdGFwMkVyclVuc3VwcG9ydGVkT3B0aW9uKSB9KTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4gcGF5bG9hZDsKICAgICAgICAgICAgIEFTU0VSVCghbV9j
b25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NC5pc0VtcHR5KCkpOwotICAgICAgICAgICAg
YXV0byBzdGF0dXMgPSBiYXNlNjREZWNvZGUobV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJh
c2U2NFswXSwgcGF5bG9hZCk7CisgICAgICAgICAgICBhdXRvIHBheWxvYWQgPSBiYXNlNjREZWNv
ZGUobV9jb25maWd1cmF0aW9uLmhpZC0+cGF5bG9hZEJhc2U2NFswXSk7CiAgICAgICAgICAgICBt
X2NvbmZpZ3VyYXRpb24uaGlkLT5wYXlsb2FkQmFzZTY0LnJlbW92ZSgwKTsKLSAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoc3RhdHVzLCBzdGF0dXMpOwogICAgICAgICAgICAgaWYgKCFtX2NvbmZp
Z3VyYXRpb24uaGlkLT5pc1UyZikKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlkb0hpZE1l
c3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a0Ni
b3IsIHBheWxvYWQpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGaWRvSGlkTWVzc2FnZTo6
Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZpY2VDb21tYW5kOjprQ2JvciwgV1RG
TW92ZSgqcGF5bG9hZCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lc3Nh
Z2UgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY3VycmVudENoYW5uZWwsIEZpZG9IaWREZXZp
Y2VDb21tYW5kOjprTXNnLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gRmlk
b0hpZE1lc3NhZ2U6OmNyZWF0ZShtX2N1cnJlbnRDaGFubmVsLCBGaWRvSGlkRGV2aWNlQ29tbWFu
ZDo6a01zZywgV1RGTW92ZSgqcGF5bG9hZCkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENv
bm5lY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAyNzc3Mjgp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tM
b2NhbENvbm5lY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lk
IE1vY2tMb2NhbENvbm5lY3Rpb246OmZpbHRlclJlc3BvbnNlCiAgICAgZm9yICg7IGl0ciAhPSBy
ZXNwb25zZXMuZW5kKCk7ICsraXRyKSB7CiAgICAgICAgIGF1dG8qIHJhd0lkID0gaXRyLT5nZXQo
KS5yYXdJZCgpOwogICAgICAgICBBU1NFUlQocmF3SWQpOwotICAgICAgICBhdXRvIHJhd0lkQmFz
ZTY0ID0gYmFzZTY0RW5jb2RlKHJhd0lkLT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpOwor
ICAgICAgICBhdXRvIHJhd0lkQmFzZTY0ID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRh
dGEoKSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSk7CiAgICAgICAgIGlmIChyYXdJZEJhc2U2NCA9PSBw
cmVmZXJyZWRDcmVkZW50aWFsSWRCYXNlNjQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9h
ZGVyU3RyYXRlZ3kuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
OSw3ICs1NzksNyBAQCBPcHRpb25hbDxXZWJMb2FkZXJTdHJhdGVneTo6U3luY0xvYWRSZXN1CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcg
cmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBD
bGllbnRDcmVkZW50aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksICBjb25zdCBGZXRj
aE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9yaWdpbmFsUmVxdWVzdEhl
YWRlcnMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwg
VmVjdG9yPGNoYXI+JiBkYXRhKQordm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcgcmVz
b3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDbGll
bnRDcmVkZW50aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksICBjb25zdCBGZXRjaE9w
dGlvbnMmIG9wdGlvbnMsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9yaWdpbmFsUmVxdWVzdEhlYWRl
cnMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVj
dG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAgIGF1dG8qIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0g
dG9XZWJGcmFtZUxvYWRlckNsaWVudChmcmFtZUxvYWRlci5jbGllbnQoKSk7CiAgICAgYXV0byog
d2ViRnJhbWUgPSB3ZWJGcmFtZUxvYWRlckNsaWVudCA/ICZ3ZWJGcmFtZUxvYWRlckNsaWVudC0+
d2ViRnJhbWUoKSA6IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0
d29yay9XZWJMb2FkZXJTdHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDI3NzcyOCkKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH5XZWJMb2FkZXJTdHJh
dGVneSgpIGZpbmFsOwogICAgIAogICAgIHZvaWQgbG9hZFJlc291cmNlKFdlYkNvcmU6OkZyYW1l
JiwgV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2UmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChSZWZQdHI8V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI+JiYpPiYmKSBmaW5hbDsKLSAg
ICB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCB1
bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYsIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGNvbnN0IFdlYkNv
cmU6OkZldGNoT3B0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmLCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFy
PiYgZGF0YSkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNv
cmU6OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFs
UG9saWN5LCBjb25zdCBXZWJDb3JlOjpGZXRjaE9wdGlvbnMmLCBjb25zdCBXZWJDb3JlOjpIVFRQ
SGVhZGVyTWFwJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpIGZpbmFsOwogICAgIHZvaWQgcGFnZUxvYWRD
b21wbGV0ZWQoV2ViQ29yZTo6UGFnZSYpIGZpbmFsOwogICAgIHZvaWQgYnJvd3NpbmdDb250ZXh0
UmVtb3ZlZChXZWJDb3JlOjpGcmFtZSYpIGZpbmFsOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJp
dmF0ZToKICAgICBzdHJ1Y3QgU3luY0xvYWRSZXN1bHQgewogICAgICAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlIHJlc3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVy
cm9yOwotICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGRhdGE7CiAgICAgfTsKICAgICBPcHRpb25hbDxTeW5jTG9hZFJlc3VsdD4gdHJ5TG9hZGluZ1N5
bmNocm9ub3VzbHlVc2luZ1VSTFNjaGVtZUhhbmRsZXIoV2ViQ29yZTo6RnJhbWVMb2FkZXImLCBS
ZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsK
ICAgICBTeW5jTG9hZFJlc3VsdCBsb2FkRGF0YVVSTFN5bmNocm9ub3VzbHkoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHAJKHJl
dmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVS
TFNjaGVtZUhhbmRsZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAg
dm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OnN0YXJ0TmV3VAogICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUtPnN0YXJ0TG9hZGluZygpOwogfQogCi12b2lkIFdlYlVSTFNjaGVtZUhhbmRs
ZXJQcm94eTo6bG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBsb2FkSWRl
bnRpZmllciwgV2ViRnJhbWUmIHdlYkZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgVmVj
dG9yPGNoYXI+JiBkYXRhKQordm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OmxvYWRTeW5j
aHJvbm91c2x5KFJlc291cmNlTG9hZElkZW50aWZpZXIgbG9hZElkZW50aWZpZXIsIFdlYkZyYW1l
JiB3ZWJGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFZlY3Rvcjx1aW50OF90PiYgZGF0
YSkKIHsKICAgICBkYXRhLnNocmluaygwKTsKICAgICBpZiAoIW1fd2ViUGFnZS5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpMb2FkU3luY2hyb25vdXNVUkxTY2hlbWVUYXNrKFVSTFNj
aGVtZVRhc2tQYXJhbWV0ZXJzIHsgbV9pZGVudGlmaWVyLCBsb2FkSWRlbnRpZmllciwgcmVxdWVz
dCwgd2ViRnJhbWUuaW5mbygpIH0pLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpMb2FkU3luY2hy
b25vdXNVUkxTY2hlbWVUYXNrOjpSZXBseShyZXNwb25zZSwgZXJyb3IsIGRhdGEpKSkgewpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclBy
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
VVJMU2NoZW1lSGFuZGxlclByb3h5LmgJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0TmV3VGFzayhX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRlciYsIFdlYkZyYW1lJik7CiAgICAgdm9pZCBzdG9wQWxsVGFz
a3MoKTsKIAotICAgIHZvaWQgbG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmll
ciwgV2ViRnJhbWUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFZlY3RvcjxjaGFyPiYp
OworICAgIHZvaWQgbG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgV2Vi
RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFZlY3Rvcjx1aW50OF90PiYpOwog
CiAgICAgdWludDY0X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsg
fQogICAgIFdlYlBhZ2UmIHBhZ2UoKSB7IHJldHVybiBtX3dlYlBhZ2U7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA1LTE4ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29k
aW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAgICAgVXBkYXRlIHRvIG1h
dGNoIG5ldyBzaWduYXR1cmUuIGNoYXIgLT4gdWludDhfdC4KKwogMjAyMS0wNS0xNyAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEF2b2lkIG1vcmUgU3RyaW5nIGNy
ZWF0aW9ucyB3aGVuIHByZXBhcmluZyBTUUxpdGUgc3RhdGVtZW50cwpJbmRleDogU291cmNlL1dl
YktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYktpdExl
Z2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OmxvYWRSZXNvdQogICAgIH0pOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2ln
bmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2xpZW50Q3JlZGVudGlh
bFBvbGljeSwgY29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zLCBjb25zdCBIVFRQSGVhZGVyTWFw
JiwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0
b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIsIHVuc2lnbmVkIGxvbmcs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSwg
Y29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8dWludDhf
dD4mIGRhdGEpCiB7CiAgICAgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoZnJhbWVMb2FkZXIubmV0d29ya2luZ0NvbnRleHQoKSwgcmVxdWVzdCwgb3B0aW9ucy5jcmVk
ZW50aWFscyA9PSBGZXRjaE9wdGlvbnM6OkNyZWRlbnRpYWxzOjpPbWl0ID8gU3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3k6OkRvTm90VXNlIDogU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSwgZXJy
b3IsIHJlc3BvbnNlLCBkYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29y
ZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAko
cmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9X
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBA
QCBwdWJsaWM6CiAgICAgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAKICAgICB2b2lkIGxv
YWRSZXNvdXJjZShXZWJDb3JlOjpGcmFtZSYsIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlJiwgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZGVyT3B0
aW9ucyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdlYkNvcmU6OlN1YnJlc291cmNl
TG9hZGVyPiYmKT4mJikgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KFdlYkNvcmU6OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZywgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgV2Vi
Q29yZTo6RmV0Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYsIFdlYkNv
cmU6OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNo
YXI+JikgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6
OkZyYW1lTG9hZGVyJiwgdW5zaWduZWQgbG9uZywgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgY29uc3QgV2ViQ29yZTo6RmV0
Y2hPcHRpb25zJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYsIFdlYkNvcmU6OlJlc291
cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPHVpbnQ4X3Q+Jikg
ZmluYWw7CiAgICAgdm9pZCBwYWdlTG9hZENvbXBsZXRlZChXZWJDb3JlOjpQYWdlJikgZmluYWw7
CiAgICAgdm9pZCBicm93c2luZ0NvbnRleHRSZW1vdmVkKFdlYkNvcmU6OkZyYW1lJikgZmluYWw7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzcyOCkKKysr
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBVcGRhdGUgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUgbW9k
ZXJuIFdlYktpdCBjb252ZW50aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI1OTIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXou
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAg
IChXZWJDaHJvbWVDbGllbnQ6OndyYXBDcnlwdG9LZXkgY29uc3QpOgorICAgICAgICAoV2ViQ2hy
b21lQ2xpZW50Ojp1bndyYXBDcnlwdG9LZXkgY29uc3QpOgorICAgICAgICBVcGRhdGUgdG8gdXNl
IG5ldyBPcHRpb25hbCByZXR1cm5pbmcgZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tOgorICAgICAgICAo
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNhdmUpOgorICAgICAgICBVcGRhdGUgdG8gdXNl
IG5ldyBPcHRpb25hbCByZXR1cm5pbmcgYmFzZTY0RGVjb2RlKCkuCisKIDIwMjEtMDUtMTcgIFBl
bmcgTGl1ICA8cGVuZy5saXU2QGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVUF0gV2ViQ29udGVu
dCBwcm9jZXNzIHNob3VsZCBub3QgcHVsbCBhdWRpbyBzZXNzaW9uIGNhdGVnb3J5IGZyb20gdGhl
IEdQVSBQcm9jZXNzCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiAyNzc3MjgpCisr
KyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNjYsMjggKzEwNjYsMzQgQEAgdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OmV4aXRGdWxsU2NyZWVuRm9yRQogCiBib29sIFdlYkNocm9tZUNsaWVudDo6d3JhcENy
eXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiB3cmFw
cGVkS2V5KSBjb25zdAogewotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAgICAgU0VM
IHNlbGVjdG9yID0gQHNlbGVjdG9yKHdlYkNyeXB0b01hc3RlcktleUZvcldlYlZpZXc6KTsKICAg
ICBpZiAoW1ttX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9y
XSkgewogICAgICAgICBOU0RhdGEgKmtleURhdGEgPSBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcs
IHNlbGVjdG9yKTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICAgICAgICAg
bWFzdGVyS2V5LmFwcGVuZChzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDx2b2lkKj4o
W2tleURhdGEgYnl0ZXNdKSksIFtrZXlEYXRhIGxlbmd0aF0pOwotICAgIH0gZWxzZSBpZiAoIWdl
dERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSkKKyAgICAgICAgcmV0dXJuIHdy
YXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwga2V5LCB3cmFwcGVkS2V5KTsKKyAgICB9
CisgICAgCisgICAgYXV0byBtYXN0ZXJLZXkgPSBkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7
CisgICAgaWYgKCFtYXN0ZXJLZXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biB3cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIGtleSwgd3JhcHBlZEtleSk7Cisg
ICAgcmV0dXJuIHdyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KFdURk1vdmUoKm1hc3RlcktleSksIGtl
eSwgd3JhcHBlZEtleSk7CiB9CiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojp1bndyYXBDcnlwdG9L
ZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB3cmFwcGVkS2V5LCBWZWN0b3I8dWludDhfdD4mIGtl
eSkgY29uc3QKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogICAgIFNFTCBzZWxl
Y3RvciA9IEBzZWxlY3Rvcih3ZWJDcnlwdG9NYXN0ZXJLZXlGb3JXZWJWaWV3Oik7CiAgICAgaWYg
KFtbbV93ZWJWaWV3IFVJRGVsZWdhdGVdIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pIHsK
KyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTsKICAgICAgICAgTlNEYXRhICprZXlE
YXRhID0gQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBzZWxlY3Rvcik7CiAgICAgICAgIG1hc3Rl
cktleS5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KFtrZXlE
YXRhIGJ5dGVzXSkpLCBba2V5RGF0YSBsZW5ndGhdKTsKLSAgICB9IGVsc2UgaWYgKCFnZXREZWZh
dWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3RlcktleSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCB3cmFw
cGVkS2V5LCBrZXkpOworICAgIH0KIAotICAgIHJldHVybiB1bndyYXBTZXJpYWxpemVkQ3J5cHRv
S2V5KG1hc3RlcktleSwgd3JhcHBlZEtleSwga2V5KTsKKyAgICBhdXRvIG1hc3RlcktleSA9IGRl
ZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBpZiAoIW1hc3RlcktleSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiB1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KFdURk1v
dmUoKm1hc3RlcktleSksIHdyYXBwZWRLZXksIGtleSk7CiB9CiAKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5tbQkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00MDgsMTAgKzQwOCwxMCBAQCB2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50
OjpzYXZlKGNvCiAgICAgICAgIG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dlc3Rl
ZFVSTENvcHksIGFjdHVhbFVSTCk7CiAKICAgICAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAg
ICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29k
ZShjb250ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICAgICAg
YXV0byBkZWNvZGVkRGF0YSA9IGJhc2U2NERlY29kZShjb250ZW50LCBCYXNlNjREZWNvZGVPcHRp
b25zOjpWYWxpZGF0ZVBhZGRpbmcpOworICAgICAgICAgICAgaWYgKCFkZWNvZGVkRGF0YSkKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRh
Q29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEo
KSBsZW5ndGg6b3V0LnNpemUoKV0pOworICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0
YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmRlY29kZWRE
YXRhLT5kYXRhKCkgbGVuZ3RoOmRlY29kZWREYXRhLT5zaXplKCldKTsKICAgICAgICAgICAgIFtk
YXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0
b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwpJ
bmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2
aXNpb24gMjc3NzI4KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzIgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisg
ICAgICAgIFVwZGF0ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdG8gbWF0Y2ggbW9yZSBtb2Rl
cm4gV2ViS2l0IGNvbnZlbnRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjU5MjAKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4K
KworICAgICAgICBVcGRhdGUgdG8gdXNlIHVwZGF0ZWQgYmFzZTY0IGFuZCBkZWZhdWx0V2ViQ3J5
cHRvTWFzdGVyS2V5KCkgcmVsYXRlZAorICAgICAgICBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BT
ZXJ2ZXI6OnN0YXJ0U2VjdXJlQ29ubmVjdGlvbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
Q1BTZXJ2ZXI6OnRlc3RDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BT
ZXJ2ZXI6OnRlc3RQcml2YXRlS2V5KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvSVNPQm94LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJl
bWVudENvY29hLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFw
Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbToKKyAgICAgICAgKHRlc3RJZGVu
dGl0eTIpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRXZlbnRB
dHRyaWJ1dGlvbi5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdlbmVyYXRvci5tbToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQ
U2VydmVyLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q29ubmVjdGlvbjo6d2ViU29ja2V0
SGFuZHNoYWtlKToKKwogMjAyMS0wNS0xOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzc0NDQuCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw5ICsxNTUs
OCBAQCB2b2lkIFRDUFNlcnZlcjo6c3RhcnRTZWN1cmVDb25uZWN0aW9uKFNvCiAgICAgImxkWTlh
dmNUR1N3YndvaXVJcXYwalRMMWZIRm56eTNSSE1MRGgrTHB2b2xjNURTclNKSENQNVd1SzBlZUpY
aHIiCiAgICAgIlQ1b1FwSEw5ei9jQ0RMQUtDS1JhNHVWMGZoRWRPV0JxeVI5cDh5NWpKdHllNzJ0
NkN1RlVWNWlxY3BGNEJINGYiCiAgICAgImoyVk5Id3NTckp3a0Q0UVVHbFV0SDd2d25RbXlDRnha
TW1XQUpnPT0iKTsKLSAgICBWZWN0b3I8dWludDhfdD4gY2VydERFUjsKLSAgICBiYXNlNjREZWNv
ZGUoY2VydFBFTSwgY2VydERFUiwgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZh
dWx0KTsKLSAgICBzc2w6OnVuaXF1ZV9wdHI8Q1JZUFRPX0JVRkZFUj4gY2VydChDUllQVE9fQlVG
RkVSX25ldyhjZXJ0REVSLmRhdGEoKSwgY2VydERFUi5zaXplKCksIG51bGxwdHIpKTsKKyAgICBh
dXRvIGNlcnRERVIgPSBiYXNlNjREZWNvZGUoY2VydFBFTSk7CisgICAgc3NsOjp1bmlxdWVfcHRy
PENSWVBUT19CVUZGRVI+IGNlcnQoQ1JZUFRPX0JVRkZFUl9uZXcoY2VydERFUi0+ZGF0YSgpLCBj
ZXJ0REVSLT5zaXplKCksIG51bGxwdHIpKTsKICAgICBBU1NFUlQoY2VydCk7CiAKICAgICAvLyBU
aGlzIGlzIGEgdGVzdCBrZXkgZnJvbSBCb3JpbmdTU0wuCkBAIC00MTIsOSArNDExLDggQEAgVmVj
dG9yPHVpbnQ4X3Q+IFRDUFNlcnZlcjo6dGVzdENlcnRpZmljYQogICAgICJHM1BGblliVzh1ckgw
TlNKRy9XKy85REErWTdBYTBjczRUUHB1QkdaME5VMVc5NE9vQ01vNGxrTzZIL3k2TGV1IgogICAg
ICIzdmpaRDN5OWtaazdtcmU5WEh3a0k4TWRLNXM9Iik7CiAgICAgCi0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHZlY3RvcjsKLSAgICBiYXNlNjREZWNvZGUocGVtRW5jb2RlZENlcnRpZmljYXRlLCB2ZWN0
b3IsIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9uczo6QmFzZTY0RGVmYXVsdCk7Ci0gICAgcmV0dXJu
IHZlY3RvcjsKKyAgICBhdXRvIGRlY29kZWRDZXJ0aWZpY2F0ZSA9IGJhc2U2NERlY29kZShwZW1F
bmNvZGVkQ2VydGlmaWNhdGUpOworICAgIHJldHVybiBXVEZNb3ZlKCpkZWNvZGVkQ2VydGlmaWNh
dGUpOwogfQogCiBWZWN0b3I8dWludDhfdD4gVENQU2VydmVyOjp0ZXN0UHJpdmF0ZUtleSgpCkBA
IC00NzEsOSArNDY5LDggQEAgVmVjdG9yPHVpbnQ4X3Q+IFRDUFNlcnZlcjo6dGVzdFByaXZhdGVL
ZQogICAgICJkRU9idmNwU2hQMjJJdE9WalNhbXBSdUF1UkcyNlplbUViR0NJM0o2TXF4M3k2bSs2
SHd1bHRzZ3RkekRnckZlIgogICAgICJxSmZVOGJiZGJ1MnBpNDdZNEZkSkswSExmZmw1Unc9PSIp
OwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsKLSAgICBiYXNlNjREZWNvZGUocGVtRW5j
b2RlZFByaXZhdGVLZXksIHZlY3RvciwgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjRE
ZWZhdWx0KTsKLSAgICByZXR1cm4gdmVjdG9yOworICAgIGF1dG8gZGVjb2RlZFByaXZhdGVLZXkg
PSBiYXNlNjREZWNvZGUocGVtRW5jb2RlZFByaXZhdGVLZXkpOworICAgIHJldHVybiBXVEZNb3Zl
KCpkZWNvZGVkUHJpdmF0ZUtleSk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNw
cAkocmV2aXNpb24gMjc3NzI4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0lTT0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDExICs0MiwxMSBAQCBzdGF0aWMgY29u
c3QgY2hhciogYmFzZTY0RW5jb2RlZFNpbmZXaXRoCiAKIFRFU1QoSVNPQm94LCBJU09Qcm90ZWN0
aW9uU2NoZW1lSW5mb0JveCkKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gc2luZkFycmF5OwotICAg
IEFTU0VSVF9UUlVFKGJhc2U2NERlY29kZShTdHJpbmdWaWV3KGJhc2U2NEVuY29kZWRTaW5mV2l0
aEtleUlEMyksIHNpbmZBcnJheSkpOwotICAgIEFTU0VSVF9FUSg5N1VMLCBzaW5mQXJyYXkuc2l6
ZSgpKTsKKyAgICBhdXRvIHNpbmZBcnJheSA9IGJhc2U2NERlY29kZShTdHJpbmdWaWV3KGJhc2U2
NEVuY29kZWRTaW5mV2l0aEtleUlEMykpOworICAgIEFTU0VSVF9UUlVFKHNpbmZBcnJheSk7Cisg
ICAgQVNTRVJUX0VRKDk3VUwsIHNpbmZBcnJheS0+c2l6ZSgpKTsKIAotICAgIGF1dG8gdmlldyA9
IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKHNpbmZBcnJheS5kYXRh
KCksIHNpbmZBcnJheS5zaXplKCkpLCAwLCBzaW5mQXJyYXkuc2l6ZSgpKTsKKyAgICBhdXRvIHZp
ZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShzaW5mQXJyYXkt
PmRhdGEoKSwgc2luZkFycmF5LT5zaXplKCkpLCAwLCBzaW5mQXJyYXktPnNpemUoKSk7CiAKICAg
ICBJU09Qcm90ZWN0aW9uU2NoZW1lSW5mb0JveCBzaW5mQm94OwogICAgIEFTU0VSVF9UUlVFKHNp
bmZCb3gucmVhZCh2aWV3KSk7CkBAIC03OCwxMSArNzgsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIq
IGJhc2U2NEVuY29kZWRQc3NoV2l0aAogCiBURVNUKElTT0JveCwgSVNPRmFpclBsYXlTdHJlYW1p
bmdQc3NoQm94KQogewotICAgIFZlY3Rvcjx1aW50OF90PiBwc3NoQXJyYXk7Ci0gICAgQVNTRVJU
X1RSVUUoYmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2RlZFBzc2hXaXRoQXNzZXRJ
ZCksIHBzc2hBcnJheSkpOwotICAgIEFTU0VSVF9FUSgxNzZVTCwgcHNzaEFycmF5LnNpemUoKSk7
CisgICAgYXV0byBwc3NoQXJyYXkgPSBiYXNlNjREZWNvZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNv
ZGVkUHNzaFdpdGhBc3NldElkKSk7CisgICAgQVNTRVJUX1RSVUUocHNzaEFycmF5KTsKKyAgICBB
U1NFUlRfRVEoMTc2VUwsIHBzc2hBcnJheS0+c2l6ZSgpKTsKIAotICAgIGF1dG8gdmlldyA9IEpT
Qzo6RGF0YVZpZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKHBzc2hBcnJheS5kYXRhKCks
IHBzc2hBcnJheS5zaXplKCkpLCAwLCBwc3NoQXJyYXkuc2l6ZSgpKTsKKyAgICBhdXRvIHZpZXcg
PSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShwc3NoQXJyYXktPmRh
dGEoKSwgcHNzaEFycmF5LT5zaXplKCkpLCAwLCBwc3NoQXJyYXktPnNpemUoKSk7CiAKICAgICBJ
U09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3ggcHNzaEJveDsKIApJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2Eu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29h
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0JKHJldmlzaW9uIDI3NzcyOCkKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJl
bWVudENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIFRFU1QoUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQsIFZhbGlkQmxpbmQKICAgICBhdXRvICpuc1Nwa2lEYXRhID0gKF9f
YnJpZGdlIE5TRGF0YSAqKXNwa2lEYXRhLmdldCgpOwogCiAgICAgLy8gQ29udGludWUgdGhlIHRl
c3QuCi0gICAgRVhQRUNUX1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVVubGlua2Fi
bGVUb2tlbihXVEY6OmJhc2U2NFVSTEVuY29kZShuc1Nwa2lEYXRhLmJ5dGVzLCBuc1Nwa2lEYXRh
Lmxlbmd0aCkpKTsKKyAgICBFWFBFQ1RfVFJVRShwY20uY2FsY3VsYXRlQW5kVXBkYXRlU291cmNl
VW5saW5rYWJsZVRva2VuKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKG5zU3BraURhdGEuYnl0ZXMs
IG5zU3BraURhdGEubGVuZ3RoKSkpOwogICAgIGF1dG8gc291cmNlU2VjcmV0VG9rZW4gPSBwY20u
dG9rZW5TaWduYXR1cmVKU09OKCk7CiAgICAgRVhQRUNUX0VRKHNvdXJjZVNlY3JldFRva2VuLT5h
c09iamVjdCgpLT5zaXplKCksIDR1bCk7CiAgICAgRVhQRUNUX1NUUkVRKHNvdXJjZVNlY3JldFRv
a2VuLT5nZXRTdHJpbmcoInNvdXJjZV9lbmdhZ2VtZW50X3R5cGUiX3MpLnV0ZjgoKS5kYXRhKCks
ICJjbGljayIpOwpAQCAtOTAsMTQgKzkwLDEzIEBAIFRFU1QoUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQsIFZhbGlkQmxpbmQKICAgICBFWFBFQ1RfRVEoc291cmNlU2VjcmV0VG9rZW4tPmdldEludGVn
ZXIoInZlcnNpb24iX3MpLCAyKTsKIAogICAgIC8vIEdlbmVyYXRlIHRoZSBzaWduYXR1cmUuCi0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGJsaW5kZWRNZXNzYWdlOwotICAgIGJhc2U2NFVSTERlY29kZShz
b3VyY2VTZWNyZXRUb2tlbi0+Z2V0U3RyaW5nKCJzb3VyY2Vfc2VjcmV0X3Rva2VuIl9zKSwgYmxp
bmRlZE1lc3NhZ2UpOworICAgIGF1dG8gYmxpbmRlZE1lc3NhZ2UgPSBiYXNlNjRVUkxEZWNvZGUo
c291cmNlU2VjcmV0VG9rZW4tPmdldFN0cmluZygic291cmNlX3NlY3JldF90b2tlbiJfcykpOwog
Ci0gICAgYXV0byBibGluZGVkU2lnbmF0dXJlID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxs
b2NdIGluaXRXaXRoTGVuZ3RoOiBtb2R1bHVzTkJ5dGVzXSk7Ci0gICAgY2Nyc2Fic3NhX3NpZ25f
YmxpbmRlZF9tZXNzYWdlKGNpcGhlcnN1aXRlLCByc2FQcml2YXRlS2V5LCBibGluZGVkTWVzc2Fn
ZS5kYXRhKCksIGJsaW5kZWRNZXNzYWdlLnNpemUoKSwgc3RhdGljX2Nhc3Q8dWludDhfdCAqPihb
YmxpbmRlZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3Ro
XSwgcm5nKTsKKyAgICBhdXRvIGJsaW5kZWRTaWduYXR1cmUgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
RGF0YSBhbGxvY10gaW5pdFdpdGhMZW5ndGg6bW9kdWx1c05CeXRlc10pOworICAgIGNjcnNhYnNz
YV9zaWduX2JsaW5kZWRfbWVzc2FnZShjaXBoZXJzdWl0ZSwgcnNhUHJpdmF0ZUtleSwgYmxpbmRl
ZE1lc3NhZ2UtPmRhdGEoKSwgYmxpbmRlZE1lc3NhZ2UtPnNpemUoKSwgc3RhdGljX2Nhc3Q8dWlu
dDhfdCAqPihbYmxpbmRlZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1
cmUgbGVuZ3RoXSwgcm5nKTsKIAogICAgIC8vIENvbnRpbnVlIHRoZSB0ZXN0LgotICAgIEVYUEVD
VF9UUlVFKHBjbS5jYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VTZWNyZXRUb2tlbihXVEY6OmJhc2U2
NFVSTEVuY29kZShbYmxpbmRlZFNpZ25hdHVyZSBieXRlc10sIFtibGluZGVkU2lnbmF0dXJlIGxl
bmd0aF0pKSk7CisgICAgRVhQRUNUX1RSVUUocGNtLmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJjZVNl
Y3JldFRva2VuKGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFtibGluZGVkU2lnbmF0dXJlIGJ5dGVz
XSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSkpKTsKICAgICBhdXRvJiBwZXJzaXN0ZW50VG9r
ZW4gPSBwY20uc291cmNlVW5saW5rYWJsZVRva2VuKCk7CiAgICAgRVhQRUNUX1RSVUUocGVyc2lz
dGVudFRva2VuKTsKICAgICBFWFBFQ1RfRkFMU0UocGVyc2lzdGVudFRva2VuLT50b2tlbkJhc2U2
NFVSTC5pc0VtcHR5KCkpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NvY29hL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5t
bQkocmV2aXNpb24gMjc3NzI4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NvY29hL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NCwz
NyArNDQsMzcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLVRFU1RfRihTZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcFRlc3QsIEdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpCitURVNUX0YoU2VyaWFs
aXplZENyeXB0b0tleVdyYXBUZXN0LCBEZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KQogewotICAg
IFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXkxOwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6Omdl
dERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5MSkpOworICAgIGF1dG8gbWFzdGVy
S2V5MSA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1Rf
VFJVRShtYXN0ZXJLZXkxKTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXkyOwotICAg
IEVYUEVDVF9UUlVFKFdlYkNvcmU6OmdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVy
S2V5MikpOworICAgIGF1dG8gbWFzdGVyS2V5MiA9IFdlYkNvcmU6OmRlZmF1bHRXZWJDcnlwdG9N
YXN0ZXJLZXkoKTsKKyAgICBFWFBFQ1RfVFJVRShtYXN0ZXJLZXkyKTsKIAogICAgIEVYUEVDVF9U
UlVFKG1hc3RlcktleTEgPT0gbWFzdGVyS2V5Mik7CiB9CiAKIFRFU1RfRihTZXJpYWxpemVkQ3J5
cHRvS2V5V3JhcFRlc3QsIERlbGV0ZURlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkpCiB7Ci0gICAg
VmVjdG9yPHVpbnQ4X3Q+IG1hc3RlcktleTE7Ci0gICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6Z2V0
RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkxKSk7CisgICAgYXV0byBtYXN0ZXJL
ZXkxID0gV2ViQ29yZTo6ZGVmYXVsdFdlYkNyeXB0b01hc3RlcktleSgpOworICAgIEVYUEVDVF9U
UlVFKG1hc3RlcktleTEpOwogICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OmRlbGV0ZURlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkoKSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5MjsK
LSAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1h
c3RlcktleTIpKTsKKyAgICBhdXRvIG1hc3RlcktleTIgPSBXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5
cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQRUNUX1RSVUUobWFzdGVyS2V5Mik7CiAKICAgICBFWFBF
Q1RfVFJVRShtYXN0ZXJLZXkxICE9IG1hc3RlcktleTIpOwogfQogCiBURVNUX0YoU2VyaWFsaXpl
ZENyeXB0b0tleVdyYXBUZXN0LCBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFVud3JhcCkKIHsKLSAg
ICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6Omdl
dERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXkobWFzdGVyS2V5KSk7CisgICAgYXV0byBtYXN0ZXJL
ZXkgPSBXZWJDb3JlOjpkZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KCk7CisgICAgRVhQRUNUX1RS
VUUobWFzdGVyS2V5KTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBjcnlwdG9LZXkoMTYsIDEpOwog
ICAgIFZlY3Rvcjx1aW50OF90PiB3cmFwcGVkS2V5OwotICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6
OndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1hc3RlcktleSwgY3J5cHRvS2V5LCB3cmFwcGVkS2V5
KSk7CisgICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6d3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoKm1h
c3RlcktleSwgY3J5cHRvS2V5LCB3cmFwcGVkS2V5KSk7CiAgICAgRVhQRUNUX1RSVUUoY3J5cHRv
S2V5ICE9IHdyYXBwZWRLZXkpOwogICAgIC8vIGVuc3VyZSB3cmFwcGVkS2V5IGRvZXNuJ3QgY29u
dGFpbiBjcnlwdG9LZXkKICAgICBib29sIG5vdENvbnRhaW5lZCA9IHRydWU7CkBAIC05MCw3ICs5
MCw3IEBAIFRFU1RfRihTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcFRlc3QsIFNlcmkKICAgICBFWFBF
Q1RfVFJVRShub3RDb250YWluZWQpOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVud3JhcHBlZEtl
eTsKLSAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjp1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KG1h
c3RlcktleSwgd3JhcHBlZEtleSwgdW53cmFwcGVkS2V5KSk7CisgICAgRVhQRUNUX1RSVUUoV2Vi
Q29yZTo6dW53cmFwU2VyaWFsaXplZENyeXB0b0tleSgqbWFzdGVyS2V5LCB3cmFwcGVkS2V5LCB1
bndyYXBwZWRLZXkpKTsKICAgICBFWFBFQ1RfVFJVRSh1bndyYXBwZWRLZXkgPT0gY3J5cHRvS2V5
KTsKIH0KIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFs
bGVuZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9DaGFsbGVuZ2UubW0JKHJldmlzaW9uIDI3NzcyOCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYs
MTMgKzE3NiwxMCBAQCBSZXRhaW5QdHI8U2VjSWRlbnRpdHlSZWY+IHRlc3RJZGVudGl0eTIoCiAg
ICAgIkpBSDJueEtHdXF0QUsyaFdiQUN1NjFSVDVnQXFBdi9oQjlKWW5jMk9pUTJWbWpZa09rMkdF
ZElqbjB4U2dYN1ciCiAgICAgIm1JL2hIYnhLTUczUmt2OXExQ3grV0IvdjF0OD0iKTsKIAotICAg
IFZlY3Rvcjx1aW50OF90PiBwcml2YXRlS2V5Qnl0ZXM7Ci0gICAgYmFzZTY0RGVjb2RlKHBlbUVu
Y29kZWRQcml2YXRlS2V5LCBwcml2YXRlS2V5Qnl0ZXMsIFdURjo6QmFzZTY0RGVjb2RlT3B0aW9u
czo6QmFzZTY0RGVmYXVsdCk7CisgICAgYXV0byBwcml2YXRlS2V5Qnl0ZXMgPSBiYXNlNjREZWNv
ZGUocGVtRW5jb2RlZFByaXZhdGVLZXkpOworICAgIGF1dG8gY2VydGlmaWNhdGVCeXRlcyA9IGJh
c2U2NERlY29kZShwZW1FbmNvZGVkQ2VydGlmaWNhdGUpOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+
IGNlcnRpZmljYXRlQnl0ZXM7Ci0gICAgYmFzZTY0RGVjb2RlKHBlbUVuY29kZWRDZXJ0aWZpY2F0
ZSwgY2VydGlmaWNhdGVCeXRlcywgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZh
dWx0KTsKLQotICAgIHJldHVybiBjcmVhdGVUZXN0SWRlbnRpdHkocHJpdmF0ZUtleUJ5dGVzLCBj
ZXJ0aWZpY2F0ZUJ5dGVzKTsKKyAgICByZXR1cm4gY3JlYXRlVGVzdElkZW50aXR5KFdURk1vdmUo
KnByaXZhdGVLZXlCeXRlcyksIFdURk1vdmUoKmNlcnRpZmljYXRlQnl0ZXMpKTsKIH0KIAogc3Rh
dGljIFJldGFpblB0cjxOU1VSTENyZWRlbnRpYWw+IGNyZWRlbnRpYWxXaXRoSWRlbnRpdHkoKQpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJpYnV0
aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvRXZlbnRBdHRyaWJ1dGlvbi5tbQkocmV2aXNpb24gMjc3NzI4KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FdmVudEF0dHJpYnV0aW9uLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTksNyArMTU5LDcgQEAgVEVTVChFdmVudEF0dHJpYnV0aW9uLCBGcmF1ZFByZXZl
bnRpb24pCiAgICAgYXV0byBzcGtpRGF0YSA9IGFkb3B0Q0YoU2VjS2V5Q29weVN1YmplY3RQdWJs
aWNLZXlJbmZvKHNlY0tleS5nZXQoKSkpOwogICAgIGF1dG8gKm5zU3BraURhdGEgPSAoX19icmlk
Z2UgTlNEYXRhICopc3BraURhdGEuZ2V0KCk7CiAKLSAgICBhdXRvIGtleURhdGEgPSBXVEY6OmJh
c2U2NFVSTEVuY29kZShuc1Nwa2lEYXRhLmJ5dGVzLCBuc1Nwa2lEYXRhLmxlbmd0aCk7CisgICAg
YXV0byBrZXlEYXRhID0gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IobnNTcGtpRGF0YS5ieXRlcywg
bnNTcGtpRGF0YS5sZW5ndGgpOwogCiAgICAgLy8gVGhlIHNlcnZlci4KICAgICBIVFRQU2VydmVy
IHNlcnZlcihbJmRvbmUsIGNvbm5lY3Rpb25Db3VudCA9IDAsICZyc2FQcml2YXRlS2V5LCAmbW9k
dWx1c05CeXRlcywgJnJuZywgJmtleURhdGEsICZzZWNLZXldIChDb25uZWN0aW9uIGNvbm5lY3Rp
b24pIG11dGFibGUgewpAQCAtMTg0LDEzICsxODQsMTIgQEAgVEVTVChFdmVudEF0dHJpYnV0aW9u
LCBGcmF1ZFByZXZlbnRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGVuZCA9IHJl
cXVlc3QyU3RyaW5nLmZpbmQoJyInLCBzdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIHRva2VuID0gcmVxdWVzdDJTdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBibGluZGVkTWVzc2Fn
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NFVSTERlY29kZSh0b2tlbiwgYmxpbmRl
ZE1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBibGluZGVkTWVzc2FnZSA9
IGJhc2U2NFVSTERlY29kZSh0b2tlbik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0cnVjdCBjY3JzYWJzc2FfY2lwaGVyc3VpdGUgKmNpcGhlcnN1aXRlID0gJmNjcnNhYnNzYV9j
aXBoZXJzdWl0ZV9yc2E0MDk2X3NoYTM4NDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
YmxpbmRlZFNpZ25hdHVyZSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0
aExlbmd0aDogbW9kdWx1c05CeXRlc10pOwotICAgICAgICAgICAgICAgICAgICAgICAgY2Nyc2Fi
c3NhX3NpZ25fYmxpbmRlZF9tZXNzYWdlKGNpcGhlcnN1aXRlLCByc2FQcml2YXRlS2V5LCBibGlu
ZGVkTWVzc2FnZS5kYXRhKCksIGJsaW5kZWRNZXNzYWdlLnNpemUoKSwgc3RhdGljX2Nhc3Q8dWlu
dDhfdCAqPihbYmxpbmRlZFNpZ25hdHVyZSBtdXRhYmxlQnl0ZXNdKSwgW2JsaW5kZWRTaWduYXR1
cmUgbGVuZ3RoXSwgcm5nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5saW5rYWJs
ZVRva2VuID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoW2JsaW5kZWRTaWduYXR1cmUgYnl0ZXNdLCBb
YmxpbmRlZFNpZ25hdHVyZSBsZW5ndGhdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
YmxpbmRlZFNpZ25hdHVyZSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0
aExlbmd0aDptb2R1bHVzTkJ5dGVzXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjY3JzYWJz
c2Ffc2lnbl9ibGluZGVkX21lc3NhZ2UoY2lwaGVyc3VpdGUsIHJzYVByaXZhdGVLZXksIGJsaW5k
ZWRNZXNzYWdlLT5kYXRhKCksIGJsaW5kZWRNZXNzYWdlLT5zaXplKCksIHN0YXRpY19jYXN0PHVp
bnQ4X3QgKj4oW2JsaW5kZWRTaWduYXR1cmUgbXV0YWJsZUJ5dGVzXSksIFtibGluZGVkU2lnbmF0
dXJlIGxlbmd0aF0sIHJuZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVubGlua2Fi
bGVUb2tlbiA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKFtibGluZGVkU2lnbmF0dXJlIGJ5dGVz
XSwgW2JsaW5kZWRTaWduYXR1cmUgbGVuZ3RoXSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEV4YW1wbGUgcmVzcG9uc2U6IHsgInVubGlua2FibGVfdG9rZW4iOiAiQUJDRCIgfS4gIkFC
Q0QiIHNob3VsZCBiZSBCYXNlNjRVUkwgZW5jb2RlZC4KICAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gcmVzcG9uc2UgPSBtYWtlU3RyaW5nKCJIVFRQLzEuMSAyMDAgT0tcclxuIgpAQCAtMjIy
LDE4ICsyMjEsMTYgQEAgVEVTVChFdmVudEF0dHJpYnV0aW9uLCBGcmF1ZFByZXZlbnRpb24pCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKz0ga2V5Lmxlbmd0
aCgpICsgMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGVu
ZCA9IHJlcXVlc3Q0U3RyaW5nLmZpbmQoJyInLCBzdGFydCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byB0b2tlbiA9IHJlcXVlc3Q0U3RyaW5nLnN1YnN0cmlu
ZyhzdGFydCwgZW5kIC0gc3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiB0b2tlblZlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiYXNlNjRVUkxEZWNvZGUodG9rZW4sIHRva2VuVmVjdG9yKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRva2VuRGF0YSA9
IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6dG9rZW5WZWN0b3IuZGF0YSgp
IGxlbmd0aDp0b2tlblZlY3Rvci5zaXplKCldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIHRva2VuVmVjdG9yID0gYmFzZTY0VVJMRGVjb2RlKHRva2VuKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRva2VuRGF0YSA9
IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6dG9rZW5WZWN0b3ItPmRhdGEo
KSBsZW5ndGg6dG9rZW5WZWN0b3ItPnNpemUoKV0pOwogCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga2V5ID0gU3RyaW5nKCJzb3VyY2Vfc2VjcmV0X3Rva2VuX3NpZ25h
dHVyZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0g
cmVxdWVzdDRTdHJpbmcuZmluZChrZXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0ICs9IGtleS5sZW5ndGgoKSArIDM7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kID0gcmVxdWVzdDRTdHJpbmcuZmluZCgnIicsIHN0YXJ0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHNpZ25hdHVy
ZSA9IHJlcXVlc3Q0U3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1
cmVWZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0
VVJMRGVjb2RlKHNpZ25hdHVyZSwgc2lnbmF0dXJlVmVjdG9yKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHNpZ25hdHVyZURhdGEgPSBhZG9wdE5TKFtbTlNE
YXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNpZ25hdHVyZVZlY3Rvci5kYXRhKCkgbGVuZ3RoOnNp
Z25hdHVyZVZlY3Rvci5zaXplKCldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIHNpZ25hdHVyZVZlY3RvciA9IGJhc2U2NFVSTERlY29kZShzaWduYXR1cmUp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2lnbmF0dXJl
RGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c2lnbmF0dXJlVmVj
dG9yLT5kYXRhKCkgbGVuZ3RoOnNpZ25hdHVyZVZlY3Rvci0+c2l6ZSgpXSk7CiAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShTZWNLZXlWZXJpZnlT
aWduYXR1cmUoc2VjS2V5LmdldCgpLCBrU2VjS2V5QWxnb3JpdGhtUlNBU2lnbmF0dXJlTWVzc2Fn
ZVBTU1NIQTM4NCwgKF9fYnJpZGdlIENGRGF0YVJlZil0b2tlbkRhdGEuZ2V0KCksIChfX2JyaWRn
ZSBDRkRhdGFSZWYpc2lnbmF0dXJlRGF0YS5nZXQoKSwgTlVMTCkpOwogCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tCShyZXZpc2lv
biAyNzc3MjgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0
b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTk4LDggKzk4LDggQEAgVEVTVF9GKFNTTEtleUdlbmVy
YXRvclRlc3QsIERlZmF1bHRUZXN0KQogICAgIGNoYXIgY2hhbGxlbmdlW10gPSAiMDEyMzQ1Njc4
OSI7CiAgICAgYXV0byByYXdSZXN1bHQgPSBXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFs
bGVuZ2VTdHJpbmcoMCwgY2hhbGxlbmdlLCB1cmwpOwogICAgIEFTU0VSVF9GQUxTRShyYXdSZXN1
bHQuaXNFbXB0eSgpKTsKLSAgICBWZWN0b3I8dWludDhfdD4gZGVyUmVzdWx0OwotICAgIEFTU0VS
VF9UUlVFKGJhc2U2NERlY29kZShyYXdSZXN1bHQsIGRlclJlc3VsdCkpOworICAgIGF1dG8gZGVy
UmVzdWx0ID0gYmFzZTY0RGVjb2RlKHJhd1Jlc3VsdCk7CisgICAgQVNTRVJUX1RSVUUoZGVyUmVz
dWx0KTsKIAogICAgIFNlY0FzbjFDb2RlclJlZiBjb2RlciA9IG51bGxwdHI7CiAgICAgQVNTRVJU
X0VRKGVyclNlY1N1Y2Nlc3MsIFNlY0FzbjFDb2RlckNyZWF0ZSgmY29kZXIpKTsKQEAgLTEwOCw3
ICsxMDgsNyBAQCBURVNUX0YoU1NMS2V5R2VuZXJhdG9yVGVzdCwgRGVmYXVsdFRlc3QpCiAgICAg
fSk7CiAKICAgICBTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2UgZGVjb2RlZFJlc3VsdCB7IH07
Ci0gICAgU2VjQXNuMUl0ZW0gZGVyUmVzdWx0SXRlbSB7IGRlclJlc3VsdC5zaXplKCksIGRlclJl
c3VsdC5kYXRhKCkgfTsKKyAgICBTZWNBc24xSXRlbSBkZXJSZXN1bHRJdGVtIHsgZGVyUmVzdWx0
LT5zaXplKCksIGRlclJlc3VsdC0+ZGF0YSgpIH07CiAgICAgQVNTRVJUX0VRKGVyclNlY1N1Y2Nl
c3MsIFNlY0FzbjFEZWNvZGVEYXRhKGNvZGVyLCAmZGVyUmVzdWx0SXRlbSwgc2lnbmVkUHVibGlj
S2V5QW5kQ2hhbGxlbmdlVGVtcGxhdGUsICZkZWNvZGVkUmVzdWx0KSk7CiAKICAgICAvLyBDaGVj
ayBjaGFsbGVuZ2UKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0J
KHJldmlzaW9uIDI3NzcyOCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZl
ci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6
d2ViU29ja2V0SGFuZHNoYWtlKENvbXAKICAgICAgICAgICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4od2ViU29ja2V0S2V5R1VJRCksIHN0cmxlbih3ZWJT
b2NrZXRLZXlHVUlEKSk7CiAgICAgICAgICAgICBTSEExOjpEaWdlc3QgaGFzaDsKICAgICAgICAg
ICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZTY0RW5j
b2RlKGhhc2guZGF0YSgpLCBTSEExOjpoYXNoU2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gYmFz
ZTY0RW5jb2RlVG9TdHJpbmcoaGFzaC5kYXRhKCksIFNIQTE6Omhhc2hTaXplKTsKICAgICAgICAg
fTsKIAogICAgICAgICBjb25uZWN0aW9uLnNlbmQoSFRUUFJlc3BvbnNlKDEwMSwgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>