<?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>183881</bug_id>
          
          <creation_ts>2018-03-21 17:05:15 -0700</creation_ts>
          <short_desc>[WebAuthN] Implement authenticatorGetAssertion</short_desc>
          <delta_ts>2018-03-27 16:06:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>181943</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jiewen Tan">jiewen_tan</reporter>
          <assigned_to name="Jiewen Tan">jiewen_tan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1408231</commentid>
    <comment_count>0</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-03-21 17:05:15 -0700</bug_when>
    <thetext>Implement authenticatorGetAssertion according to https://www.w3.org/TR/webauthn/#op-get-assertion as of 5 December 2017.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408232</commentid>
    <comment_count>1</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-03-21 17:05:56 -0700</bug_when>
    <thetext>&lt;rdar://problem/37258628&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408247</commentid>
    <comment_count>2</comment_count>
      <attachid>336250</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-03-21 18:03:38 -0700</bug_when>
    <thetext>Created attachment 336250
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408248</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-21 18:06:06 -0700</bug_when>
    <thetext>Attachment 336250 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/ios/LocalAuthenticator.mm:188:  Missing spaces around :  [whitespace/init] [4]
ERROR: Tools/TestWebKitAPI/Tests/ios/LocalAuthenticator.mm:205:  Missing spaces around :  [whitespace/init] [4]
ERROR: Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:157:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:430:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409483</commentid>
    <comment_count>4</comment_count>
      <attachid>336250</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-03-26 22:13:50 -0700</bug_when>
    <thetext>Comment on attachment 336250
Patch

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

Looks like good progress. r=me, but please fix the minor nits (aside from the OptionSet suggestion).

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:53
&gt; +const uint8_t makeCredentialFlags = 69; // UP, UV and AT are set.

Oh, I see -- this is a bitmap: 0d69 == 0b01000101 

We often use hex for bitmaps, just to help signal that we aren&apos;t dealing with a magic number -- it&apos;s a bit pattern.

Alternatively, you could use a OptionSet&lt;&gt; and state which bits are on using an enum, which would be much clearer to read. But no need to do so in this patch.

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:89
&gt; +    } counterUnion;

I assume this will eventually by defined in a header somewhere for use elsewhere? I&apos;m not keen on having a bunch of local struct definitions in the code.

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:139
&gt; +    if (!excludeCredentialIds.isEmpty()) {

I think this should be an early return, unless there are future steps that might need to happen even if there are no excludeCredentialIds.

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:148
&gt; +        CFTypeRef attributesArrayRef = NULL;

nullptr?

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:152
&gt; +            exceptionCallback({ UnknownError, ASCIILiteral(&quot;Unknown internal error.&quot;) });

This might need a bit more detail when we start trying to debug failed Keychain access. :-)

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:159
&gt; +            if (excludeCredentialIds.contains(String(reinterpret_cast&lt;const char*&gt;(nsCredentialId.bytes), nsCredentialId.length))) {

Could we have cases where the application label is not ASCII characters? I guess String is smart enough to recognize utf8 encodings and do the right thing.

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:401
&gt; +            allowCredentialIds.add(String(reinterpret_cast&lt;const char*&gt;(allowCredential.idVector.data()), allowCredential.idVector.size()));

This is the second time we&apos;ve seen this code. I feel like we need a String specialization that can take an NSData and convert to string.

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:416
&gt; +    CFTypeRef attributesArrayRef = NULL;

nullptr

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:420
&gt; +        exceptionCallback({ UnknownError, ASCIILiteral(&quot;Unknown internal error.&quot;) });

I feel like we could do a better job of error reporting here.

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:432
&gt; +            if (allowCredentialIds.contains(String(reinterpret_cast&lt;const char*&gt;(nsCredentialId.bytes), nsCredentialId.length)))

More NSData -&gt; String!

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:459
&gt; +    NSData * nsCredentialId = selectedCredentialAttributes[(id)kSecAttrApplicationLabel];

Extra space before nsCredentialId.

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:462
&gt; +    NSData * nsUserhandle = selectedCredentialAttributes[(id)kSecAttrApplicationTag];

Ditto whitespace.

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:488
&gt; +            CFTypeRef privateKeyRef = NULL;

nullptr.

&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:500
&gt; +            CFErrorRef errorRef = NULL;

nullptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409644</commentid>
    <comment_count>5</comment_count>
      <attachid>336250</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-03-27 13:04:56 -0700</bug_when>
    <thetext>Comment on attachment 336250
Patch

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

Thanks Brent for r+ my patch.

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:53
&gt;&gt; +const uint8_t makeCredentialFlags = 69; // UP, UV and AT are set.
&gt; 
&gt; Oh, I see -- this is a bitmap: 0d69 == 0b01000101 
&gt; 
&gt; We often use hex for bitmaps, just to help signal that we aren&apos;t dealing with a magic number -- it&apos;s a bit pattern.
&gt; 
&gt; Alternatively, you could use a OptionSet&lt;&gt; and state which bits are on using an enum, which would be much clearer to read. But no need to do so in this patch.

Got it. Fixed.

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:89
&gt;&gt; +    } counterUnion;
&gt; 
&gt; I assume this will eventually by defined in a header somewhere for use elsewhere? I&apos;m not keen on having a bunch of local struct definitions in the code.

Sure, I should move all constants to another header. Updated Bug 183534 to reflect this. Ideally, counter should be encoded as big endian. Since we couldn&apos;t remember counter at this moment, it is 0 all the time. It makes little and big endian no differences.

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:139
&gt;&gt; +    if (!excludeCredentialIds.isEmpty()) {
&gt; 
&gt; I think this should be an early return, unless there are future steps that might need to happen even if there are no excludeCredentialIds.

Actually, this branch is an early return. See L160.

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:148
&gt;&gt; +        CFTypeRef attributesArrayRef = NULL;
&gt; 
&gt; nullptr?

In conventional CFTypeRef initialization, it uses NULL following the C style. In WebKit though, occurrence of nullptr outweighs NULL for CFTypeRef initialization.
Changed all initialization to use nullptr.

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:152
&gt;&gt; +            exceptionCallback({ UnknownError, ASCIILiteral(&quot;Unknown internal error.&quot;) });
&gt; 
&gt; This might need a bit more detail when we start trying to debug failed Keychain access. :-)

It is intentional to not report too detailed error back to Web but keep it in local logs. Maybe I am too cautious?

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:159
&gt;&gt; +            if (excludeCredentialIds.contains(String(reinterpret_cast&lt;const char*&gt;(nsCredentialId.bytes), nsCredentialId.length))) {
&gt; 
&gt; Could we have cases where the application label is not ASCII characters? I guess String is smart enough to recognize utf8 encodings and do the right thing.

The way I do this is just to use the hash function of String. So I treat the whole application label as an ASCII string. It doesn&apos;t matter what encoding application label is encoded. I should detail this in the ChangeLog as well. Fixed.

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:401
&gt;&gt; +            allowCredentialIds.add(String(reinterpret_cast&lt;const char*&gt;(allowCredential.idVector.data()), allowCredential.idVector.size()));
&gt; 
&gt; This is the second time we&apos;ve seen this code. I feel like we need a String specialization that can take an NSData and convert to string.

Well, the algorithm the LocalAuthenticator::getAssertion and LocalAuthenticator::makeCredential find intersection are the same. However, the ways they use the algorithm is such different that it is hard, at least for me, to unify them into a helper function.
I unified the way how hashset is produced.

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:416
&gt;&gt; +    CFTypeRef attributesArrayRef = NULL;
&gt; 
&gt; nullptr

Fixed.

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:420
&gt;&gt; +        exceptionCallback({ UnknownError, ASCIILiteral(&quot;Unknown internal error.&quot;) });
&gt; 
&gt; I feel like we could do a better job of error reporting here.

See above.

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:432
&gt;&gt; +            if (allowCredentialIds.contains(String(reinterpret_cast&lt;const char*&gt;(nsCredentialId.bytes), nsCredentialId.length)))
&gt; 
&gt; More NSData -&gt; String!

This is probably too subtle to optimize.

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:459
&gt;&gt; +    NSData * nsCredentialId = selectedCredentialAttributes[(id)kSecAttrApplicationLabel];
&gt; 
&gt; Extra space before nsCredentialId.

Fixed.

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:462
&gt;&gt; +    NSData * nsUserhandle = selectedCredentialAttributes[(id)kSecAttrApplicationTag];
&gt; 
&gt; Ditto whitespace.

Fixed.

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:488
&gt;&gt; +            CFTypeRef privateKeyRef = NULL;
&gt; 
&gt; nullptr.

Fixed.

&gt;&gt; Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:500
&gt;&gt; +            CFErrorRef errorRef = NULL;
&gt; 
&gt; nullptr.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409648</commentid>
    <comment_count>6</comment_count>
      <attachid>336614</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-03-27 13:11:10 -0700</bug_when>
    <thetext>Created attachment 336614
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409649</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-27 13:12:34 -0700</bug_when>
    <thetext>Attachment 336614 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/ios/LocalAuthenticator.mm:188:  Missing spaces around :  [whitespace/init] [4]
ERROR: Tools/TestWebKitAPI/Tests/ios/LocalAuthenticator.mm:205:  Missing spaces around :  [whitespace/init] [4]
ERROR: Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:161:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:430:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409652</commentid>
    <comment_count>8</comment_count>
      <attachid>336615</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-03-27 13:25:59 -0700</bug_when>
    <thetext>Created attachment 336615
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409654</commentid>
    <comment_count>9</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-27 13:27:44 -0700</bug_when>
    <thetext>Attachment 336615 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/ios/LocalAuthenticator.mm:188:  Missing spaces around :  [whitespace/init] [4]
ERROR: Tools/TestWebKitAPI/Tests/ios/LocalAuthenticator.mm:205:  Missing spaces around :  [whitespace/init] [4]
ERROR: Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:160:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.mm:427:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409706</commentid>
    <comment_count>10</comment_count>
      <attachid>336615</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-27 15:42:50 -0700</bug_when>
    <thetext>Comment on attachment 336615
Patch for landing

Clearing flags on attachment: 336615

Committed r230012: &lt;https://trac.webkit.org/changeset/230012&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336250</attachid>
            <date>2018-03-21 18:03:38 -0700</date>
            <delta_ts>2018-03-26 22:13:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183881-20180321180338.patch</filename>
            <type>text/plain</type>
            <size>57703</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5NzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzhiMjU0NTk2YTU5YTI0
NzkyMzJiMjhmMzk4MzEyODFlMDJlY2YwMy4uMDMxYWQ1OTZlNzJjZWVjYmNiNWRhNGQ1ZThjZTU4
MzE1ODJhZmIxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE4LTAzLTIxICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhOXSBJbXBs
ZW1lbnQgYXV0aGVudGljYXRvckdldEFzc2VydGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzODgxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
NzI1ODYyOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGRvZXMgdGhlIGZvbGxvd2luZyBmZXcgdGhpbmdzOgorICAgICAgICAxKSBJ
dCBpbXBsZW1lbnRzIHRoZSBzcGVjOiBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4vI29w
LWdldC1hc3NlcnRpb24gYXMgb2YgNSBEZWNlbWJlciAyMDE3LgorICAgICAgICAyKSBJdCB0d2Vh
a3MgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25z
IHN1Y2ggdGhhdCBvcHRpb25zIGNhbiBiZSBwYXNzZWQKKyAgICAgICAgYmV0d2VlbiBVSSBhbmQg
V2ViIHByb2Nlc3Nlcy4KKyAgICAgICAgMykgSXQgcmVmaW5lcyB0aGUgd2F5IGhvdyBMb2NhbEF1
dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsIGZpbmQgaW50ZXJzZWN0aW9uIGJldHdlZW4KKyAg
ICAgICAgZXhjbHVkZUNyZWRlbnRpYWxEZXNjcmlwdG9yTGlzdCBhbmQgZXhpc3RpbmcgY3JlZGVu
dGlhbHMgaW4gdGhlIGF1dGhlbnRpY2F0b3IsIHN1Y2ggdGhhdCBpdCBpcyBmYXN0ZXIuCisgICAg
ICAgIFRoZSBuZXcgd2F5IGlzIGFsc28gZW1wbG95ZWQgaW4gTG9jYWxBdXRoZW50aWNhdG9yOjpn
ZXRBc3NlcnRpb24gdG8gZmluZCBpbnRlcnNlY3Rpb24uCisgICAgICAgIDQpIEl0IGFic3RyYWN0
cyB0aGUgd2F5IHRvIHByb2R1Y2UgYXV0aERhdGEgYW5kIHRodXMgcmVvcmRlcnMgYSBiaXQgb2Yg
Y29kZSBpbgorICAgICAgICBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsLgorCisg
ICAgICAgIENvdmVyZWQgYnkgQVBJIHRlc3RzLgorCisgICAgICAgICogTW9kdWxlcy93ZWJhdXRo
bi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdXRoZW50aWNh
dG9yTWFuYWdlcjo6Y3JlYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0
b3JNYW5hZ2VyOjpkaXNjb3ZlckZyb21FeHRlcm5hbFNvdXJjZSBjb25zdCk6CisgICAgICAgICog
TW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9u
czo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9uczo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL2NvY29h
L0xvY2FsQXV0aGVudGljYXRvci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vY29jb2Ev
TG9jYWxBdXRoZW50aWNhdG9yLm1tOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxBdXRoZW50aWNh
dG9ySW50ZXJuYWw6OmJ1aWxkQXV0aERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxBdXRo
ZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEF1dGhl
bnRpY2F0b3I6OmdldEFzc2VydGlvbik6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorCiAyMDE4LTAzLTE5ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYW5vdGhlciBxdWljayBmaXggZm9yIHIyMjk2
OTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggNzEwYTdmZGMyNjBkNGMwMjNhZDEzYWVlMjgxN2MzMDliNmQ5Y2RmMi4u
YjcyYmVkODdjMDMyYTBlNzVlMTdlY2JhYTZjY2YwNjNlNmRhNTMwNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAxOC0wMy0yMSAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29t
PgorCisgICAgICAgIFtXZWJBdXRoTl0gSW1wbGVtZW50IGF1dGhlbnRpY2F0b3JHZXRBc3NlcnRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzg4
MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzcyNTg2Mjg+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFt
bDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlh
bHNNZXNzZW5nZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNyZWRlbnRpYWxzTWVz
c2VuZ2VyUHJveHk6Om1ha2VDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ3JlZGVu
dGlhbHNNZXNzZW5nZXJQcm94eTo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q3JlZGVudGlhbHNNZXNzZW5nZXJQcm94eTo6Z2V0QXNzZXJ0aW9uUmVwbHkpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3NlbmdlclBy
b3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRl
bnRpYWxzTWVzc2VuZ2VyUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9D
cmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3Nlbmdlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyOjpnZXRBc3NlcnRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDcmVkZW50aWFsc01lc3Nlbmdlcjo6Z2V0QXNzZXJ0aW9uUmVwbHkpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNN
ZXNzZW5nZXIubWVzc2FnZXMuaW46CisKIDIwMTgtMDMtMTkgIEppZXdlbiBUYW4gIDxqaWV3ZW5f
dGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBhbm90aGVyIHF1aWNrIGZpeCBm
b3IgcjIyOTY5OQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9B
dXRoZW50aWNhdG9yTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhu
L0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcAppbmRleCBlMjJjNDkzOTc0MTY4OTc1MmM3YzYwMmNj
OTM1YjBkYjg3MzRiZmZjLi43ZWUyYWZjOTJiZTgzOGEyOTk4OWQ4MmQ2ZGZmMDA3Mzg0NTQ1MWZj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRpY2F0
b3JNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhl
bnRpY2F0b3JNYW5hZ2VyLmNwcApAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgQXV0aGVudGljYXRv
ck1hbmFnZXI6OmNyZWF0ZShjb25zdCBTZWN1cml0eU9yaWdpbiYgY2FsbGVyT3JpZ2luLCBjb25z
dCBQdWJsCiAgICAgLy8gU3RlcCAxOC0yMS4KICAgICAvLyBPbmx5IHBsYXRmb3JtIGF0dGFjaG1l
bnRzIHdpbGwgYmUgc3VwcG9ydGVkIGF0IHRoaXMgc3RhZ2UuIEFzc3VtaW5nIG9uZSBhdXRoZW50
aWNhdG9yIHBlciBkZXZpY2UuCiAgICAgLy8gQWxzbywgcmVzaWRlbnQga2V5cywgdXNlciB2ZXJp
ZmljYXRpb25zIGFuZCBkaXJlY3QgYXR0ZXN0YXRpb24gYXJlIGVuZm9yY2VkIGF0IHRoaXMgdGFn
ZS4KLSAgICAvLyBGb3IgYmV0dGVyIHBlcmZvcm1hbmNlLCBubyBmaWx0ZXJpbmcgaXMgZG9uZSBo
ZXJlIHJlZ2FyZGluZyB0byBvcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscy4KKyAgICAvLyBGb3Ig
YmV0dGVyIHBlcmZvcm1hbmNlLCB0cmFuc3BvcnRzIG9mIG9wdGlvbnMuZXhjbHVkZUNyZWRlbnRp
YWxzIGFyZSBjaGVja2VkIGluIExvY2FsQXV0aGVudGljYXRvci4KICAgICBpZiAoIW1fbWVzc2Vu
Z2VyKSAgewogICAgICAgICBwcm9taXNlLnJlamVjdChFeGNlcHRpb24geyBVbmtub3duRXJyb3Is
IEFTQ0lJTGl0ZXJhbCgiVW5rbm93biBpbnRlcm5hbCBlcnJvci4iKSB9KTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6OmRpc2Nv
dmVyRnJvbUV4dGVybmFsU291cmNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBjYWxsCiAgICAgLy8g
U3RlcCAxNC0xNSwgMTctMTkuCiAgICAgLy8gT25seSBwbGF0Zm9ybSBhdHRhY2htZW50cyB3aWxs
IGJlIHN1cHBvcnRlZCBhdCB0aGlzIHN0YWdlLiBBc3N1bWluZyBvbmUgYXV0aGVudGljYXRvciBw
ZXIgZGV2aWNlLgogICAgIC8vIEFsc28sIHJlc2lkZW50IGtleXMsIHVzZXIgdmVyaWZpY2F0aW9u
cyBhbmQgZGlyZWN0IGF0dGVzdGF0aW9uIGFyZSBlbmZvcmNlZCBhdCB0aGlzIHRhZ2UuCi0gICAg
Ly8gRm9yIGJldHRlciBwZXJmb3JtYW5jZSwgbm8gZmlsdGVyaW5nIGlzIGRvbmUgaGVyZSByZWdh
cmRpbmcgdG8gb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLgorICAgIC8vIEZvciBiZXR0ZXIgcGVy
Zm9ybWFuY2UsIGZpbHRlcmluZyBvZiBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgaXMgZG9uZSBp
biBMb2NhbEF1dGhlbnRpY2F0b3IuCiAgICAgaWYgKCFtX21lc3NlbmdlcikgIHsKICAgICAgICAg
cHJvbWlzZS5yZWplY3QoRXhjZXB0aW9uIHsgVW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVu
a25vd24gaW50ZXJuYWwgZXJyb3IuIikgfSk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgKaW5kZXggNDk1ZDU4YjE3NDFhMzU5YTk2MTA5MmY1
M2NkNmM4YWRlMzIzNGNhZi4uNzYwZThmZGE1ZjFlNzUxNzdjZWZlZjc1MTU4NmVhYjQ5NDA0MzNj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgKQEAgLTQ3LDcgKzQ3
LDcgQEAgc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgewogCiAgICAg
c3RydWN0IFVzZXJFbnRpdHkgOiBwdWJsaWMgRW50aXR5IHsKICAgICAgICAgQnVmZmVyU291cmNl
IGlkOyAvLyBpZCBiZWNvbWVzIGlkVmVjdG9yIG9uY2UgaXQgaXMgcGFzc2VkIHRvIFVJUHJvY2Vz
cy4KLSAgICAgICAgbXV0YWJsZSBWZWN0b3I8dWludDhfdD4gaWRWZWN0b3I7CisgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBpZFZlY3RvcjsKICAgICAgICAgU3RyaW5nIGRpc3BsYXlOYW1lOwogICAg
IH07CiAKQEAgLTE0MCw3ICsxNDAsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENv
cGllckJhc2U8ZmFsc2UsIGZhbHNlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aQogICAgICAg
ICByZXN1bHQudXNlci5uYW1lID0gc291cmNlLnVzZXIubmFtZS5pc29sYXRlZENvcHkoKTsKICAg
ICAgICAgcmVzdWx0LnVzZXIuaWNvbiA9IHNvdXJjZS51c2VyLmljb24uaXNvbGF0ZWRDb3B5KCk7
CiAgICAgICAgIHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lID0gc291cmNlLnVzZXIuZGlzcGxheU5h
bWUuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgICAgIHJlc3VsdC51c2VyLmlkVmVjdG9yID0gV1RGTW92
ZShzb3VyY2UudXNlci5pZFZlY3Rvcik7CisgICAgICAgIHJlc3VsdC51c2VyLmlkVmVjdG9yID0g
c291cmNlLnVzZXIuaWRWZWN0b3I7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhu
L1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCmluZGV4IDFlNTg1NTEyYzg1MzI4
OTQzM2IxMWM3ZWQwM2NjMmY4ZmRhMzJlMzUuLjk4NjExYTA1NDdjOTcxYzk4ZTcxODBkOGEyNjVm
ZjllNmUxM2Q5YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaApAQCAt
MzgsOCArMzgsMjggQEAgc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7
CiAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZCBsb25nPiB0aW1lb3V0OwogICAgIG11dGFibGUg
U3RyaW5nIHJwSWQ7CiAgICAgVmVjdG9yPFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yPiBh
bGxvd0NyZWRlbnRpYWxzOworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4gZGVjb2RlKERl
Y29kZXImKTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIFB1YmxpY0tleUNy
ZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7
CisgICAgZW5jb2RlciA8PCBycElkIDw8IGFsbG93Q3JlZGVudGlhbHM7Cit9CisKK3RlbXBsYXRl
PGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0
T3B0aW9ucz4gUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgcmVz
dWx0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnJwSWQpKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFsbG93Q3Jl
ZGVudGlhbHMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVUSE4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2NvY29h
L0xvY2FsQXV0aGVudGljYXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9j
b2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IuaAppbmRleCAzZTU2NjhmNjZkM2ViMjNkOWEyZTdkZTQ0
YjFjMmMxY2RjZWRlMzU3Li43MmQwMTJhMDU4ZWU4Zjc0OWZlZTI4MDBlYzI3NzJiM2IwODg0ZGFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2NvY29hL0xvY2Fs
QXV0aGVudGljYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY29j
b2EvTG9jYWxBdXRoZW50aWNhdG9yLmgKQEAgLTM1LDggKzM1LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IEV4Y2VwdGlvbkRhdGE7CiBzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9uczsKK3N0cnVjdCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnM7CiAKIHVzaW5nIENyZWF0aW9uQ2FsbGJhY2sgPSBGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpPjsKK3VzaW5nIFJlcXVlc3RDYWxs
YmFjayA9IEZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
Jik+OwogdXNpbmcgRXhjZXB0aW9uQ2FsbGJhY2sgPSBGdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNv
cmU6OkV4Y2VwdGlvbkRhdGEmKT47CiAKIHR5cGVkZWYgdm9pZCAoXkNvbXBsZXRpb25CbG9jayko
U2VjS2V5UmVmIF9OdWxsYWJsZSByZWZlcmVuY2VLZXksIE5TQXJyYXkgKiBfTnVsbGFibGUgY2Vy
dGlmaWNhdGVzLCBOU0Vycm9yICogX051bGxhYmxlIGVycm9yKTsKQEAgLTQ5LDYgKzUxLDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgfkxvY2FsQXV0aGVudGljYXRvcigpID0gZGVmYXVsdDsKIAog
ICAgIHZvaWQgbWFrZUNyZWRlbnRpYWwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25z
dCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zJiwgQ3JlYXRpb25DYWxsYmFjayYm
LCBFeGNlcHRpb25DYWxsYmFjayYmKTsKKyAgICB2b2lkIGdldEFzc2VydGlvbihjb25zdCBWZWN0
b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9u
cyYsIFJlcXVlc3RDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmKTsKICAgICBib29sIGlz
QXZhaWxhYmxlKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXV0aG4vY29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jb2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KaW5k
ZXggOTVkZjVlNjZmNjhjZTQ3ZTQ1ZTU2ZDA5NjIwODU4YWRkYmI1OWViZS4uYjEyMjE1YzVlOGRk
MDY2MDBjZmE3ZWI1NjJjYWJmNjJlYmY1ZDU2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9jb2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jb2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KQEAg
LTMyLDEzICszMiwxNiBAQAogI2ltcG9ydCAiQ09TRUNvbnN0YW50cy5oIgogI2ltcG9ydCAiRXhj
ZXB0aW9uRGF0YS5oIgogI2ltcG9ydCAiUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
cy5oIgorI2ltcG9ydCAiUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgiCiAjaW1w
b3J0IDxTZWN1cml0eS9TZWNJdGVtLmg+CiAjaW1wb3J0IDxwYWwvY3J5cHRvL0NyeXB0b0RpZ2Vz
dC5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9EZXZpY2VJZGVudGl0eVNQSS5oPgogI2ltcG9y
dCA8d3RmL0Jsb2NrUHRyLmg+CisjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgogI2ltcG9ydCA8d3Rm
L01haW5UaHJlYWQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9W
ZWN0b3IuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogI2ltcG9ydCAiTG9j
YWxBdXRoZW50aWNhdGlvblNvZnRMaW5rLmgiCiAKQEAgLTQ2LDEyICs0OSw1MyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBMb2NhbEF1dGhlbnRpY2F0b3JJbnRlcm5hbCB7CiAK
LS8vIFVQLCBVViBhbmQgQVQgYXJlIHNldC4gU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJh
dXRobi8jZmxhZ3MuCi1jb25zdCB1aW50OF90IGF1dGhlbnRpY2F0b3JEYXRhRmxhZ3MgPSA2OTsK
Ky8vIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4vI2ZsYWdzLgorY29uc3QgdWlu
dDhfdCBtYWtlQ3JlZGVudGlhbEZsYWdzID0gNjk7IC8vIFVQLCBVViBhbmQgQVQgYXJlIHNldC4K
K2NvbnN0IHVpbnQ4X3QgZ2V0QXNzZXJ0aW9uRmxhZ3MgPSA1OyAvLyBVUCBhbmQgVVYgYXJlIHNl
dC4KIC8vIEZJWE1FKHJkYXI6Ly9wcm9ibGVtLzM4MzIwNTEyKTogRGVmaW5lIEFwcGxlIEFBR1VJ
RC4KIGNvbnN0IHVpbnQ4X3QgQUFHVUlEW10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMH07IC8vIDE2IGJ5dGVzCi1jb25zdCBzaXplX3QgbWF4Q3JlZGVudGlhbElkTGVu
Z3RoID0gMHhmZmZmOyAvLyAyIGJ5dGVzCisvLyBDcmVkZW50aWFsIElEIGlzIGN1cnJlbnRseSBT
SEEtMSBvZiB0aGUgY29ycmVzcG9uZGluZyBwdWJsaWMga2V5LgorLy8gRklYTUUoMTgzNTM0KTog
QXNzdW1lIGxpdHRsZSBlbmRpYW4gaGVyZS4KK2NvbnN0IHVuaW9uIHsKKyAgICB1aW50MTZfdCBp
bnRlZ2VyOworICAgIHVpbnQ4X3QgYnl0ZXNbMl07Cit9IGNyZWRlbnRpYWxJZExlbmd0aCA9IHsw
eDAwMTR9OwogY29uc3Qgc2l6ZV90IEVTMjU2S2V5U2l6ZUluQnl0ZXMgPSAzMjsKK2NvbnN0IHNp
emVfdCBhdXRoRGF0YVByZWZpeEZpeGVkU2l6ZSA9IDM3OyAvLyBoYXNoKDMyKSArIGZsYWdzKDEp
ICsgY291bnRlcig0KQorCisjaWYgUExBVEZPUk0oSU9TKQorLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL3dlYmF1dGhuLyNzZWMtYXV0aGVudGljYXRvci1kYXRhCitzdGF0aWMgVmVjdG9yPHVpbnQ4
X3Q+IGJ1aWxkQXV0aERhdGEoY29uc3QgU3RyaW5nJiBycElkLCBjb25zdCB1aW50OF90IGZsYWdz
LCBjb25zdCB1aW50MzJfdCBjb3VudGVyLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG9wdGlvbmFs
QXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gYXV0aERhdGE7
CisgICAgYXV0aERhdGEucmVzZXJ2ZUNhcGFjaXR5KGF1dGhEYXRhUHJlZml4Rml4ZWRTaXplICsg
b3B0aW9uYWxBdHRlc3RlZENyZWRlbnRpYWxEYXRhLnNpemUoKSk7CisKKyAgICAvLyBSUCBJRCBo
YXNoCisgICAgYXV0byBjcnlwdG8gPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6Q3J5
cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOworICAgIC8vIEZJWE1FKDE4MzUzNCk6IFRl
c3QgSUROLgorICAgIEFTU0VSVChycElkLmlzQWxsQVNDSUkoKSk7CisgICAgYXV0byBhc2NpaVJw
SWQgPSBycElkLmFzY2lpKCk7CisgICAgY3J5cHRvLT5hZGRCeXRlcyhhc2NpaVJwSWQuZGF0YSgp
LCBhc2NpaVJwSWQubGVuZ3RoKCkpOworICAgIGF1dGhEYXRhID0gY3J5cHRvLT5jb21wdXRlSGFz
aCgpOworCisgICAgLy8gRkxBR1MKKyAgICBhdXRoRGF0YS5hcHBlbmQoZmxhZ3MpOworCisgICAg
Ly8gQ09VTlRFUgorICAgIC8vIEZJWE1FKDE4MzUzNCk6IEFzc3VtZSBsaXR0bGUgZW5kaWFuIGhl
cmUuCisgICAgdW5pb24geworICAgICAgICB1aW50MzJfdCBpbnRlZ2VyOworICAgICAgICB1aW50
OF90IGJ5dGVzWzRdOworICAgIH0gY291bnRlclVuaW9uOworICAgIGNvdW50ZXJVbmlvbi5pbnRl
Z2VyID0gY291bnRlcjsKKyAgICBhdXRoRGF0YS5hcHBlbmQoY291bnRlclVuaW9uLmJ5dGVzLCBz
aXplb2YoY291bnRlclVuaW9uLmJ5dGVzKSk7CisKKyAgICAvLyBBVFRFU1RFRCBDUkVELiBEQVRB
CisgICAgYXV0aERhdGEuYXBwZW5kVmVjdG9yKG9wdGlvbmFsQXR0ZXN0ZWRDcmVkZW50aWFsRGF0
YSk7CisKKyAgICByZXR1cm4gYXV0aERhdGE7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykK
IAogfSAvLyBMb2NhbEF1dGhlbnRpY2F0b3JJbnRlcm5hbAogCkBAIC02Miw3ICsxMDYsNyBAQCB2
b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBoYXNoLCBjb25zdCBQdWJsaQogI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gRklYTUUo
MTgyNzcyKQogICAgIEFTU0VSVF9VTlVTRUQoaGFzaCwgaGFzaCA9PSBoYXNoKTsKLSAgICBBU1NF
UlRfVU5VU0VEKG9wdGlvbnMsIG9wdGlvbnMucnAubmFtZS5pc0VtcHR5KCkpOworICAgIEFTU0VS
VF9VTlVTRUQob3B0aW9ucywgIW9wdGlvbnMucnAuaWQuaXNFbXB0eSgpKTsKICAgICBBU1NFUlRf
VU5VU0VEKGNhbGxiYWNrLCBjYWxsYmFjayk7CiAgICAgZXhjZXB0aW9uQ2FsbGJhY2soeyBOb3RB
bGxvd2VkRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiTm8gYXZhbGlhYmxlIGF1dGhlbnRpY2F0b3JzLiIp
IH0pOwogI2Vsc2UKQEAgLTg0LDI1ICsxMjgsMzggQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6
Om1ha2VDcmVkZW50aWFsKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgUHVibGkK
ICAgICB9CiAKICAgICAvLyBTdGVwIDMuCisgICAgLy8gRXN0YWJsaXNoIGEgaGFzaCBzZXQgb2Yg
Z2l2ZW4gZXhjbHVkZSBjcmVkZW50aWFscworICAgIEhhc2hTZXQ8U3RyaW5nPiBleGNsdWRlQ3Jl
ZGVudGlhbElkczsKICAgICBmb3IgKGF1dG8mIGV4Y2x1ZGVDcmVkZW50aWFsIDogb3B0aW9ucy5l
eGNsdWRlQ3JlZGVudGlhbHMpIHsKLSAgICAgICAgaWYgKGV4Y2x1ZGVDcmVkZW50aWFsLnR5cGUg
PT0gUHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSAmJiBleGNsdWRlQ3JlZGVudGlh
bC50cmFuc3BvcnRzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gU2VhcmNoIEtleWNoYWlu
IGZvciB0aGUgQ3JlZGVudGlhbCBJRCBhbmQgUlAgSUQsIHdoaWNoIGlzIHN0b3JlZCBpbiB0aGUg
a1NlY0F0dHJBcHBsaWNhdGlvbkxhYmVsIGFuZCBrU2VjQXR0ckxhYmVsIGF0dHJpYnV0ZSByZXNw
ZWN0aXZlbHkuCi0gICAgICAgICAgICBOU0RpY3Rpb25hcnkgKnF1ZXJ5ID0gQHsKLSAgICAgICAg
ICAgICAgICAoaWQpa1NlY0NsYXNzOiAoaWQpa1NlY0NsYXNzS2V5LAotICAgICAgICAgICAgICAg
IChpZClrU2VjQXR0cktleUNsYXNzOiAoaWQpa1NlY0F0dHJLZXlDbGFzc1ByaXZhdGUsCi0gICAg
ICAgICAgICAgICAgKGlkKWtTZWNBdHRyQXBwbGljYXRpb25MYWJlbDogW05TRGF0YSBkYXRhV2l0
aEJ5dGVzOmV4Y2x1ZGVDcmVkZW50aWFsLmlkVmVjdG9yLmRhdGEoKSBsZW5ndGg6ZXhjbHVkZUNy
ZWRlbnRpYWwuaWRWZWN0b3Iuc2l6ZSgpXSwKLSAgICAgICAgICAgICAgICAoaWQpa1NlY0F0dHJM
YWJlbDogb3B0aW9ucy5ycC5pZAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIE9TU3RhdHVz
IHN0YXR1cyA9IFNlY0l0ZW1Db3B5TWF0Y2hpbmcoKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZilx
dWVyeSwgTlVMTCk7Ci0gICAgICAgICAgICBpZiAoIXN0YXR1cykgeworICAgICAgICAvLyB0cmFu
c3BvcnRzIGFyZSBjaGVja2VkIGhlcmUgaW5zdGVhZCBvZiBBdXRoZW50aWNhdG9yTWFuYWdlci4K
KyAgICAgICAgaWYgKGV4Y2x1ZGVDcmVkZW50aWFsLnRyYW5zcG9ydHMuaXNFbXB0eSgpICYmIGV4
Y2x1ZGVDcmVkZW50aWFsLnR5cGUgPT0gUHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tl
eSAmJiAgZXhjbHVkZUNyZWRlbnRpYWwuaWRWZWN0b3Iuc2l6ZSgpID09IGNyZWRlbnRpYWxJZExl
bmd0aC5pbnRlZ2VyKQorICAgICAgICAgICAgZXhjbHVkZUNyZWRlbnRpYWxJZHMuYWRkKFN0cmlu
ZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihleGNsdWRlQ3JlZGVudGlhbC5pZFZlY3Rv
ci5kYXRhKCkpLCBleGNsdWRlQ3JlZGVudGlhbC5pZFZlY3Rvci5zaXplKCkpKTsKKyAgICB9CisK
KyAgICBpZiAoIWV4Y2x1ZGVDcmVkZW50aWFsSWRzLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBT
ZWFyY2ggS2V5Y2hhaW4gZm9yIHRoZSBSUCBJRC4KKyAgICAgICAgTlNEaWN0aW9uYXJ5ICpxdWVy
eSA9IEB7CisgICAgICAgICAgICAoaWQpa1NlY0NsYXNzOiAoaWQpa1NlY0NsYXNzS2V5LAorICAg
ICAgICAgICAgKGlkKWtTZWNBdHRyS2V5Q2xhc3M6IChpZClrU2VjQXR0cktleUNsYXNzUHJpdmF0
ZSwKKyAgICAgICAgICAgIChpZClrU2VjQXR0ckxhYmVsOiBvcHRpb25zLnJwLmlkLAorICAgICAg
ICAgICAgKGlkKWtTZWNSZXR1cm5BdHRyaWJ1dGVzOiBAWUVTLAorICAgICAgICAgICAgKGlkKWtT
ZWNNYXRjaExpbWl0OiAoaWQpa1NlY01hdGNoTGltaXRBbGwsCisgICAgICAgIH07CisgICAgICAg
IENGVHlwZVJlZiBhdHRyaWJ1dGVzQXJyYXlSZWYgPSBOVUxMOworICAgICAgICBPU1N0YXR1cyBz
dGF0dXMgPSBTZWNJdGVtQ29weU1hdGNoaW5nKChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpcXVl
cnksICZhdHRyaWJ1dGVzQXJyYXlSZWYpOworICAgICAgICBpZiAoc3RhdHVzICYmIHN0YXR1cyAh
PSBlcnJTZWNJdGVtTm90Rm91bmQpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGRuJ3Qg
cXVlcnkgS2V5Y2hhaW46ICVkIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxi
YWNrKHsgVW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVua25vd24gaW50ZXJuYWwgZXJyb3Iu
IikgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byByZXRh
aW5BdHRyaWJ1dGVzQXJyYXkgPSBhZG9wdENGKGF0dHJpYnV0ZXNBcnJheVJlZik7CisKKyAgICAg
ICAgZm9yIChOU0RpY3Rpb25hcnkgKm5zQXR0cmlidXRlcyBpbiAoTlNBcnJheSAqKWF0dHJpYnV0
ZXNBcnJheVJlZikgeworICAgICAgICAgICAgTlNEYXRhICpuc0NyZWRlbnRpYWxJZCA9IG5zQXR0
cmlidXRlc1soaWQpa1NlY0F0dHJBcHBsaWNhdGlvbkxhYmVsXTsKKyAgICAgICAgICAgIGlmIChl
eGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4obnNDcmVkZW50aWFsSWQuYnl0ZXMpLCBuc0NyZWRlbnRpYWxJZC5sZW5ndGgpKSkg
ewogICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHsgTm90QWxsb3dlZEVycm9yLCBB
U0NJSUxpdGVyYWwoIkF0IGxlYXN0IG9uZSBjcmVkZW50aWFsIG1hdGNoZXMgYW4gZW50cnkgb2Yg
dGhlIGV4Y2x1ZGVDcmVkZW50aWFscyBsaXN0IGluIHRoZSBwbGF0Zm9ybSBhdHRhY2hlZCBhdXRo
ZW50aWNhdG9yLiIpIH0pOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gZXJyU2VjSXRlbU5vdEZvdW5kKSB7Ci0gICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBxdWVyeSBLZXljaGFpbjogJWQiLCBzdGF0dXMp
OwotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHsgVW5rbm93bkVycm9yLCBBU0NJ
SUxpdGVyYWwoIlVua25vd24gaW50ZXJuYWwgZXJyb3IuIikgfSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0xMTEsNyArMTY4
LDYgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgaGFzaCwgY29uc3QgUHVibGkKICAgICAvLyBHZXQgdXNlciBjb25zZW50Lgog
ICAgIGF1dG8gY29udGV4dCA9IGFkb3B0TlMoW2FsbG9jTEFDb250ZXh0SW5zdGFuY2UoKSBpbml0
XSk7CiAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7Ci0gICAgTlNTdHJpbmcgKnJlYXNvbiA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiQWxsb3cgJUAgdG8gY3JlYXRlIGEgcHVibGljIGtl
eSBjcmVkZW50aWFsIGZvciAlQCIsIChpZClvcHRpb25zLnJwLmlkLCAoaWQpb3B0aW9ucy51c2Vy
Lm5hbWVdOwogICAgIGlmICghW2NvbnRleHQgY2FuRXZhbHVhdGVQb2xpY3k6TEFQb2xpY3lEZXZp
Y2VPd25lckF1dGhlbnRpY2F0aW9uV2l0aEJpb21ldHJpY3MgZXJyb3I6JmVycm9yXSkgewogICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGV2YWx1YXRlIGF1dGhlbnRpY2F0aW9uIHdpdGggYmlv
bWV0cmljcyBwb2xpY3k6ICVAIiwgZXJyb3IpOwogICAgICAgICAvLyBGSVhNRSgxODI3NjcpCkBA
IC0xMTksNiArMTc1LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFs
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgUHVibGkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAorICAgIE5TU3RyaW5nICpyZWFzb24gPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIkFsbG93ICVAIHRvIGNyZWF0ZSBhIHB1YmxpYyBrZXkgY3JlZGVudGlhbCBmb3IgJUAi
LCAoaWQpb3B0aW9ucy5ycC5pZCwgKGlkKW9wdGlvbnMudXNlci5uYW1lXTsKICAgICAvLyBGSVhN
RSgxODM1MzQpOiBPcHRpbWl6ZSB0aGUgZm9sbG93aW5nIG5lc3RlZCBjYWxsYmFja3MgYW5kIHRo
cmVhZGluZy4KICAgICBbY29udGV4dCBldmFsdWF0ZVBvbGljeTpMQVBvbGljeURldmljZU93bmVy
QXV0aGVudGljYXRpb25XaXRoQmlvbWV0cmljcyBsb2NhbGl6ZWRSZWFzb246cmVhc29uIHJlcGx5
OkJsb2NrUHRyPHZvaWQoQk9PTCwgTlNFcnJvciAqKT46OmZyb21DYWxsYWJsZShbd2Vha1RoaXMg
PSBtX3dlYWtGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
LCBvcHRpb25zID0gY3Jvc3NUaHJlYWRDb3B5KG9wdGlvbnMpLCBoYXNoXSAoQk9PTCBzdWNjZXNz
LCBOU0Vycm9yICplcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOwpAQCAtMTU3LDcgKzIxNCw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3Jl
ZGVudGlhbChjb25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0IFB1YmxpCiAgICAgICAg
ICAgICAvLyBBdHRlc3RhdGlvbiBDZXJ0aWZpY2F0ZSBhbmQgQXR0ZXN0YXRpb24gSXNzdWluZyBD
QQogICAgICAgICAgICAgQVNTRVJUKGNlcnRpZmljYXRlcyAmJiAoW2NlcnRpZmljYXRlcyBjb3Vu
dF0gPT0gMikpOwogCi0gICAgICAgICAgICAvLyBTdGVwIDcuMiAtIDcuNC4KKyAgICAgICAgICAg
IC8vIFN0ZXAgNy4yLTcuNC4KICAgICAgICAgICAgIC8vIEZJWE1FKDE4MzUzMyk6IEEgc2luZ2xl
IGtTZWNDbGFzc0tleSBpdGVtIGNvdWxkbid0IHN0b3JlIGFsbCBtZXRhIGRhdGEuIFRoZSBmb2xs
b3dpbmcgc2NoZW1hIGlzIGEgdGVudGF0aXZlIHNvbHV0aW9uCiAgICAgICAgICAgICAvLyB0byBh
Y2NvbW1vZGF0ZSB0aGUgbW9zdCBpbXBvcnRhbnQgbWV0YSBkYXRhLCBpLmUuIFJQIElELCBDcmVk
ZW50aWFsIElELCBhbmQgdXNlcmhhbmRsZS4KICAgICAgICAgICAgIC8vIGtTZWNBdHRyTGFiZWw6
IFJQIElECkBAIC0xOTEsNyArMjQ4LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VD
cmVkZW50aWFsKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgUHVibGkKIAogICAg
ICAgICAgICAgICAgIE5TRGljdGlvbmFyeSAqbnNBdHRyaWJ1dGVzID0gKE5TRGljdGlvbmFyeSAq
KWF0dHJpYnV0ZXNSZWY7CiAgICAgICAgICAgICAgICAgTlNEYXRhICpuc0NyZWRlbnRpYWxJZCA9
IG5zQXR0cmlidXRlc1soaWQpa1NlY0F0dHJBcHBsaWNhdGlvbkxhYmVsXTsKLSAgICAgICAgICAg
ICAgICBjcmVkZW50aWFsSWQuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihuc0Ny
ZWRlbnRpYWxJZC5ieXRlcyksIG5zQ3JlZGVudGlhbElkLmxlbmd0aCk7CisgICAgICAgICAgICAg
ICAgY3JlZGVudGlhbElkLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihu
c0NyZWRlbnRpYWxJZC5ieXRlcyksIG5zQ3JlZGVudGlhbElkLmxlbmd0aCk7CiAKICAgICAgICAg
ICAgICAgICBOU0RpY3Rpb25hcnkgKnVwZGF0ZVF1ZXJ5ID0gQHsKICAgICAgICAgICAgICAgICAg
ICAgKGlkKWtTZWNDbGFzczogKGlkKWtTZWNDbGFzc0tleSwKQEAgLTIxMCw1MSArMjY3LDI2IEBA
IHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGhhc2gsIGNvbnN0IFB1YmxpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAvLyBTdGVwIDEyLgotICAgICAgICAgICAgLy8gQXBwbGUgQXR0ZXN0
YXRpb24gQ29udCcKLSAgICAgICAgICAgIC8vIEFzc2VtYmxlIHRoZSBhdHRlc3RhdGlvbiBvYmpl
Y3Q6Ci0gICAgICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4vI2F0dGVz
dGF0aW9uLW9iamVjdAotICAgICAgICAgICAgLy8gRklYTUUoMTgzNTM0KTogYXV0aERhdGEgY291
bGQgdGhyb3R0bGUuCi0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYXV0aERhdGE7CisgICAg
ICAgICAgICAvLyBTdGVwIDEwLgorICAgICAgICAgICAgLy8gRklYTUUoMTgzNTMzKTogc3RvcmUg
dGhlIGNvdW50ZXIuCisgICAgICAgICAgICB1aW50MzJfdCBjb3VudGVyID0gMDsKKworICAgICAg
ICAgICAgLy8gRklYTUUoMTgzNTM0KTogYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSBjb3VsZCB0aHJv
dHRsZS4KKyAgICAgICAgICAgIC8vIFN0ZXAgMTEuIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJh
dXRobi8jYXR0ZXN0ZWQtY3JlZGVudGlhbC1kYXRhCisgICAgICAgICAgICBWZWN0b3I8dWludDhf
dD4gYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YTsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAvLyBSUCBJRCBoYXNoCi0gICAgICAgICAgICAgICAgYXV0byBjcnlwdG8gPSBQQUw6OkNyeXB0
b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FKDE4MzUzNCk6IFRlc3QgSUROLgotICAgICAgICAgICAg
ICAgIEFTU0VSVChvcHRpb25zLnJwLmlkLmlzQWxsQVNDSUkoKSk7Ci0gICAgICAgICAgICAgICAg
YXV0byBhc2NpaVJwSWQgPSBvcHRpb25zLnJwLmlkLmFzY2lpKCk7Ci0gICAgICAgICAgICAgICAg
Y3J5cHRvLT5hZGRCeXRlcyhhc2NpaVJwSWQuZGF0YSgpLCBhc2NpaVJwSWQubGVuZ3RoKCkpOwot
ICAgICAgICAgICAgICAgIGF1dGhEYXRhID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotCi0gICAg
ICAgICAgICAgICAgLy8gRkxBR1MKLSAgICAgICAgICAgICAgICBhdXRoRGF0YS5hcHBlbmQoYXV0
aGVudGljYXRvckRhdGFGbGFncyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTdGVwLiAxMC4KLSAg
ICAgICAgICAgICAgICAvLyBDT1VOVEVSCi0gICAgICAgICAgICAgICAgLy8gRklYTUUoMTgzNTMz
KTogc3RvcmUgdGhlIGNvdW50ZXIuCi0gICAgICAgICAgICAgICAgdW5pb24gewotICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCBpbnRlZ2VyOwotICAgICAgICAgICAgICAgICAgICB1aW50OF90
IGJ5dGVzWzRdOwotICAgICAgICAgICAgICAgIH0gY291bnRlciA9IHsweDAwMDAwMDAwfTsKLSAg
ICAgICAgICAgICAgICBhdXRoRGF0YS5hcHBlbmQoY291bnRlci5ieXRlcywgc2l6ZW9mKGNvdW50
ZXIuYnl0ZXMpKTsKLQotICAgICAgICAgICAgICAgIC8vIFN0ZXAgMTEuCi0gICAgICAgICAgICAg
ICAgLy8gQUFHVUlECi0gICAgICAgICAgICAgICAgYXV0aERhdGEuYXBwZW5kKEFBR1VJRCwgc2l6
ZW9mKEFBR1VJRCkpOwotCi0gICAgICAgICAgICAgICAgLy8gTAotICAgICAgICAgICAgICAgIEFT
U0VSVChjcmVkZW50aWFsSWQuc2l6ZSgpIDw9IG1heENyZWRlbnRpYWxJZExlbmd0aCk7Ci0gICAg
ICAgICAgICAgICAgLy8gQXNzdW1lIGxpdHRsZSBlbmRpYW4gaGVyZS4KLSAgICAgICAgICAgICAg
ICB1bmlvbiB7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGludGVnZXI7Ci0gICAgICAg
ICAgICAgICAgICAgIHVpbnQ4X3QgYnl0ZXNbMl07Ci0gICAgICAgICAgICAgICAgfSBjcmVkZW50
aWFsSWRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgY3JlZGVudGlhbElkTGVuZ3RoLmludGVnZXIg
PSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oY3JlZGVudGlhbElkLnNpemUoKSk7Ci0gICAgICAgICAg
ICAgICAgYXV0aERhdGEuYXBwZW5kKGNyZWRlbnRpYWxJZExlbmd0aC5ieXRlcywgc2l6ZW9mKHVp
bnQxNl90KSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBDUkVERU5USUFMIElECi0gICAgICAgICAg
ICAgICAgYXV0aERhdGEuYXBwZW5kVmVjdG9yKGNyZWRlbnRpYWxJZCk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBDUkVERU5USUFMIFBVQkxJQyBLRVkKKyAgICAgICAgICAgICAgICAvLyBhYWd1aWQK
KyAgICAgICAgICAgICAgICBhdHRlc3RlZENyZWRlbnRpYWxEYXRhLmFwcGVuZChBQUdVSUQsIHNp
emVvZihBQUdVSUQpKTsKKworICAgICAgICAgICAgICAgIC8vIGNyZWRlbnRpYWxJZExlbmd0aAor
ICAgICAgICAgICAgICAgIEFTU0VSVChjcmVkZW50aWFsSWQuc2l6ZSgpID09IGNyZWRlbnRpYWxJ
ZExlbmd0aC5pbnRlZ2VyKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRSgxODM1MzQpOiBBc3N1
bWUgbGl0dGxlIGVuZGlhbiBoZXJlLgorICAgICAgICAgICAgICAgIGF0dGVzdGVkQ3JlZGVudGlh
bERhdGEuYXBwZW5kKGNyZWRlbnRpYWxJZExlbmd0aC5ieXRlcywgc2l6ZW9mKHVpbnQxNl90KSk7
CisKKyAgICAgICAgICAgICAgICAvLyBjcmVkZW50aWFsSWQKKyAgICAgICAgICAgICAgICBhdHRl
c3RlZENyZWRlbnRpYWxEYXRhLmFwcGVuZFZlY3RvcihjcmVkZW50aWFsSWQpOworCisgICAgICAg
ICAgICAgICAgLy8gY3JlZGVudGlhbFB1YmxpY0tleQogICAgICAgICAgICAgICAgIENGRGF0YVJl
ZiBwdWJsaWNLZXlEYXRhUmVmID0gTlVMTDsKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gcHVibGljS2V5ID0gYWRvcHRDRihTZWNLZXlDb3B5UHVibGljS2V5KHBy
aXZhdGVLZXkpKTsKQEAgLTI4OCw5ICszMjAsMTUgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6
Om1ha2VDcmVkZW50aWFsKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgUHVibGkK
ICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soeyBVbmtub3duRXJyb3IsIEFT
Q0lJTGl0ZXJhbCgiVW5rbm93biBpbnRlcm5hbCBlcnJvci4iKSB9KTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhdXRoRGF0
YS5hcHBlbmRWZWN0b3IoY29zZVB1YmxpY0tleS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBh
dHRlc3RlZENyZWRlbnRpYWxEYXRhLmFwcGVuZFZlY3Rvcihjb3NlUHVibGljS2V5LnZhbHVlKCkp
OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvLyBTdGVwIDEyLgorICAgICAgICAgICAg
YXV0byBhdXRoRGF0YSA9IGJ1aWxkQXV0aERhdGEob3B0aW9ucy5ycC5pZCwgbWFrZUNyZWRlbnRp
YWxGbGFncywgY291bnRlciwgYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSk7CisKKyAgICAgICAgICAg
IC8vIFN0ZXAgMTMuIEFwcGxlIEF0dGVzdGF0aW9uIENvbnQnCisgICAgICAgICAgICAvLyBBc3Nl
bWJsZSB0aGUgYXR0ZXN0YXRpb24gb2JqZWN0OgorICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cu
dzMub3JnL1RSL3dlYmF1dGhuLyNhdHRlc3RhdGlvbi1vYmplY3QKICAgICAgICAgICAgIGNib3I6
OkNCT1JWYWx1ZTo6TWFwVmFsdWUgYXR0ZXN0YXRpb25TdGF0ZW1lbnRNYXA7CiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNpZ25hdHVyZTsKQEAgLTMwMCwx
MyArMzM4LDEzIEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbChjb25z
dCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0IFB1YmxpCiAgICAgICAgICAgICAgICAgICAg
IENGRGF0YVJlZiBzaWduYXR1cmVSZWYgPSBTZWNLZXlDcmVhdGVTaWduYXR1cmUocHJpdmF0ZUtl
eSwga1NlY0tleUFsZ29yaXRobUVDRFNBU2lnbmF0dXJlTWVzc2FnZVg5NjJTSEEyNTYsIChfX2Jy
aWRnZSBDRkRhdGFSZWYpW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmF1dGhEYXRhLmRhdGEoKSBsZW5n
dGg6YXV0aERhdGEuc2l6ZSgpXSwgJmVycm9yUmVmKTsKICAgICAgICAgICAgICAgICAgICAgYXV0
byByZXRhaW5FcnJvciA9IGFkb3B0Q0YoZXJyb3JSZWYpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoZXJyb3JSZWYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGRu
J3QgZXhwb3J0IHRoZSBwdWJsaWMga2V5OiAlQCIsIChOU0Vycm9yKillcnJvclJlZik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGdlbmVyYXRlIHRoZSBzaWdu
YXR1cmU6ICVAIiwgKE5TRXJyb3IqKWVycm9yUmVmKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbkNhbGxiYWNrKHsgVW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVua25vd24g
aW50ZXJuYWwgZXJyb3IuIikgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYXV0byByZXRhaW5TaWdu
YXR1cmUgPSBhZG9wdENGKHNpZ25hdHVyZVJlZik7CiAgICAgICAgICAgICAgICAgICAgIE5TRGF0
YSAqbnNTaWduYXR1cmUgPSAoTlNEYXRhICopc2lnbmF0dXJlUmVmOwotICAgICAgICAgICAgICAg
ICAgICBzaWduYXR1cmUuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihuc1NpZ25h
dHVyZS5ieXRlcyksIG5zU2lnbmF0dXJlLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIHNp
Z25hdHVyZS5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obnNTaWduYXR1
cmUuYnl0ZXMpLCBuc1NpZ25hdHVyZS5sZW5ndGgpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBhdHRlc3RhdGlvblN0YXRlbWVudE1hcFtjYm9yOjpDQk9SVmFsdWUoImFsZyIp
XSA9IGNib3I6OkNCT1JWYWx1ZShDT1NFOjpFUzI1Nik7CiAgICAgICAgICAgICAgICAgYXR0ZXN0
YXRpb25TdGF0ZW1lbnRNYXBbY2Jvcjo6Q0JPUlZhbHVlKCJzaWciKV0gPSBjYm9yOjpDQk9SVmFs
dWUoc2lnbmF0dXJlKTsKQEAgLTMxNiw3ICszNTQsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRv
cjo6bWFrZUNyZWRlbnRpYWwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25zdCBQdWJs
aQogICAgICAgICAgICAgICAgICAgICBhdXRvIHJldGFpbkRhdGEgPSBhZG9wdENGKGRhdGFSZWYp
OwogICAgICAgICAgICAgICAgICAgICBOU0RhdGEgKm5zRGF0YSA9IChOU0RhdGEgKilkYXRhUmVm
OwogICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICAgICAgICAg
ICAgICAgICAgZGF0YS5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KG5zRGF0YS5i
eXRlcyksIG5zRGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihuc0RhdGEuYnl0ZXMpLCBuc0RhdGEubGVu
Z3RoKTsKICAgICAgICAgICAgICAgICAgICAgY2JvckFycmF5LmFwcGVuZChjYm9yOjpDQk9SVmFs
dWUoV1RGTW92ZShkYXRhKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBh
dHRlc3RhdGlvblN0YXRlbWVudE1hcFtjYm9yOjpDQk9SVmFsdWUoIng1YyIpXSA9IGNib3I6OkNC
T1JWYWx1ZShXVEZNb3ZlKGNib3JBcnJheSkpOwpAQCAtMzM5LDYgKzM3NywxNTAgQEAgdm9pZCBM
b2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
aGFzaCwgY29uc3QgUHVibGkKICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfQogCit2b2lkIExv
Y2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFz
aCwgY29uc3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJiBvcHRpb25zLCBSZXF1
ZXN0Q2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxs
YmFjaykKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgTG9jYWxBdXRoZW50aWNhdG9ySW50ZXJuYWw7
CisKKyNpZiAhUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FKDE4Mjc3MikKKyAgICBBU1NFUlRf
VU5VU0VEKGhhc2gsIGhhc2ggPT0gaGFzaCk7CisgICAgQVNTRVJUX1VOVVNFRChvcHRpb25zLCAh
b3B0aW9ucy5ycElkLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX1VOVVNFRChjYWxsYmFjaywgY2Fs
bGJhY2spOworICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHsgTm90QWxsb3dlZEVycm9yLCBBU0NJSUxp
dGVyYWwoIk5vIGF2YWxpYWJsZSBhdXRoZW50aWNhdG9ycy4iKSB9KTsKKyNlbHNlCisgICAgLy8g
VGhlIGZvbGxvd2luZyBpbXBsZW1lbnRzIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8j
b3AtZ2V0LWFzc2VydGlvbiBhcyBvZiA1IERlY2VtYmVyIDIwMTcuCisgICAgLy8gU2tpcCBTdGVw
IDIgYXMgcmVxdWlyZVVzZXJWZXJpZmljYXRpb24gaXMgZW5mb3JjZWQuCisgICAgLy8gU2tpcCBT
dGVwIDggYXMgZXh0ZW5zaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuCisgICAgLy8gU3RlcCAx
MiBpcyBpbXBsaWNpdGx5IGNhcHR1cmVkIGJ5IGFsbCBVbmtub3duRXJyb3IgZXhjZXB0aW9uIGNh
bGxiYWNrcy4KKyAgICAvLyBTdGVwIDMtNS4KKyAgICAvLyBVbmxpa2UgdGhlIHNwZWMsIGlmIGFu
IGFsbG93IGxpc3QgaXMgcHJvdmlkZWQgYW5kIHRoZXJlIGlzIG5vIGludGVyc2VjdGlvbiBiZXR3
ZWVuIGV4aXN0aW5nIG9uZXMgYW5kIHRoZSBhbGxvdyBsaXN0LCB3ZSBhbHdheXMgcmV0dXJuIE5v
dEFsbG93ZWRFcnJvci4KKyAgICAvLyBFc3RhYmxpc2ggYSBoYXNoIHNldCBvZiBnaXZlbiBhbGxv
dyBjcmVkZW50aWFscworICAgIEhhc2hTZXQ8U3RyaW5nPiBhbGxvd0NyZWRlbnRpYWxJZHM7Cisg
ICAgZm9yIChhdXRvJiBhbGxvd0NyZWRlbnRpYWwgOiBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMp
IHsKKyAgICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbC50cmFuc3BvcnRzLmlzRW1wdHkoKSAmJiBh
bGxvd0NyZWRlbnRpYWwudHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5
ICYmICBhbGxvd0NyZWRlbnRpYWwuaWRWZWN0b3Iuc2l6ZSgpID09IGNyZWRlbnRpYWxJZExlbmd0
aC5pbnRlZ2VyKQorICAgICAgICAgICAgYWxsb3dDcmVkZW50aWFsSWRzLmFkZChTdHJpbmcocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYWxsb3dDcmVkZW50aWFsLmlkVmVjdG9yLmRhdGEo
KSksIGFsbG93Q3JlZGVudGlhbC5pZFZlY3Rvci5zaXplKCkpKTsKKyAgICB9CisgICAgaWYgKCFv
cHRpb25zLmFsbG93Q3JlZGVudGlhbHMuaXNFbXB0eSgpICYmIGFsbG93Q3JlZGVudGlhbElkcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soeyBOb3RBbGxvd2VkRXJyb3Is
IEFTQ0lJTGl0ZXJhbCgiTm8gbWF0Y2hlZCBjcmVkZW50aWFscyBhcmUgZm91bmQgaW4gdGhlIHBs
YXRmb3JtIGF0dGFjaGVkIGF1dGhlbnRpY2F0b3IuIikgfSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBTZWFyY2ggS2V5Y2hhaW4gZm9yIHRoZSBSUCBJRC4KKyAgICBOU0RpY3Rp
b25hcnkgKnF1ZXJ5ID0gQHsKKyAgICAgICAgKGlkKWtTZWNDbGFzczogKGlkKWtTZWNDbGFzc0tl
eSwKKyAgICAgICAgKGlkKWtTZWNBdHRyS2V5Q2xhc3M6IChpZClrU2VjQXR0cktleUNsYXNzUHJp
dmF0ZSwKKyAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IG9wdGlvbnMucnBJZCwKKyAgICAgICAg
KGlkKWtTZWNSZXR1cm5BdHRyaWJ1dGVzOiBAWUVTLAorICAgICAgICAoaWQpa1NlY01hdGNoTGlt
aXQ6IChpZClrU2VjTWF0Y2hMaW1pdEFsbCwKKyAgICB9OworICAgIENGVHlwZVJlZiBhdHRyaWJ1
dGVzQXJyYXlSZWYgPSBOVUxMOworICAgIE9TU3RhdHVzIHN0YXR1cyA9IFNlY0l0ZW1Db3B5TWF0
Y2hpbmcoKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZilxdWVyeSwgJmF0dHJpYnV0ZXNBcnJheVJl
Zik7CisgICAgaWYgKHN0YXR1cyAmJiBzdGF0dXMgIT0gZXJyU2VjSXRlbU5vdEZvdW5kKSB7Cisg
ICAgICAgIExPR19FUlJPUigiQ291bGRuJ3QgcXVlcnkgS2V5Y2hhaW46ICVkIiwgc3RhdHVzKTsK
KyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soeyBVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
VW5rbm93biBpbnRlcm5hbCBlcnJvci4iKSB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBhdXRvIHJldGFpbkF0dHJpYnV0ZXNBcnJheSA9IGFkb3B0Q0YoYXR0cmlidXRlc0FycmF5UmVm
KTsKKworICAgIE5TQXJyYXkgKmludGVyc2VjdGVkQ3JlZGVudGlhbHNBdHRyaWJ1dGVzID0gbmls
OworICAgIGlmIChvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMuaXNFbXB0eSgpKQorICAgICAgICBp
bnRlcnNlY3RlZENyZWRlbnRpYWxzQXR0cmlidXRlcyA9IChOU0FycmF5ICopYXR0cmlidXRlc0Fy
cmF5UmVmOworICAgIGVsc2UgeworICAgICAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05T
TXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmFsbG93Q3JlZGVudGlhbElkcy5zaXplKCld
OworICAgICAgICBmb3IgKE5TRGljdGlvbmFyeSAqbnNBdHRyaWJ1dGVzIGluIChOU0FycmF5ICop
YXR0cmlidXRlc0FycmF5UmVmKSB7CisgICAgICAgICAgICBOU0RhdGEgKm5zQ3JlZGVudGlhbElk
ID0gbnNBdHRyaWJ1dGVzWyhpZClrU2VjQXR0ckFwcGxpY2F0aW9uTGFiZWxdOworICAgICAgICAg
ICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlucyhTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4obnNDcmVkZW50aWFsSWQuYnl0ZXMpLCBuc0NyZWRlbnRpYWxJZC5sZW5n
dGgpKSkKKyAgICAgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpuc0F0dHJpYnV0ZXNdOwor
ICAgICAgICB9CisgICAgICAgIGludGVyc2VjdGVkQ3JlZGVudGlhbHNBdHRyaWJ1dGVzID0gcmVz
dWx0OworICAgIH0KKyAgICBpZiAoIWludGVyc2VjdGVkQ3JlZGVudGlhbHNBdHRyaWJ1dGVzLmNv
dW50KSB7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHsgTm90QWxsb3dlZEVycm9yLCBBU0NJ
SUxpdGVyYWwoIk5vIG1hdGNoZWQgY3JlZGVudGlhbHMgYXJlIGZvdW5kIGluIHRoZSBwbGF0Zm9y
bSBhdHRhY2hlZCBhdXRoZW50aWNhdG9yLiIpIH0pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gU3RlcCA2LgorICAgIC8vIEZJWE1FKHJkYXI6Ly9wcm9ibGVtLzM1OTAwNTM0KTog
V2UgZG9uJ3QgaGF2ZSBhbiBVSSB0byBwcm9tcHQgdXNlcnMgZm9yIHNlbGVjdGluZyBpbnRlcnNl
Y3RlZENyZWRlbnRpYWxzLCBhbmQgdGhlcmVmb3JlIHdlIGFsd2F5cyB1c2UgdGhlIGZpcnN0IG9u
ZSBmb3Igbm93LgorICAgIE5TRGljdGlvbmFyeSAqc2VsZWN0ZWRDcmVkZW50aWFsQXR0cmlidXRl
cyA9IGludGVyc2VjdGVkQ3JlZGVudGlhbHNBdHRyaWJ1dGVzWzBdOworCisgICAgLy8gU3RlcCA3
LiBHZXQgdXNlciBjb25zZW50LgorICAgIC8vIEZJWE1FKDE4MzUzNCk6IFRoZSBsaWZldGltZSBv
ZiBjb250ZXh0IGlzIG1hbmFnZWQgYnkgcmVwbHkgYW5kIHRoZSBlYXJseSByZXR1cm4sIHdoaWNo
IGlzIGEgYml0IHN1YnRsZS4KKyAgICBMQUNvbnRleHQgKmNvbnRleHQgPSBbYWxsb2NMQUNvbnRl
eHRJbnN0YW5jZSgpIGluaXRdOworICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIGlmICgh
W2NvbnRleHQgY2FuRXZhbHVhdGVQb2xpY3k6TEFQb2xpY3lEZXZpY2VPd25lckF1dGhlbnRpY2F0
aW9uV2l0aEJpb21ldHJpY3MgZXJyb3I6JmVycm9yXSkgeworICAgICAgICBhdXRvIHJldGFpbkNv
bnRleHQgPSBhZG9wdE5TKGNvbnRleHQpOworICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGV2
YWx1YXRlIGF1dGhlbnRpY2F0aW9uIHdpdGggYmlvbWV0cmljcyBwb2xpY3k6ICVAIiwgZXJyb3Ip
OworICAgICAgICAvLyBGSVhNRSgxODI3NjcpCisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHsg
Tm90QWxsb3dlZEVycm9yLCBBU0NJSUxpdGVyYWwoIk5vIGF2YWxpYWJsZSBhdXRoZW50aWNhdG9y
cy4iKSB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiBj
cmVkZW50aWFsSWQ7CisgICAgTlNEYXRhICogbnNDcmVkZW50aWFsSWQgPSBzZWxlY3RlZENyZWRl
bnRpYWxBdHRyaWJ1dGVzWyhpZClrU2VjQXR0ckFwcGxpY2F0aW9uTGFiZWxdOworICAgIGNyZWRl
bnRpYWxJZC5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obnNDcmVkZW50
aWFsSWQuYnl0ZXMpLCBuc0NyZWRlbnRpYWxJZC5sZW5ndGgpOworICAgIFZlY3Rvcjx1aW50OF90
PiB1c2VyaGFuZGxlOworICAgIE5TRGF0YSAqIG5zVXNlcmhhbmRsZSA9IHNlbGVjdGVkQ3JlZGVu
dGlhbEF0dHJpYnV0ZXNbKGlkKWtTZWNBdHRyQXBwbGljYXRpb25UYWddOworICAgIHVzZXJoYW5k
bGUuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG5zVXNlcmhhbmRsZS5i
eXRlcyksIG5zVXNlcmhhbmRsZS5sZW5ndGgpOworICAgIGF1dG8gcmVwbHkgPSBCbG9ja1B0cjx2
b2lkKEJPT0wsIE5TRXJyb3IgKik+Ojpmcm9tQ2FsbGFibGUoW2NhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayks
IHJwSWQgPSBvcHRpb25zLnJwSWQuaXNvbGF0ZWRDb3B5KCksIGhhc2gsIGNyZWRlbnRpYWxJZCA9
IFdURk1vdmUoY3JlZGVudGlhbElkKSwgdXNlcmhhbmRsZSA9IFdURk1vdmUodXNlcmhhbmRsZSks
IGNvbnRleHQgPSBhZG9wdE5TKGNvbnRleHQpXSAoQk9PTCBzdWNjZXNzLCBOU0Vycm9yICplcnJv
cikgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgICAgICBp
ZiAoIXN1Y2Nlc3MgfHwgZXJyb3IpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGRuJ3Qg
YXV0aGVudGljYXRlIHdpdGggYmlvbWV0cmljczogJUAiLCBlcnJvcik7CisgICAgICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayh7IE5vdEFsbG93ZWRFcnJvciwgQVNDSUlMaXRlcmFsKCJDb3VsZG4n
dCBnZXQgdXNlciBjb25zZW50LiIpIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgLy8gU3RlcCA5LTEwLgorICAgICAgICAvLyBGSVhNRSgxODM1MzMpOiBEdWUg
dG8gdGhlIHN0YXRlZCBLZXljaGFpbiBsaW1pdGF0aW9ucywgd2UgY2FuJ3Qgc2F2ZSB0aGUgY291
bnRlciB2YWx1ZS4KKyAgICAgICAgLy8gVGhlcmVmb3JlLCBpdCBpcyBhbHdheXMgemVyby4KKyAg
ICAgICAgdWludDMyX3QgY291bnRlciA9IDA7CisgICAgICAgIGF1dG8gYXV0aERhdGEgPSBidWls
ZEF1dGhEYXRhKHJwSWQsIGdldEFzc2VydGlvbkZsYWdzLCBjb3VudGVyLCB7IH0pOworCisgICAg
ICAgIC8vIFN0ZXAgMTEuCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1cmU7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIE5TRGljdGlvbmFyeSAqcXVlcnkgPSBAeworICAgICAgICAgICAg
ICAgIChpZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NLZXksCisgICAgICAgICAgICAgICAgKGlk
KWtTZWNBdHRyS2V5Q2xhc3M6IChpZClrU2VjQXR0cktleUNsYXNzUHJpdmF0ZSwKKyAgICAgICAg
ICAgICAgICAoaWQpa1NlY0F0dHJBcHBsaWNhdGlvbkxhYmVsOiBbTlNEYXRhIGRhdGFXaXRoQnl0
ZXM6Y3JlZGVudGlhbElkLmRhdGEoKSBsZW5ndGg6Y3JlZGVudGlhbElkLnNpemUoKV0sCisgICAg
ICAgICAgICAgICAgKGlkKWtTZWNVc2VBdXRoZW50aWNhdGlvbkNvbnRleHQ6IGNvbnRleHQuZ2V0
KCksCisgICAgICAgICAgICAgICAgKGlkKWtTZWNSZXR1cm5SZWY6IEBZRVMsCisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgQ0ZUeXBlUmVmIHByaXZhdGVLZXlSZWYgPSBOVUxMOworICAgICAg
ICAgICAgT1NTdGF0dXMgc3RhdHVzID0gU2VjSXRlbUNvcHlNYXRjaGluZygoX19icmlkZ2UgQ0ZE
aWN0aW9uYXJ5UmVmKXF1ZXJ5LCAmcHJpdmF0ZUtleVJlZik7CisgICAgICAgICAgICBpZiAoc3Rh
dHVzKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBnZXQgdGhlIHByaXZh
dGUga2V5IHJlZmVyZW5jZTogJWQiLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKHsgVW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVua25vd24gaW50ZXJuYWwg
ZXJyb3IuIikgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYXV0byBwcml2YXRlS2V5ID0gYWRvcHRDRihwcml2YXRlS2V5UmVmKTsKKworICAg
ICAgICAgICAgTlNNdXRhYmxlRGF0YSAqZGF0YVRvU2lnbiA9IFtOU011dGFibGVEYXRhIGRhdGFX
aXRoQnl0ZXM6YXV0aERhdGEuZGF0YSgpIGxlbmd0aDphdXRoRGF0YS5zaXplKCldOworICAgICAg
ICAgICAgW2RhdGFUb1NpZ24gYXBwZW5kQnl0ZXM6aGFzaC5kYXRhKCkgbGVuZ3RoOmhhc2guc2l6
ZSgpXTsKKworICAgICAgICAgICAgQ0ZFcnJvclJlZiBlcnJvclJlZiA9IE5VTEw7CisgICAgICAg
ICAgICAvLyBGSVhNRTogQ29udmVydGluZyBDRlR5cGVSZWYgdG8gU2VjS2V5UmVmIGlzIHF1aXRl
IHN1YnRsZSBoZXJlLgorICAgICAgICAgICAgQ0ZEYXRhUmVmIHNpZ25hdHVyZVJlZiA9IFNlY0tl
eUNyZWF0ZVNpZ25hdHVyZSgoX19icmlkZ2UgU2VjS2V5UmVmKSgoaWQpcHJpdmF0ZUtleVJlZiks
IGtTZWNLZXlBbGdvcml0aG1FQ0RTQVNpZ25hdHVyZU1lc3NhZ2VYOTYyU0hBMjU2LCAoX19icmlk
Z2UgQ0ZEYXRhUmVmKWRhdGFUb1NpZ24sICZlcnJvclJlZik7CisgICAgICAgICAgICBhdXRvIHJl
dGFpbkVycm9yID0gYWRvcHRDRihlcnJvclJlZik7CisgICAgICAgICAgICBpZiAoZXJyb3JSZWYp
IHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGdlbmVyYXRlIHRoZSBzaWdu
YXR1cmU6ICVAIiwgKE5TRXJyb3IqKWVycm9yUmVmKTsKKyAgICAgICAgICAgICAgICBleGNlcHRp
b25DYWxsYmFjayh7IFVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmtub3duIGludGVybmFs
IGVycm9yLiIpIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGF1dG8gcmV0YWluU2lnbmF0dXJlID0gYWRvcHRDRihzaWduYXR1cmVSZWYpOwor
ICAgICAgICAgICAgTlNEYXRhICpuc1NpZ25hdHVyZSA9IChOU0RhdGEgKilzaWduYXR1cmVSZWY7
CisgICAgICAgICAgICBzaWduYXR1cmUuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KG5zU2lnbmF0dXJlLmJ5dGVzKSwgbnNTaWduYXR1cmUubGVuZ3RoKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIFN0ZXAgMTMuCisgICAgICAgIGNhbGxiYWNrKGNyZWRlbnRpYWxJZCwg
YXV0aERhdGEsIHNpZ25hdHVyZSwgdXNlcmhhbmRsZSk7CisgICAgfSk7CisKKyAgICAvLyBGSVhN
RSgxODM1MzMpOiBVc2UgdXNlcmhhbmRsZSBpbnN0ZWFkIG9mIHVzZXJuYW1lIGR1ZSB0byB0aGUg
c3RhdGVkIEtleWNoYWluIGxpbWl0YXRpb25zLgorICAgIE5TU3RyaW5nICpyZWFzb24gPSBbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkxvZyBpbnRvICVAIHdpdGggJUAuIiwgKGlkKW9wdGlv
bnMucnBJZCwgc2VsZWN0ZWRDcmVkZW50aWFsQXR0cmlidXRlc1soaWQpa1NlY0F0dHJBcHBsaWNh
dGlvblRhZ11dOworICAgIFtjb250ZXh0IGV2YWx1YXRlQWNjZXNzQ29udHJvbDooX19icmlkZ2Ug
U2VjQWNjZXNzQ29udHJvbFJlZilzZWxlY3RlZENyZWRlbnRpYWxBdHRyaWJ1dGVzWyhpZClrU2Vj
QXR0ckFjY2Vzc0NvbnRyb2xdIG9wZXJhdGlvbjpMQUFjY2Vzc0NvbnRyb2xPcGVyYXRpb25Vc2VL
ZXlTaWduIGxvY2FsaXplZFJlYXNvbjpyZWFzb24gcmVwbHk6cmVwbHkuZ2V0KCldOworI2VuZGlm
IC8vICFQTEFURk9STShJT1MpCit9CisKIGJvb2wgTG9jYWxBdXRoZW50aWNhdG9yOjppc0F2YWls
YWJsZSgpIGNvbnN0CiB7CiAjaWYgIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyODkyOWI4YTYzYWYxM2E3
OWY5Njc2ZWM5OWNkMWMxZWQ4YmM3ODg0Li5iMjcyM2I1NzU3YmYwNTI2YzA4NWEwMWQzM2Y3MTM4
MWNhYTFlNjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xNzA4LDcgKzE3MDgsNyBAQAogCQk1NzMwM0JFRjIwMDk4MEM2MDAz
NTU5NjUgLyogUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MzAzQkVDMjAwOTgwQkYwMDM1NTk2NSAv
KiBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU3MzAzQkY0MjAwOTkwNDYwMDM1NTk2NSAvKiBK
U1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMwM0JGMjIwMDk5MDQ1MDAzNTU5NjUgLyogSlNQdWJs
aWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oICovOyB9OwogCQk1NzMwM0MwMDIwMDk5NTFDMDAz
NTU5NjUgLyogSlNQdWJsaWNLZXlDcmVkZW50aWFsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTczMDNCRjkyMDA5OTEzNDAwMzU1OTY1IC8qIEpT
UHVibGljS2V5Q3JlZGVudGlhbFR5cGUuaCAqLzsgfTsKLQkJNTczMDNDMEEyMDA5OUJBRDAwMzU1
OTY1IC8qIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTczMDNDMDYyMDA5OThGODAwMzU1OTY1
IC8qIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oICovOyB9OworCQk1NzMwM0Mw
QTIwMDk5QkFEMDAzNTU5NjUgLyogUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMwM0MwNjIw
MDk5OEY4MDAzNTU5NjUgLyogUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTczMDNDMTEy
MDA5OUNCMTAwMzU1OTY1IC8qIEpTUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMwM0MwQzIw
MDk5Qzc1MDAzNTU5NjUgLyogSlNQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaCAq
LzsgfTsKIAkJNTczMDNDMTkyMDA5QTJGMzAwMzU1OTY1IC8qIEpTUHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTczMDNDMTMyMDA5QTI1NzAwMzU1OTY1IC8qIEpTUHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucy5oICovOyB9OwogCQk1NzMwM0MxRjIwMDlBQjQyMDAzNTU5NjUgLyog
QXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MzAzQzFCMjAwOUE5ODYwMDM1NTk2NSAvKiBBdXRo
ZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oICovOyB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNz
ZW5nZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdl
bWVudC9XZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5LmNwcAppbmRleCBmZWFiZWE4Y2ZmNGNk
YWE5YjFkZmJhZWY4YTg3NDBjNTE2YjIxMDY4Li4zYWZkZDEzNWMxYWY4MTQ2ODFiMjAwMjUwMzA3
ZTM2MmQ3OTExN2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9DcmVkZW50
aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01l
c3NlbmdlclByb3h5LmNwcApAQCAtNTcsNiArNTcsNyBAQCB2b2lkIFdlYkNyZWRlbnRpYWxzTWVz
c2VuZ2VyUHJveHk6Om1ha2VDcmVkZW50aWFsKHVpbnQ2NF90IG1lc3NhZ2VJZCwgY29uc3QgVmVj
dAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIEZJWE1FKDE4MzUzNCk6IFdlYWsgcG9p
bnRlcnMgZG9lc24ndCB3b3JrIGluIGFub3RoZXIgdGhyZWFkIGJlY2F1c2Ugb2YgcmFjZSBjb25k
aXRpb24uCisgICAgLy8gRklYTUUoMTgzNTM0KTogVW5pZnkgY2FsbGJhY2tzLgogICAgIGF1dG8g
d2Vha1RoaXMgPSBtX3dlYWtGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKnRoaXMpOwogICAgIGF1dG8g
Y2FsbGJhY2sgPSBbd2Vha1RoaXMsIG1lc3NhZ2VJZF0gKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
Y3JlZGVudGlhbElkLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGF0dGVzdGF0aW9uT2JqZWN0KSB7
CiAgICAgICAgIGlmICghd2Vha1RoaXMpCkBAIC03MSw4ICs3MiwyMyBAQCB2b2lkIFdlYkNyZWRl
bnRpYWxzTWVzc2VuZ2VyUHJveHk6Om1ha2VDcmVkZW50aWFsKHVpbnQ2NF90IG1lc3NhZ2VJZCwg
Y29uc3QgVmVjdAogICAgIG1fYXV0aGVudGljYXRvci0+bWFrZUNyZWRlbnRpYWwoaGFzaCwgb3B0
aW9ucywgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spKTsKIH0K
IAotdm9pZCBXZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5OjpnZXRBc3NlcnRpb24odWludDY0
X3QpCit2b2lkIFdlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHk6OmdldEFzc2VydGlvbih1aW50
NjRfdCBtZXNzYWdlSWQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgV2ViQ29y
ZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJiBvcHRpb25zKQogeworICAgIC8v
IEZJWE1FKDE4Mjc2NykKKyAgICBpZiAoIW1fYXV0aGVudGljYXRvcikKKyAgICAgICAgZXhjZXB0
aW9uUmVwbHkobWVzc2FnZUlkLCB7IFdlYkNvcmU6Ok5vdEFsbG93ZWRFcnJvciwgQVNDSUlMaXRl
cmFsKCJObyBhdmFsaWFibGUgYXV0aGVudGljYXRvcnMuIikgfSk7CisgICAgLy8gRklYTUUoMTgz
NTM0KTogV2VhayBwb2ludGVycyBkb2Vzbid0IHdvcmsgaW4gYW5vdGhlciB0aHJlYWQgYmVjYXVz
ZSBvZiByYWNlIGNvbmRpdGlvbi4KKyAgICAvLyBGSVhNRSgxODM1MzQpOiBVbmlmeSBjYWxsYmFj
a3MuCisgICAgYXV0byB3ZWFrVGhpcyA9IG1fd2Vha0ZhY3RvcnkuY3JlYXRlV2Vha1B0cigqdGhp
cyk7CisgICAgYXV0byBjYWxsYmFjayA9IFt3ZWFrVGhpcywgbWVzc2FnZUlkXSAoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBjcmVkZW50aWFsSWQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYXV0aGVu
dGljYXRvckRhdGEsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc2lnbmF0dXJlLCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIHVzZXJIYW5kbGUpIHsKKyAgICAgICAgaWYgKHdlYWtUaGlzKQorICAgICAg
ICAgICAgd2Vha1RoaXMtPmdldEFzc2VydGlvblJlcGx5KG1lc3NhZ2VJZCwgY3JlZGVudGlhbElk
LCBhdXRoZW50aWNhdG9yRGF0YSwgc2lnbmF0dXJlLCB1c2VySGFuZGxlKTsKKyAgICB9OworICAg
IGF1dG8gZXhjZXB0aW9uQ2FsbGJhY2sgPSBbd2Vha1RoaXMsIG1lc3NhZ2VJZF0gKGNvbnN0IFdl
YkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlvbikgeworICAgICAgICBpZiAod2Vha1RoaXMp
CisgICAgICAgICAgICB3ZWFrVGhpcy0+ZXhjZXB0aW9uUmVwbHkobWVzc2FnZUlkLCBleGNlcHRp
b24pOworICAgIH07CisgICAgbV9hdXRoZW50aWNhdG9yLT5nZXRBc3NlcnRpb24oaGFzaCwgb3B0
aW9ucywgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spKTsKIH0K
IAogdm9pZCBXZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5Ojppc1VzZXJWZXJpZnlpbmdQbGF0
Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUodWludDY0X3QgbWVzc2FnZUlkKQpAQCAtOTQsNiAr
MTEwLDExIEBAIHZvaWQgV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94eTo6bWFrZUNyZWRlbnRp
YWxSZXBseSh1aW50NjRfdCBtZXNzYWdlSWQsIGNvbnN0CiAgICAgbV93ZWJQYWdlUHJveHkuc2Vu
ZChNZXNzYWdlczo6V2ViQ3JlZGVudGlhbHNNZXNzZW5nZXI6Ok1ha2VDcmVkZW50aWFsUmVwbHko
bWVzc2FnZUlkLCBjcmVkZW50aWFsSWQsIGF0dGVzdGF0aW9uT2JqZWN0KSk7CiB9CiAKK3ZvaWQg
V2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94eTo6Z2V0QXNzZXJ0aW9uUmVwbHkodWludDY0X3Qg
bWVzc2FnZUlkLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGNyZWRlbnRpYWxJZCwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBhdXRoZW50aWNhdG9yRGF0YSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBz
aWduYXR1cmUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdXNlckhhbmRsZSkKK3sKKyAgICBtX3dl
YlBhZ2VQcm94eS5zZW5kKE1lc3NhZ2VzOjpXZWJDcmVkZW50aWFsc01lc3Nlbmdlcjo6R2V0QXNz
ZXJ0aW9uUmVwbHkobWVzc2FnZUlkLCBjcmVkZW50aWFsSWQsIGF1dGhlbnRpY2F0b3JEYXRhLCBz
aWduYXR1cmUsIHVzZXJIYW5kbGUpKTsKK30KKwogdm9pZCBXZWJDcmVkZW50aWFsc01lc3Nlbmdl
clByb3h5Ojppc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGVSZXBs
eSh1aW50NjRfdCBtZXNzYWdlSWQsIGJvb2wgcmVzdWx0KQogewogICAgIG1fd2ViUGFnZVByb3h5
LnNlbmQoTWVzc2FnZXM6OldlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyOjpJc1VzZXJWZXJpZnlpbmdQ
bGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGVSZXBseShtZXNzYWdlSWQsIHJlc3VsdCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQv
V2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94eS5oCmluZGV4
IDY5ZWI3MGU3YzQwOGIxY2NmMzY5YmFiYzhiNjExNGQzMmE4NzIyZjAuLjBjMmE0ZGUxNWUyOWE3
NTNhYWMzNGY3OWRkOTA3OTNiZDYzNDEyODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdlbWVudC9XZWJD
cmVkZW50aWFsc01lc3NlbmdlclByb3h5LmgKQEAgLTM3LDYgKzM3LDcgQEAgY2xhc3MgTG9jYWxB
dXRoZW50aWNhdG9yOwogCiBzdHJ1Y3QgRXhjZXB0aW9uRGF0YTsKIHN0cnVjdCBQdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOworc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1
ZXN0T3B0aW9uczsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01NSwxMiArNTYsMTMgQEAg
cHJpdmF0ZToKIAogICAgIC8vIFJlY2VpdmVycy4KICAgICB2b2lkIG1ha2VDcmVkZW50aWFsKHVp
bnQ2NF90IG1lc3NhZ2VJZCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25zdCBXZWJD
b3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zJik7Ci0gICAgdm9pZCBnZXRB
c3NlcnRpb24odWludDY0X3QgbWVzc2FnZUlkKTsKKyAgICB2b2lkIGdldEFzc2VydGlvbih1aW50
NjRfdCBtZXNzYWdlSWQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgV2ViQ29y
ZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJik7CiAgICAgdm9pZCBpc1VzZXJW
ZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUodWludDY0X3QgbWVzc2FnZUlk
KTsKIAogICAgIC8vIFNlbmRlcnMuCiAgICAgdm9pZCBleGNlcHRpb25SZXBseSh1aW50NjRfdCBt
ZXNzYWdlSWQsIGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmKTsKICAgICB2b2lkIG1ha2VD
cmVkZW50aWFsUmVwbHkodWludDY0X3QgbWVzc2FnZUlkLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IGNyZWRlbnRpYWxJZCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBhdHRlc3RhdGlvbk9iamVjdCk7
CisgICAgdm9pZCBnZXRBc3NlcnRpb25SZXBseSh1aW50NjRfdCBtZXNzYWdlSWQsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgY3JlZGVudGlhbElkLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGF1dGhl
bnRpY2F0b3JEYXRhLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNpZ25hdHVyZSwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiB1c2VySGFuZGxlKTsKICAgICB2b2lkIGlzVXNlclZlcmlmeWluZ1BsYXRm
b3JtQXV0aGVudGljYXRvckF2YWlsYWJsZVJlcGx5KHVpbnQ2NF90IG1lc3NhZ2VJZCwgYm9vbCk7
CiAKICAgICBXZWJQYWdlUHJveHkmIG1fd2ViUGFnZVByb3h5OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNz
ZW5nZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NyZWRlbnRp
YWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHkubWVzc2FnZXMuaW4KaW5k
ZXggNTUxMjBhMjhhMzU2YmE3MTc3ZTgwZWQ1ZmZiYmIzOWMyMDZkZjBkYy4uYTU4YmJhZTZmMDE0
YjBiYmI2Y2U5NzhhODQ5YWZmNTM4ZjMzMjYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94
eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9DcmVkZW50aWFsTWFu
YWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yNyw3
ICsyNyw3IEBACiBtZXNzYWdlcyAtPiBXZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5IHsKIAog
ICAgIE1ha2VDcmVkZW50aWFsKHVpbnQ2NF90IG1lc3NhZ2VJZCwgVmVjdG9yPHVpbnQ4X3Q+IGhh
c2gsIHN0cnVjdCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIG9w
dGlvbnMpOwotICAgIEdldEFzc2VydGlvbih1aW50NjRfdCBtZXNzYWdlSWQpOworICAgIEdldEFz
c2VydGlvbih1aW50NjRfdCBtZXNzYWdlSWQsIFZlY3Rvcjx1aW50OF90PiBoYXNoLCBzdHJ1Y3Qg
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIG9wdGlvbnMpOwogICAg
IElzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZSh1aW50NjRfdCBt
ZXNzYWdlSWQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQ3Jl
ZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXIuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxzTWVzc2Vu
Z2VyLmNwcAppbmRleCAwM2JiYTY4OWIwOTk5Mjg0ZWMxOWYwMjkzNjVkOWM4ODhmYWJkMmQ3Li4y
Mjc5ZDdlZmUxZWJhMzE2MGRiZmM4ZDAxZGUzMjBlZTRkMWUxYTRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNN
ZXNzZW5nZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9DcmVkZW50aWFsTWFu
YWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3Nlbmdlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCkBAIC01Myw4ICs1NCwxMCBAQCB2b2lkIFdlYkNyZWRlbnRpYWxzTWVzc2VuZ2Vy
OjptYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0CiAgICAg
bV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OldlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHk6Ok1h
a2VDcmVkZW50aWFsKG1lc3NhZ2VJZCwgaGFzaCwgb3B0aW9ucykpOwogfQogCi12b2lkIFdlYkNy
ZWRlbnRpYWxzTWVzc2VuZ2VyOjpnZXRBc3NlcnRpb24oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jiwg
Y29uc3QgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJiwgV2ViQ29y
ZTo6UmVxdWVzdENvbXBsZXRpb25IYW5kbGVyJiYpCit2b2lkIFdlYkNyZWRlbnRpYWxzTWVzc2Vu
Z2VyOjpnZXRBc3NlcnRpb24oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25zdCBXZWJD
b3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMmIG9wdGlvbnMsIFdlYkNvcmU6
OlJlcXVlc3RDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCiB7CisgICAgYXV0byBtZXNzYWdl
SWQgPSBhZGRSZXF1ZXN0Q29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGVyKSk7CisgICAg
bV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OldlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHk6Okdl
dEFzc2VydGlvbihtZXNzYWdlSWQsIGhhc2gsIG9wdGlvbnMpKTsKIH0KIAogdm9pZCBXZWJDcmVk
ZW50aWFsc01lc3Nlbmdlcjo6aXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZh
aWxhYmxlKFdlYkNvcmU6OlF1ZXJ5Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVyKQpAQCAtNzEs
NiArNzQsOCBAQCB2b2lkIFdlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyOjptYWtlQ3JlZGVudGlhbFJl
cGx5KHVpbnQ2NF90IG1lc3NhZ2VJZCwgY29uc3QgVmVjdAogCiB2b2lkIFdlYkNyZWRlbnRpYWxz
TWVzc2VuZ2VyOjpnZXRBc3NlcnRpb25SZXBseSh1aW50NjRfdCBtZXNzYWdlSWQsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgY3JlZGVudGlhbElkLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGF1dGhl
bnRpY2F0b3JEYXRhLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNpZ25hdHVyZSwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiB1c2VySGFuZGxlKQogeworICAgIGF1dG8gaGFuZGxlciA9IHRha2VSZXF1
ZXN0Q29tcGxldGlvbkhhbmRsZXIobWVzc2FnZUlkKTsKKyAgICBoYW5kbGVyKFdlYkNvcmU6OkFz
c2VydGlvblJldHVybkJ1bmRsZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNyZWRlbnRpYWxJZC5kYXRh
KCksIGNyZWRlbnRpYWxJZC5zaXplKCkpLCBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGF1dGhlbnRpY2F0
b3JEYXRhLmRhdGEoKSwgYXV0aGVudGljYXRvckRhdGEuc2l6ZSgpKSwgQXJyYXlCdWZmZXI6OmNy
ZWF0ZShzaWduYXR1cmUuZGF0YSgpLCBzaWduYXR1cmUuc2l6ZSgpKSwgQXJyYXlCdWZmZXI6OmNy
ZWF0ZSh1c2VySGFuZGxlLmRhdGEoKSwgdXNlckhhbmRsZS5zaXplKCkpKSk7CiB9CiAKIHZvaWQg
V2ViQ3JlZGVudGlhbHNNZXNzZW5nZXI6OmlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGlj
YXRvckF2YWlsYWJsZVJlcGx5KHVpbnQ2NF90IG1lc3NhZ2VJZCwgYm9vbCByZXN1bHQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2Vi
Q3JlZGVudGlhbHNNZXNzZW5nZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXIubWVzc2FnZXMu
aW4KaW5kZXggOTI4MGUwNjk1MWM3ODI5Y2U1Zjc1NjZkODcwZWFhMzYwNTlkZDliNC4uYTZjOGVl
Y2E3YzQ3MzQ0MDE4NGZmMTk5MTkwOWYzMjViYzZlN2QxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxzTWVzc2Vu
Z2VyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9DcmVkZW50aWFs
TWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3Nlbmdlci5tZXNzYWdlcy5pbgpAQCAtMzAsNyAr
MzAsNiBAQCBtZXNzYWdlcyAtPiBXZWJDcmVkZW50aWFsc01lc3NlbmdlciB7CiAgICAgTWFrZUNy
ZWRlbnRpYWxSZXBseSh1aW50NjRfdCBtZXNzYWdlSWQsIFZlY3Rvcjx1aW50OF90PiBjcmVkZW50
aWFsSWQsIFZlY3Rvcjx1aW50OF90PiBhdHRlc3RhdGlvbk9iamVjdCk7CiAgICAgR2V0QXNzZXJ0
aW9uUmVwbHkodWludDY0X3QgbWVzc2FnZUlkLCBWZWN0b3I8dWludDhfdD4gY3JlZGVudGlhbElk
LCBWZWN0b3I8dWludDhfdD4gYXV0aGVudGljYXRvckRhdGEsIFZlY3Rvcjx1aW50OF90PiBzaWdu
YXR1cmUsIFZlY3Rvcjx1aW50OF90PiB1c2VySGFuZGxlKTsKICAgICBJc1VzZXJWZXJpZnlpbmdQ
bGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGVSZXBseSh1aW50NjRfdCBtZXNzYWdlSWQsIGJv
b2wgcmVzdWx0KTsKLWV4Y2VwdGlvblJlcGx5KHVpbnQ2NF90IG1lc3NhZ2VJZCwgc3RydWN0IFdl
YkNvcmU6OkV4Y2VwdGlvbkRhdGEgZXhjZXB0aW9uKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDZjYjdlZDUzZTlhOTAw
ZmM4NTVjMjdlNzZhNjkzOGMzZGM5YzYzMi4uODc4MmRlM2FmOTMzNTFjZTgwNzkzYjYwZGYwODc2
MDBhM2RmNDU3ZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE4LTAzLTIxICBKaWV3ZW4gVGFuICA8amlld2VuX3Rh
bkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhOXSBJbXBsZW1lbnQgYXV0aGVudGljYXRv
ckdldEFzc2VydGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgzODgxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNzI1ODYyOD4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvaW9zL0xvY2FsQXV0aGVudGljYXRvci5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OmFkZFRlc3RLZXlUb0tleWNoYWluKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkxBRXZhbHVh
dGVQb2xpY3lGYWlsZWRTd2l6emxlcjo6ZXZhbHVhdGVQb2xpY3lGYWlsZWQpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6TEFFdmFsdWF0ZVBvbGljeVBhc3NlZFN3aXp6bGVyOjpldmFsdWF0ZVBv
bGljeVBhc3NlZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpMQUV2YWx1YXRlQWNjZXNzQ29u
dHJvbEZhaWxlZFN3aXp6bGVyOjpMQUV2YWx1YXRlQWNjZXNzQ29udHJvbEZhaWxlZFN3aXp6bGVy
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkxBRXZhbHVhdGVBY2Nlc3NDb250cm9sRmFpbGVk
U3dpenpsZXI6OmV2YWx1YXRlQWNjZXNzQ29udHJvbEZhaWxlZCk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpMQUV2YWx1YXRlQWNjZXNzQ29udHJvbFBhc3NlZFN3aXp6bGVyOjpMQUV2YWx1YXRl
QWNjZXNzQ29udHJvbFBhc3NlZFN3aXp6bGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkxB
RXZhbHVhdGVBY2Nlc3NDb250cm9sUGFzc2VkU3dpenpsZXI6OmV2YWx1YXRlQWNjZXNzQ29udHJv
bFBhc3NlZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxOC0wMy0xOSAg
Smlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IGFub3RoZXIgcXVpY2sgZml4IGZvciByMjI5Njk5CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL2lvcy9Mb2NhbEF1dGhlbnRpY2F0b3IubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL2lvcy9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KaW5kZXggNzlhYzZkMjhhNTRiOWJm
ZjFkMWRmYjVjZjlhYWI0YjI5ZDZmMDZhNS4uYTM2MGJjZDdmYmQzMzQ3NDNmZjRiNWIzZGY2YWMy
ZjZmOTRkMzJhZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvTG9j
YWxBdXRoZW50aWNhdG9yLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0xv
Y2FsQXV0aGVudGljYXRvci5tbQpAQCAtMzgsNiArMzgsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9F
eGNlcHRpb25EYXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsQXV0aGVudGljYXRvci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oPgogI2lt
cG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KICNpbXBv
cnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtOTYsNiArOTcsMTkgQEAgUmV0YWluUHRyPFNl
Y0tleVJlZj4gZ2V0VGVzdEtleSgpCiAgICAgcmV0dXJuIGtleTsKIH0KIAordm9pZCBhZGRUZXN0
S2V5VG9LZXljaGFpbigpCit7CisgICAgYXV0byBrZXkgPSBnZXRUZXN0S2V5KCk7CisgICAgTlNE
aWN0aW9uYXJ5KiBhZGRRdWVyeSA9IEB7CisgICAgICAgIChpZClrU2VjVmFsdWVSZWY6IChpZClr
ZXkuZ2V0KCksCisgICAgICAgIChpZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NLZXksCisgICAg
ICAgIChpZClrU2VjQXR0ckxhYmVsOiB0ZXN0UnBJZCwKKyAgICAgICAgKGlkKWtTZWNBdHRyQXBw
bGljYXRpb25UYWc6IFtOU0RhdGEgZGF0YVdpdGhCeXRlczp0ZXN0VXNlcmhhbmRsZSBsZW5ndGg6
c2l6ZW9mKHRlc3RVc2VyaGFuZGxlKV0sCisgICAgfTsKKyAgICBPU1N0YXR1cyBzdGF0dXMgPSBT
ZWNJdGVtQWRkKChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpYWRkUXVlcnksIE5VTEwpOworICAg
IEVYUEVDVF9GQUxTRShzdGF0dXMpOworfQorCiB2b2lkIGNsZWFuVXBLZXljaGFpbigpCiB7CiAg
ICAgLy8gQ2xlYW51cCB0aGUga2V5Y2hhaW4uCkBAIC0xNDEsNyArMTU1LDcgQEAgcHVibGljOgog
ICAgIHsKICAgICB9CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIGV2YWx1YXRlUG9saWN5RmFp
bGVkKGlkIHNlbGYsIFNFTCBfY21kLCBMQVBvbGljeSBwb2xpY3ksIE5TU3RyaW5nICogcmVhc29u
LCB2b2lkIChecmVwbHkpKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqZXJyb3IpKQorICAgIHN0YXRp
YyB2b2lkIGV2YWx1YXRlUG9saWN5RmFpbGVkKGlkLCBTRUwsIExBUG9saWN5LCBOU1N0cmluZyAq
LCB2b2lkIChecmVwbHkpKEJPT0wsIE5TRXJyb3IgKikpCiAgICAgewogICAgICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZ
X0RFRkFVTFQsIDApLCBeewogICAgICAgICAgICAgVXRpbDo6c2xlZXAoMSk7IC8vIG1pbWljIHVz
ZXIgaW50ZXJhY3Rpb24gZGVsYXkKQEAgLTE1OCw3ICsxNzIsNDEgQEAgcHVibGljOgogICAgIHsK
ICAgICB9CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIGV2YWx1YXRlUG9saWN5UGFzc2VkKGlk
IHNlbGYsIFNFTCBfY21kLCBMQVBvbGljeSBwb2xpY3ksIE5TU3RyaW5nICogcmVhc29uLCB2b2lk
IChecmVwbHkpKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqZXJyb3IpKQorICAgIHN0YXRpYyB2b2lk
IGV2YWx1YXRlUG9saWN5UGFzc2VkKGlkLCBTRUwsIExBUG9saWN5LCBOU1N0cmluZyAqLCB2b2lk
IChecmVwbHkpKEJPT0wsIE5TRXJyb3IgKikpCisgICAgeworICAgICAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFV
TFQsIDApLCBeeworICAgICAgICAgICAgVXRpbDo6c2xlZXAoMSk7IC8vIG1pbWljIHVzZXIgaW50
ZXJhY3Rpb24gZGVsYXkKKyAgICAgICAgICAgIHJlcGx5KFlFUywgbmlsKTsKKyAgICAgICAgfSk7
CisgICAgfQorICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgbV9zd2l6emxlcjsKK307CisKK2Ns
YXNzIExBRXZhbHVhdGVBY2Nlc3NDb250cm9sRmFpbGVkU3dpenpsZXIgeworcHVibGljOgorICAg
IExBRXZhbHVhdGVBY2Nlc3NDb250cm9sRmFpbGVkU3dpenpsZXIoKQorICAgICAgICA6IG1fc3dp
enpsZXIoW0xBQ29udGV4dCBjbGFzc10sIEBzZWxlY3RvcihldmFsdWF0ZUFjY2Vzc0NvbnRyb2w6
b3BlcmF0aW9uOmxvY2FsaXplZFJlYXNvbjpyZXBseTopLCByZWludGVycHJldF9jYXN0PElNUD4o
ZXZhbHVhdGVBY2Nlc3NDb250cm9sRmFpbGVkKSkKKyAgICB7CisgICAgfQorcHJpdmF0ZToKKyAg
ICBzdGF0aWMgdm9pZCBldmFsdWF0ZUFjY2Vzc0NvbnRyb2xGYWlsZWQoaWQsIFNFTCwgU2VjQWNj
ZXNzQ29udHJvbFJlZiwgTEFBY2Nlc3NDb250cm9sT3BlcmF0aW9uLCBOU1N0cmluZyAqLCB2b2lk
IChecmVwbHkpKEJPT0wsIE5TRXJyb3IgKikpCisgICAgeworICAgICAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFV
TFQsIDApLCBeeworICAgICAgICAgICAgVXRpbDo6c2xlZXAoMSk7IC8vIG1pbWljIHVzZXIgaW50
ZXJhY3Rpb24gZGVsYXkKKyAgICAgICAgICAgIHJlcGx5KE5PLCBuaWwpOworICAgICAgICB9KTsK
KyAgICB9CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBtX3N3aXp6bGVyOworfTsKKworY2xh
c3MgTEFFdmFsdWF0ZUFjY2Vzc0NvbnRyb2xQYXNzZWRTd2l6emxlciB7CitwdWJsaWM6CisgICAg
TEFFdmFsdWF0ZUFjY2Vzc0NvbnRyb2xQYXNzZWRTd2l6emxlcigpCisgICAgICAgIDogbV9zd2l6
emxlcihbTEFDb250ZXh0IGNsYXNzXSwgQHNlbGVjdG9yKGV2YWx1YXRlQWNjZXNzQ29udHJvbDpv
cGVyYXRpb246bG9jYWxpemVkUmVhc29uOnJlcGx5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihl
dmFsdWF0ZUFjY2Vzc0NvbnRyb2xQYXNzZWQpKQorICAgIHsKKyAgICB9Citwcml2YXRlOgorICAg
IHN0YXRpYyB2b2lkIGV2YWx1YXRlQWNjZXNzQ29udHJvbFBhc3NlZChpZCwgU0VMLCBTZWNBY2Nl
c3NDb250cm9sUmVmLCBMQUFjY2Vzc0NvbnRyb2xPcGVyYXRpb24sIE5TU3RyaW5nICosIHZvaWQg
KF5yZXBseSkoQk9PTCwgTlNFcnJvciAqKSkKICAgICB7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVM
VCwgMCksIF57CiAgICAgICAgICAgICBVdGlsOjpzbGVlcCgxKTsgLy8gbWltaWMgdXNlciBpbnRl
cmFjdGlvbiBkZWxheQpAQCAtMjM0LDE4ICsyODIsOCBAQCBURVNUKExvY2FsQXV0aGVudGljYXRv
ciwgTWFrZUNyZWRlbnRpYWxOb3RTdXBwb3J0ZWRQdWJLZXlDcmVkUGFyYW1zKQogCiBURVNUKExv
Y2FsQXV0aGVudGljYXRvciwgTWFrZUNyZWRlbnRpYWxFeGNsdWRlQ3JlZGVudGlhbHNNYXRjaCkK
IHsKLSAgICAvLyBJbnNlcnQgdGhlIHRlc3Qga2V5IGludG8gS2V5Y2hhaW4KLSAgICBhdXRvIGtl
eSA9IGdldFRlc3RLZXkoKTsKLSAgICBOU0RpY3Rpb25hcnkqIGFkZFF1ZXJ5ID0gQHsKLSAgICAg
ICAgKGlkKWtTZWNWYWx1ZVJlZjogKGlkKWtleS5nZXQoKSwKLSAgICAgICAgKGlkKWtTZWNDbGFz
czogKGlkKWtTZWNDbGFzc0tleSwKLSAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IHRlc3RScElk
LAotICAgICAgICAoaWQpa1NlY0F0dHJBcHBsaWNhdGlvblRhZzogW05TRGF0YSBkYXRhV2l0aEJ5
dGVzOnRlc3RVc2VyaGFuZGxlIGxlbmd0aDpzaXplb2YodGVzdFVzZXJoYW5kbGUpXSwKLSAgICB9
OwotICAgIE9TU3RhdHVzIHN0YXR1cyA9IFNlY0l0ZW1BZGQoKF9fYnJpZGdlIENGRGljdGlvbmFy
eVJlZilhZGRRdWVyeSwgTlVMTCk7Ci0gICAgRVhQRUNUX0ZBTFNFKHN0YXR1cyk7CisgICAgYWRk
VGVzdEtleVRvS2V5Y2hhaW4oKTsKIAotICAgIC8vIEludm9rZSB0aGUgTG9jYWxBdXRoZW50aWNh
dG9yLgogICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGRlc2NyaXB0
b3I7CiAgICAgZGVzY3JpcHRvci50eXBlID0gV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5
cGU6OlB1YmxpY0tleTsKICAgICBXVEY6OmJhc2U2NERlY29kZSh0ZXN0Q3JlZGVudGlhbElkQmFz
ZTY0LCBkZXNjcmlwdG9yLmlkVmVjdG9yKTsKQEAgLTM1MCwxNSArMzg4LDcgQEAgVEVTVChMb2Nh
bEF1dGhlbnRpY2F0b3IsIE1ha2VDcmVkZW50aWFsRGVsZXRlT2xkZXJDcmVkZW5pdGFsKQogICAg
IExBRXZhbHVhdGVQb2xpY3lQYXNzZWRTd2l6emxlciBldmFsdWF0ZVBvbGljeVBhc3NlZFN3aXp6
bGVyOwogCiAgICAgLy8gSW5zZXJ0IHRoZSBvbGRlciBjcmVkZW50aWFsCi0gICAgYXV0byBrZXkg
PSBnZXRUZXN0S2V5KCk7Ci0gICAgTlNEaWN0aW9uYXJ5KiBhZGRRdWVyeSA9IEB7Ci0gICAgICAg
IChpZClrU2VjVmFsdWVSZWY6IChpZClrZXkuZ2V0KCksCi0gICAgICAgIChpZClrU2VjQ2xhc3M6
IChpZClrU2VjQ2xhc3NLZXksCi0gICAgICAgIChpZClrU2VjQXR0ckxhYmVsOiB0ZXN0UnBJZCwK
LSAgICAgICAgKGlkKWtTZWNBdHRyQXBwbGljYXRpb25UYWc6IFtOU0RhdGEgZGF0YVdpdGhCeXRl
czp0ZXN0VXNlcmhhbmRsZSBsZW5ndGg6c2l6ZW9mKHRlc3RVc2VyaGFuZGxlKV0sCi0gICAgfTsK
LSAgICBPU1N0YXR1cyBzdGF0dXMgPSBTZWNJdGVtQWRkKChfX2JyaWRnZSBDRkRpY3Rpb25hcnlS
ZWYpYWRkUXVlcnksIE5VTEwpOwotICAgIEVYUEVDVF9GQUxTRShzdGF0dXMpOworICAgIGFkZFRl
c3RLZXlUb0tleWNoYWluKCk7CiAKICAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zIGNyZWF0aW9uT3B0aW9uczsKICAgICBjcmVhdGlvbk9wdGlvbnMucnAuaWQg
PSB0ZXN0UnBJZDsKQEAgLTUwMyw2ICs1MzMsMTk5IEBAIFRFU1QoTG9jYWxBdXRoZW50aWNhdG9y
LCBNYWtlQ3JlZGVudGlhbFBhc3NlZFdpdGhTZWxmQXR0ZXN0YXRpb24pCiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIH0KIAorVEVTVChMb2NhbEF1dGhlbnRpY2F0b3IsIEdl
dEFzc2VydGlvbkFsbG93Q3JlZGVudGlhbHNNaXNtYXRjaDEpCit7CisgICAgLy8gVHJhbnNwb3J0
cyBtaXNtYXRjaGVkCisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3Ig
ZGVzY3JpcHRvcjsKKyAgICBkZXNjcmlwdG9yLnR5cGUgPSBXZWJDb3JlOjpQdWJsaWNLZXlDcmVk
ZW50aWFsVHlwZTo6UHVibGljS2V5OworICAgIGRlc2NyaXB0b3IudHJhbnNwb3J0cy5hcHBlbmQo
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I6OkF1dGhlbnRpY2F0b3JUcmFu
c3BvcnQ6OlVzYik7CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRp
b25zIHJlcXVlc3RPcHRpb25zOworICAgIHJlcXVlc3RPcHRpb25zLmFsbG93Q3JlZGVudGlhbHMu
YXBwZW5kKFdURk1vdmUoZGVzY3JpcHRvcikpOworCisgICAgYm9vbCBkb25lID0gZmFsc2U7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFRlc3RMb2NhbEF1dGhlbnRpY2F0b3I+IGF1dGhlbnRpY2F0b3Ig
PSBzdGQ6Om1ha2VfdW5pcXVlPFRlc3RMb2NhbEF1dGhlbnRpY2F0b3I+KCk7CisgICAgYXV0byBj
YWxsYmFjayA9IFsmZG9uZV0gKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYp
IHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRydWUpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAg
ICB9OworICAgIGF1dG8gZXhjZXB0aW9uQ2FsbGJhY2sgPSBbJmRvbmVdIChjb25zdCBXZWJDb3Jl
OjpFeGNlcHRpb25EYXRhJiBleGNlcHRpb24pIG11dGFibGUgeworICAgICAgICBFWFBFQ1RfRVEo
V2ViQ29yZTo6Tm90QWxsb3dlZEVycm9yLCBleGNlcHRpb24uY29kZSk7CisgICAgICAgIEVYUEVD
VF9TVFJFUSgiTm8gbWF0Y2hlZCBjcmVkZW50aWFscyBhcmUgZm91bmQgaW4gdGhlIHBsYXRmb3Jt
IGF0dGFjaGVkIGF1dGhlbnRpY2F0b3IuIiwgZXhjZXB0aW9uLm1lc3NhZ2UuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9OworICAgIGF1dGhlbnRpY2F0b3ItPmdl
dEFzc2VydGlvbih7IH0sIHJlcXVlc3RPcHRpb25zLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92
ZShleGNlcHRpb25DYWxsYmFjaykpOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lKTsKK30KKworVEVTVChMb2NhbEF1dGhlbnRpY2F0b3IsIEdldEFzc2VydGlvbkFsbG93Q3Jl
ZGVudGlhbHNNaXNtYXRjaDIpCit7CisgICAgLy8gTm8gZXhpc3RpbmcgY3JlZGVudGlhbAorICAg
IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyByZXF1ZXN0T3B0aW9u
czsKKyAgICByZXF1ZXN0T3B0aW9ucy5ycElkID0gdGVzdFJwSWQ7CisKKyAgICBib29sIGRvbmUg
PSBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVzdExvY2FsQXV0aGVudGljYXRvcj4gYXV0
aGVudGljYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8VGVzdExvY2FsQXV0aGVudGljYXRvcj4oKTsK
KyAgICBhdXRvIGNhbGxiYWNrID0gWyZkb25lXSAoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JikgeworICAgICAgICBFWFBFQ1RfRkFMU0UodHJ1ZSk7CisgICAgICAgIGRvbmUg
PSB0cnVlOworICAgIH07CisgICAgYXV0byBleGNlcHRpb25DYWxsYmFjayA9IFsmZG9uZV0gKGNv
bnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlvbikgbXV0YWJsZSB7CisgICAgICAg
IEVYUEVDVF9FUShXZWJDb3JlOjpOb3RBbGxvd2VkRXJyb3IsIGV4Y2VwdGlvbi5jb2RlKTsKKyAg
ICAgICAgRVhQRUNUX1NUUkVRKCJObyBtYXRjaGVkIGNyZWRlbnRpYWxzIGFyZSBmb3VuZCBpbiB0
aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4iLCBleGNlcHRpb24ubWVzc2FnZS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH07CisgICAgYXV0aGVu
dGljYXRvci0+Z2V0QXNzZXJ0aW9uKHsgfSwgcmVxdWVzdE9wdGlvbnMsIFdURk1vdmUoY2FsbGJh
Y2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSk7CisKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmUpOworfQorCitURVNUKExvY2FsQXV0aGVudGljYXRvciwgR2V0QXNzZXJ0
aW9uQWxsb3dDcmVkZW50aWFsc01pc21hdGNoMykKK3sKKyAgICAvLyBDcmVkZW50aWFsIElEIG1p
c21hdGNoZWQKKyAgICBhZGRUZXN0S2V5VG9LZXljaGFpbigpOworCisgICAgV2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgICBkZXNjcmlwdG9yLnR5
cGUgPSBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5OworICAgIFdU
Rjo6YmFzZTY0RGVjb2RlKHRlc3RDcmVkZW50aWFsSWRCYXNlNjQsIGRlc2NyaXB0b3IuaWRWZWN0
b3IpOworICAgIGRlc2NyaXB0b3IuaWRWZWN0b3JbMTldID0gMDsgLy8gbnVrZSB0aGUgbGFzdCBi
eXRlLgorICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyByZXF1
ZXN0T3B0aW9uczsKKyAgICByZXF1ZXN0T3B0aW9ucy5ycElkID0gdGVzdFJwSWQ7CisgICAgcmVx
dWVzdE9wdGlvbnMuYWxsb3dDcmVkZW50aWFscy5hcHBlbmQoZGVzY3JpcHRvcik7CisKKyAgICBi
b29sIGRvbmUgPSBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVzdExvY2FsQXV0aGVudGlj
YXRvcj4gYXV0aGVudGljYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8VGVzdExvY2FsQXV0aGVudGlj
YXRvcj4oKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gWyZkb25lXSAoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JikgeworICAgICAgICBFWFBFQ1RfRkFMU0UodHJ1ZSk7CisgICAg
ICAgIGNsZWFuVXBLZXljaGFpbigpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9OworICAg
IGF1dG8gZXhjZXB0aW9uQ2FsbGJhY2sgPSBbJmRvbmVdIChjb25zdCBXZWJDb3JlOjpFeGNlcHRp
b25EYXRhJiBleGNlcHRpb24pIG11dGFibGUgeworICAgICAgICBFWFBFQ1RfRVEoV2ViQ29yZTo6
Tm90QWxsb3dlZEVycm9yLCBleGNlcHRpb24uY29kZSk7CisgICAgICAgIEVYUEVDVF9TVFJFUSgi
Tm8gbWF0Y2hlZCBjcmVkZW50aWFscyBhcmUgZm91bmQgaW4gdGhlIHBsYXRmb3JtIGF0dGFjaGVk
IGF1dGhlbnRpY2F0b3IuIiwgZXhjZXB0aW9uLm1lc3NhZ2UuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICBjbGVhblVwS2V5Y2hhaW4oKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfTsKKyAg
ICBhdXRoZW50aWNhdG9yLT5nZXRBc3NlcnRpb24oeyB9LCByZXF1ZXN0T3B0aW9ucywgV1RGTW92
ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spKTsKKworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Cit9CisKK1RFU1QoTG9jYWxBdXRoZW50aWNhdG9yLCBH
ZXRBc3NlcnRpb25CaW9tZXRyaWNzTm90RW5yb2xsZWQpCit7CisgICAgTEFDYW50RXZhbHVhdGVQ
b2xpY3lTd2l6emxlciBzd2l6emxlcjsKKworICAgIGFkZFRlc3RLZXlUb0tleWNoYWluKCk7CisK
KyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgcmVxdWVzdE9w
dGlvbnM7CisgICAgcmVxdWVzdE9wdGlvbnMucnBJZCA9IHRlc3RScElkOworCisgICAgYm9vbCBk
b25lID0gZmFsc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRlc3RMb2NhbEF1dGhlbnRpY2F0b3I+
IGF1dGhlbnRpY2F0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPFRlc3RMb2NhbEF1dGhlbnRpY2F0b3I+
KCk7CisgICAgYXV0byBjYWxsYmFjayA9IFsmZG9uZV0gKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYpIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRydWUpOworICAgICAgICBj
bGVhblVwS2V5Y2hhaW4oKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfTsKKyAgICBhdXRv
IGV4Y2VwdGlvbkNhbGxiYWNrID0gWyZkb25lXSAoY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGF0
YSYgZXhjZXB0aW9uKSBtdXRhYmxlIHsKKyAgICAgICAgRVhQRUNUX0VRKFdlYkNvcmU6Ok5vdEFs
bG93ZWRFcnJvciwgZXhjZXB0aW9uLmNvZGUpOworICAgICAgICBFWFBFQ1RfU1RSRVEoIk5vIGF2
YWxpYWJsZSBhdXRoZW50aWNhdG9ycy4iLCBleGNlcHRpb24ubWVzc2FnZS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgIGNsZWFuVXBLZXljaGFpbigpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAg
ICB9OworICAgIGF1dGhlbnRpY2F0b3ItPmdldEFzc2VydGlvbih7IH0sIHJlcXVlc3RPcHRpb25z
LCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjaykpOworCisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKK30KKworVEVTVChMb2NhbEF1dGhlbnRp
Y2F0b3IsIEdldEFzc2VydGlvbkJpb21ldHJpY3NOb3RBdXRoZW50aWNhdGVkKQoreworICAgIExB
Q2FuRXZhbHVhdGVQb2xpY3lTd2l6emxlciBjYW5FdmFsdWF0ZVBvbGljeVN3aXp6bGVyOworICAg
IExBRXZhbHVhdGVBY2Nlc3NDb250cm9sRmFpbGVkU3dpenpsZXIgZXZhbHVhdGVBY2Nlc3NDb250
cm9sRmFpbGVkU3dpenpsZXI7CisKKyAgICBhZGRUZXN0S2V5VG9LZXljaGFpbigpOworCisgICAg
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHJlcXVlc3RPcHRpb25z
OworICAgIHJlcXVlc3RPcHRpb25zLnJwSWQgPSB0ZXN0UnBJZDsKKworICAgIGJvb2wgZG9uZSA9
IGZhbHNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXN0TG9jYWxBdXRoZW50aWNhdG9yPiBhdXRo
ZW50aWNhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxUZXN0TG9jYWxBdXRoZW50aWNhdG9yPigpOwor
ICAgIGF1dG8gY2FsbGJhY2sgPSBbJmRvbmVdIChjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25z
dCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mKSB7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0cnVlKTsKKyAgICAgICAgY2xlYW5V
cEtleWNoYWluKCk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH07CisgICAgYXV0byBleGNl
cHRpb25DYWxsYmFjayA9IFsmZG9uZV0gKGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4
Y2VwdGlvbikgbXV0YWJsZSB7CisgICAgICAgIEVYUEVDVF9FUShXZWJDb3JlOjpOb3RBbGxvd2Vk
RXJyb3IsIGV4Y2VwdGlvbi5jb2RlKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJDb3VsZG4ndCBn
ZXQgdXNlciBjb25zZW50LiIsIGV4Y2VwdGlvbi5tZXNzYWdlLmFzY2lpKCkuZGF0YSgpKTsKKyAg
ICAgICAgY2xlYW5VcEtleWNoYWluKCk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH07Cisg
ICAgYXV0aGVudGljYXRvci0+Z2V0QXNzZXJ0aW9uKHsgfSwgcmVxdWVzdE9wdGlvbnMsIFdURk1v
dmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSk7CisKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworfQorCitURVNUKExvY2FsQXV0aGVudGljYXRvciwg
R2V0QXNzZXJ0aW9uUGFzc2VkKQoreworICAgIExBQ2FuRXZhbHVhdGVQb2xpY3lTd2l6emxlciBj
YW5FdmFsdWF0ZVBvbGljeVN3aXp6bGVyOworICAgIExBRXZhbHVhdGVBY2Nlc3NDb250cm9sUGFz
c2VkU3dpenpsZXIgZXZhbHVhdGVBY2Nlc3NDb250cm9sUGFzc2VkU3dpenpsZXI7CisKKyAgICBh
ZGRUZXN0S2V5VG9LZXljaGFpbigpOworCisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlh
bFJlcXVlc3RPcHRpb25zIHJlcXVlc3RPcHRpb25zOworICAgIHJlcXVlc3RPcHRpb25zLnJwSWQg
PSB0ZXN0UnBJZDsKKworICAgIFZlY3Rvcjx1aW50OF90PiBoYXNoKDMyKTsKKworICAgIGJvb2wg
ZG9uZSA9IGZhbHNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXN0TG9jYWxBdXRoZW50aWNhdG9y
PiBhdXRoZW50aWNhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxUZXN0TG9jYWxBdXRoZW50aWNhdG9y
PigpOworICAgIGF1dG8gY2FsbGJhY2sgPSBbJmRvbmUsIGhhc2hdIChjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGNyZWRlbnRpYWxJZCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBhdXRoRGF0YSwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBzaWduYXR1cmUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdXNl
cmhhbmRsZSkgeworICAgICAgICAvLyBDaGVjayBDcmVkZW50aWFsIElECisgICAgICAgIEVYUEVD
VF9UUlVFKFdURjo6YmFzZTY0RW5jb2RlKGNyZWRlbnRpYWxJZC5kYXRhKCksIGNyZWRlbnRpYWxJ
ZC5zaXplKCkpID09IHRlc3RDcmVkZW50aWFsSWRCYXNlNjQpOworCisgICAgICAgIC8vIENoZWNr
IEF1dGhlbnRpY2F0b3IgRGF0YS4KKyAgICAgICAgc2l6ZV90IHBvcyA9IDA7CisgICAgICAgIHVp
bnQ4X3QgZXhwZWN0ZWRScElkSGFzaFtdID0geworICAgICAgICAgICAgMHg0OSwgMHg5NiwgMHgw
ZCwgMHhlNSwgMHg4OCwgMHgwZSwgMHg4YywgMHg2OCwKKyAgICAgICAgICAgIDB4NzQsIDB4MzQs
IDB4MTcsIDB4MGYsIDB4NjQsIDB4NzYsIDB4NjAsIDB4NWIsCisgICAgICAgICAgICAweDhmLCAw
eGU0LCAweGFlLCAweGI5LCAweGEyLCAweDg2LCAweDMyLCAweGM3LAorICAgICAgICAgICAgMHg5
OSwgMHg1YywgMHhmMywgMHhiYSwgMHg4MywgMHgxZCwgMHg5NywgMHg2MworICAgICAgICB9Owor
ICAgICAgICBFWFBFQ1RfRkFMU0UobWVtY21wKGF1dGhEYXRhLmRhdGEoKSArIHBvcywgZXhwZWN0
ZWRScElkSGFzaCwgc2l6ZW9mKGV4cGVjdGVkUnBJZEhhc2gpKSk7CisgICAgICAgIHBvcyArPSBz
aXplb2YoZXhwZWN0ZWRScElkSGFzaCk7CisKKyAgICAgICAgLy8gRkxBR1MKKyAgICAgICAgRVhQ
RUNUX0VRKDUsIGF1dGhEYXRhW3Bvc10pOworICAgICAgICBwb3MrKzsKKworICAgICAgICB1aW50
MzJfdCBjb3VudGVyID0gLTE7CisgICAgICAgIG1lbWNweSgmY291bnRlciwgYXV0aERhdGEuZGF0
YSgpICsgcG9zLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBjb3Vu
dGVyKTsKKworICAgICAgICAvLyBDaGVjayBzaWduYXR1cmUKKyAgICAgICAgYXV0byBwcml2YXRl
S2V5ID0gZ2V0VGVzdEtleSgpOworICAgICAgICBWZWN0b3I8dWludDhfdD4gZGF0YVRvU2lnbihh
dXRoRGF0YSk7CisgICAgICAgIGRhdGFUb1NpZ24uYXBwZW5kVmVjdG9yKGhhc2gpOworICAgICAg
ICBFWFBFQ1RfVFJVRShTZWNLZXlWZXJpZnlTaWduYXR1cmUoU2VjS2V5Q29weVB1YmxpY0tleShw
cml2YXRlS2V5LmdldCgpKSwga1NlY0tleUFsZ29yaXRobUVDRFNBU2lnbmF0dXJlTWVzc2FnZVg5
NjJTSEEyNTYsIChfX2JyaWRnZSBDRkRhdGFSZWYpW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGFU
b1NpZ24uZGF0YSgpIGxlbmd0aDpkYXRhVG9TaWduLnNpemUoKV0sIChfX2JyaWRnZSBDRkRhdGFS
ZWYpW05TRGF0YSBkYXRhV2l0aEJ5dGVzOnNpZ25hdHVyZS5kYXRhKCkgbGVuZ3RoOnNpZ25hdHVy
ZS5zaXplKCldLCBOVUxMKSk7CisKKyAgICAgICAgLy8gQ2hlY2sgVXNlciBIYW5kbGUKKyAgICAg
ICAgRVhQRUNUX0VRKHVzZXJoYW5kbGUuc2l6ZSgpLCBzaXplb2YodGVzdFVzZXJoYW5kbGUpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKG1lbWNtcCh1c2VyaGFuZGxlLmRhdGEoKSwgdGVzdFVzZXJo
YW5kbGUsIHNpemVvZih0ZXN0VXNlcmhhbmRsZSkpKTsKKworICAgICAgICBjbGVhblVwS2V5Y2hh
aW4oKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfTsKKyAgICBhdXRvIGV4Y2VwdGlvbkNh
bGxiYWNrID0gWyZkb25lXSAoY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSYgZXhjZXB0aW9u
KSBtdXRhYmxlIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRydWUpOworICAgICAgICBjbGVhblVw
S2V5Y2hhaW4oKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfTsKKyAgICBhdXRoZW50aWNh
dG9yLT5nZXRBc3NlcnRpb24oaGFzaCwgcmVxdWVzdE9wdGlvbnMsIFdURk1vdmUoY2FsbGJhY2sp
LCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSk7CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRp
ZiAvLyBQTEFURk9STShJT1MpCg==
</data>
<flag name="review"
          id="354785"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
    <flag name="commit-queue"
          id="355098"
          type_id="3"
          status="-"
          setter="bfulgham"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336614</attachid>
            <date>2018-03-27 13:11:10 -0700</date>
            <delta_ts>2018-03-27 13:25:36 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-183881-20180327131110.patch</filename>
            <type>text/plain</type>
            <size>61523</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5NzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzhiMjU0NTk2YTU5YTI0
NzkyMzJiMjhmMzk4MzEyODFlMDJlY2YwMy4uOWNkM2QxMjgwOWZkOGFlZTY2MDAxMWU3YzdlMTQw
YmM2OTZjNThjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE4LTAzLTIxICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhOXSBJbXBs
ZW1lbnQgYXV0aGVudGljYXRvckdldEFzc2VydGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzODgxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
NzI1ODYyOD4KKworICAgICAgICBSZXZpZXdlZCBieSBCcmVudCBGdWxnaGFtLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggZG9lcyB0aGUgZm9sbG93aW5nIGZldyB0aGluZ3M6CisgICAgICAgIDEpIEl0
IGltcGxlbWVudHMgdGhlIHNwZWM6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8jb3At
Z2V0LWFzc2VydGlvbiBhcyBvZiA1IERlY2VtYmVyIDIwMTcuCisgICAgICAgIDIpIEl0IHR3ZWFr
cyBlbmNvZGluZy9kZWNvZGluZyBvZiBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMg
c3VjaCB0aGF0IG9wdGlvbnMgY2FuIGJlIHBhc3NlZAorICAgICAgICBiZXR3ZWVuIFVJIGFuZCBX
ZWIgcHJvY2Vzc2VzLgorICAgICAgICAzKSBJdCByZWZpbmVzIHRoZSB3YXkgaG93IExvY2FsQXV0
aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwgZmluZCBpbnRlcnNlY3Rpb24gYmV0d2VlbgorICAg
ICAgICBleGNsdWRlQ3JlZGVudGlhbERlc2NyaXB0b3JMaXN0IGFuZCBleGlzdGluZyBjcmVkZW50
aWFscyBpbiB0aGUgYXV0aGVudGljYXRvciwgc3VjaCB0aGF0IGl0IGlzIGZhc3Rlci4KKyAgICAg
ICAgQmFzaWNhbGx5LCBpdCB0YWtlcyB0aGUgQ3JlZGVudGlhbElEIGZyb20gdGhlIGxpc3QgYW5k
IHRyZWF0IGl0IGFzIGFuIEFTQ0lJIHN0cmluZyBhbmQgcHV0IGl0IGludG8gYQorICAgICAgICBI
YXNoU2V0PFN0cmluZz4uIEl0IHNob3VsZCBub3QgbWF0dGVyIGlmIGEgZHVwbGljYXRlZCBDcmVk
ZW50aWFsSUQgaXMgYWRkZWQuIElmIHRoZSBoYXNoIHNldCBpcyBub3QKKyAgICAgICAgZW1wdHks
IHRoZSBhbGdvcml0aG0gdGhlbiBxdWVyaWVzIEtleWNoYWluIGZvciBhbGwgQ3JlZGVudGlhbElE
cyByZWxhdGVkIHRvIHRoZSBjdXJyZW50IFJQIElEIG9uY2UuCisgICAgICAgIEZvciBldmVyeSBx
dWVyaWVkIENyZWRlbnRpYWxJRCwgdGhlIGFsZ29yaXRobSB0aGVuIHRyZWF0cyBpdCBhcyBhbiBB
U0NJSSBzdHJpbmcgYXMgd2VsbCBhbmQgbG9vayBmb3IKKyAgICAgICAgYSBtYXRjaCBpbiB0aGUg
aGFzaCBzZXQgdG8gcHJvZHVjZSB0aGUgaW50ZXJzZXRjdGlvbi4gVGhlIG5ldyB3YXkgaXMgYWxz
byBlbXBsb3llZCBpbgorICAgICAgICBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbiBh
cyB3ZWxsLgorICAgICAgICA0KSBJdCBhYnN0cmFjdHMgdGhlIHdheSB0byBwcm9kdWNlIGF1dGhE
YXRhIGFuZCB0aHVzIHJlb3JkZXJzIGEgYml0IG9mIGNvZGUgaW4KKyAgICAgICAgTG9jYWxBdXRo
ZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbC4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0
cy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvck1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGljYXRvck1hbmFnZXI6OmNyZWF0ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpBdXRoZW50aWNhdG9yTWFuYWdlcjo6ZGlzY292ZXJGcm9tRXh0
ZXJuYWxTb3VyY2UgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4v
UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM6OmRlY29kZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9jb2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL2NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsQXV0aGVudGljYXRvckludGVybmFsOjpidWlsZEF1dGhEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQXV0aGVudGljYXRvckludGVybmFsOjpwcm9kdWNl
SGFzaFNldCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVk
ZW50aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQXV0aGVudGljYXRvcjo6aXNzdWVDbGllbnRD
ZXJ0aWZpY2F0ZSBjb25zdCk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorCiAyMDE4LTAzLTE5ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYW5vdGhlciBxdWljayBmaXggZm9yIHIyMjk2OTkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggNzEwYTdmZGMyNjBkNGMwMjNhZDEzYWVlMjgxN2MzMDliNmQ5Y2RmMi4uMzQxMTU2
OWU3MTY4NzdhM2E4Y2QyMmM4OTBjZGQyZDM4ZTViNWYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MyBAQAorMjAxOC0wMy0yMSAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFtXZWJBdXRoTl0gSW1wbGVtZW50IGF1dGhlbnRpY2F0b3JHZXRBc3NlcnRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzg4MQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMzcyNTg2Mjg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJl
bnQgRnVsZ2hhbS4KKworICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3Nl
bmdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQ
cm94eTo6bWFrZUNyZWRlbnRpYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJDcmVkZW50aWFsc01l
c3NlbmdlclByb3h5OjpnZXRBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJDcmVkZW50
aWFsc01lc3NlbmdlclByb3h5OjpnZXRBc3NlcnRpb25SZXBseSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHkuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNN
ZXNzZW5nZXJQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0NyZWRlbnRp
YWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQ3JlZGVudGlhbHNNZXNzZW5nZXI6OmdldEFzc2VydGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyOjpnZXRBc3NlcnRpb25SZXBseSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3Nlbmdl
ci5tZXNzYWdlcy5pbjoKKwogMjAxOC0wMy0xOSAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGFub3RoZXIgcXVpY2sgZml4IGZvciByMjI5
Njk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRp
Y2F0b3JNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVu
dGljYXRvck1hbmFnZXIuY3BwCmluZGV4IGUyMmM0OTM5NzQxNjg5NzUyYzdjNjAyY2M5MzViMGRi
ODczNGJmZmMuLjdlZTJhZmM5MmJlODM4YTI5OTg5ZDgyZDZkZmYwMDczODQ1NDUxZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvck1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRv
ck1hbmFnZXIuY3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBBdXRoZW50aWNhdG9yTWFuYWdl
cjo6Y3JlYXRlKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBjYWxsZXJPcmlnaW4sIGNvbnN0IFB1YmwK
ICAgICAvLyBTdGVwIDE4LTIxLgogICAgIC8vIE9ubHkgcGxhdGZvcm0gYXR0YWNobWVudHMgd2ls
bCBiZSBzdXBwb3J0ZWQgYXQgdGhpcyBzdGFnZS4gQXNzdW1pbmcgb25lIGF1dGhlbnRpY2F0b3Ig
cGVyIGRldmljZS4KICAgICAvLyBBbHNvLCByZXNpZGVudCBrZXlzLCB1c2VyIHZlcmlmaWNhdGlv
bnMgYW5kIGRpcmVjdCBhdHRlc3RhdGlvbiBhcmUgZW5mb3JjZWQgYXQgdGhpcyB0YWdlLgotICAg
IC8vIEZvciBiZXR0ZXIgcGVyZm9ybWFuY2UsIG5vIGZpbHRlcmluZyBpcyBkb25lIGhlcmUgcmVn
YXJkaW5nIHRvIG9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzLgorICAgIC8vIEZvciBiZXR0ZXIg
cGVyZm9ybWFuY2UsIHRyYW5zcG9ydHMgb2Ygb3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMgYXJl
IGNoZWNrZWQgaW4gTG9jYWxBdXRoZW50aWNhdG9yLgogICAgIGlmICghbV9tZXNzZW5nZXIpICB7
CiAgICAgICAgIHByb21pc2UucmVqZWN0KEV4Y2VwdGlvbiB7IFVua25vd25FcnJvciwgQVNDSUlM
aXRlcmFsKCJVbmtub3duIGludGVybmFsIGVycm9yLiIpIH0pOwogICAgICAgICByZXR1cm47CkBA
IC0yMTksNyArMjE5LDcgQEAgdm9pZCBBdXRoZW50aWNhdG9yTWFuYWdlcjo6ZGlzY292ZXJGcm9t
RXh0ZXJuYWxTb3VyY2UoY29uc3QgU2VjdXJpdHlPcmlnaW4mIGNhbGwKICAgICAvLyBTdGVwIDE0
LTE1LCAxNy0xOS4KICAgICAvLyBPbmx5IHBsYXRmb3JtIGF0dGFjaG1lbnRzIHdpbGwgYmUgc3Vw
cG9ydGVkIGF0IHRoaXMgc3RhZ2UuIEFzc3VtaW5nIG9uZSBhdXRoZW50aWNhdG9yIHBlciBkZXZp
Y2UuCiAgICAgLy8gQWxzbywgcmVzaWRlbnQga2V5cywgdXNlciB2ZXJpZmljYXRpb25zIGFuZCBk
aXJlY3QgYXR0ZXN0YXRpb24gYXJlIGVuZm9yY2VkIGF0IHRoaXMgdGFnZS4KLSAgICAvLyBGb3Ig
YmV0dGVyIHBlcmZvcm1hbmNlLCBubyBmaWx0ZXJpbmcgaXMgZG9uZSBoZXJlIHJlZ2FyZGluZyB0
byBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMuCisgICAgLy8gRm9yIGJldHRlciBwZXJmb3JtYW5j
ZSwgZmlsdGVyaW5nIG9mIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyBpcyBkb25lIGluIExvY2Fs
QXV0aGVudGljYXRvci4KICAgICBpZiAoIW1fbWVzc2VuZ2VyKSAgewogICAgICAgICBwcm9taXNl
LnJlamVjdChFeGNlcHRpb24geyBVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5rbm93biBp
bnRlcm5hbCBlcnJvci4iKSB9KTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnMuaAppbmRleCA0OTVkNThiMTc0MWEzNTlhOTYxMDkyZjUzY2Q2Yzhh
ZGUzMjM0Y2FmLi43NjBlOGZkYTVmMWU3NTE3N2NlZmVmNzUxNTg2ZWFiNDk0MDQzM2M4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhu
L1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaApAQCAtNDcsNyArNDcsNyBAQCBz
dHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7CiAKICAgICBzdHJ1Y3Qg
VXNlckVudGl0eSA6IHB1YmxpYyBFbnRpdHkgewogICAgICAgICBCdWZmZXJTb3VyY2UgaWQ7IC8v
IGlkIGJlY29tZXMgaWRWZWN0b3Igb25jZSBpdCBpcyBwYXNzZWQgdG8gVUlQcm9jZXNzLgotICAg
ICAgICBtdXRhYmxlIFZlY3Rvcjx1aW50OF90PiBpZFZlY3RvcjsKKyAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGlkVmVjdG9yOwogICAgICAgICBTdHJpbmcgZGlzcGxheU5hbWU7CiAgICAgfTsKIApA
QCAtMTQwLDcgKzE0MCw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFz
ZTxmYWxzZSwgZmFsc2UsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpCiAgICAgICAgIHJlc3Vs
dC51c2VyLm5hbWUgPSBzb3VyY2UudXNlci5uYW1lLmlzb2xhdGVkQ29weSgpOwogICAgICAgICBy
ZXN1bHQudXNlci5pY29uID0gc291cmNlLnVzZXIuaWNvbi5pc29sYXRlZENvcHkoKTsKICAgICAg
ICAgcmVzdWx0LnVzZXIuZGlzcGxheU5hbWUgPSBzb3VyY2UudXNlci5kaXNwbGF5TmFtZS5pc29s
YXRlZENvcHkoKTsKLSAgICAgICAgcmVzdWx0LnVzZXIuaWRWZWN0b3IgPSBXVEZNb3ZlKHNvdXJj
ZS51c2VyLmlkVmVjdG9yKTsKKyAgICAgICAgcmVzdWx0LnVzZXIuaWRWZWN0b3IgPSBzb3VyY2Uu
dXNlci5pZFZlY3RvcjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFs
UmVxdWVzdE9wdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKaW5kZXggMWU1ODU1MTJjODUzMjg5NDMzYjEx
YzdlZDAzY2MyZjhmZGEzMmUzNS4uOTg2MTFhMDU0N2M5NzFjOThlNzE4MGQ4YTI2NWZmOWU2ZTEz
ZDliOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCkBAIC0zOCw4ICsz
OCwyOCBAQCBzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHsKICAgICBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkIGxvbmc+IHRpbWVvdXQ7CiAgICAgbXV0YWJsZSBTdHJpbmcg
cnBJZDsKICAgICBWZWN0b3I8UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+IGFsbG93Q3Jl
ZGVudGlhbHM7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPiBkZWNvZGUoRGVjb2RlciYp
OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUHVibGljS2V5Q3JlZGVudGlh
bFJlcXVlc3RPcHRpb25zOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBl
bmNvZGVyIDw8IHJwSWQgPDwgYWxsb3dDcmVkZW50aWFsczsKK30KKwordGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25z
PiBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQoreworICAgIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyByZXN1bHQ7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucnBJZCkpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYWxsb3dDcmVkZW50aWFs
cykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY29jb2EvTG9jYWxB
dXRoZW50aWNhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2NvY29hL0xv
Y2FsQXV0aGVudGljYXRvci5oCmluZGV4IDNlNTY2OGY2NmQzZWIyM2Q5YTJlN2RlNDRiMWMyYzFj
ZGNlZGUzNTcuLjcyZDAxMmEwNThlZThmNzQ5ZmVlMjgwMGVjMjc3MmIzYjA4ODRkYWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY29jb2EvTG9jYWxBdXRoZW50
aWNhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jb2NvYS9Mb2Nh
bEF1dGhlbnRpY2F0b3IuaApAQCAtMzUsOCArMzUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBzdHJ1Y3QgRXhjZXB0aW9uRGF0YTsKIHN0cnVjdCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zOworc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczsKIAog
dXNpbmcgQ3JlYXRpb25DYWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik+OwordXNpbmcgUmVxdWVzdENhbGxiYWNrID0g
RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhf
dD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mKT47CiB1
c2luZyBFeGNlcHRpb25DYWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6RXhj
ZXB0aW9uRGF0YSYpPjsKIAogdHlwZWRlZiB2b2lkICheQ29tcGxldGlvbkJsb2NrKShTZWNLZXlS
ZWYgX051bGxhYmxlIHJlZmVyZW5jZUtleSwgTlNBcnJheSAqIF9OdWxsYWJsZSBjZXJ0aWZpY2F0
ZXMsIE5TRXJyb3IgKiBfTnVsbGFibGUgZXJyb3IpOwpAQCAtNDksNiArNTEsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+TG9jYWxBdXRoZW50aWNhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgdm9p
ZCBtYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0IFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMmLCBDcmVhdGlvbkNhbGxiYWNrJiYsIEV4Y2Vw
dGlvbkNhbGxiYWNrJiYpOworICAgIHZvaWQgZ2V0QXNzZXJ0aW9uKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgaGFzaCwgY29uc3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJiwgUmVx
dWVzdENhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYpOwogICAgIGJvb2wgaXNBdmFpbGFi
bGUoKSBjb25zdDsKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdXRobi9jb2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1dGhuL2NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQppbmRleCA5NWRm
NWU2NmY2OGNlNDdlNDVlNTZkMDk2MjA4NThhZGRiYjU5ZWJlLi45MDkwMjEyMjBlYzc3MDhmNmNk
Y2Y2OWUwNDZjNTdhMzFiZTEzZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1dGhuL2NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1dGhuL2NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQpAQCAtMzIsMTMg
KzMyLDE2IEBACiAjaW1wb3J0ICJDT1NFQ29uc3RhbnRzLmgiCiAjaW1wb3J0ICJFeGNlcHRpb25E
YXRhLmgiCiAjaW1wb3J0ICJQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgiCisj
aW1wb3J0ICJQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaCIKICNpbXBvcnQgPFNl
Y3VyaXR5L1NlY0l0ZW0uaD4KICNpbXBvcnQgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CiAj
aW1wb3J0IDxwYWwvc3BpL2NvY29hL0RldmljZUlkZW50aXR5U1BJLmg+CiAjaW1wb3J0IDx3dGYv
QmxvY2tQdHIuaD4KKyNpbXBvcnQgPHd0Zi9IYXNoU2V0Lmg+CiAjaW1wb3J0IDx3dGYvTWFpblRo
cmVhZC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5o
PgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiAjaW1wb3J0ICJMb2NhbEF1dGhl
bnRpY2F0aW9uU29mdExpbmsuaCIKIApAQCAtNDYsMTIgKzQ5LDYzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogbmFtZXNwYWNlIExvY2FsQXV0aGVudGljYXRvckludGVybmFsIHsKIAotLy8gVVAs
IFVWIGFuZCBBVCBhcmUgc2V0LiBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLyNm
bGFncy4KLWNvbnN0IHVpbnQ4X3QgYXV0aGVudGljYXRvckRhdGFGbGFncyA9IDY5OworLy8gU2Vl
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8jZmxhZ3MuCitjb25zdCB1aW50OF90IG1h
a2VDcmVkZW50aWFsRmxhZ3MgPSAwYjAxMDAwMTAxOyAvLyBVUCwgVVYgYW5kIEFUIGFyZSBzZXQu
Citjb25zdCB1aW50OF90IGdldEFzc2VydGlvbkZsYWdzID0gMGIwMDAwMDEwMTsgLy8gVVAgYW5k
IFVWIGFyZSBzZXQuCiAvLyBGSVhNRShyZGFyOi8vcHJvYmxlbS8zODMyMDUxMik6IERlZmluZSBB
cHBsZSBBQUdVSUQuCiBjb25zdCB1aW50OF90IEFBR1VJRFtdID0gezB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDB9OyAvLyAxNiBieXRlcwotY29uc3Qgc2l6ZV90IG1heENyZWRl
bnRpYWxJZExlbmd0aCA9IDB4ZmZmZjsgLy8gMiBieXRlcworLy8gQ3JlZGVudGlhbCBJRCBpcyBj
dXJyZW50bHkgU0hBLTEgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcHVibGljIGtleS4KKy8vIEZJWE1F
KDE4MzUzNCk6IEFzc3VtZSBsaXR0bGUgZW5kaWFuIGhlcmUuCitjb25zdCB1bmlvbiB7CisgICAg
dWludDE2X3QgaW50ZWdlcjsKKyAgICB1aW50OF90IGJ5dGVzWzJdOworfSBjcmVkZW50aWFsSWRM
ZW5ndGggPSB7MHgwMDE0fTsKIGNvbnN0IHNpemVfdCBFUzI1NktleVNpemVJbkJ5dGVzID0gMzI7
Citjb25zdCBzaXplX3QgYXV0aERhdGFQcmVmaXhGaXhlZFNpemUgPSAzNzsgLy8gaGFzaCgzMikg
KyBmbGFncygxKSArIGNvdW50ZXIoNCkKKworI2lmIFBMQVRGT1JNKElPUykKKy8vIGh0dHBzOi8v
d3d3LnczLm9yZy9UUi93ZWJhdXRobi8jc2VjLWF1dGhlbnRpY2F0b3ItZGF0YQorc3RhdGljIFZl
Y3Rvcjx1aW50OF90PiBidWlsZEF1dGhEYXRhKGNvbnN0IFN0cmluZyYgcnBJZCwgY29uc3QgdWlu
dDhfdCBmbGFncywgY29uc3QgdWludDMyX3QgY291bnRlciwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBvcHRpb25hbEF0dGVzdGVkQ3JlZGVudGlhbERhdGEpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IGF1dGhEYXRhOworICAgIGF1dGhEYXRhLnJlc2VydmVDYXBhY2l0eShhdXRoRGF0YVByZWZpeEZp
eGVkU2l6ZSArIG9wdGlvbmFsQXR0ZXN0ZWRDcmVkZW50aWFsRGF0YS5zaXplKCkpOworCisgICAg
Ly8gUlAgSUQgaGFzaAorICAgIGF1dG8gY3J5cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0
ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKKyAgICAvLyBGSVhNRSgx
ODM1MzQpOiBUZXN0IElETi4KKyAgICBBU1NFUlQocnBJZC5pc0FsbEFTQ0lJKCkpOworICAgIGF1
dG8gYXNjaWlScElkID0gcnBJZC5hc2NpaSgpOworICAgIGNyeXB0by0+YWRkQnl0ZXMoYXNjaWlS
cElkLmRhdGEoKSwgYXNjaWlScElkLmxlbmd0aCgpKTsKKyAgICBhdXRoRGF0YSA9IGNyeXB0by0+
Y29tcHV0ZUhhc2goKTsKKworICAgIC8vIEZMQUdTCisgICAgYXV0aERhdGEuYXBwZW5kKGZsYWdz
KTsKKworICAgIC8vIENPVU5URVIKKyAgICAvLyBGSVhNRSgxODM1MzQpOiBBc3N1bWUgbGl0dGxl
IGVuZGlhbiBoZXJlLgorICAgIHVuaW9uIHsKKyAgICAgICAgdWludDMyX3QgaW50ZWdlcjsKKyAg
ICAgICAgdWludDhfdCBieXRlc1s0XTsKKyAgICB9IGNvdW50ZXJVbmlvbjsKKyAgICBjb3VudGVy
VW5pb24uaW50ZWdlciA9IGNvdW50ZXI7CisgICAgYXV0aERhdGEuYXBwZW5kKGNvdW50ZXJVbmlv
bi5ieXRlcywgc2l6ZW9mKGNvdW50ZXJVbmlvbi5ieXRlcykpOworCisgICAgLy8gQVRURVNURUQg
Q1JFRC4gREFUQQorICAgIGF1dGhEYXRhLmFwcGVuZFZlY3RvcihvcHRpb25hbEF0dGVzdGVkQ3Jl
ZGVudGlhbERhdGEpOworCisgICAgcmV0dXJuIGF1dGhEYXRhOworfQorCitpbmxpbmUgSGFzaFNl
dDxTdHJpbmc+IHByb2R1Y2VIYXNoU2V0KGNvbnN0IFZlY3RvcjxQdWJsaWNLZXlDcmVkZW50aWFs
RGVzY3JpcHRvcj4mIGNyZWRlbnRpYWxEZXNjcmlwdG9ycykKK3sKKyAgICBIYXNoU2V0PFN0cmlu
Zz4gcmVzdWx0OworICAgIGZvciAoYXV0byYgY3JlZGVudGlhbERlc2NyaXB0b3IgOiBjcmVkZW50
aWFsRGVzY3JpcHRvcnMpIHsKKyAgICAgICAgaWYgKGNyZWRlbnRpYWxEZXNjcmlwdG9yLnRyYW5z
cG9ydHMuaXNFbXB0eSgpICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLnR5cGUgPT0gUHVibGljS2V5
Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rv
ci5zaXplKCkgPT0gY3JlZGVudGlhbElkTGVuZ3RoLmludGVnZXIpCisgICAgICAgICAgICByZXN1
bHQuYWRkKFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjcmVkZW50aWFsRGVz
Y3JpcHRvci5pZFZlY3Rvci5kYXRhKCkpLCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5z
aXplKCkpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZiAvLyAhUExBVEZP
Uk0oSU9TKQogCiB9IC8vIExvY2FsQXV0aGVudGljYXRvckludGVybmFsCiAKQEAgLTYyLDcgKzEx
Niw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0
b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0IFB1YmxpCiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAv
LyBGSVhNRSgxODI3NzIpCiAgICAgQVNTRVJUX1VOVVNFRChoYXNoLCBoYXNoID09IGhhc2gpOwot
ICAgIEFTU0VSVF9VTlVTRUQob3B0aW9ucywgb3B0aW9ucy5ycC5uYW1lLmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUX1VOVVNFRChvcHRpb25zLCAhb3B0aW9ucy5ycC5pZC5pc0VtcHR5KCkpOwogICAg
IEFTU0VSVF9VTlVTRUQoY2FsbGJhY2ssIGNhbGxiYWNrKTsKICAgICBleGNlcHRpb25DYWxsYmFj
ayh7IE5vdEFsbG93ZWRFcnJvciwgQVNDSUlMaXRlcmFsKCJObyBhdmFsaWFibGUgYXV0aGVudGlj
YXRvcnMuIikgfSk7CiAjZWxzZQpAQCAtODQsMjUgKzEzOCwzMiBAQCB2b2lkIExvY2FsQXV0aGVu
dGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25z
dCBQdWJsaQogICAgIH0KIAogICAgIC8vIFN0ZXAgMy4KLSAgICBmb3IgKGF1dG8mIGV4Y2x1ZGVD
cmVkZW50aWFsIDogb3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMpIHsKLSAgICAgICAgaWYgKGV4
Y2x1ZGVDcmVkZW50aWFsLnR5cGUgPT0gUHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tl
eSAmJiBleGNsdWRlQ3JlZGVudGlhbC50cmFuc3BvcnRzLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgLy8gU2VhcmNoIEtleWNoYWluIGZvciB0aGUgQ3JlZGVudGlhbCBJRCBhbmQgUlAgSUQsIHdo
aWNoIGlzIHN0b3JlZCBpbiB0aGUga1NlY0F0dHJBcHBsaWNhdGlvbkxhYmVsIGFuZCBrU2VjQXR0
ckxhYmVsIGF0dHJpYnV0ZSByZXNwZWN0aXZlbHkuCi0gICAgICAgICAgICBOU0RpY3Rpb25hcnkg
KnF1ZXJ5ID0gQHsKLSAgICAgICAgICAgICAgICAoaWQpa1NlY0NsYXNzOiAoaWQpa1NlY0NsYXNz
S2V5LAotICAgICAgICAgICAgICAgIChpZClrU2VjQXR0cktleUNsYXNzOiAoaWQpa1NlY0F0dHJL
ZXlDbGFzc1ByaXZhdGUsCi0gICAgICAgICAgICAgICAgKGlkKWtTZWNBdHRyQXBwbGljYXRpb25M
YWJlbDogW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmV4Y2x1ZGVDcmVkZW50aWFsLmlkVmVjdG9yLmRh
dGEoKSBsZW5ndGg6ZXhjbHVkZUNyZWRlbnRpYWwuaWRWZWN0b3Iuc2l6ZSgpXSwKLSAgICAgICAg
ICAgICAgICAoaWQpa1NlY0F0dHJMYWJlbDogb3B0aW9ucy5ycC5pZAotICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgIE9TU3RhdHVzIHN0YXR1cyA9IFNlY0l0ZW1Db3B5TWF0Y2hpbmcoKF9fYnJp
ZGdlIENGRGljdGlvbmFyeVJlZilxdWVyeSwgTlVMTCk7Ci0gICAgICAgICAgICBpZiAoIXN0YXR1
cykgeworICAgIC8vIEVzdGFibGlzaCBhIGhhc2ggc2V0IG9mIGdpdmVuIGV4Y2x1ZGUgY3JlZGVu
dGlhbHMKKyAgICBIYXNoU2V0PFN0cmluZz4gZXhjbHVkZUNyZWRlbnRpYWxJZHMgPSBwcm9kdWNl
SGFzaFNldChvcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscyk7CisgICAgaWYgKCFleGNsdWRlQ3Jl
ZGVudGlhbElkcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gU2VhcmNoIEtleWNoYWluIGZvciB0
aGUgUlAgSUQuCisgICAgICAgIE5TRGljdGlvbmFyeSAqcXVlcnkgPSBAeworICAgICAgICAgICAg
KGlkKWtTZWNDbGFzczogKGlkKWtTZWNDbGFzc0tleSwKKyAgICAgICAgICAgIChpZClrU2VjQXR0
cktleUNsYXNzOiAoaWQpa1NlY0F0dHJLZXlDbGFzc1ByaXZhdGUsCisgICAgICAgICAgICAoaWQp
a1NlY0F0dHJMYWJlbDogb3B0aW9ucy5ycC5pZCwKKyAgICAgICAgICAgIChpZClrU2VjUmV0dXJu
QXR0cmlidXRlczogQFlFUywKKyAgICAgICAgICAgIChpZClrU2VjTWF0Y2hMaW1pdDogKGlkKWtT
ZWNNYXRjaExpbWl0QWxsLAorICAgICAgICB9OworICAgICAgICBDRlR5cGVSZWYgYXR0cmlidXRl
c0FycmF5UmVmID0gbnVsbHB0cjsKKyAgICAgICAgT1NTdGF0dXMgc3RhdHVzID0gU2VjSXRlbUNv
cHlNYXRjaGluZygoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKXF1ZXJ5LCAmYXR0cmlidXRlc0Fy
cmF5UmVmKTsKKyAgICAgICAgaWYgKHN0YXR1cyAmJiBzdGF0dXMgIT0gZXJyU2VjSXRlbU5vdEZv
dW5kKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IHF1ZXJ5IEtleWNoYWluOiAl
ZCIsIHN0YXR1cyk7CisgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayh7IFVua25vd25FcnJv
ciwgQVNDSUlMaXRlcmFsKCJVbmtub3duIGludGVybmFsIGVycm9yLiIpIH0pOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8gcmV0YWluQXR0cmlidXRlc0FycmF5
ID0gYWRvcHRDRihhdHRyaWJ1dGVzQXJyYXlSZWYpOworCisgICAgICAgIGZvciAoTlNEaWN0aW9u
YXJ5ICpuc0F0dHJpYnV0ZXMgaW4gKE5TQXJyYXkgKilhdHRyaWJ1dGVzQXJyYXlSZWYpIHsKKyAg
ICAgICAgICAgIE5TRGF0YSAqbnNDcmVkZW50aWFsSWQgPSBuc0F0dHJpYnV0ZXNbKGlkKWtTZWNB
dHRyQXBwbGljYXRpb25MYWJlbF07CisgICAgICAgICAgICBpZiAoZXhjbHVkZUNyZWRlbnRpYWxJ
ZHMuY29udGFpbnMoU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5zQ3JlZGVu
dGlhbElkLmJ5dGVzKSwgbnNDcmVkZW50aWFsSWQubGVuZ3RoKSkpIHsKICAgICAgICAgICAgICAg
ICBleGNlcHRpb25DYWxsYmFjayh7IE5vdEFsbG93ZWRFcnJvciwgQVNDSUlMaXRlcmFsKCJBdCBs
ZWFzdCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVu
dGlhbHMgbGlzdCBpbiB0aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4iKSB9KTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
c3RhdHVzICE9IGVyclNlY0l0ZW1Ob3RGb3VuZCkgewotICAgICAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGRuJ3QgcXVlcnkgS2V5Y2hhaW46ICVkIiwgc3RhdHVzKTsKLSAgICAgICAgICAgICAg
ICBleGNlcHRpb25DYWxsYmFjayh7IFVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmtub3du
IGludGVybmFsIGVycm9yLiIpIH0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMTExLDcgKzE3Miw2IEBAIHZvaWQgTG9jYWxB
dXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gs
IGNvbnN0IFB1YmxpCiAgICAgLy8gR2V0IHVzZXIgY29uc2VudC4KICAgICBhdXRvIGNvbnRleHQg
PSBhZG9wdE5TKFthbGxvY0xBQ29udGV4dEluc3RhbmNlKCkgaW5pdF0pOwogICAgIE5TRXJyb3Ig
KmVycm9yID0gbmlsOwotICAgIE5TU3RyaW5nICpyZWFzb24gPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIkFsbG93ICVAIHRvIGNyZWF0ZSBhIHB1YmxpYyBrZXkgY3JlZGVudGlhbCBmb3Ig
JUAiLCAoaWQpb3B0aW9ucy5ycC5pZCwgKGlkKW9wdGlvbnMudXNlci5uYW1lXTsKICAgICBpZiAo
IVtjb250ZXh0IGNhbkV2YWx1YXRlUG9saWN5OkxBUG9saWN5RGV2aWNlT3duZXJBdXRoZW50aWNh
dGlvbldpdGhCaW9tZXRyaWNzIGVycm9yOiZlcnJvcl0pIHsKICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZG4ndCBldmFsdWF0ZSBhdXRoZW50aWNhdGlvbiB3aXRoIGJpb21ldHJpY3MgcG9saWN5OiAl
QCIsIGVycm9yKTsKICAgICAgICAgLy8gRklYTUUoMTgyNzY3KQpAQCAtMTE5LDYgKzE3OSw3IEBA
IHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGhhc2gsIGNvbnN0IFB1YmxpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBO
U1N0cmluZyAqcmVhc29uID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJBbGxvdyAlQCB0
byBjcmVhdGUgYSBwdWJsaWMga2V5IGNyZWRlbnRpYWwgZm9yICVAIiwgKGlkKW9wdGlvbnMucnAu
aWQsIChpZClvcHRpb25zLnVzZXIubmFtZV07CiAgICAgLy8gRklYTUUoMTgzNTM0KTogT3B0aW1p
emUgdGhlIGZvbGxvd2luZyBuZXN0ZWQgY2FsbGJhY2tzIGFuZCB0aHJlYWRpbmcuCiAgICAgW2Nv
bnRleHQgZXZhbHVhdGVQb2xpY3k6TEFQb2xpY3lEZXZpY2VPd25lckF1dGhlbnRpY2F0aW9uV2l0
aEJpb21ldHJpY3MgbG9jYWxpemVkUmVhc29uOnJlYXNvbiByZXBseTpCbG9ja1B0cjx2b2lkKEJP
T0wsIE5TRXJyb3IgKik+Ojpmcm9tQ2FsbGFibGUoW3dlYWtUaGlzID0gbV93ZWFrRmFjdG9yeS5j
cmVhdGVXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0
aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgb3B0aW9ucyA9IGNyb3Nz
VGhyZWFkQ29weShvcHRpb25zKSwgaGFzaF0gKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqZXJyb3Ip
IG11dGFibGUgewogICAgICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKQEAgLTE1Nyw3ICsy
MTgsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25zdCBQdWJsaQogICAgICAgICAgICAgLy8gQXR0ZXN0YXRp
b24gQ2VydGlmaWNhdGUgYW5kIEF0dGVzdGF0aW9uIElzc3VpbmcgQ0EKICAgICAgICAgICAgIEFT
U0VSVChjZXJ0aWZpY2F0ZXMgJiYgKFtjZXJ0aWZpY2F0ZXMgY291bnRdID09IDIpKTsKIAotICAg
ICAgICAgICAgLy8gU3RlcCA3LjIgLSA3LjQuCisgICAgICAgICAgICAvLyBTdGVwIDcuMi03LjQu
CiAgICAgICAgICAgICAvLyBGSVhNRSgxODM1MzMpOiBBIHNpbmdsZSBrU2VjQ2xhc3NLZXkgaXRl
bSBjb3VsZG4ndCBzdG9yZSBhbGwgbWV0YSBkYXRhLiBUaGUgZm9sbG93aW5nIHNjaGVtYSBpcyBh
IHRlbnRhdGl2ZSBzb2x1dGlvbgogICAgICAgICAgICAgLy8gdG8gYWNjb21tb2RhdGUgdGhlIG1v
c3QgaW1wb3J0YW50IG1ldGEgZGF0YSwgaS5lLiBSUCBJRCwgQ3JlZGVudGlhbCBJRCwgYW5kIHVz
ZXJoYW5kbGUuCiAgICAgICAgICAgICAvLyBrU2VjQXR0ckxhYmVsOiBSUCBJRApAQCAtMTgwLDcg
KzI0MSw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbChjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0IFB1YmxpCiAgICAgICAgICAgICAgICAgICAgIChp
ZClrU2VjQXR0ckxhYmVsOiBsYWJlbCwKICAgICAgICAgICAgICAgICAgICAgKGlkKWtTZWNSZXR1
cm5BdHRyaWJ1dGVzOiBAWUVTCiAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICBD
RlR5cGVSZWYgYXR0cmlidXRlc1JlZiA9IE5VTEw7CisgICAgICAgICAgICAgICAgQ0ZUeXBlUmVm
IGF0dHJpYnV0ZXNSZWYgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIE9TU3RhdHVzIHN0YXR1
cyA9IFNlY0l0ZW1Db3B5TWF0Y2hpbmcoKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZiljcmVkZW50
aWFsSWRRdWVyeSwgJmF0dHJpYnV0ZXNSZWYpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMp
IHsKICAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBnZXQgQ3JlZGVudGlh
bCBJRDogJWQiLCBzdGF0dXMpOwpAQCAtMTkxLDcgKzI1Miw3IEBAIHZvaWQgTG9jYWxBdXRoZW50
aWNhdG9yOjptYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0
IFB1YmxpCiAKICAgICAgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKm5zQXR0cmlidXRlcyA9IChO
U0RpY3Rpb25hcnkgKilhdHRyaWJ1dGVzUmVmOwogICAgICAgICAgICAgICAgIE5TRGF0YSAqbnND
cmVkZW50aWFsSWQgPSBuc0F0dHJpYnV0ZXNbKGlkKWtTZWNBdHRyQXBwbGljYXRpb25MYWJlbF07
Ci0gICAgICAgICAgICAgICAgY3JlZGVudGlhbElkLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCB1
aW50OF90Kj4obnNDcmVkZW50aWFsSWQuYnl0ZXMpLCBuc0NyZWRlbnRpYWxJZC5sZW5ndGgpOwor
ICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxJZC5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4obnNDcmVkZW50aWFsSWQuYnl0ZXMpLCBuc0NyZWRlbnRpYWxJZC5sZW5ndGgp
OwogCiAgICAgICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICp1cGRhdGVRdWVyeSA9IEB7CiAgICAg
ICAgICAgICAgICAgICAgIChpZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NLZXksCkBAIC0yMTAs
NTUgKzI3MSwzMCBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25zdCBQdWJsaQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gU3RlcCAxMi4KLSAgICAgICAgICAgIC8v
IEFwcGxlIEF0dGVzdGF0aW9uIENvbnQnCi0gICAgICAgICAgICAvLyBBc3NlbWJsZSB0aGUgYXR0
ZXN0YXRpb24gb2JqZWN0OgotICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dl
YmF1dGhuLyNhdHRlc3RhdGlvbi1vYmplY3QKLSAgICAgICAgICAgIC8vIEZJWE1FKDE4MzUzNCk6
IGF1dGhEYXRhIGNvdWxkIHRocm90dGxlLgotICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGF1
dGhEYXRhOworICAgICAgICAgICAgLy8gU3RlcCAxMC4KKyAgICAgICAgICAgIC8vIEZJWE1FKDE4
MzUzMyk6IHN0b3JlIHRoZSBjb3VudGVyLgorICAgICAgICAgICAgdWludDMyX3QgY291bnRlciA9
IDA7CisKKyAgICAgICAgICAgIC8vIEZJWE1FKDE4MzUzNCk6IGF0dGVzdGVkQ3JlZGVudGlhbERh
dGEgY291bGQgdGhyb3R0bGUuCisgICAgICAgICAgICAvLyBTdGVwIDExLiBodHRwczovL3d3dy53
My5vcmcvVFIvd2ViYXV0aG4vI2F0dGVzdGVkLWNyZWRlbnRpYWwtZGF0YQorICAgICAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGF0dGVzdGVkQ3JlZGVudGlhbERhdGE7CiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgLy8gUlAgSUQgaGFzaAotICAgICAgICAgICAgICAgIGF1dG8gY3J5cHRv
ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGht
OjpTSEFfMjU2KTsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRSgxODM1MzQpOiBUZXN0IElETi4K
LSAgICAgICAgICAgICAgICBBU1NFUlQob3B0aW9ucy5ycC5pZC5pc0FsbEFTQ0lJKCkpOwotICAg
ICAgICAgICAgICAgIGF1dG8gYXNjaWlScElkID0gb3B0aW9ucy5ycC5pZC5hc2NpaSgpOwotICAg
ICAgICAgICAgICAgIGNyeXB0by0+YWRkQnl0ZXMoYXNjaWlScElkLmRhdGEoKSwgYXNjaWlScElk
Lmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICBhdXRoRGF0YSA9IGNyeXB0by0+Y29tcHV0ZUhh
c2goKTsKLQotICAgICAgICAgICAgICAgIC8vIEZMQUdTCi0gICAgICAgICAgICAgICAgYXV0aERh
dGEuYXBwZW5kKGF1dGhlbnRpY2F0b3JEYXRhRmxhZ3MpOwotCi0gICAgICAgICAgICAgICAgLy8g
U3RlcC4gMTAuCi0gICAgICAgICAgICAgICAgLy8gQ09VTlRFUgotICAgICAgICAgICAgICAgIC8v
IEZJWE1FKDE4MzUzMyk6IHN0b3JlIHRoZSBjb3VudGVyLgotICAgICAgICAgICAgICAgIHVuaW9u
IHsKLSAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW50ZWdlcjsKLSAgICAgICAgICAgICAg
ICAgICAgdWludDhfdCBieXRlc1s0XTsKLSAgICAgICAgICAgICAgICB9IGNvdW50ZXIgPSB7MHgw
MDAwMDAwMH07Ci0gICAgICAgICAgICAgICAgYXV0aERhdGEuYXBwZW5kKGNvdW50ZXIuYnl0ZXMs
IHNpemVvZihjb3VudGVyLmJ5dGVzKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTdGVwIDExLgot
ICAgICAgICAgICAgICAgIC8vIEFBR1VJRAotICAgICAgICAgICAgICAgIGF1dGhEYXRhLmFwcGVu
ZChBQUdVSUQsIHNpemVvZihBQUdVSUQpKTsKLQotICAgICAgICAgICAgICAgIC8vIEwKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoY3JlZGVudGlhbElkLnNpemUoKSA8PSBtYXhDcmVkZW50aWFsSWRM
ZW5ndGgpOwotICAgICAgICAgICAgICAgIC8vIEFzc3VtZSBsaXR0bGUgZW5kaWFuIGhlcmUuCi0g
ICAgICAgICAgICAgICAgdW5pb24gewotICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBpbnRl
Z2VyOwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJ5dGVzWzJdOwotICAgICAgICAgICAg
ICAgIH0gY3JlZGVudGlhbElkTGVuZ3RoOwotICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxJZExl
bmd0aC5pbnRlZ2VyID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGNyZWRlbnRpYWxJZC5zaXplKCkp
OwotICAgICAgICAgICAgICAgIGF1dGhEYXRhLmFwcGVuZChjcmVkZW50aWFsSWRMZW5ndGguYnl0
ZXMsIHNpemVvZih1aW50MTZfdCkpOwotCi0gICAgICAgICAgICAgICAgLy8gQ1JFREVOVElBTCBJ
RAotICAgICAgICAgICAgICAgIGF1dGhEYXRhLmFwcGVuZFZlY3RvcihjcmVkZW50aWFsSWQpOwot
Ci0gICAgICAgICAgICAgICAgLy8gQ1JFREVOVElBTCBQVUJMSUMgS0VZCi0gICAgICAgICAgICAg
ICAgQ0ZEYXRhUmVmIHB1YmxpY0tleURhdGFSZWYgPSBOVUxMOworICAgICAgICAgICAgICAgIC8v
IGFhZ3VpZAorICAgICAgICAgICAgICAgIGF0dGVzdGVkQ3JlZGVudGlhbERhdGEuYXBwZW5kKEFB
R1VJRCwgc2l6ZW9mKEFBR1VJRCkpOworCisgICAgICAgICAgICAgICAgLy8gY3JlZGVudGlhbElk
TGVuZ3RoCisgICAgICAgICAgICAgICAgQVNTRVJUKGNyZWRlbnRpYWxJZC5zaXplKCkgPT0gY3Jl
ZGVudGlhbElkTGVuZ3RoLmludGVnZXIpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FKDE4MzUz
NCk6IEFzc3VtZSBsaXR0bGUgZW5kaWFuIGhlcmUuCisgICAgICAgICAgICAgICAgYXR0ZXN0ZWRD
cmVkZW50aWFsRGF0YS5hcHBlbmQoY3JlZGVudGlhbElkTGVuZ3RoLmJ5dGVzLCBzaXplb2YodWlu
dDE2X3QpKTsKKworICAgICAgICAgICAgICAgIC8vIGNyZWRlbnRpYWxJZAorICAgICAgICAgICAg
ICAgIGF0dGVzdGVkQ3JlZGVudGlhbERhdGEuYXBwZW5kVmVjdG9yKGNyZWRlbnRpYWxJZCk7CisK
KyAgICAgICAgICAgICAgICAvLyBjcmVkZW50aWFsUHVibGljS2V5CisgICAgICAgICAgICAgICAg
Q0ZEYXRhUmVmIHB1YmxpY0tleURhdGFSZWYgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgYXV0byBwdWJsaWNLZXkgPSBhZG9wdENGKFNlY0tleUNvcHlQ
dWJsaWNLZXkocHJpdmF0ZUtleSkpOwotICAgICAgICAgICAgICAgICAgICBDRkVycm9yUmVmIGVy
cm9yUmVmID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgQ0ZFcnJvclJlZiBlcnJvclJlZiA9
IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgICAgIHB1YmxpY0tleURhdGFSZWYgPSBTZWNLZXlD
b3B5RXh0ZXJuYWxSZXByZXNlbnRhdGlvbihwdWJsaWNLZXkuZ2V0KCksICZlcnJvclJlZik7CiAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gcmV0YWluRXJyb3IgPSBhZG9wdENGKGVycm9yUmVmKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yUmVmKSB7CkBAIC0yODgsMjUgKzMyNCwzMSBA
QCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBoYXNoLCBjb25zdCBQdWJsaQogICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25D
YWxsYmFjayh7IFVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmtub3duIGludGVybmFsIGVy
cm9yLiIpIH0pOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGF1dGhEYXRhLmFwcGVuZFZlY3Rvcihjb3NlUHVibGljS2V5LnZh
bHVlKCkpOworICAgICAgICAgICAgICAgIGF0dGVzdGVkQ3JlZGVudGlhbERhdGEuYXBwZW5kVmVj
dG9yKGNvc2VQdWJsaWNLZXkudmFsdWUoKSk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAg
IC8vIFN0ZXAgMTIuCisgICAgICAgICAgICBhdXRvIGF1dGhEYXRhID0gYnVpbGRBdXRoRGF0YShv
cHRpb25zLnJwLmlkLCBtYWtlQ3JlZGVudGlhbEZsYWdzLCBjb3VudGVyLCBhdHRlc3RlZENyZWRl
bnRpYWxEYXRhKTsKKworICAgICAgICAgICAgLy8gU3RlcCAxMy4gQXBwbGUgQXR0ZXN0YXRpb24g
Q29udCcKKyAgICAgICAgICAgIC8vIEFzc2VtYmxlIHRoZSBhdHRlc3RhdGlvbiBvYmplY3Q6Cisg
ICAgICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4vI2F0dGVzdGF0aW9u
LW9iamVjdAogICAgICAgICAgICAgY2Jvcjo6Q0JPUlZhbHVlOjpNYXBWYWx1ZSBhdHRlc3RhdGlv
blN0YXRlbWVudE1hcDsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gc2lnbmF0dXJlOwogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Q0ZFcnJvclJlZiBlcnJvclJlZiA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIENGRXJyb3JS
ZWYgZXJyb3JSZWYgPSBudWxscHRyOwogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSgxODM2
NTIpOiBSZWR1Y2UgcHJvbXB0IGZvciBiaW9tZXRyaWNzCiAgICAgICAgICAgICAgICAgICAgIENG
RGF0YVJlZiBzaWduYXR1cmVSZWYgPSBTZWNLZXlDcmVhdGVTaWduYXR1cmUocHJpdmF0ZUtleSwg
a1NlY0tleUFsZ29yaXRobUVDRFNBU2lnbmF0dXJlTWVzc2FnZVg5NjJTSEEyNTYsIChfX2JyaWRn
ZSBDRkRhdGFSZWYpW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmF1dGhEYXRhLmRhdGEoKSBsZW5ndGg6
YXV0aERhdGEuc2l6ZSgpXSwgJmVycm9yUmVmKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBy
ZXRhaW5FcnJvciA9IGFkb3B0Q0YoZXJyb3JSZWYpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
ZXJyb3JSZWYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGRuJ3Qg
ZXhwb3J0IHRoZSBwdWJsaWMga2V5OiAlQCIsIChOU0Vycm9yKillcnJvclJlZik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGdlbmVyYXRlIHRoZSBzaWduYXR1
cmU6ICVAIiwgKE5TRXJyb3IqKWVycm9yUmVmKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKHsgVW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVua25vd24gaW50
ZXJuYWwgZXJyb3IuIikgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYXV0byByZXRhaW5TaWduYXR1
cmUgPSBhZG9wdENGKHNpZ25hdHVyZVJlZik7CiAgICAgICAgICAgICAgICAgICAgIE5TRGF0YSAq
bnNTaWduYXR1cmUgPSAoTlNEYXRhICopc2lnbmF0dXJlUmVmOwotICAgICAgICAgICAgICAgICAg
ICBzaWduYXR1cmUuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihuc1NpZ25hdHVy
ZS5ieXRlcyksIG5zU2lnbmF0dXJlLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIHNpZ25h
dHVyZS5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obnNTaWduYXR1cmUu
Ynl0ZXMpLCBuc1NpZ25hdHVyZS5sZW5ndGgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBhdHRlc3RhdGlvblN0YXRlbWVudE1hcFtjYm9yOjpDQk9SVmFsdWUoImFsZyIpXSA9
IGNib3I6OkNCT1JWYWx1ZShDT1NFOjpFUzI1Nik7CiAgICAgICAgICAgICAgICAgYXR0ZXN0YXRp
b25TdGF0ZW1lbnRNYXBbY2Jvcjo6Q0JPUlZhbHVlKCJzaWciKV0gPSBjYm9yOjpDQk9SVmFsdWUo
c2lnbmF0dXJlKTsKQEAgLTMxNiw3ICszNTgsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6
bWFrZUNyZWRlbnRpYWwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25zdCBQdWJsaQog
ICAgICAgICAgICAgICAgICAgICBhdXRvIHJldGFpbkRhdGEgPSBhZG9wdENGKGRhdGFSZWYpOwog
ICAgICAgICAgICAgICAgICAgICBOU0RhdGEgKm5zRGF0YSA9IChOU0RhdGEgKilkYXRhUmVmOwog
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICAgICAgICAgICAg
ICAgICAgZGF0YS5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KG5zRGF0YS5ieXRl
cyksIG5zRGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihuc0RhdGEuYnl0ZXMpLCBuc0RhdGEubGVuZ3Ro
KTsKICAgICAgICAgICAgICAgICAgICAgY2JvckFycmF5LmFwcGVuZChjYm9yOjpDQk9SVmFsdWUo
V1RGTW92ZShkYXRhKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBhdHRl
c3RhdGlvblN0YXRlbWVudE1hcFtjYm9yOjpDQk9SVmFsdWUoIng1YyIpXSA9IGNib3I6OkNCT1JW
YWx1ZShXVEZNb3ZlKGNib3JBcnJheSkpOwpAQCAtMzM5LDYgKzM4MSwxNDYgQEAgdm9pZCBMb2Nh
bEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFz
aCwgY29uc3QgUHVibGkKICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfQogCit2b2lkIExvY2Fs
QXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwg
Y29uc3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJiBvcHRpb25zLCBSZXF1ZXN0
Q2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFj
aykKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgTG9jYWxBdXRoZW50aWNhdG9ySW50ZXJuYWw7CisK
KyNpZiAhUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FKDE4Mjc3MikKKyAgICBBU1NFUlRfVU5V
U0VEKGhhc2gsIGhhc2ggPT0gaGFzaCk7CisgICAgQVNTRVJUX1VOVVNFRChvcHRpb25zLCAhb3B0
aW9ucy5ycElkLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX1VOVVNFRChjYWxsYmFjaywgY2FsbGJh
Y2spOworICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHsgTm90QWxsb3dlZEVycm9yLCBBU0NJSUxpdGVy
YWwoIk5vIGF2YWxpYWJsZSBhdXRoZW50aWNhdG9ycy4iKSB9KTsKKyNlbHNlCisgICAgLy8gVGhl
IGZvbGxvd2luZyBpbXBsZW1lbnRzIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8jb3At
Z2V0LWFzc2VydGlvbiBhcyBvZiA1IERlY2VtYmVyIDIwMTcuCisgICAgLy8gU2tpcCBTdGVwIDIg
YXMgcmVxdWlyZVVzZXJWZXJpZmljYXRpb24gaXMgZW5mb3JjZWQuCisgICAgLy8gU2tpcCBTdGVw
IDggYXMgZXh0ZW5zaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuCisgICAgLy8gU3RlcCAxMiBp
cyBpbXBsaWNpdGx5IGNhcHR1cmVkIGJ5IGFsbCBVbmtub3duRXJyb3IgZXhjZXB0aW9uIGNhbGxi
YWNrcy4KKyAgICAvLyBTdGVwIDMtNS4KKyAgICAvLyBVbmxpa2UgdGhlIHNwZWMsIGlmIGFuIGFs
bG93IGxpc3QgaXMgcHJvdmlkZWQgYW5kIHRoZXJlIGlzIG5vIGludGVyc2VjdGlvbiBiZXR3ZWVu
IGV4aXN0aW5nIG9uZXMgYW5kIHRoZSBhbGxvdyBsaXN0LCB3ZSBhbHdheXMgcmV0dXJuIE5vdEFs
bG93ZWRFcnJvci4KKyAgICAvLyBFc3RhYmxpc2ggYSBoYXNoIHNldCBvZiBnaXZlbiBhbGxvdyBj
cmVkZW50aWFscworICAgIEhhc2hTZXQ8U3RyaW5nPiBhbGxvd0NyZWRlbnRpYWxJZHMgPSBwcm9k
dWNlSGFzaFNldChvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpOworICAgIGlmICghb3B0aW9ucy5h
bGxvd0NyZWRlbnRpYWxzLmlzRW1wdHkoKSAmJiBhbGxvd0NyZWRlbnRpYWxJZHMuaXNFbXB0eSgp
KSB7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHsgTm90QWxsb3dlZEVycm9yLCBBU0NJSUxp
dGVyYWwoIk5vIG1hdGNoZWQgY3JlZGVudGlhbHMgYXJlIGZvdW5kIGluIHRoZSBwbGF0Zm9ybSBh
dHRhY2hlZCBhdXRoZW50aWNhdG9yLiIpIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gU2VhcmNoIEtleWNoYWluIGZvciB0aGUgUlAgSUQuCisgICAgTlNEaWN0aW9uYXJ5ICpx
dWVyeSA9IEB7CisgICAgICAgIChpZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NLZXksCisgICAg
ICAgIChpZClrU2VjQXR0cktleUNsYXNzOiAoaWQpa1NlY0F0dHJLZXlDbGFzc1ByaXZhdGUsCisg
ICAgICAgIChpZClrU2VjQXR0ckxhYmVsOiBvcHRpb25zLnJwSWQsCisgICAgICAgIChpZClrU2Vj
UmV0dXJuQXR0cmlidXRlczogQFlFUywKKyAgICAgICAgKGlkKWtTZWNNYXRjaExpbWl0OiAoaWQp
a1NlY01hdGNoTGltaXRBbGwsCisgICAgfTsKKyAgICBDRlR5cGVSZWYgYXR0cmlidXRlc0FycmF5
UmVmID0gbnVsbHB0cjsKKyAgICBPU1N0YXR1cyBzdGF0dXMgPSBTZWNJdGVtQ29weU1hdGNoaW5n
KChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpcXVlcnksICZhdHRyaWJ1dGVzQXJyYXlSZWYpOwor
ICAgIGlmIChzdGF0dXMgJiYgc3RhdHVzICE9IGVyclNlY0l0ZW1Ob3RGb3VuZCkgeworICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkbid0IHF1ZXJ5IEtleWNoYWluOiAlZCIsIHN0YXR1cyk7CisgICAg
ICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHsgVW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVua25v
d24gaW50ZXJuYWwgZXJyb3IuIikgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXV0
byByZXRhaW5BdHRyaWJ1dGVzQXJyYXkgPSBhZG9wdENGKGF0dHJpYnV0ZXNBcnJheVJlZik7CisK
KyAgICBOU0FycmF5ICppbnRlcnNlY3RlZENyZWRlbnRpYWxzQXR0cmlidXRlcyA9IG5pbDsKKyAg
ICBpZiAob3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLmlzRW1wdHkoKSkKKyAgICAgICAgaW50ZXJz
ZWN0ZWRDcmVkZW50aWFsc0F0dHJpYnV0ZXMgPSAoTlNBcnJheSAqKWF0dHJpYnV0ZXNBcnJheVJl
ZjsKKyAgICBlbHNlIHsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFi
bGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTphbGxvd0NyZWRlbnRpYWxJZHMuc2l6ZSgpXTsKKyAg
ICAgICAgZm9yIChOU0RpY3Rpb25hcnkgKm5zQXR0cmlidXRlcyBpbiAoTlNBcnJheSAqKWF0dHJp
YnV0ZXNBcnJheVJlZikgeworICAgICAgICAgICAgTlNEYXRhICpuc0NyZWRlbnRpYWxJZCA9IG5z
QXR0cmlidXRlc1soaWQpa1NlY0F0dHJBcHBsaWNhdGlvbkxhYmVsXTsKKyAgICAgICAgICAgIGlm
IChhbGxvd0NyZWRlbnRpYWxJZHMuY29udGFpbnMoU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KG5zQ3JlZGVudGlhbElkLmJ5dGVzKSwgbnNDcmVkZW50aWFsSWQubGVuZ3RoKSkp
CisgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6bnNBdHRyaWJ1dGVzXTsKKyAgICAg
ICAgfQorICAgICAgICBpbnRlcnNlY3RlZENyZWRlbnRpYWxzQXR0cmlidXRlcyA9IHJlc3VsdDsK
KyAgICB9CisgICAgaWYgKCFpbnRlcnNlY3RlZENyZWRlbnRpYWxzQXR0cmlidXRlcy5jb3VudCkg
eworICAgICAgICBleGNlcHRpb25DYWxsYmFjayh7IE5vdEFsbG93ZWRFcnJvciwgQVNDSUlMaXRl
cmFsKCJObyBtYXRjaGVkIGNyZWRlbnRpYWxzIGFyZSBmb3VuZCBpbiB0aGUgcGxhdGZvcm0gYXR0
YWNoZWQgYXV0aGVudGljYXRvci4iKSB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFN0ZXAgNi4KKyAgICAvLyBGSVhNRShyZGFyOi8vcHJvYmxlbS8zNTkwMDUzNCk6IFdlIGRv
bid0IGhhdmUgYW4gVUkgdG8gcHJvbXB0IHVzZXJzIGZvciBzZWxlY3RpbmcgaW50ZXJzZWN0ZWRD
cmVkZW50aWFscywgYW5kIHRoZXJlZm9yZSB3ZSBhbHdheXMgdXNlIHRoZSBmaXJzdCBvbmUgZm9y
IG5vdy4KKyAgICBOU0RpY3Rpb25hcnkgKnNlbGVjdGVkQ3JlZGVudGlhbEF0dHJpYnV0ZXMgPSBp
bnRlcnNlY3RlZENyZWRlbnRpYWxzQXR0cmlidXRlc1swXTsKKworICAgIC8vIFN0ZXAgNy4gR2V0
IHVzZXIgY29uc2VudC4KKyAgICAvLyBGSVhNRSgxODM1MzQpOiBUaGUgbGlmZXRpbWUgb2YgY29u
dGV4dCBpcyBtYW5hZ2VkIGJ5IHJlcGx5IGFuZCB0aGUgZWFybHkgcmV0dXJuLCB3aGljaCBpcyBh
IGJpdCBzdWJ0bGUuCisgICAgTEFDb250ZXh0ICpjb250ZXh0ID0gW2FsbG9jTEFDb250ZXh0SW5z
dGFuY2UoKSBpbml0XTsKKyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBpZiAoIVtjb250
ZXh0IGNhbkV2YWx1YXRlUG9saWN5OkxBUG9saWN5RGV2aWNlT3duZXJBdXRoZW50aWNhdGlvbldp
dGhCaW9tZXRyaWNzIGVycm9yOiZlcnJvcl0pIHsKKyAgICAgICAgYXV0byByZXRhaW5Db250ZXh0
ID0gYWRvcHROUyhjb250ZXh0KTsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBldmFsdWF0
ZSBhdXRoZW50aWNhdGlvbiB3aXRoIGJpb21ldHJpY3MgcG9saWN5OiAlQCIsIGVycm9yKTsKKyAg
ICAgICAgLy8gRklYTUUoMTgyNzY3KQorICAgICAgICBleGNlcHRpb25DYWxsYmFjayh7IE5vdEFs
bG93ZWRFcnJvciwgQVNDSUlMaXRlcmFsKCJObyBhdmFsaWFibGUgYXV0aGVudGljYXRvcnMuIikg
fSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gY3JlZGVu
dGlhbElkOworICAgIE5TRGF0YSAqbnNDcmVkZW50aWFsSWQgPSBzZWxlY3RlZENyZWRlbnRpYWxB
dHRyaWJ1dGVzWyhpZClrU2VjQXR0ckFwcGxpY2F0aW9uTGFiZWxdOworICAgIGNyZWRlbnRpYWxJ
ZC5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obnNDcmVkZW50aWFsSWQu
Ynl0ZXMpLCBuc0NyZWRlbnRpYWxJZC5sZW5ndGgpOworICAgIFZlY3Rvcjx1aW50OF90PiB1c2Vy
aGFuZGxlOworICAgIE5TRGF0YSAqbnNVc2VyaGFuZGxlID0gc2VsZWN0ZWRDcmVkZW50aWFsQXR0
cmlidXRlc1soaWQpa1NlY0F0dHJBcHBsaWNhdGlvblRhZ107CisgICAgdXNlcmhhbmRsZS5hcHBl
bmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obnNVc2VyaGFuZGxlLmJ5dGVzKSwg
bnNVc2VyaGFuZGxlLmxlbmd0aCk7CisgICAgYXV0byByZXBseSA9IEJsb2NrUHRyPHZvaWQoQk9P
TCwgTlNFcnJvciAqKT46OmZyb21DYWxsYWJsZShbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgcnBJZCA9
IG9wdGlvbnMucnBJZC5pc29sYXRlZENvcHkoKSwgaGFzaCwgY3JlZGVudGlhbElkID0gV1RGTW92
ZShjcmVkZW50aWFsSWQpLCB1c2VyaGFuZGxlID0gV1RGTW92ZSh1c2VyaGFuZGxlKSwgY29udGV4
dCA9IGFkb3B0TlMoY29udGV4dCldIChCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKmVycm9yKSBtdXRh
YmxlIHsKKyAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgICAgIGlmICghc3Vj
Y2VzcyB8fCBlcnJvcikgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBhdXRoZW50
aWNhdGUgd2l0aCBiaW9tZXRyaWNzOiAlQCIsIGVycm9yKTsKKyAgICAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKHsgTm90QWxsb3dlZEVycm9yLCBBU0NJSUxpdGVyYWwoIkNvdWxkbid0IGdldCB1
c2VyIGNvbnNlbnQuIikgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICAvLyBTdGVwIDktMTAuCisgICAgICAgIC8vIEZJWE1FKDE4MzUzMyk6IER1ZSB0byB0aGUg
c3RhdGVkIEtleWNoYWluIGxpbWl0YXRpb25zLCB3ZSBjYW4ndCBzYXZlIHRoZSBjb3VudGVyIHZh
bHVlLgorICAgICAgICAvLyBUaGVyZWZvcmUsIGl0IGlzIGFsd2F5cyB6ZXJvLgorICAgICAgICB1
aW50MzJfdCBjb3VudGVyID0gMDsKKyAgICAgICAgYXV0byBhdXRoRGF0YSA9IGJ1aWxkQXV0aERh
dGEocnBJZCwgZ2V0QXNzZXJ0aW9uRmxhZ3MsIGNvdW50ZXIsIHsgfSk7CisKKyAgICAgICAgLy8g
U3RlcCAxMS4KKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNpZ25hdHVyZTsKKyAgICAgICAgewor
ICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICpxdWVyeSA9IEB7CisgICAgICAgICAgICAgICAgKGlk
KWtTZWNDbGFzczogKGlkKWtTZWNDbGFzc0tleSwKKyAgICAgICAgICAgICAgICAoaWQpa1NlY0F0
dHJLZXlDbGFzczogKGlkKWtTZWNBdHRyS2V5Q2xhc3NQcml2YXRlLAorICAgICAgICAgICAgICAg
IChpZClrU2VjQXR0ckFwcGxpY2F0aW9uTGFiZWw6IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpjcmVk
ZW50aWFsSWQuZGF0YSgpIGxlbmd0aDpjcmVkZW50aWFsSWQuc2l6ZSgpXSwKKyAgICAgICAgICAg
ICAgICAoaWQpa1NlY1VzZUF1dGhlbnRpY2F0aW9uQ29udGV4dDogY29udGV4dC5nZXQoKSwKKyAg
ICAgICAgICAgICAgICAoaWQpa1NlY1JldHVyblJlZjogQFlFUywKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBDRlR5cGVSZWYgcHJpdmF0ZUtleVJlZiA9IG51bGxwdHI7CisgICAgICAgICAg
ICBPU1N0YXR1cyBzdGF0dXMgPSBTZWNJdGVtQ29weU1hdGNoaW5nKChfX2JyaWRnZSBDRkRpY3Rp
b25hcnlSZWYpcXVlcnksICZwcml2YXRlS2V5UmVmKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMp
IHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGdldCB0aGUgcHJpdmF0ZSBr
ZXkgcmVmZXJlbmNlOiAlZCIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2Fs
bGJhY2soeyBVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5rbm93biBpbnRlcm5hbCBlcnJv
ci4iKSB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBhdXRvIHByaXZhdGVLZXkgPSBhZG9wdENGKHByaXZhdGVLZXlSZWYpOworCisgICAgICAg
ICAgICBOU011dGFibGVEYXRhICpkYXRhVG9TaWduID0gW05TTXV0YWJsZURhdGEgZGF0YVdpdGhC
eXRlczphdXRoRGF0YS5kYXRhKCkgbGVuZ3RoOmF1dGhEYXRhLnNpemUoKV07CisgICAgICAgICAg
ICBbZGF0YVRvU2lnbiBhcHBlbmRCeXRlczpoYXNoLmRhdGEoKSBsZW5ndGg6aGFzaC5zaXplKCld
OworCisgICAgICAgICAgICBDRkVycm9yUmVmIGVycm9yUmVmID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBDb252ZXJ0aW5nIENGVHlwZVJlZiB0byBTZWNLZXlSZWYgaXMgcXVpdGUg
c3VidGxlIGhlcmUuCisgICAgICAgICAgICBDRkRhdGFSZWYgc2lnbmF0dXJlUmVmID0gU2VjS2V5
Q3JlYXRlU2lnbmF0dXJlKChfX2JyaWRnZSBTZWNLZXlSZWYpKChpZClwcml2YXRlS2V5UmVmKSwg
a1NlY0tleUFsZ29yaXRobUVDRFNBU2lnbmF0dXJlTWVzc2FnZVg5NjJTSEEyNTYsIChfX2JyaWRn
ZSBDRkRhdGFSZWYpZGF0YVRvU2lnbiwgJmVycm9yUmVmKTsKKyAgICAgICAgICAgIGF1dG8gcmV0
YWluRXJyb3IgPSBhZG9wdENGKGVycm9yUmVmKTsKKyAgICAgICAgICAgIGlmIChlcnJvclJlZikg
eworICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGRuJ3QgZ2VuZXJhdGUgdGhlIHNpZ25h
dHVyZTogJUAiLCAoTlNFcnJvciopZXJyb3JSZWYpOworICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKHsgVW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVua25vd24gaW50ZXJuYWwg
ZXJyb3IuIikgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYXV0byByZXRhaW5TaWduYXR1cmUgPSBhZG9wdENGKHNpZ25hdHVyZVJlZik7Cisg
ICAgICAgICAgICBOU0RhdGEgKm5zU2lnbmF0dXJlID0gKE5TRGF0YSAqKXNpZ25hdHVyZVJlZjsK
KyAgICAgICAgICAgIHNpZ25hdHVyZS5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4obnNTaWduYXR1cmUuYnl0ZXMpLCBuc1NpZ25hdHVyZS5sZW5ndGgpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gU3RlcCAxMy4KKyAgICAgICAgY2FsbGJhY2soY3JlZGVudGlhbElkLCBh
dXRoRGF0YSwgc2lnbmF0dXJlLCB1c2VyaGFuZGxlKTsKKyAgICB9KTsKKworICAgIC8vIEZJWE1F
KDE4MzUzMyk6IFVzZSB1c2VyaGFuZGxlIGluc3RlYWQgb2YgdXNlcm5hbWUgZHVlIHRvIHRoZSBz
dGF0ZWQgS2V5Y2hhaW4gbGltaXRhdGlvbnMuCisgICAgTlNTdHJpbmcgKnJlYXNvbiA9IFtOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiTG9nIGludG8gJUAgd2l0aCAlQC4iLCAoaWQpb3B0aW9u
cy5ycElkLCBzZWxlY3RlZENyZWRlbnRpYWxBdHRyaWJ1dGVzWyhpZClrU2VjQXR0ckFwcGxpY2F0
aW9uVGFnXV07CisgICAgW2NvbnRleHQgZXZhbHVhdGVBY2Nlc3NDb250cm9sOihfX2JyaWRnZSBT
ZWNBY2Nlc3NDb250cm9sUmVmKXNlbGVjdGVkQ3JlZGVudGlhbEF0dHJpYnV0ZXNbKGlkKWtTZWNB
dHRyQWNjZXNzQ29udHJvbF0gb3BlcmF0aW9uOkxBQWNjZXNzQ29udHJvbE9wZXJhdGlvblVzZUtl
eVNpZ24gbG9jYWxpemVkUmVhc29uOnJlYXNvbiByZXBseTpyZXBseS5nZXQoKV07CisjZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKK30KKwogYm9vbCBMb2NhbEF1dGhlbnRpY2F0b3I6OmlzQXZhaWxh
YmxlKCkgY29uc3QKIHsKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtMzcxLDcgKzU1Myw3IEBAIHZv
aWQgTG9jYWxBdXRoZW50aWNhdG9yOjppc3N1ZUNsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmlu
ZyYgcnBJZCwgY29uc3QgU3RyaW5nCiAKICAgICBTZWNBY2Nlc3NDb250cm9sUmVmIGFjY2Vzc0Nv
bnRyb2xSZWY7CiAgICAgewotICAgICAgICBDRkVycm9yUmVmIGVycm9yUmVmID0gTlVMTDsKKyAg
ICAgICAgQ0ZFcnJvclJlZiBlcnJvclJlZiA9IG51bGxwdHI7CiAgICAgICAgIGFjY2Vzc0NvbnRy
b2xSZWYgPSBTZWNBY2Nlc3NDb250cm9sQ3JlYXRlV2l0aEZsYWdzKE5VTEwsIGtTZWNBdHRyQWNj
ZXNzaWJsZVdoZW5QYXNzY29kZVNldFRoaXNEZXZpY2VPbmx5LCBrU2VjQWNjZXNzQ29udHJvbFBy
aXZhdGVLZXlVc2FnZSB8IGtTZWNBY2Nlc3NDb250cm9sVXNlclByZXNlbmNlLCAmZXJyb3JSZWYp
OwogICAgICAgICBhdXRvIHJldGFpbkVycm9yID0gYWRvcHRDRihlcnJvclJlZik7CiAgICAgICAg
IGlmIChlcnJvclJlZikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDI4OTI5YjhhNjNhZjEzYTc5Zjk2NzZlYzk5Y2QxYzFlZDhi
Yzc4ODQuLmIyNzIzYjU3NTdiZjA1MjZjMDg1YTAxZDMzZjcxMzgxY2FhMWU2MzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3
MDgsNyArMTcwOCw3IEBACiAJCTU3MzAzQkVGMjAwOTgwQzYwMDM1NTk2NSAvKiBQdWJsaWNLZXlD
cmVkZW50aWFsRGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTczMDNCRUMyMDA5ODBCRjAwMzU1OTY1IC8qIFB1YmxpY0tleUNyZWRlbnRp
YWxEZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTczMDNCRjQyMDA5OTA0NjAwMzU1OTY1IC8qIEpTUHVibGljS2V5Q3JlZGVudGlh
bERlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3MzAzQkYyMjAwOTkwNDUwMDM1NTk2NSAvKiBKU1B1YmxpY0tleUNyZWRlbnRpYWxEZXNj
cmlwdG9yLmggKi87IH07CiAJCTU3MzAzQzAwMjAwOTk1MUMwMDM1NTk2NSAvKiBKU1B1YmxpY0tl
eUNyZWRlbnRpYWxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzMwM0JGOTIwMDk5MTM0MDAzNTU5NjUgLyogSlNQdWJsaWNLZXlDcmVkZW50aWFs
VHlwZS5oICovOyB9OwotCQk1NzMwM0MwQTIwMDk5QkFEMDAzNTU5NjUgLyogUHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NzMwM0MwNjIwMDk5OEY4MDAzNTU5NjUgLyogUHVibGljS2V5Q3JlZGVu
dGlhbFJlcXVlc3RPcHRpb25zLmggKi87IH07CisJCTU3MzAzQzBBMjAwOTlCQUQwMDM1NTk2NSAv
KiBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MzAzQzA2MjAwOTk4RjgwMDM1NTk2NSAvKiBQ
dWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzMwM0MxMTIwMDk5Q0IxMDAzNTU5NjUgLyog
SlNQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MzAzQzBDMjAwOTlDNzUwMDM1NTk2NSAvKiBK
U1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oICovOyB9OwogCQk1NzMwM0MxOTIw
MDlBMkYzMDAzNTU5NjUgLyogSlNQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMwM0MxMzIw
MDlBMjU3MDAzNTU5NjUgLyogSlNQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgg
Ki87IH07CiAJCTU3MzAzQzFGMjAwOUFCNDIwMDM1NTk2NSAvKiBBdXRoZW50aWNhdG9yQXR0ZXN0
YXRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTczMDNDMUIyMDA5QTk4NjAwMzU1OTY1IC8qIEF1dGhlbnRpY2F0b3JBdHRlc3RhdGlv
blJlc3BvbnNlLmggKi87IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
cmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxz
TWVzc2VuZ2VyUHJveHkuY3BwCmluZGV4IGZlYWJlYThjZmY0Y2RhYTliMWRmYmFlZjhhODc0MGM1
MTZiMjEwNjguLjNhZmRkMTM1YzFhZjgxNDY4MWIyMDAyNTAzMDdlMzYyZDc5MTE3YjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNy
ZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHkuY3BwCkBA
IC01Nyw2ICs1Nyw3IEBAIHZvaWQgV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94eTo6bWFrZUNy
ZWRlbnRpYWwodWludDY0X3QgbWVzc2FnZUlkLCBjb25zdCBWZWN0CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgLy8gRklYTUUoMTgzNTM0KTogV2VhayBwb2ludGVycyBkb2Vzbid0IHdvcmsg
aW4gYW5vdGhlciB0aHJlYWQgYmVjYXVzZSBvZiByYWNlIGNvbmRpdGlvbi4KKyAgICAvLyBGSVhN
RSgxODM1MzQpOiBVbmlmeSBjYWxsYmFja3MuCiAgICAgYXV0byB3ZWFrVGhpcyA9IG1fd2Vha0Zh
Y3RvcnkuY3JlYXRlV2Vha1B0cigqdGhpcyk7CiAgICAgYXV0byBjYWxsYmFjayA9IFt3ZWFrVGhp
cywgbWVzc2FnZUlkXSAoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjcmVkZW50aWFsSWQsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgYXR0ZXN0YXRpb25PYmplY3QpIHsKICAgICAgICAgaWYgKCF3ZWFr
VGhpcykKQEAgLTcxLDggKzcyLDIzIEBAIHZvaWQgV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94
eTo6bWFrZUNyZWRlbnRpYWwodWludDY0X3QgbWVzc2FnZUlkLCBjb25zdCBWZWN0CiAgICAgbV9h
dXRoZW50aWNhdG9yLT5tYWtlQ3JlZGVudGlhbChoYXNoLCBvcHRpb25zLCBXVEZNb3ZlKGNhbGxi
YWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjaykpOwogfQogCi12b2lkIFdlYkNyZWRlbnRp
YWxzTWVzc2VuZ2VyUHJveHk6OmdldEFzc2VydGlvbih1aW50NjRfdCkKK3ZvaWQgV2ViQ3JlZGVu
dGlhbHNNZXNzZW5nZXJQcm94eTo6Z2V0QXNzZXJ0aW9uKHVpbnQ2NF90IG1lc3NhZ2VJZCwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25zdCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50
aWFsUmVxdWVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7CisgICAgLy8gRklYTUUoMTgyNzY3KQorICAg
IGlmICghbV9hdXRoZW50aWNhdG9yKQorICAgICAgICBleGNlcHRpb25SZXBseShtZXNzYWdlSWQs
IHsgV2ViQ29yZTo6Tm90QWxsb3dlZEVycm9yLCBBU0NJSUxpdGVyYWwoIk5vIGF2YWxpYWJsZSBh
dXRoZW50aWNhdG9ycy4iKSB9KTsKKyAgICAvLyBGSVhNRSgxODM1MzQpOiBXZWFrIHBvaW50ZXJz
IGRvZXNuJ3Qgd29yayBpbiBhbm90aGVyIHRocmVhZCBiZWNhdXNlIG9mIHJhY2UgY29uZGl0aW9u
LgorICAgIC8vIEZJWE1FKDE4MzUzNCk6IFVuaWZ5IGNhbGxiYWNrcy4KKyAgICBhdXRvIHdlYWtU
aGlzID0gbV93ZWFrRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCp0aGlzKTsKKyAgICBhdXRvIGNhbGxi
YWNrID0gW3dlYWtUaGlzLCBtZXNzYWdlSWRdIChjb25zdCBWZWN0b3I8dWludDhfdD4mIGNyZWRl
bnRpYWxJZCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBhdXRoZW50aWNhdG9yRGF0YSwgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBzaWduYXR1cmUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdXNlckhh
bmRsZSkgeworICAgICAgICBpZiAod2Vha1RoaXMpCisgICAgICAgICAgICB3ZWFrVGhpcy0+Z2V0
QXNzZXJ0aW9uUmVwbHkobWVzc2FnZUlkLCBjcmVkZW50aWFsSWQsIGF1dGhlbnRpY2F0b3JEYXRh
LCBzaWduYXR1cmUsIHVzZXJIYW5kbGUpOworICAgIH07CisgICAgYXV0byBleGNlcHRpb25DYWxs
YmFjayA9IFt3ZWFrVGhpcywgbWVzc2FnZUlkXSAoY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGF0
YSYgZXhjZXB0aW9uKSB7CisgICAgICAgIGlmICh3ZWFrVGhpcykKKyAgICAgICAgICAgIHdlYWtU
aGlzLT5leGNlcHRpb25SZXBseShtZXNzYWdlSWQsIGV4Y2VwdGlvbik7CisgICAgfTsKKyAgICBt
X2F1dGhlbnRpY2F0b3ItPmdldEFzc2VydGlvbihoYXNoLCBvcHRpb25zLCBXVEZNb3ZlKGNhbGxi
YWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjaykpOwogfQogCiB2b2lkIFdlYkNyZWRlbnRp
YWxzTWVzc2VuZ2VyUHJveHk6OmlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2
YWlsYWJsZSh1aW50NjRfdCBtZXNzYWdlSWQpCkBAIC05NCw2ICsxMTAsMTEgQEAgdm9pZCBXZWJD
cmVkZW50aWFsc01lc3NlbmdlclByb3h5OjptYWtlQ3JlZGVudGlhbFJlcGx5KHVpbnQ2NF90IG1l
c3NhZ2VJZCwgY29uc3QKICAgICBtX3dlYlBhZ2VQcm94eS5zZW5kKE1lc3NhZ2VzOjpXZWJDcmVk
ZW50aWFsc01lc3Nlbmdlcjo6TWFrZUNyZWRlbnRpYWxSZXBseShtZXNzYWdlSWQsIGNyZWRlbnRp
YWxJZCwgYXR0ZXN0YXRpb25PYmplY3QpKTsKIH0KIAordm9pZCBXZWJDcmVkZW50aWFsc01lc3Nl
bmdlclByb3h5OjpnZXRBc3NlcnRpb25SZXBseSh1aW50NjRfdCBtZXNzYWdlSWQsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgY3JlZGVudGlhbElkLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGF1dGhl
bnRpY2F0b3JEYXRhLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNpZ25hdHVyZSwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiB1c2VySGFuZGxlKQoreworICAgIG1fd2ViUGFnZVByb3h5LnNlbmQoTWVz
c2FnZXM6OldlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyOjpHZXRBc3NlcnRpb25SZXBseShtZXNzYWdl
SWQsIGNyZWRlbnRpYWxJZCwgYXV0aGVudGljYXRvckRhdGEsIHNpZ25hdHVyZSwgdXNlckhhbmRs
ZSkpOworfQorCiB2b2lkIFdlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHk6OmlzVXNlclZlcmlm
eWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZVJlcGx5KHVpbnQ2NF90IG1lc3NhZ2VJ
ZCwgYm9vbCByZXN1bHQpCiB7CiAgICAgbV93ZWJQYWdlUHJveHkuc2VuZChNZXNzYWdlczo6V2Vi
Q3JlZGVudGlhbHNNZXNzZW5nZXI6OklzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRv
ckF2YWlsYWJsZVJlcGx5KG1lc3NhZ2VJZCwgcmVzdWx0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3Nl
bmdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdlbWVu
dC9XZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5LmgKaW5kZXggNjllYjcwZTdjNDA4YjFjY2Yz
NjliYWJjOGI2MTE0ZDMyYTg3MjJmMC4uMGMyYTRkZTE1ZTI5YTc1M2FhYzM0Zjc5ZGQ5MDc5M2Jk
NjM0MTI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ3JlZGVudGlhbE1h
bmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxzTWVzc2VuZ2Vy
UHJveHkuaApAQCAtMzcsNiArMzcsNyBAQCBjbGFzcyBMb2NhbEF1dGhlbnRpY2F0b3I7CiAKIHN0
cnVjdCBFeGNlcHRpb25EYXRhOwogc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM7CitzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOwogfQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTU1LDEyICs1NiwxMyBAQCBwcml2YXRlOgogCiAgICAgLy8g
UmVjZWl2ZXJzLgogICAgIHZvaWQgbWFrZUNyZWRlbnRpYWwodWludDY0X3QgbWVzc2FnZUlkLCBj
b25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMmKTsKLSAgICB2b2lkIGdldEFzc2VydGlvbih1aW50NjRfdCBt
ZXNzYWdlSWQpOworICAgIHZvaWQgZ2V0QXNzZXJ0aW9uKHVpbnQ2NF90IG1lc3NhZ2VJZCwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25zdCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50
aWFsUmVxdWVzdE9wdGlvbnMmKTsKICAgICB2b2lkIGlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0
aGVudGljYXRvckF2YWlsYWJsZSh1aW50NjRfdCBtZXNzYWdlSWQpOwogCiAgICAgLy8gU2VuZGVy
cy4KICAgICB2b2lkIGV4Y2VwdGlvblJlcGx5KHVpbnQ2NF90IG1lc3NhZ2VJZCwgY29uc3QgV2Vi
Q29yZTo6RXhjZXB0aW9uRGF0YSYpOwogICAgIHZvaWQgbWFrZUNyZWRlbnRpYWxSZXBseSh1aW50
NjRfdCBtZXNzYWdlSWQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgY3JlZGVudGlhbElkLCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIGF0dGVzdGF0aW9uT2JqZWN0KTsKKyAgICB2b2lkIGdldEFzc2Vy
dGlvblJlcGx5KHVpbnQ2NF90IG1lc3NhZ2VJZCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjcmVk
ZW50aWFsSWQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYXV0aGVudGljYXRvckRhdGEsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHVzZXJI
YW5kbGUpOwogICAgIHZvaWQgaXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZh
aWxhYmxlUmVwbHkodWludDY0X3QgbWVzc2FnZUlkLCBib29sKTsKIAogICAgIFdlYlBhZ2VQcm94
eSYgbV93ZWJQYWdlUHJveHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
cmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5Lm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3Jl
ZGVudGlhbHNNZXNzZW5nZXJQcm94eS5tZXNzYWdlcy5pbgppbmRleCA1NTEyMGEyOGEzNTZiYTcx
NzdlODBlZDVmZmJiYjM5YzIwNmRmMGRjLi5hNThiYmFlNmYwMTRiMGJiYjZjZTk3OGE4NDlhZmY1
MzhmMzMyNjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9DcmVkZW50aWFs
TWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5Lm1lc3NhZ2VzLmluCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRp
YWxzTWVzc2VuZ2VyUHJveHkubWVzc2FnZXMuaW4KQEAgLTI3LDcgKzI3LDcgQEAKIG1lc3NhZ2Vz
IC0+IFdlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHkgewogCiAgICAgTWFrZUNyZWRlbnRpYWwo
dWludDY0X3QgbWVzc2FnZUlkLCBWZWN0b3I8dWludDhfdD4gaGFzaCwgc3RydWN0IFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgb3B0aW9ucyk7Ci0gICAgR2V0QXNz
ZXJ0aW9uKHVpbnQ2NF90IG1lc3NhZ2VJZCk7CisgICAgR2V0QXNzZXJ0aW9uKHVpbnQ2NF90IG1l
c3NhZ2VJZCwgVmVjdG9yPHVpbnQ4X3Q+IGhhc2gsIHN0cnVjdCBXZWJDb3JlOjpQdWJsaWNLZXlD
cmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgb3B0aW9ucyk7CiAgICAgSXNVc2VyVmVyaWZ5aW5nUGxh
dGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlKHVpbnQ2NF90IG1lc3NhZ2VJZCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdlbWVudC9X
ZWJDcmVkZW50aWFsc01lc3Nlbmdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQ3Jl
ZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXIuY3BwCmluZGV4IDAzYmJh
Njg5YjA5OTkyODRlYzE5ZjAyOTM2NWQ5Yzg4OGZhYmQyZDcuLjIyNzlkN2VmZTFlYmEzMTYwZGJm
YzhkMDFkZTMyMGVlNGQxZTFhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9DcmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3Nlbmdlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRp
YWxzTWVzc2VuZ2VyLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2UuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9QdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QdWJsaWNLZXlDcmVk
ZW50aWFsUmVxdWVzdE9wdGlvbnMuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTUzLDgg
KzU0LDEwIEBAIHZvaWQgV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXI6Om1ha2VDcmVkZW50aWFsKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QKICAgICBtX3dlYlBhZ2Uuc2VuZChNZXNz
YWdlczo6V2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94eTo6TWFrZUNyZWRlbnRpYWwobWVzc2Fn
ZUlkLCBoYXNoLCBvcHRpb25zKSk7CiB9CiAKLXZvaWQgV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXI6
OmdldEFzc2VydGlvbihjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMmLCBXZWJDb3JlOjpSZXF1ZXN0Q29tcGxldGlv
bkhhbmRsZXImJikKK3ZvaWQgV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXI6OmdldEFzc2VydGlvbihj
b25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRl
bnRpYWxSZXF1ZXN0T3B0aW9ucyYgb3B0aW9ucywgV2ViQ29yZTo6UmVxdWVzdENvbXBsZXRpb25I
YW5kbGVyJiYgaGFuZGxlcikKIHsKKyAgICBhdXRvIG1lc3NhZ2VJZCA9IGFkZFJlcXVlc3RDb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZXIpKTsKKyAgICBtX3dlYlBhZ2Uuc2VuZChNZXNz
YWdlczo6V2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94eTo6R2V0QXNzZXJ0aW9uKG1lc3NhZ2VJ
ZCwgaGFzaCwgb3B0aW9ucykpOwogfQogCiB2b2lkIFdlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyOjpp
c1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUoV2ViQ29yZTo6UXVl
cnlDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCkBAIC03MSw2ICs3NCw4IEBAIHZvaWQgV2Vi
Q3JlZGVudGlhbHNNZXNzZW5nZXI6Om1ha2VDcmVkZW50aWFsUmVwbHkodWludDY0X3QgbWVzc2Fn
ZUlkLCBjb25zdCBWZWN0CiAKIHZvaWQgV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXI6OmdldEFzc2Vy
dGlvblJlcGx5KHVpbnQ2NF90IG1lc3NhZ2VJZCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjcmVk
ZW50aWFsSWQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYXV0aGVudGljYXRvckRhdGEsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHVzZXJI
YW5kbGUpCiB7CisgICAgYXV0byBoYW5kbGVyID0gdGFrZVJlcXVlc3RDb21wbGV0aW9uSGFuZGxl
cihtZXNzYWdlSWQpOworICAgIGhhbmRsZXIoV2ViQ29yZTo6QXNzZXJ0aW9uUmV0dXJuQnVuZGxl
KEFycmF5QnVmZmVyOjpjcmVhdGUoY3JlZGVudGlhbElkLmRhdGEoKSwgY3JlZGVudGlhbElkLnNp
emUoKSksIEFycmF5QnVmZmVyOjpjcmVhdGUoYXV0aGVudGljYXRvckRhdGEuZGF0YSgpLCBhdXRo
ZW50aWNhdG9yRGF0YS5zaXplKCkpLCBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHNpZ25hdHVyZS5kYXRh
KCksIHNpZ25hdHVyZS5zaXplKCkpLCBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVzZXJIYW5kbGUuZGF0
YSgpLCB1c2VySGFuZGxlLnNpemUoKSkpKTsKIH0KIAogdm9pZCBXZWJDcmVkZW50aWFsc01lc3Nl
bmdlcjo6aXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlUmVwbHko
dWludDY0X3QgbWVzc2FnZUlkLCBib29sIHJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3Nlbmdl
ci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdl
bWVudC9XZWJDcmVkZW50aWFsc01lc3Nlbmdlci5tZXNzYWdlcy5pbgppbmRleCA5MjgwZTA2OTUx
Yzc4MjljZTVmNzU2NmQ4NzBlYWEzNjA1OWRkOWI0Li5hNmM4ZWVjYTdjNDczNDQwMTg0ZmYxOTkx
OTA5ZjMyNWJjNmU3ZDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQ3Jl
ZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXIubWVzc2FnZXMuaW4KKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRl
bnRpYWxzTWVzc2VuZ2VyLm1lc3NhZ2VzLmluCkBAIC0zMCw3ICszMCw2IEBAIG1lc3NhZ2VzIC0+
IFdlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyIHsKICAgICBNYWtlQ3JlZGVudGlhbFJlcGx5KHVpbnQ2
NF90IG1lc3NhZ2VJZCwgVmVjdG9yPHVpbnQ4X3Q+IGNyZWRlbnRpYWxJZCwgVmVjdG9yPHVpbnQ4
X3Q+IGF0dGVzdGF0aW9uT2JqZWN0KTsKICAgICBHZXRBc3NlcnRpb25SZXBseSh1aW50NjRfdCBt
ZXNzYWdlSWQsIFZlY3Rvcjx1aW50OF90PiBjcmVkZW50aWFsSWQsIFZlY3Rvcjx1aW50OF90PiBh
dXRoZW50aWNhdG9yRGF0YSwgVmVjdG9yPHVpbnQ4X3Q+IHNpZ25hdHVyZSwgVmVjdG9yPHVpbnQ4
X3Q+IHVzZXJIYW5kbGUpOwogICAgIElzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRv
ckF2YWlsYWJsZVJlcGx5KHVpbnQ2NF90IG1lc3NhZ2VJZCwgYm9vbCByZXN1bHQpOwotZXhjZXB0
aW9uUmVwbHkodWludDY0X3QgbWVzc2FnZUlkLCBzdHJ1Y3QgV2ViQ29yZTo6RXhjZXB0aW9uRGF0
YSBleGNlcHRpb24pOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwNmNiN2VkNTNlOWE5MDBmYzg1NWMyN2U3NmE2OTM4YzNk
YzljNjMyLi4wNzQ1NzY4MzYzM2U4NTlmYjM0YmRkMTBhMjE1ZWVhZWE2OTY1M2RmIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTgtMDMtMjEgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAg
ICAgICBbV2ViQXV0aE5dIEltcGxlbWVudCBhdXRoZW50aWNhdG9yR2V0QXNzZXJ0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODM4ODEKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzM3MjU4NjI4PgorCisgICAgICAgIFJldmlld2VkIGJ5IEJyZW50
IEZ1bGdoYW0uCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Mb2NhbEF1dGhl
bnRpY2F0b3IubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjphZGRUZXN0S2V5VG9LZXljaGFp
bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZXRUZXN0S2V5KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkxBRXZhbHVhdGVQb2xpY3lGYWlsZWRTd2l6emxlcjo6ZXZhbHVhdGVQb2xpY3lG
YWlsZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6TEFFdmFsdWF0ZVBvbGljeVBhc3NlZFN3
aXp6bGVyOjpldmFsdWF0ZVBvbGljeVBhc3NlZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpM
QUV2YWx1YXRlQWNjZXNzQ29udHJvbEZhaWxlZFN3aXp6bGVyOjpMQUV2YWx1YXRlQWNjZXNzQ29u
dHJvbEZhaWxlZFN3aXp6bGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkxBRXZhbHVhdGVB
Y2Nlc3NDb250cm9sRmFpbGVkU3dpenpsZXI6OmV2YWx1YXRlQWNjZXNzQ29udHJvbEZhaWxlZCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpMQUV2YWx1YXRlQWNjZXNzQ29udHJvbFBhc3NlZFN3
aXp6bGVyOjpMQUV2YWx1YXRlQWNjZXNzQ29udHJvbFBhc3NlZFN3aXp6bGVyKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkxBRXZhbHVhdGVBY2Nlc3NDb250cm9sUGFzc2VkU3dpenpsZXI6OmV2
YWx1YXRlQWNjZXNzQ29udHJvbFBhc3NlZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKwogMjAxOC0wMy0xOSAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIGFub3RoZXIgcXVpY2sgZml4IGZvciByMjI5Njk5CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Mb2NhbEF1dGhlbnRpY2F0b3IubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KaW5k
ZXggNzlhYzZkMjhhNTRiOWJmZjFkMWRmYjVjZjlhYWI0YjI5ZDZmMDZhNS4uODU1YjE0ZmNjZGM3
NGUzOTU5ZjVkMTJkMTQ0MjE0OWUzMzEzZjJkNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9pb3MvTG9jYWxBdXRoZW50aWNhdG9yLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvaW9zL0xvY2FsQXV0aGVudGljYXRvci5tbQpAQCAtMzgsNiArMzgsNyBAQAog
I2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25EYXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2Fs
QXV0aGVudGljYXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1
ZXN0T3B0aW9ucy5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4
dC9CYXNlNjQuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtODUsNyArODYs
NyBAQCBSZXRhaW5QdHI8U2VjS2V5UmVmPiBnZXRUZXN0S2V5KCkKICAgICAgICAgKGlkKWtTZWNB
dHRyS2V5Q2xhc3M6IChpZClrU2VjQXR0cktleUNsYXNzUHJpdmF0ZSwKICAgICAgICAgKGlkKWtT
ZWNBdHRyS2V5U2l6ZUluQml0czogQDI1NiwKICAgICB9OwotICAgIENGRXJyb3JSZWYgZXJyb3JS
ZWYgPSBOVUxMOworICAgIENGRXJyb3JSZWYgZXJyb3JSZWYgPSBudWxscHRyOwogICAgIGF1dG8g
a2V5ID0gYWRvcHRDRihTZWNLZXlDcmVhdGVXaXRoRGF0YSgKICAgICAgICAgKF9fYnJpZGdlIENG
RGF0YVJlZilhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJhc2U2NEVuY29kZWRTdHJp
bmc6dGVzdEVTMjU2UHJpdmF0ZUtleUJhc2U2NCBvcHRpb25zOk5TRGF0YUJhc2U2NERlY29kaW5n
SWdub3JlVW5rbm93bkNoYXJhY3RlcnNdKS5nZXQoKSwKICAgICAgICAgKF9fYnJpZGdlIENGRGlj
dGlvbmFyeVJlZilvcHRpb25zLApAQCAtOTYsNiArOTcsMTkgQEAgUmV0YWluUHRyPFNlY0tleVJl
Zj4gZ2V0VGVzdEtleSgpCiAgICAgcmV0dXJuIGtleTsKIH0KIAordm9pZCBhZGRUZXN0S2V5VG9L
ZXljaGFpbigpCit7CisgICAgYXV0byBrZXkgPSBnZXRUZXN0S2V5KCk7CisgICAgTlNEaWN0aW9u
YXJ5KiBhZGRRdWVyeSA9IEB7CisgICAgICAgIChpZClrU2VjVmFsdWVSZWY6IChpZClrZXkuZ2V0
KCksCisgICAgICAgIChpZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NLZXksCisgICAgICAgIChp
ZClrU2VjQXR0ckxhYmVsOiB0ZXN0UnBJZCwKKyAgICAgICAgKGlkKWtTZWNBdHRyQXBwbGljYXRp
b25UYWc6IFtOU0RhdGEgZGF0YVdpdGhCeXRlczp0ZXN0VXNlcmhhbmRsZSBsZW5ndGg6c2l6ZW9m
KHRlc3RVc2VyaGFuZGxlKV0sCisgICAgfTsKKyAgICBPU1N0YXR1cyBzdGF0dXMgPSBTZWNJdGVt
QWRkKChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpYWRkUXVlcnksIE5VTEwpOworICAgIEVYUEVD
VF9GQUxTRShzdGF0dXMpOworfQorCiB2b2lkIGNsZWFuVXBLZXljaGFpbigpCiB7CiAgICAgLy8g
Q2xlYW51cCB0aGUga2V5Y2hhaW4uCkBAIC0xNDEsNyArMTU1LDcgQEAgcHVibGljOgogICAgIHsK
ICAgICB9CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIGV2YWx1YXRlUG9saWN5RmFpbGVkKGlk
IHNlbGYsIFNFTCBfY21kLCBMQVBvbGljeSBwb2xpY3ksIE5TU3RyaW5nICogcmVhc29uLCB2b2lk
IChecmVwbHkpKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqZXJyb3IpKQorICAgIHN0YXRpYyB2b2lk
IGV2YWx1YXRlUG9saWN5RmFpbGVkKGlkLCBTRUwsIExBUG9saWN5LCBOU1N0cmluZyAqLCB2b2lk
IChecmVwbHkpKEJPT0wsIE5TRXJyb3IgKikpCiAgICAgewogICAgICAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFV
TFQsIDApLCBeewogICAgICAgICAgICAgVXRpbDo6c2xlZXAoMSk7IC8vIG1pbWljIHVzZXIgaW50
ZXJhY3Rpb24gZGVsYXkKQEAgLTE1OCw3ICsxNzIsNDEgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIGV2YWx1YXRlUG9saWN5UGFzc2VkKGlkIHNlbGYs
IFNFTCBfY21kLCBMQVBvbGljeSBwb2xpY3ksIE5TU3RyaW5nICogcmVhc29uLCB2b2lkIChecmVw
bHkpKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqZXJyb3IpKQorICAgIHN0YXRpYyB2b2lkIGV2YWx1
YXRlUG9saWN5UGFzc2VkKGlkLCBTRUwsIExBUG9saWN5LCBOU1N0cmluZyAqLCB2b2lkIChecmVw
bHkpKEJPT0wsIE5TRXJyb3IgKikpCisgICAgeworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDAp
LCBeeworICAgICAgICAgICAgVXRpbDo6c2xlZXAoMSk7IC8vIG1pbWljIHVzZXIgaW50ZXJhY3Rp
b24gZGVsYXkKKyAgICAgICAgICAgIHJlcGx5KFlFUywgbmlsKTsKKyAgICAgICAgfSk7CisgICAg
fQorICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgbV9zd2l6emxlcjsKK307CisKK2NsYXNzIExB
RXZhbHVhdGVBY2Nlc3NDb250cm9sRmFpbGVkU3dpenpsZXIgeworcHVibGljOgorICAgIExBRXZh
bHVhdGVBY2Nlc3NDb250cm9sRmFpbGVkU3dpenpsZXIoKQorICAgICAgICA6IG1fc3dpenpsZXIo
W0xBQ29udGV4dCBjbGFzc10sIEBzZWxlY3RvcihldmFsdWF0ZUFjY2Vzc0NvbnRyb2w6b3BlcmF0
aW9uOmxvY2FsaXplZFJlYXNvbjpyZXBseTopLCByZWludGVycHJldF9jYXN0PElNUD4oZXZhbHVh
dGVBY2Nlc3NDb250cm9sRmFpbGVkKSkKKyAgICB7CisgICAgfQorcHJpdmF0ZToKKyAgICBzdGF0
aWMgdm9pZCBldmFsdWF0ZUFjY2Vzc0NvbnRyb2xGYWlsZWQoaWQsIFNFTCwgU2VjQWNjZXNzQ29u
dHJvbFJlZiwgTEFBY2Nlc3NDb250cm9sT3BlcmF0aW9uLCBOU1N0cmluZyAqLCB2b2lkIChecmVw
bHkpKEJPT0wsIE5TRXJyb3IgKikpCisgICAgeworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDAp
LCBeeworICAgICAgICAgICAgVXRpbDo6c2xlZXAoMSk7IC8vIG1pbWljIHVzZXIgaW50ZXJhY3Rp
b24gZGVsYXkKKyAgICAgICAgICAgIHJlcGx5KE5PLCBuaWwpOworICAgICAgICB9KTsKKyAgICB9
CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBtX3N3aXp6bGVyOworfTsKKworY2xhc3MgTEFF
dmFsdWF0ZUFjY2Vzc0NvbnRyb2xQYXNzZWRTd2l6emxlciB7CitwdWJsaWM6CisgICAgTEFFdmFs
dWF0ZUFjY2Vzc0NvbnRyb2xQYXNzZWRTd2l6emxlcigpCisgICAgICAgIDogbV9zd2l6emxlcihb
TEFDb250ZXh0IGNsYXNzXSwgQHNlbGVjdG9yKGV2YWx1YXRlQWNjZXNzQ29udHJvbDpvcGVyYXRp
b246bG9jYWxpemVkUmVhc29uOnJlcGx5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihldmFsdWF0
ZUFjY2Vzc0NvbnRyb2xQYXNzZWQpKQorICAgIHsKKyAgICB9Citwcml2YXRlOgorICAgIHN0YXRp
YyB2b2lkIGV2YWx1YXRlQWNjZXNzQ29udHJvbFBhc3NlZChpZCwgU0VMLCBTZWNBY2Nlc3NDb250
cm9sUmVmLCBMQUFjY2Vzc0NvbnRyb2xPcGVyYXRpb24sIE5TU3RyaW5nICosIHZvaWQgKF5yZXBs
eSkoQk9PTCwgTlNFcnJvciAqKSkKICAgICB7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCks
IF57CiAgICAgICAgICAgICBVdGlsOjpzbGVlcCgxKTsgLy8gbWltaWMgdXNlciBpbnRlcmFjdGlv
biBkZWxheQpAQCAtMjM0LDE4ICsyODIsOCBAQCBURVNUKExvY2FsQXV0aGVudGljYXRvciwgTWFr
ZUNyZWRlbnRpYWxOb3RTdXBwb3J0ZWRQdWJLZXlDcmVkUGFyYW1zKQogCiBURVNUKExvY2FsQXV0
aGVudGljYXRvciwgTWFrZUNyZWRlbnRpYWxFeGNsdWRlQ3JlZGVudGlhbHNNYXRjaCkKIHsKLSAg
ICAvLyBJbnNlcnQgdGhlIHRlc3Qga2V5IGludG8gS2V5Y2hhaW4KLSAgICBhdXRvIGtleSA9IGdl
dFRlc3RLZXkoKTsKLSAgICBOU0RpY3Rpb25hcnkqIGFkZFF1ZXJ5ID0gQHsKLSAgICAgICAgKGlk
KWtTZWNWYWx1ZVJlZjogKGlkKWtleS5nZXQoKSwKLSAgICAgICAgKGlkKWtTZWNDbGFzczogKGlk
KWtTZWNDbGFzc0tleSwKLSAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IHRlc3RScElkLAotICAg
ICAgICAoaWQpa1NlY0F0dHJBcHBsaWNhdGlvblRhZzogW05TRGF0YSBkYXRhV2l0aEJ5dGVzOnRl
c3RVc2VyaGFuZGxlIGxlbmd0aDpzaXplb2YodGVzdFVzZXJoYW5kbGUpXSwKLSAgICB9OwotICAg
IE9TU3RhdHVzIHN0YXR1cyA9IFNlY0l0ZW1BZGQoKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZilh
ZGRRdWVyeSwgTlVMTCk7Ci0gICAgRVhQRUNUX0ZBTFNFKHN0YXR1cyk7CisgICAgYWRkVGVzdEtl
eVRvS2V5Y2hhaW4oKTsKIAotICAgIC8vIEludm9rZSB0aGUgTG9jYWxBdXRoZW50aWNhdG9yLgog
ICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAg
ICAgZGVzY3JpcHRvci50eXBlID0gV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1
YmxpY0tleTsKICAgICBXVEY6OmJhc2U2NERlY29kZSh0ZXN0Q3JlZGVudGlhbElkQmFzZTY0LCBk
ZXNjcmlwdG9yLmlkVmVjdG9yKTsKQEAgLTM1MCwxNSArMzg4LDcgQEAgVEVTVChMb2NhbEF1dGhl
bnRpY2F0b3IsIE1ha2VDcmVkZW50aWFsRGVsZXRlT2xkZXJDcmVkZW5pdGFsKQogICAgIExBRXZh
bHVhdGVQb2xpY3lQYXNzZWRTd2l6emxlciBldmFsdWF0ZVBvbGljeVBhc3NlZFN3aXp6bGVyOwog
CiAgICAgLy8gSW5zZXJ0IHRoZSBvbGRlciBjcmVkZW50aWFsCi0gICAgYXV0byBrZXkgPSBnZXRU
ZXN0S2V5KCk7Ci0gICAgTlNEaWN0aW9uYXJ5KiBhZGRRdWVyeSA9IEB7Ci0gICAgICAgIChpZClr
U2VjVmFsdWVSZWY6IChpZClrZXkuZ2V0KCksCi0gICAgICAgIChpZClrU2VjQ2xhc3M6IChpZClr
U2VjQ2xhc3NLZXksCi0gICAgICAgIChpZClrU2VjQXR0ckxhYmVsOiB0ZXN0UnBJZCwKLSAgICAg
ICAgKGlkKWtTZWNBdHRyQXBwbGljYXRpb25UYWc6IFtOU0RhdGEgZGF0YVdpdGhCeXRlczp0ZXN0
VXNlcmhhbmRsZSBsZW5ndGg6c2l6ZW9mKHRlc3RVc2VyaGFuZGxlKV0sCi0gICAgfTsKLSAgICBP
U1N0YXR1cyBzdGF0dXMgPSBTZWNJdGVtQWRkKChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpYWRk
UXVlcnksIE5VTEwpOwotICAgIEVYUEVDVF9GQUxTRShzdGF0dXMpOworICAgIGFkZFRlc3RLZXlU
b0tleWNoYWluKCk7CiAKICAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zIGNyZWF0aW9uT3B0aW9uczsKICAgICBjcmVhdGlvbk9wdGlvbnMucnAuaWQgPSB0ZXN0
UnBJZDsKQEAgLTQ3NSw3ICs1MDUsNyBAQCBURVNUKExvY2FsQXV0aGVudGljYXRvciwgTWFrZUNy
ZWRlbnRpYWxQYXNzZWRXaXRoU2VsZkF0dGVzdGF0aW9uKQogICAgICAgICBhdXRvJiB4NWMgPSBh
dHRTdG10LmZpbmQoY2Jvcjo6Q0JPUlZhbHVlKCJ4NWMiKSktPnNlY29uZC5nZXRBcnJheSgpOwog
ICAgICAgICBhdXRvJiBhdHRlc3RhdGlvbkNlcnRpZmljYXRlRGF0YSA9IHg1Y1swXS5nZXRCeXRl
U3RyaW5nKCk7CiAgICAgICAgIGF1dG8gYXR0ZXN0YXRpb25DZXJ0aWZpY2F0ZSA9IGFkb3B0Q0Yo
U2VjQ2VydGlmaWNhdGVDcmVhdGVXaXRoRGF0YShOVUxMLCAoX19icmlkZ2UgQ0ZEYXRhUmVmKVtO
U0RhdGEgZGF0YVdpdGhCeXRlczphdHRlc3RhdGlvbkNlcnRpZmljYXRlRGF0YS5kYXRhKCkgbGVu
Z3RoOmF0dGVzdGF0aW9uQ2VydGlmaWNhdGVEYXRhLnNpemUoKV0pKTsKLSAgICAgICAgQ0ZTdHJp
bmdSZWYgY29tbW9uTmFtZSA9IE5VTEw7CisgICAgICAgIENGU3RyaW5nUmVmIGNvbW1vbk5hbWUg
PSBudWxscHRyOwogICAgICAgICBzdGF0dXMgPSBTZWNDZXJ0aWZpY2F0ZUNvcHlDb21tb25OYW1l
KGF0dGVzdGF0aW9uQ2VydGlmaWNhdGUuZ2V0KCksICZjb21tb25OYW1lKTsKICAgICAgICAgYXV0
byByZXRhaW5Db21tb25OYW1lID0gYWRvcHRDRihjb21tb25OYW1lKTsKICAgICAgICAgQVNTRVJU
KCFzdGF0dXMpOwpAQCAtNDgzLDcgKzUxMyw3IEBAIFRFU1QoTG9jYWxBdXRoZW50aWNhdG9yLCBN
YWtlQ3JlZGVudGlhbFBhc3NlZFdpdGhTZWxmQXR0ZXN0YXRpb24pCiAKICAgICAgICAgYXV0byYg
YXR0ZXN0YXRpb25Jc3N1aW5nQ0FDZXJ0aWZpY2F0ZURhdGEgPSB4NWNbMV0uZ2V0Qnl0ZVN0cmlu
ZygpOwogICAgICAgICBhdXRvIGF0dGVzdGF0aW9uSXNzdWluZ0NBQ2VydGlmaWNhdGUgPSBhZG9w
dENGKFNlY0NlcnRpZmljYXRlQ3JlYXRlV2l0aERhdGEoTlVMTCwgKF9fYnJpZGdlIENGRGF0YVJl
ZilbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6YXR0ZXN0YXRpb25Jc3N1aW5nQ0FDZXJ0aWZpY2F0ZURh
dGEuZGF0YSgpIGxlbmd0aDphdHRlc3RhdGlvbklzc3VpbmdDQUNlcnRpZmljYXRlRGF0YS5zaXpl
KCldKSk7Ci0gICAgICAgIGNvbW1vbk5hbWUgPSBOVUxMOworICAgICAgICBjb21tb25OYW1lID0g
bnVsbHB0cjsKICAgICAgICAgc3RhdHVzID0gU2VjQ2VydGlmaWNhdGVDb3B5Q29tbW9uTmFtZShh
dHRlc3RhdGlvbklzc3VpbmdDQUNlcnRpZmljYXRlLmdldCgpLCAmY29tbW9uTmFtZSk7CiAgICAg
ICAgIHJldGFpbkNvbW1vbk5hbWUgPSBhZG9wdENGKGNvbW1vbk5hbWUpOwogICAgICAgICBBU1NF
UlQoIXN0YXR1cyk7CkBAIC01MDMsNiArNTMzLDE5OSBAQCBURVNUKExvY2FsQXV0aGVudGljYXRv
ciwgTWFrZUNyZWRlbnRpYWxQYXNzZWRXaXRoU2VsZkF0dGVzdGF0aW9uKQogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiB9CiAKK1RFU1QoTG9jYWxBdXRoZW50aWNhdG9yLCBH
ZXRBc3NlcnRpb25BbGxvd0NyZWRlbnRpYWxzTWlzbWF0Y2gxKQoreworICAgIC8vIFRyYW5zcG9y
dHMgbWlzbWF0Y2hlZAorICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
IGRlc2NyaXB0b3I7CisgICAgZGVzY3JpcHRvci50eXBlID0gV2ViQ29yZTo6UHVibGljS2V5Q3Jl
ZGVudGlhbFR5cGU6OlB1YmxpY0tleTsKKyAgICBkZXNjcmlwdG9yLnRyYW5zcG9ydHMuYXBwZW5k
KFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjpBdXRoZW50aWNhdG9yVHJh
bnNwb3J0OjpVc2IpOworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucyByZXF1ZXN0T3B0aW9uczsKKyAgICByZXF1ZXN0T3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxz
LmFwcGVuZChXVEZNb3ZlKGRlc2NyaXB0b3IpKTsKKworICAgIGJvb2wgZG9uZSA9IGZhbHNlOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXN0TG9jYWxBdXRoZW50aWNhdG9yPiBhdXRoZW50aWNhdG9y
ID0gc3RkOjptYWtlX3VuaXF1ZTxUZXN0TG9jYWxBdXRoZW50aWNhdG9yPigpOworICAgIGF1dG8g
Y2FsbGJhY2sgPSBbJmRvbmVdIChjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
KSB7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0cnVlKTsKKyAgICAgICAgZG9uZSA9IHRydWU7Cisg
ICAgfTsKKyAgICBhdXRvIGV4Y2VwdGlvbkNhbGxiYWNrID0gWyZkb25lXSAoY29uc3QgV2ViQ29y
ZTo6RXhjZXB0aW9uRGF0YSYgZXhjZXB0aW9uKSBtdXRhYmxlIHsKKyAgICAgICAgRVhQRUNUX0VR
KFdlYkNvcmU6Ok5vdEFsbG93ZWRFcnJvciwgZXhjZXB0aW9uLmNvZGUpOworICAgICAgICBFWFBF
Q1RfU1RSRVEoIk5vIG1hdGNoZWQgY3JlZGVudGlhbHMgYXJlIGZvdW5kIGluIHRoZSBwbGF0Zm9y
bSBhdHRhY2hlZCBhdXRoZW50aWNhdG9yLiIsIGV4Y2VwdGlvbi5tZXNzYWdlLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfTsKKyAgICBhdXRoZW50aWNhdG9yLT5n
ZXRBc3NlcnRpb24oeyB9LCByZXF1ZXN0T3B0aW9ucywgV1RGTW92ZShjYWxsYmFjayksIFdURk1v
dmUoZXhjZXB0aW9uQ2FsbGJhY2spKTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZG9uZSk7Cit9CisKK1RFU1QoTG9jYWxBdXRoZW50aWNhdG9yLCBHZXRBc3NlcnRpb25BbGxvd0Ny
ZWRlbnRpYWxzTWlzbWF0Y2gyKQoreworICAgIC8vIE5vIGV4aXN0aW5nIGNyZWRlbnRpYWwKKyAg
ICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgcmVxdWVzdE9wdGlv
bnM7CisgICAgcmVxdWVzdE9wdGlvbnMucnBJZCA9IHRlc3RScElkOworCisgICAgYm9vbCBkb25l
ID0gZmFsc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRlc3RMb2NhbEF1dGhlbnRpY2F0b3I+IGF1
dGhlbnRpY2F0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPFRlc3RMb2NhbEF1dGhlbnRpY2F0b3I+KCk7
CisgICAgYXV0byBjYWxsYmFjayA9IFsmZG9uZV0gKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYpIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRydWUpOworICAgICAgICBkb25l
ID0gdHJ1ZTsKKyAgICB9OworICAgIGF1dG8gZXhjZXB0aW9uQ2FsbGJhY2sgPSBbJmRvbmVdIChj
b25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiBleGNlcHRpb24pIG11dGFibGUgeworICAgICAg
ICBFWFBFQ1RfRVEoV2ViQ29yZTo6Tm90QWxsb3dlZEVycm9yLCBleGNlcHRpb24uY29kZSk7Cisg
ICAgICAgIEVYUEVDVF9TVFJFUSgiTm8gbWF0Y2hlZCBjcmVkZW50aWFscyBhcmUgZm91bmQgaW4g
dGhlIHBsYXRmb3JtIGF0dGFjaGVkIGF1dGhlbnRpY2F0b3IuIiwgZXhjZXB0aW9uLm1lc3NhZ2Uu
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9OworICAgIGF1dGhl
bnRpY2F0b3ItPmdldEFzc2VydGlvbih7IH0sIHJlcXVlc3RPcHRpb25zLCBXVEZNb3ZlKGNhbGxi
YWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjaykpOworCisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKK30KKworVEVTVChMb2NhbEF1dGhlbnRpY2F0b3IsIEdldEFzc2Vy
dGlvbkFsbG93Q3JlZGVudGlhbHNNaXNtYXRjaDMpCit7CisgICAgLy8gQ3JlZGVudGlhbCBJRCBt
aXNtYXRjaGVkCisgICAgYWRkVGVzdEtleVRvS2V5Y2hhaW4oKTsKKworICAgIFdlYkNvcmU6OlB1
YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgZGVzY3JpcHRvci50
eXBlID0gV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleTsKKyAgICBX
VEY6OmJhc2U2NERlY29kZSh0ZXN0Q3JlZGVudGlhbElkQmFzZTY0LCBkZXNjcmlwdG9yLmlkVmVj
dG9yKTsKKyAgICBkZXNjcmlwdG9yLmlkVmVjdG9yWzE5XSA9IDA7IC8vIG51a2UgdGhlIGxhc3Qg
Ynl0ZS4KKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgcmVx
dWVzdE9wdGlvbnM7CisgICAgcmVxdWVzdE9wdGlvbnMucnBJZCA9IHRlc3RScElkOworICAgIHJl
cXVlc3RPcHRpb25zLmFsbG93Q3JlZGVudGlhbHMuYXBwZW5kKGRlc2NyaXB0b3IpOworCisgICAg
Ym9vbCBkb25lID0gZmFsc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRlc3RMb2NhbEF1dGhlbnRp
Y2F0b3I+IGF1dGhlbnRpY2F0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPFRlc3RMb2NhbEF1dGhlbnRp
Y2F0b3I+KCk7CisgICAgYXV0byBjYWxsYmFjayA9IFsmZG9uZV0gKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYpIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRydWUpOworICAg
ICAgICBjbGVhblVwS2V5Y2hhaW4oKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfTsKKyAg
ICBhdXRvIGV4Y2VwdGlvbkNhbGxiYWNrID0gWyZkb25lXSAoY29uc3QgV2ViQ29yZTo6RXhjZXB0
aW9uRGF0YSYgZXhjZXB0aW9uKSBtdXRhYmxlIHsKKyAgICAgICAgRVhQRUNUX0VRKFdlYkNvcmU6
Ok5vdEFsbG93ZWRFcnJvciwgZXhjZXB0aW9uLmNvZGUpOworICAgICAgICBFWFBFQ1RfU1RSRVEo
Ik5vIG1hdGNoZWQgY3JlZGVudGlhbHMgYXJlIGZvdW5kIGluIHRoZSBwbGF0Zm9ybSBhdHRhY2hl
ZCBhdXRoZW50aWNhdG9yLiIsIGV4Y2VwdGlvbi5tZXNzYWdlLmFzY2lpKCkuZGF0YSgpKTsKKyAg
ICAgICAgY2xlYW5VcEtleWNoYWluKCk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH07Cisg
ICAgYXV0aGVudGljYXRvci0+Z2V0QXNzZXJ0aW9uKHsgfSwgcmVxdWVzdE9wdGlvbnMsIFdURk1v
dmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSk7CisKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworfQorCitURVNUKExvY2FsQXV0aGVudGljYXRvciwg
R2V0QXNzZXJ0aW9uQmlvbWV0cmljc05vdEVucm9sbGVkKQoreworICAgIExBQ2FudEV2YWx1YXRl
UG9saWN5U3dpenpsZXIgc3dpenpsZXI7CisKKyAgICBhZGRUZXN0S2V5VG9LZXljaGFpbigpOwor
CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHJlcXVlc3RP
cHRpb25zOworICAgIHJlcXVlc3RPcHRpb25zLnJwSWQgPSB0ZXN0UnBJZDsKKworICAgIGJvb2wg
ZG9uZSA9IGZhbHNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXN0TG9jYWxBdXRoZW50aWNhdG9y
PiBhdXRoZW50aWNhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxUZXN0TG9jYWxBdXRoZW50aWNhdG9y
PigpOworICAgIGF1dG8gY2FsbGJhY2sgPSBbJmRvbmVdIChjb25zdCBWZWN0b3I8dWludDhfdD4m
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mKSB7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0cnVlKTsKKyAgICAgICAg
Y2xlYW5VcEtleWNoYWluKCk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH07CisgICAgYXV0
byBleGNlcHRpb25DYWxsYmFjayA9IFsmZG9uZV0gKGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRh
dGEmIGV4Y2VwdGlvbikgbXV0YWJsZSB7CisgICAgICAgIEVYUEVDVF9FUShXZWJDb3JlOjpOb3RB
bGxvd2VkRXJyb3IsIGV4Y2VwdGlvbi5jb2RlKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJObyBh
dmFsaWFibGUgYXV0aGVudGljYXRvcnMuIiwgZXhjZXB0aW9uLm1lc3NhZ2UuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICBjbGVhblVwS2V5Y2hhaW4oKTsKKyAgICAgICAgZG9uZSA9IHRydWU7Cisg
ICAgfTsKKyAgICBhdXRoZW50aWNhdG9yLT5nZXRBc3NlcnRpb24oeyB9LCByZXF1ZXN0T3B0aW9u
cywgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spKTsKKworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Cit9CisKK1RFU1QoTG9jYWxBdXRoZW50
aWNhdG9yLCBHZXRBc3NlcnRpb25CaW9tZXRyaWNzTm90QXV0aGVudGljYXRlZCkKK3sKKyAgICBM
QUNhbkV2YWx1YXRlUG9saWN5U3dpenpsZXIgY2FuRXZhbHVhdGVQb2xpY3lTd2l6emxlcjsKKyAg
ICBMQUV2YWx1YXRlQWNjZXNzQ29udHJvbEZhaWxlZFN3aXp6bGVyIGV2YWx1YXRlQWNjZXNzQ29u
dHJvbEZhaWxlZFN3aXp6bGVyOworCisgICAgYWRkVGVzdEtleVRvS2V5Y2hhaW4oKTsKKworICAg
IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyByZXF1ZXN0T3B0aW9u
czsKKyAgICByZXF1ZXN0T3B0aW9ucy5ycElkID0gdGVzdFJwSWQ7CisKKyAgICBib29sIGRvbmUg
PSBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVzdExvY2FsQXV0aGVudGljYXRvcj4gYXV0
aGVudGljYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8VGVzdExvY2FsQXV0aGVudGljYXRvcj4oKTsK
KyAgICBhdXRvIGNhbGxiYWNrID0gWyZkb25lXSAoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JikgeworICAgICAgICBFWFBFQ1RfRkFMU0UodHJ1ZSk7CisgICAgICAgIGNsZWFu
VXBLZXljaGFpbigpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9OworICAgIGF1dG8gZXhj
ZXB0aW9uQ2FsbGJhY2sgPSBbJmRvbmVdIChjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiBl
eGNlcHRpb24pIG11dGFibGUgeworICAgICAgICBFWFBFQ1RfRVEoV2ViQ29yZTo6Tm90QWxsb3dl
ZEVycm9yLCBleGNlcHRpb24uY29kZSk7CisgICAgICAgIEVYUEVDVF9TVFJFUSgiQ291bGRuJ3Qg
Z2V0IHVzZXIgY29uc2VudC4iLCBleGNlcHRpb24ubWVzc2FnZS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgICAgIGNsZWFuVXBLZXljaGFpbigpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9Owor
ICAgIGF1dGhlbnRpY2F0b3ItPmdldEFzc2VydGlvbih7IH0sIHJlcXVlc3RPcHRpb25zLCBXVEZN
b3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjaykpOworCisgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKK30KKworVEVTVChMb2NhbEF1dGhlbnRpY2F0b3Is
IEdldEFzc2VydGlvblBhc3NlZCkKK3sKKyAgICBMQUNhbkV2YWx1YXRlUG9saWN5U3dpenpsZXIg
Y2FuRXZhbHVhdGVQb2xpY3lTd2l6emxlcjsKKyAgICBMQUV2YWx1YXRlQWNjZXNzQ29udHJvbFBh
c3NlZFN3aXp6bGVyIGV2YWx1YXRlQWNjZXNzQ29udHJvbFBhc3NlZFN3aXp6bGVyOworCisgICAg
YWRkVGVzdEtleVRvS2V5Y2hhaW4oKTsKKworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRp
YWxSZXF1ZXN0T3B0aW9ucyByZXF1ZXN0T3B0aW9uczsKKyAgICByZXF1ZXN0T3B0aW9ucy5ycElk
ID0gdGVzdFJwSWQ7CisKKyAgICBWZWN0b3I8dWludDhfdD4gaGFzaCgzMik7CisKKyAgICBib29s
IGRvbmUgPSBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVzdExvY2FsQXV0aGVudGljYXRv
cj4gYXV0aGVudGljYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8VGVzdExvY2FsQXV0aGVudGljYXRv
cj4oKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gWyZkb25lLCBoYXNoXSAoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBjcmVkZW50aWFsSWQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYXV0aERhdGEsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHVz
ZXJoYW5kbGUpIHsKKyAgICAgICAgLy8gQ2hlY2sgQ3JlZGVudGlhbCBJRAorICAgICAgICBFWFBF
Q1RfVFJVRShXVEY6OmJhc2U2NEVuY29kZShjcmVkZW50aWFsSWQuZGF0YSgpLCBjcmVkZW50aWFs
SWQuc2l6ZSgpKSA9PSB0ZXN0Q3JlZGVudGlhbElkQmFzZTY0KTsKKworICAgICAgICAvLyBDaGVj
ayBBdXRoZW50aWNhdG9yIERhdGEuCisgICAgICAgIHNpemVfdCBwb3MgPSAwOworICAgICAgICB1
aW50OF90IGV4cGVjdGVkUnBJZEhhc2hbXSA9IHsKKyAgICAgICAgICAgIDB4NDksIDB4OTYsIDB4
MGQsIDB4ZTUsIDB4ODgsIDB4MGUsIDB4OGMsIDB4NjgsCisgICAgICAgICAgICAweDc0LCAweDM0
LCAweDE3LCAweDBmLCAweDY0LCAweDc2LCAweDYwLCAweDViLAorICAgICAgICAgICAgMHg4Ziwg
MHhlNCwgMHhhZSwgMHhiOSwgMHhhMiwgMHg4NiwgMHgzMiwgMHhjNywKKyAgICAgICAgICAgIDB4
OTksIDB4NWMsIDB4ZjMsIDB4YmEsIDB4ODMsIDB4MWQsIDB4OTcsIDB4NjMKKyAgICAgICAgfTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKG1lbWNtcChhdXRoRGF0YS5kYXRhKCkgKyBwb3MsIGV4cGVj
dGVkUnBJZEhhc2gsIHNpemVvZihleHBlY3RlZFJwSWRIYXNoKSkpOworICAgICAgICBwb3MgKz0g
c2l6ZW9mKGV4cGVjdGVkUnBJZEhhc2gpOworCisgICAgICAgIC8vIEZMQUdTCisgICAgICAgIEVY
UEVDVF9FUSg1LCBhdXRoRGF0YVtwb3NdKTsKKyAgICAgICAgcG9zKys7CisKKyAgICAgICAgdWlu
dDMyX3QgY291bnRlciA9IC0xOworICAgICAgICBtZW1jcHkoJmNvdW50ZXIsIGF1dGhEYXRhLmRh
dGEoKSArIHBvcywgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgY291
bnRlcik7CisKKyAgICAgICAgLy8gQ2hlY2sgc2lnbmF0dXJlCisgICAgICAgIGF1dG8gcHJpdmF0
ZUtleSA9IGdldFRlc3RLZXkoKTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGFUb1NpZ24o
YXV0aERhdGEpOworICAgICAgICBkYXRhVG9TaWduLmFwcGVuZFZlY3RvcihoYXNoKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoU2VjS2V5VmVyaWZ5U2lnbmF0dXJlKFNlY0tleUNvcHlQdWJsaWNLZXko
cHJpdmF0ZUtleS5nZXQoKSksIGtTZWNLZXlBbGdvcml0aG1FQ0RTQVNpZ25hdHVyZU1lc3NhZ2VY
OTYyU0hBMjU2LCAoX19icmlkZ2UgQ0ZEYXRhUmVmKVtOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRh
VG9TaWduLmRhdGEoKSBsZW5ndGg6ZGF0YVRvU2lnbi5zaXplKCldLCAoX19icmlkZ2UgQ0ZEYXRh
UmVmKVtOU0RhdGEgZGF0YVdpdGhCeXRlczpzaWduYXR1cmUuZGF0YSgpIGxlbmd0aDpzaWduYXR1
cmUuc2l6ZSgpXSwgTlVMTCkpOworCisgICAgICAgIC8vIENoZWNrIFVzZXIgSGFuZGxlCisgICAg
ICAgIEVYUEVDVF9FUSh1c2VyaGFuZGxlLnNpemUoKSwgc2l6ZW9mKHRlc3RVc2VyaGFuZGxlKSk7
CisgICAgICAgIEVYUEVDVF9GQUxTRShtZW1jbXAodXNlcmhhbmRsZS5kYXRhKCksIHRlc3RVc2Vy
aGFuZGxlLCBzaXplb2YodGVzdFVzZXJoYW5kbGUpKSk7CisKKyAgICAgICAgY2xlYW5VcEtleWNo
YWluKCk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH07CisgICAgYXV0byBleGNlcHRpb25D
YWxsYmFjayA9IFsmZG9uZV0gKGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlv
bikgbXV0YWJsZSB7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0cnVlKTsKKyAgICAgICAgY2xlYW5V
cEtleWNoYWluKCk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH07CisgICAgYXV0aGVudGlj
YXRvci0+Z2V0QXNzZXJ0aW9uKGhhc2gsIHJlcXVlc3RPcHRpb25zLCBXVEZNb3ZlKGNhbGxiYWNr
KSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjaykpOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQogCiAjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336615</attachid>
            <date>2018-03-27 13:25:59 -0700</date>
            <delta_ts>2018-03-27 15:42:50 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-183881-20180327132559.patch</filename>
            <type>text/plain</type>
            <size>61434</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5NzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzhiMjU0NTk2YTU5YTI0
NzkyMzJiMjhmMzk4MzEyODFlMDJlY2YwMy4uOWNkM2QxMjgwOWZkOGFlZTY2MDAxMWU3YzdlMTQw
YmM2OTZjNThjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE4LTAzLTIxICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhOXSBJbXBs
ZW1lbnQgYXV0aGVudGljYXRvckdldEFzc2VydGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzODgxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
NzI1ODYyOD4KKworICAgICAgICBSZXZpZXdlZCBieSBCcmVudCBGdWxnaGFtLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggZG9lcyB0aGUgZm9sbG93aW5nIGZldyB0aGluZ3M6CisgICAgICAgIDEpIEl0
IGltcGxlbWVudHMgdGhlIHNwZWM6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8jb3At
Z2V0LWFzc2VydGlvbiBhcyBvZiA1IERlY2VtYmVyIDIwMTcuCisgICAgICAgIDIpIEl0IHR3ZWFr
cyBlbmNvZGluZy9kZWNvZGluZyBvZiBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMg
c3VjaCB0aGF0IG9wdGlvbnMgY2FuIGJlIHBhc3NlZAorICAgICAgICBiZXR3ZWVuIFVJIGFuZCBX
ZWIgcHJvY2Vzc2VzLgorICAgICAgICAzKSBJdCByZWZpbmVzIHRoZSB3YXkgaG93IExvY2FsQXV0
aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwgZmluZCBpbnRlcnNlY3Rpb24gYmV0d2VlbgorICAg
ICAgICBleGNsdWRlQ3JlZGVudGlhbERlc2NyaXB0b3JMaXN0IGFuZCBleGlzdGluZyBjcmVkZW50
aWFscyBpbiB0aGUgYXV0aGVudGljYXRvciwgc3VjaCB0aGF0IGl0IGlzIGZhc3Rlci4KKyAgICAg
ICAgQmFzaWNhbGx5LCBpdCB0YWtlcyB0aGUgQ3JlZGVudGlhbElEIGZyb20gdGhlIGxpc3QgYW5k
IHRyZWF0IGl0IGFzIGFuIEFTQ0lJIHN0cmluZyBhbmQgcHV0IGl0IGludG8gYQorICAgICAgICBI
YXNoU2V0PFN0cmluZz4uIEl0IHNob3VsZCBub3QgbWF0dGVyIGlmIGEgZHVwbGljYXRlZCBDcmVk
ZW50aWFsSUQgaXMgYWRkZWQuIElmIHRoZSBoYXNoIHNldCBpcyBub3QKKyAgICAgICAgZW1wdHks
IHRoZSBhbGdvcml0aG0gdGhlbiBxdWVyaWVzIEtleWNoYWluIGZvciBhbGwgQ3JlZGVudGlhbElE
cyByZWxhdGVkIHRvIHRoZSBjdXJyZW50IFJQIElEIG9uY2UuCisgICAgICAgIEZvciBldmVyeSBx
dWVyaWVkIENyZWRlbnRpYWxJRCwgdGhlIGFsZ29yaXRobSB0aGVuIHRyZWF0cyBpdCBhcyBhbiBB
U0NJSSBzdHJpbmcgYXMgd2VsbCBhbmQgbG9vayBmb3IKKyAgICAgICAgYSBtYXRjaCBpbiB0aGUg
aGFzaCBzZXQgdG8gcHJvZHVjZSB0aGUgaW50ZXJzZXRjdGlvbi4gVGhlIG5ldyB3YXkgaXMgYWxz
byBlbXBsb3llZCBpbgorICAgICAgICBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbiBh
cyB3ZWxsLgorICAgICAgICA0KSBJdCBhYnN0cmFjdHMgdGhlIHdheSB0byBwcm9kdWNlIGF1dGhE
YXRhIGFuZCB0aHVzIHJlb3JkZXJzIGEgYml0IG9mIGNvZGUgaW4KKyAgICAgICAgTG9jYWxBdXRo
ZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbC4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0
cy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvck1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGljYXRvck1hbmFnZXI6OmNyZWF0ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpBdXRoZW50aWNhdG9yTWFuYWdlcjo6ZGlzY292ZXJGcm9tRXh0
ZXJuYWxTb3VyY2UgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4v
UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM6OmRlY29kZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9jb2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL2NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsQXV0aGVudGljYXRvckludGVybmFsOjpidWlsZEF1dGhEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQXV0aGVudGljYXRvckludGVybmFsOjpwcm9kdWNl
SGFzaFNldCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVk
ZW50aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQXV0aGVudGljYXRvcjo6aXNzdWVDbGllbnRD
ZXJ0aWZpY2F0ZSBjb25zdCk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorCiAyMDE4LTAzLTE5ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYW5vdGhlciBxdWljayBmaXggZm9yIHIyMjk2OTkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggNzEwYTdmZGMyNjBkNGMwMjNhZDEzYWVlMjgxN2MzMDliNmQ5Y2RmMi4uMzQxMTU2
OWU3MTY4NzdhM2E4Y2QyMmM4OTBjZGQyZDM4ZTViNWYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MyBAQAorMjAxOC0wMy0yMSAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFtXZWJBdXRoTl0gSW1wbGVtZW50IGF1dGhlbnRpY2F0b3JHZXRBc3NlcnRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzg4MQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMzcyNTg2Mjg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJl
bnQgRnVsZ2hhbS4KKworICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3Nl
bmdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQ
cm94eTo6bWFrZUNyZWRlbnRpYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJDcmVkZW50aWFsc01l
c3NlbmdlclByb3h5OjpnZXRBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJDcmVkZW50
aWFsc01lc3NlbmdlclByb3h5OjpnZXRBc3NlcnRpb25SZXBseSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHkuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNN
ZXNzZW5nZXJQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0NyZWRlbnRp
YWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQ3JlZGVudGlhbHNNZXNzZW5nZXI6OmdldEFzc2VydGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyOjpnZXRBc3NlcnRpb25SZXBseSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3Nlbmdl
ci5tZXNzYWdlcy5pbjoKKwogMjAxOC0wMy0xOSAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGFub3RoZXIgcXVpY2sgZml4IGZvciByMjI5
Njk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRp
Y2F0b3JNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVu
dGljYXRvck1hbmFnZXIuY3BwCmluZGV4IGUyMmM0OTM5NzQxNjg5NzUyYzdjNjAyY2M5MzViMGRi
ODczNGJmZmMuLjdlZTJhZmM5MmJlODM4YTI5OTg5ZDgyZDZkZmYwMDczODQ1NDUxZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvck1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRv
ck1hbmFnZXIuY3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBBdXRoZW50aWNhdG9yTWFuYWdl
cjo6Y3JlYXRlKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBjYWxsZXJPcmlnaW4sIGNvbnN0IFB1YmwK
ICAgICAvLyBTdGVwIDE4LTIxLgogICAgIC8vIE9ubHkgcGxhdGZvcm0gYXR0YWNobWVudHMgd2ls
bCBiZSBzdXBwb3J0ZWQgYXQgdGhpcyBzdGFnZS4gQXNzdW1pbmcgb25lIGF1dGhlbnRpY2F0b3Ig
cGVyIGRldmljZS4KICAgICAvLyBBbHNvLCByZXNpZGVudCBrZXlzLCB1c2VyIHZlcmlmaWNhdGlv
bnMgYW5kIGRpcmVjdCBhdHRlc3RhdGlvbiBhcmUgZW5mb3JjZWQgYXQgdGhpcyB0YWdlLgotICAg
IC8vIEZvciBiZXR0ZXIgcGVyZm9ybWFuY2UsIG5vIGZpbHRlcmluZyBpcyBkb25lIGhlcmUgcmVn
YXJkaW5nIHRvIG9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzLgorICAgIC8vIEZvciBiZXR0ZXIg
cGVyZm9ybWFuY2UsIHRyYW5zcG9ydHMgb2Ygb3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMgYXJl
IGNoZWNrZWQgaW4gTG9jYWxBdXRoZW50aWNhdG9yLgogICAgIGlmICghbV9tZXNzZW5nZXIpICB7
CiAgICAgICAgIHByb21pc2UucmVqZWN0KEV4Y2VwdGlvbiB7IFVua25vd25FcnJvciwgQVNDSUlM
aXRlcmFsKCJVbmtub3duIGludGVybmFsIGVycm9yLiIpIH0pOwogICAgICAgICByZXR1cm47CkBA
IC0yMTksNyArMjE5LDcgQEAgdm9pZCBBdXRoZW50aWNhdG9yTWFuYWdlcjo6ZGlzY292ZXJGcm9t
RXh0ZXJuYWxTb3VyY2UoY29uc3QgU2VjdXJpdHlPcmlnaW4mIGNhbGwKICAgICAvLyBTdGVwIDE0
LTE1LCAxNy0xOS4KICAgICAvLyBPbmx5IHBsYXRmb3JtIGF0dGFjaG1lbnRzIHdpbGwgYmUgc3Vw
cG9ydGVkIGF0IHRoaXMgc3RhZ2UuIEFzc3VtaW5nIG9uZSBhdXRoZW50aWNhdG9yIHBlciBkZXZp
Y2UuCiAgICAgLy8gQWxzbywgcmVzaWRlbnQga2V5cywgdXNlciB2ZXJpZmljYXRpb25zIGFuZCBk
aXJlY3QgYXR0ZXN0YXRpb24gYXJlIGVuZm9yY2VkIGF0IHRoaXMgdGFnZS4KLSAgICAvLyBGb3Ig
YmV0dGVyIHBlcmZvcm1hbmNlLCBubyBmaWx0ZXJpbmcgaXMgZG9uZSBoZXJlIHJlZ2FyZGluZyB0
byBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMuCisgICAgLy8gRm9yIGJldHRlciBwZXJmb3JtYW5j
ZSwgZmlsdGVyaW5nIG9mIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyBpcyBkb25lIGluIExvY2Fs
QXV0aGVudGljYXRvci4KICAgICBpZiAoIW1fbWVzc2VuZ2VyKSAgewogICAgICAgICBwcm9taXNl
LnJlamVjdChFeGNlcHRpb24geyBVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5rbm93biBp
bnRlcm5hbCBlcnJvci4iKSB9KTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnMuaAppbmRleCA0OTVkNThiMTc0MWEzNTlhOTYxMDkyZjUzY2Q2Yzhh
ZGUzMjM0Y2FmLi43NjBlOGZkYTVmMWU3NTE3N2NlZmVmNzUxNTg2ZWFiNDk0MDQzM2M4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhu
L1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaApAQCAtNDcsNyArNDcsNyBAQCBz
dHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7CiAKICAgICBzdHJ1Y3Qg
VXNlckVudGl0eSA6IHB1YmxpYyBFbnRpdHkgewogICAgICAgICBCdWZmZXJTb3VyY2UgaWQ7IC8v
IGlkIGJlY29tZXMgaWRWZWN0b3Igb25jZSBpdCBpcyBwYXNzZWQgdG8gVUlQcm9jZXNzLgotICAg
ICAgICBtdXRhYmxlIFZlY3Rvcjx1aW50OF90PiBpZFZlY3RvcjsKKyAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGlkVmVjdG9yOwogICAgICAgICBTdHJpbmcgZGlzcGxheU5hbWU7CiAgICAgfTsKIApA
QCAtMTQwLDcgKzE0MCw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFz
ZTxmYWxzZSwgZmFsc2UsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpCiAgICAgICAgIHJlc3Vs
dC51c2VyLm5hbWUgPSBzb3VyY2UudXNlci5uYW1lLmlzb2xhdGVkQ29weSgpOwogICAgICAgICBy
ZXN1bHQudXNlci5pY29uID0gc291cmNlLnVzZXIuaWNvbi5pc29sYXRlZENvcHkoKTsKICAgICAg
ICAgcmVzdWx0LnVzZXIuZGlzcGxheU5hbWUgPSBzb3VyY2UudXNlci5kaXNwbGF5TmFtZS5pc29s
YXRlZENvcHkoKTsKLSAgICAgICAgcmVzdWx0LnVzZXIuaWRWZWN0b3IgPSBXVEZNb3ZlKHNvdXJj
ZS51c2VyLmlkVmVjdG9yKTsKKyAgICAgICAgcmVzdWx0LnVzZXIuaWRWZWN0b3IgPSBzb3VyY2Uu
dXNlci5pZFZlY3RvcjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFs
UmVxdWVzdE9wdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKaW5kZXggMWU1ODU1MTJjODUzMjg5NDMzYjEx
YzdlZDAzY2MyZjhmZGEzMmUzNS4uZjAxM2IyYmFhOTNmMGRkMWFkZDAzMDA4MDAwMjNhYTA1YTMw
NjBjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCkBAIC0zOCw4ICsz
OCwyOSBAQCBzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHsKICAgICBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkIGxvbmc+IHRpbWVvdXQ7CiAgICAgbXV0YWJsZSBTdHJpbmcg
cnBJZDsKICAgICBWZWN0b3I8UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+IGFsbG93Q3Jl
ZGVudGlhbHM7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPiBkZWNvZGUoRGVjb2RlciYp
OwogfTsKIAorLy8gTm90IGV2ZXJ5IG1lbWJlciBpcyBlbmNvZGVkLgordGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KK3ZvaWQgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHJwSWQgPDwgYWxsb3dD
cmVkZW50aWFsczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8
UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPiBQdWJsaWNLZXlDcmVkZW50aWFsUmVx
dWVzdE9wdGlvbnM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIFB1YmxpY0tleUNy
ZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyByZXN1bHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQucnBJZCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuYWxsb3dDcmVkZW50aWFscykpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXV0aG4vY29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2NvY29hL0xvY2FsQXV0aGVudGljYXRvci5oCmluZGV4
IDNlNTY2OGY2NmQzZWIyM2Q5YTJlN2RlNDRiMWMyYzFjZGNlZGUzNTcuLjcyZDAxMmEwNThlZThm
NzQ5ZmVlMjgwMGVjMjc3MmIzYjA4ODRkYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXV0aG4vY29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jb2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IuaApAQCAtMzUs
OCArMzUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgRXhjZXB0aW9uRGF0YTsK
IHN0cnVjdCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOworc3RydWN0IFB1Ymxp
Y0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczsKIAogdXNpbmcgQ3JlYXRpb25DYWxsYmFjayA9
IEZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+Jik+OwordXNpbmcgUmVxdWVzdENhbGxiYWNrID0gRnVuY3Rpb248dm9pZChjb25zdCBWZWN0
b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhf
dD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mKT47CiB1c2luZyBFeGNlcHRpb25DYWxsYmFjayA9
IEZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSYpPjsKIAogdHlwZWRl
ZiB2b2lkICheQ29tcGxldGlvbkJsb2NrKShTZWNLZXlSZWYgX051bGxhYmxlIHJlZmVyZW5jZUtl
eSwgTlNBcnJheSAqIF9OdWxsYWJsZSBjZXJ0aWZpY2F0ZXMsIE5TRXJyb3IgKiBfTnVsbGFibGUg
ZXJyb3IpOwpAQCAtNDksNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+TG9jYWxBdXRo
ZW50aWNhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgdm9pZCBtYWtlQ3JlZGVudGlhbChjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMmLCBDcmVhdGlvbkNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYpOworICAgIHZv
aWQgZ2V0QXNzZXJ0aW9uKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJiwgUmVxdWVzdENhbGxiYWNrJiYsIEV4Y2VwdGlv
bkNhbGxiYWNrJiYpOwogICAgIGJvb2wgaXNBdmFpbGFibGUoKSBjb25zdDsKIAogcHJvdGVjdGVk
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jb2NvYS9Mb2Nh
bEF1dGhlbnRpY2F0b3IubW0gYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2NvY29h
L0xvY2FsQXV0aGVudGljYXRvci5tbQppbmRleCA5NWRmNWU2NmY2OGNlNDdlNDVlNTZkMDk2MjA4
NThhZGRiYjU5ZWJlLi5hMWVjY2NjZTZkZjBjZGYxMWI1ZDk5MTVmNmM1MTYwMGIzN2E1YWRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2NvY29hL0xvY2FsQXV0
aGVudGljYXRvci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2NvY29h
L0xvY2FsQXV0aGVudGljYXRvci5tbQpAQCAtMzIsMTMgKzMyLDE2IEBACiAjaW1wb3J0ICJDT1NF
Q29uc3RhbnRzLmgiCiAjaW1wb3J0ICJFeGNlcHRpb25EYXRhLmgiCiAjaW1wb3J0ICJQdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgiCisjaW1wb3J0ICJQdWJsaWNLZXlDcmVkZW50
aWFsUmVxdWVzdE9wdGlvbnMuaCIKICNpbXBvcnQgPFNlY3VyaXR5L1NlY0l0ZW0uaD4KICNpbXBv
cnQgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0Rl
dmljZUlkZW50aXR5U1BJLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KKyNpbXBvcnQgPHd0
Zi9IYXNoU2V0Lmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogCiAjaW1wb3J0ICJMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaCIKIApA
QCAtNDYsMTIgKzQ5LDYzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIExvY2Fs
QXV0aGVudGljYXRvckludGVybmFsIHsKIAotLy8gVVAsIFVWIGFuZCBBVCBhcmUgc2V0LiBTZWUg
aHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLyNmbGFncy4KLWNvbnN0IHVpbnQ4X3QgYXV0
aGVudGljYXRvckRhdGFGbGFncyA9IDY5OworLy8gU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93
ZWJhdXRobi8jZmxhZ3MuCitjb25zdCB1aW50OF90IG1ha2VDcmVkZW50aWFsRmxhZ3MgPSAwYjAx
MDAwMTAxOyAvLyBVUCwgVVYgYW5kIEFUIGFyZSBzZXQuCitjb25zdCB1aW50OF90IGdldEFzc2Vy
dGlvbkZsYWdzID0gMGIwMDAwMDEwMTsgLy8gVVAgYW5kIFVWIGFyZSBzZXQuCiAvLyBGSVhNRShy
ZGFyOi8vcHJvYmxlbS8zODMyMDUxMik6IERlZmluZSBBcHBsZSBBQUdVSUQuCiBjb25zdCB1aW50
OF90IEFBR1VJRFtdID0gezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OyAv
LyAxNiBieXRlcwotY29uc3Qgc2l6ZV90IG1heENyZWRlbnRpYWxJZExlbmd0aCA9IDB4ZmZmZjsg
Ly8gMiBieXRlcworLy8gQ3JlZGVudGlhbCBJRCBpcyBjdXJyZW50bHkgU0hBLTEgb2YgdGhlIGNv
cnJlc3BvbmRpbmcgcHVibGljIGtleS4KKy8vIEZJWE1FKDE4MzUzNCk6IEFzc3VtZSBsaXR0bGUg
ZW5kaWFuIGhlcmUuCitjb25zdCB1bmlvbiB7CisgICAgdWludDE2X3QgaW50ZWdlcjsKKyAgICB1
aW50OF90IGJ5dGVzWzJdOworfSBjcmVkZW50aWFsSWRMZW5ndGggPSB7MHgwMDE0fTsKIGNvbnN0
IHNpemVfdCBFUzI1NktleVNpemVJbkJ5dGVzID0gMzI7Citjb25zdCBzaXplX3QgYXV0aERhdGFQ
cmVmaXhGaXhlZFNpemUgPSAzNzsgLy8gaGFzaCgzMikgKyBmbGFncygxKSArIGNvdW50ZXIoNCkK
KworI2lmIFBMQVRGT1JNKElPUykKKy8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8j
c2VjLWF1dGhlbnRpY2F0b3ItZGF0YQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBidWlsZEF1dGhE
YXRhKGNvbnN0IFN0cmluZyYgcnBJZCwgY29uc3QgdWludDhfdCBmbGFncywgY29uc3QgdWludDMy
X3QgY291bnRlciwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBvcHRpb25hbEF0dGVzdGVkQ3JlZGVu
dGlhbERhdGEpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGF1dGhEYXRhOworICAgIGF1dGhEYXRh
LnJlc2VydmVDYXBhY2l0eShhdXRoRGF0YVByZWZpeEZpeGVkU2l6ZSArIG9wdGlvbmFsQXR0ZXN0
ZWRDcmVkZW50aWFsRGF0YS5zaXplKCkpOworCisgICAgLy8gUlAgSUQgaGFzaAorICAgIGF1dG8g
Y3J5cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxn
b3JpdGhtOjpTSEFfMjU2KTsKKyAgICAvLyBGSVhNRSgxODM1MzQpOiBUZXN0IElETi4KKyAgICBB
U1NFUlQocnBJZC5pc0FsbEFTQ0lJKCkpOworICAgIGF1dG8gYXNjaWlScElkID0gcnBJZC5hc2Np
aSgpOworICAgIGNyeXB0by0+YWRkQnl0ZXMoYXNjaWlScElkLmRhdGEoKSwgYXNjaWlScElkLmxl
bmd0aCgpKTsKKyAgICBhdXRoRGF0YSA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKKworICAgIC8v
IEZMQUdTCisgICAgYXV0aERhdGEuYXBwZW5kKGZsYWdzKTsKKworICAgIC8vIENPVU5URVIKKyAg
ICAvLyBGSVhNRSgxODM1MzQpOiBBc3N1bWUgbGl0dGxlIGVuZGlhbiBoZXJlLgorICAgIHVuaW9u
IHsKKyAgICAgICAgdWludDMyX3QgaW50ZWdlcjsKKyAgICAgICAgdWludDhfdCBieXRlc1s0XTsK
KyAgICB9IGNvdW50ZXJVbmlvbjsKKyAgICBjb3VudGVyVW5pb24uaW50ZWdlciA9IGNvdW50ZXI7
CisgICAgYXV0aERhdGEuYXBwZW5kKGNvdW50ZXJVbmlvbi5ieXRlcywgc2l6ZW9mKGNvdW50ZXJV
bmlvbi5ieXRlcykpOworCisgICAgLy8gQVRURVNURUQgQ1JFRC4gREFUQQorICAgIGF1dGhEYXRh
LmFwcGVuZFZlY3RvcihvcHRpb25hbEF0dGVzdGVkQ3JlZGVudGlhbERhdGEpOworCisgICAgcmV0
dXJuIGF1dGhEYXRhOworfQorCitpbmxpbmUgSGFzaFNldDxTdHJpbmc+IHByb2R1Y2VIYXNoU2V0
KGNvbnN0IFZlY3RvcjxQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcj4mIGNyZWRlbnRpYWxE
ZXNjcmlwdG9ycykKK3sKKyAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIGZvciAoYXV0
byYgY3JlZGVudGlhbERlc2NyaXB0b3IgOiBjcmVkZW50aWFsRGVzY3JpcHRvcnMpIHsKKyAgICAg
ICAgaWYgKGNyZWRlbnRpYWxEZXNjcmlwdG9yLnRyYW5zcG9ydHMuaXNFbXB0eSgpICYmIGNyZWRl
bnRpYWxEZXNjcmlwdG9yLnR5cGUgPT0gUHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tl
eSAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkgPT0gY3JlZGVudGlhbElk
TGVuZ3RoLmludGVnZXIpCisgICAgICAgICAgICByZXN1bHQuYWRkKFN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5kYXRhKCkp
LCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkpKTsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiB9IC8vIExvY2FsQXV0
aGVudGljYXRvckludGVybmFsCiAKQEAgLTYyLDcgKzExNiw3IEBAIHZvaWQgTG9jYWxBdXRoZW50
aWNhdG9yOjptYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0
IFB1YmxpCiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBGSVhNRSgxODI3NzIpCiAgICAgQVNT
RVJUX1VOVVNFRChoYXNoLCBoYXNoID09IGhhc2gpOwotICAgIEFTU0VSVF9VTlVTRUQob3B0aW9u
cywgb3B0aW9ucy5ycC5uYW1lLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX1VOVVNFRChvcHRpb25z
LCAhb3B0aW9ucy5ycC5pZC5pc0VtcHR5KCkpOwogICAgIEFTU0VSVF9VTlVTRUQoY2FsbGJhY2ss
IGNhbGxiYWNrKTsKICAgICBleGNlcHRpb25DYWxsYmFjayh7IE5vdEFsbG93ZWRFcnJvciwgQVND
SUlMaXRlcmFsKCJObyBhdmFsaWFibGUgYXV0aGVudGljYXRvcnMuIikgfSk7CiAjZWxzZQpAQCAt
ODQsMjUgKzEzOCwzMSBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25zdCBQdWJsaQogICAgIH0KIAogICAgIC8v
IFN0ZXAgMy4KLSAgICBmb3IgKGF1dG8mIGV4Y2x1ZGVDcmVkZW50aWFsIDogb3B0aW9ucy5leGNs
dWRlQ3JlZGVudGlhbHMpIHsKLSAgICAgICAgaWYgKGV4Y2x1ZGVDcmVkZW50aWFsLnR5cGUgPT0g
UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSAmJiBleGNsdWRlQ3JlZGVudGlhbC50
cmFuc3BvcnRzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gU2VhcmNoIEtleWNoYWluIGZv
ciB0aGUgQ3JlZGVudGlhbCBJRCBhbmQgUlAgSUQsIHdoaWNoIGlzIHN0b3JlZCBpbiB0aGUga1Nl
Y0F0dHJBcHBsaWNhdGlvbkxhYmVsIGFuZCBrU2VjQXR0ckxhYmVsIGF0dHJpYnV0ZSByZXNwZWN0
aXZlbHkuCi0gICAgICAgICAgICBOU0RpY3Rpb25hcnkgKnF1ZXJ5ID0gQHsKLSAgICAgICAgICAg
ICAgICAoaWQpa1NlY0NsYXNzOiAoaWQpa1NlY0NsYXNzS2V5LAotICAgICAgICAgICAgICAgIChp
ZClrU2VjQXR0cktleUNsYXNzOiAoaWQpa1NlY0F0dHJLZXlDbGFzc1ByaXZhdGUsCi0gICAgICAg
ICAgICAgICAgKGlkKWtTZWNBdHRyQXBwbGljYXRpb25MYWJlbDogW05TRGF0YSBkYXRhV2l0aEJ5
dGVzOmV4Y2x1ZGVDcmVkZW50aWFsLmlkVmVjdG9yLmRhdGEoKSBsZW5ndGg6ZXhjbHVkZUNyZWRl
bnRpYWwuaWRWZWN0b3Iuc2l6ZSgpXSwKLSAgICAgICAgICAgICAgICAoaWQpa1NlY0F0dHJMYWJl
bDogb3B0aW9ucy5ycC5pZAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIE9TU3RhdHVzIHN0
YXR1cyA9IFNlY0l0ZW1Db3B5TWF0Y2hpbmcoKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZilxdWVy
eSwgTlVMTCk7Ci0gICAgICAgICAgICBpZiAoIXN0YXR1cykgeworICAgIEhhc2hTZXQ8U3RyaW5n
PiBleGNsdWRlQ3JlZGVudGlhbElkcyA9IHByb2R1Y2VIYXNoU2V0KG9wdGlvbnMuZXhjbHVkZUNy
ZWRlbnRpYWxzKTsKKyAgICBpZiAoIWV4Y2x1ZGVDcmVkZW50aWFsSWRzLmlzRW1wdHkoKSkgewor
ICAgICAgICAvLyBTZWFyY2ggS2V5Y2hhaW4gZm9yIHRoZSBSUCBJRC4KKyAgICAgICAgTlNEaWN0
aW9uYXJ5ICpxdWVyeSA9IEB7CisgICAgICAgICAgICAoaWQpa1NlY0NsYXNzOiAoaWQpa1NlY0Ns
YXNzS2V5LAorICAgICAgICAgICAgKGlkKWtTZWNBdHRyS2V5Q2xhc3M6IChpZClrU2VjQXR0cktl
eUNsYXNzUHJpdmF0ZSwKKyAgICAgICAgICAgIChpZClrU2VjQXR0ckxhYmVsOiBvcHRpb25zLnJw
LmlkLAorICAgICAgICAgICAgKGlkKWtTZWNSZXR1cm5BdHRyaWJ1dGVzOiBAWUVTLAorICAgICAg
ICAgICAgKGlkKWtTZWNNYXRjaExpbWl0OiAoaWQpa1NlY01hdGNoTGltaXRBbGwsCisgICAgICAg
IH07CisgICAgICAgIENGVHlwZVJlZiBhdHRyaWJ1dGVzQXJyYXlSZWYgPSBudWxscHRyOworICAg
ICAgICBPU1N0YXR1cyBzdGF0dXMgPSBTZWNJdGVtQ29weU1hdGNoaW5nKChfX2JyaWRnZSBDRkRp
Y3Rpb25hcnlSZWYpcXVlcnksICZhdHRyaWJ1dGVzQXJyYXlSZWYpOworICAgICAgICBpZiAoc3Rh
dHVzICYmIHN0YXR1cyAhPSBlcnJTZWNJdGVtTm90Rm91bmQpIHsKKyAgICAgICAgICAgIExPR19F
UlJPUigiQ291bGRuJ3QgcXVlcnkgS2V5Y2hhaW46ICVkIiwgc3RhdHVzKTsKKyAgICAgICAgICAg
IGV4Y2VwdGlvbkNhbGxiYWNrKHsgVW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVua25vd24g
aW50ZXJuYWwgZXJyb3IuIikgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgYXV0byByZXRhaW5BdHRyaWJ1dGVzQXJyYXkgPSBhZG9wdENGKGF0dHJpYnV0ZXNBcnJh
eVJlZik7CisKKyAgICAgICAgZm9yIChOU0RpY3Rpb25hcnkgKm5zQXR0cmlidXRlcyBpbiAoTlNB
cnJheSAqKWF0dHJpYnV0ZXNBcnJheVJlZikgeworICAgICAgICAgICAgTlNEYXRhICpuc0NyZWRl
bnRpYWxJZCA9IG5zQXR0cmlidXRlc1soaWQpa1NlY0F0dHJBcHBsaWNhdGlvbkxhYmVsXTsKKyAg
ICAgICAgICAgIGlmIChleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4obnNDcmVkZW50aWFsSWQuYnl0ZXMpLCBuc0NyZWRlbnRp
YWxJZC5sZW5ndGgpKSkgewogICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHsgTm90
QWxsb3dlZEVycm9yLCBBU0NJSUxpdGVyYWwoIkF0IGxlYXN0IG9uZSBjcmVkZW50aWFsIG1hdGNo
ZXMgYW4gZW50cnkgb2YgdGhlIGV4Y2x1ZGVDcmVkZW50aWFscyBsaXN0IGluIHRoZSBwbGF0Zm9y
bSBhdHRhY2hlZCBhdXRoZW50aWNhdG9yLiIpIH0pOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gZXJyU2VjSXRlbU5vdEZv
dW5kKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBxdWVyeSBLZXljaGFp
bjogJWQiLCBzdGF0dXMpOwotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHsgVW5r
bm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVua25vd24gaW50ZXJuYWwgZXJyb3IuIikgfSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
CkBAIC0xMTEsNyArMTcxLDYgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50
aWFsKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgUHVibGkKICAgICAvLyBHZXQg
dXNlciBjb25zZW50LgogICAgIGF1dG8gY29udGV4dCA9IGFkb3B0TlMoW2FsbG9jTEFDb250ZXh0
SW5zdGFuY2UoKSBpbml0XSk7CiAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7Ci0gICAgTlNTdHJp
bmcgKnJlYXNvbiA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiQWxsb3cgJUAgdG8gY3Jl
YXRlIGEgcHVibGljIGtleSBjcmVkZW50aWFsIGZvciAlQCIsIChpZClvcHRpb25zLnJwLmlkLCAo
aWQpb3B0aW9ucy51c2VyLm5hbWVdOwogICAgIGlmICghW2NvbnRleHQgY2FuRXZhbHVhdGVQb2xp
Y3k6TEFQb2xpY3lEZXZpY2VPd25lckF1dGhlbnRpY2F0aW9uV2l0aEJpb21ldHJpY3MgZXJyb3I6
JmVycm9yXSkgewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGV2YWx1YXRlIGF1dGhlbnRp
Y2F0aW9uIHdpdGggYmlvbWV0cmljcyBwb2xpY3k6ICVAIiwgZXJyb3IpOwogICAgICAgICAvLyBG
SVhNRSgxODI3NjcpCkBAIC0xMTksNiArMTc4LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6
Om1ha2VDcmVkZW50aWFsKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgUHVibGkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIE5TU3RyaW5nICpyZWFzb24gPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIkFsbG93ICVAIHRvIGNyZWF0ZSBhIHB1YmxpYyBrZXkgY3Jl
ZGVudGlhbCBmb3IgJUAiLCAoaWQpb3B0aW9ucy5ycC5pZCwgKGlkKW9wdGlvbnMudXNlci5uYW1l
XTsKICAgICAvLyBGSVhNRSgxODM1MzQpOiBPcHRpbWl6ZSB0aGUgZm9sbG93aW5nIG5lc3RlZCBj
YWxsYmFja3MgYW5kIHRocmVhZGluZy4KICAgICBbY29udGV4dCBldmFsdWF0ZVBvbGljeTpMQVBv
bGljeURldmljZU93bmVyQXV0aGVudGljYXRpb25XaXRoQmlvbWV0cmljcyBsb2NhbGl6ZWRSZWFz
b246cmVhc29uIHJlcGx5OkJsb2NrUHRyPHZvaWQoQk9PTCwgTlNFcnJvciAqKT46OmZyb21DYWxs
YWJsZShbd2Vha1RoaXMgPSBtX3dlYWtGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKnRoaXMpLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhj
ZXB0aW9uQ2FsbGJhY2spLCBvcHRpb25zID0gY3Jvc3NUaHJlYWRDb3B5KG9wdGlvbnMpLCBoYXNo
XSAoQk9PTCBzdWNjZXNzLCBOU0Vycm9yICplcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOwpAQCAtMTU3LDcgKzIxNyw3IEBAIHZvaWQgTG9jYWxBdXRoZW50
aWNhdG9yOjptYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0
IFB1YmxpCiAgICAgICAgICAgICAvLyBBdHRlc3RhdGlvbiBDZXJ0aWZpY2F0ZSBhbmQgQXR0ZXN0
YXRpb24gSXNzdWluZyBDQQogICAgICAgICAgICAgQVNTRVJUKGNlcnRpZmljYXRlcyAmJiAoW2Nl
cnRpZmljYXRlcyBjb3VudF0gPT0gMikpOwogCi0gICAgICAgICAgICAvLyBTdGVwIDcuMiAtIDcu
NC4KKyAgICAgICAgICAgIC8vIFN0ZXAgNy4yLTcuNC4KICAgICAgICAgICAgIC8vIEZJWE1FKDE4
MzUzMyk6IEEgc2luZ2xlIGtTZWNDbGFzc0tleSBpdGVtIGNvdWxkbid0IHN0b3JlIGFsbCBtZXRh
IGRhdGEuIFRoZSBmb2xsb3dpbmcgc2NoZW1hIGlzIGEgdGVudGF0aXZlIHNvbHV0aW9uCiAgICAg
ICAgICAgICAvLyB0byBhY2NvbW1vZGF0ZSB0aGUgbW9zdCBpbXBvcnRhbnQgbWV0YSBkYXRhLCBp
LmUuIFJQIElELCBDcmVkZW50aWFsIElELCBhbmQgdXNlcmhhbmRsZS4KICAgICAgICAgICAgIC8v
IGtTZWNBdHRyTGFiZWw6IFJQIElECkBAIC0xODAsNyArMjQwLDcgQEAgdm9pZCBMb2NhbEF1dGhl
bnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29u
c3QgUHVibGkKICAgICAgICAgICAgICAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IGxhYmVsLAog
ICAgICAgICAgICAgICAgICAgICAoaWQpa1NlY1JldHVybkF0dHJpYnV0ZXM6IEBZRVMKICAgICAg
ICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIENGVHlwZVJlZiBhdHRyaWJ1dGVzUmVmID0g
TlVMTDsKKyAgICAgICAgICAgICAgICBDRlR5cGVSZWYgYXR0cmlidXRlc1JlZiA9IG51bGxwdHI7
CiAgICAgICAgICAgICAgICAgT1NTdGF0dXMgc3RhdHVzID0gU2VjSXRlbUNvcHlNYXRjaGluZygo
X19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKWNyZWRlbnRpYWxJZFF1ZXJ5LCAmYXR0cmlidXRlc1Jl
Zik7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIkNvdWxkbid0IGdldCBDcmVkZW50aWFsIElEOiAlZCIsIHN0YXR1cyk7CkBAIC0x
OTEsNyArMjUxLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgUHVibGkKIAogICAgICAgICAgICAgICAg
IE5TRGljdGlvbmFyeSAqbnNBdHRyaWJ1dGVzID0gKE5TRGljdGlvbmFyeSAqKWF0dHJpYnV0ZXNS
ZWY7CiAgICAgICAgICAgICAgICAgTlNEYXRhICpuc0NyZWRlbnRpYWxJZCA9IG5zQXR0cmlidXRl
c1soaWQpa1NlY0F0dHJBcHBsaWNhdGlvbkxhYmVsXTsKLSAgICAgICAgICAgICAgICBjcmVkZW50
aWFsSWQuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihuc0NyZWRlbnRpYWxJZC5i
eXRlcyksIG5zQ3JlZGVudGlhbElkLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgY3JlZGVudGlh
bElkLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihuc0NyZWRlbnRpYWxJ
ZC5ieXRlcyksIG5zQ3JlZGVudGlhbElkLmxlbmd0aCk7CiAKICAgICAgICAgICAgICAgICBOU0Rp
Y3Rpb25hcnkgKnVwZGF0ZVF1ZXJ5ID0gQHsKICAgICAgICAgICAgICAgICAgICAgKGlkKWtTZWND
bGFzczogKGlkKWtTZWNDbGFzc0tleSwKQEAgLTIxMCw1NSArMjcwLDMwIEBAIHZvaWQgTG9jYWxB
dXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gs
IGNvbnN0IFB1YmxpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAvLyBTdGVwIDEyLgotICAgICAgICAgICAgLy8gQXBwbGUgQXR0ZXN0YXRpb24gQ29udCcK
LSAgICAgICAgICAgIC8vIEFzc2VtYmxlIHRoZSBhdHRlc3RhdGlvbiBvYmplY3Q6Ci0gICAgICAg
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4vI2F0dGVzdGF0aW9uLW9iamVj
dAotICAgICAgICAgICAgLy8gRklYTUUoMTgzNTM0KTogYXV0aERhdGEgY291bGQgdGhyb3R0bGUu
Ci0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYXV0aERhdGE7CisgICAgICAgICAgICAvLyBT
dGVwIDEwLgorICAgICAgICAgICAgLy8gRklYTUUoMTgzNTMzKTogc3RvcmUgdGhlIGNvdW50ZXIu
CisgICAgICAgICAgICB1aW50MzJfdCBjb3VudGVyID0gMDsKKworICAgICAgICAgICAgLy8gRklY
TUUoMTgzNTM0KTogYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSBjb3VsZCB0aHJvdHRsZS4KKyAgICAg
ICAgICAgIC8vIFN0ZXAgMTEuIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8jYXR0ZXN0
ZWQtY3JlZGVudGlhbC1kYXRhCisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYXR0ZXN0ZWRD
cmVkZW50aWFsRGF0YTsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBSUCBJRCBo
YXNoCi0gICAgICAgICAgICAgICAgYXV0byBjcnlwdG8gPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3Jl
YXRlKFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwotICAgICAgICAgICAg
ICAgIC8vIEZJWE1FKDE4MzUzNCk6IFRlc3QgSUROLgotICAgICAgICAgICAgICAgIEFTU0VSVChv
cHRpb25zLnJwLmlkLmlzQWxsQVNDSUkoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBhc2NpaVJw
SWQgPSBvcHRpb25zLnJwLmlkLmFzY2lpKCk7Ci0gICAgICAgICAgICAgICAgY3J5cHRvLT5hZGRC
eXRlcyhhc2NpaVJwSWQuZGF0YSgpLCBhc2NpaVJwSWQubGVuZ3RoKCkpOwotICAgICAgICAgICAg
ICAgIGF1dGhEYXRhID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotCi0gICAgICAgICAgICAgICAg
Ly8gRkxBR1MKLSAgICAgICAgICAgICAgICBhdXRoRGF0YS5hcHBlbmQoYXV0aGVudGljYXRvckRh
dGFGbGFncyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTdGVwLiAxMC4KLSAgICAgICAgICAgICAg
ICAvLyBDT1VOVEVSCi0gICAgICAgICAgICAgICAgLy8gRklYTUUoMTgzNTMzKTogc3RvcmUgdGhl
IGNvdW50ZXIuCi0gICAgICAgICAgICAgICAgdW5pb24gewotICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBpbnRlZ2VyOwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJ5dGVzWzRdOwot
ICAgICAgICAgICAgICAgIH0gY291bnRlciA9IHsweDAwMDAwMDAwfTsKLSAgICAgICAgICAgICAg
ICBhdXRoRGF0YS5hcHBlbmQoY291bnRlci5ieXRlcywgc2l6ZW9mKGNvdW50ZXIuYnl0ZXMpKTsK
LQotICAgICAgICAgICAgICAgIC8vIFN0ZXAgMTEuCi0gICAgICAgICAgICAgICAgLy8gQUFHVUlE
Ci0gICAgICAgICAgICAgICAgYXV0aERhdGEuYXBwZW5kKEFBR1VJRCwgc2l6ZW9mKEFBR1VJRCkp
OwotCi0gICAgICAgICAgICAgICAgLy8gTAotICAgICAgICAgICAgICAgIEFTU0VSVChjcmVkZW50
aWFsSWQuc2l6ZSgpIDw9IG1heENyZWRlbnRpYWxJZExlbmd0aCk7Ci0gICAgICAgICAgICAgICAg
Ly8gQXNzdW1lIGxpdHRsZSBlbmRpYW4gaGVyZS4KLSAgICAgICAgICAgICAgICB1bmlvbiB7Ci0g
ICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGludGVnZXI7Ci0gICAgICAgICAgICAgICAgICAg
IHVpbnQ4X3QgYnl0ZXNbMl07Ci0gICAgICAgICAgICAgICAgfSBjcmVkZW50aWFsSWRMZW5ndGg7
Ci0gICAgICAgICAgICAgICAgY3JlZGVudGlhbElkTGVuZ3RoLmludGVnZXIgPSBzdGF0aWNfY2Fz
dDx1aW50MTZfdD4oY3JlZGVudGlhbElkLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgYXV0aERh
dGEuYXBwZW5kKGNyZWRlbnRpYWxJZExlbmd0aC5ieXRlcywgc2l6ZW9mKHVpbnQxNl90KSk7Ci0K
LSAgICAgICAgICAgICAgICAvLyBDUkVERU5USUFMIElECi0gICAgICAgICAgICAgICAgYXV0aERh
dGEuYXBwZW5kVmVjdG9yKGNyZWRlbnRpYWxJZCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBDUkVE
RU5USUFMIFBVQkxJQyBLRVkKLSAgICAgICAgICAgICAgICBDRkRhdGFSZWYgcHVibGljS2V5RGF0
YVJlZiA9IE5VTEw7CisgICAgICAgICAgICAgICAgLy8gYWFndWlkCisgICAgICAgICAgICAgICAg
YXR0ZXN0ZWRDcmVkZW50aWFsRGF0YS5hcHBlbmQoQUFHVUlELCBzaXplb2YoQUFHVUlEKSk7CisK
KyAgICAgICAgICAgICAgICAvLyBjcmVkZW50aWFsSWRMZW5ndGgKKyAgICAgICAgICAgICAgICBB
U1NFUlQoY3JlZGVudGlhbElkLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGguaW50ZWdlcik7
CisgICAgICAgICAgICAgICAgLy8gRklYTUUoMTgzNTM0KTogQXNzdW1lIGxpdHRsZSBlbmRpYW4g
aGVyZS4KKyAgICAgICAgICAgICAgICBhdHRlc3RlZENyZWRlbnRpYWxEYXRhLmFwcGVuZChjcmVk
ZW50aWFsSWRMZW5ndGguYnl0ZXMsIHNpemVvZih1aW50MTZfdCkpOworCisgICAgICAgICAgICAg
ICAgLy8gY3JlZGVudGlhbElkCisgICAgICAgICAgICAgICAgYXR0ZXN0ZWRDcmVkZW50aWFsRGF0
YS5hcHBlbmRWZWN0b3IoY3JlZGVudGlhbElkKTsKKworICAgICAgICAgICAgICAgIC8vIGNyZWRl
bnRpYWxQdWJsaWNLZXkKKyAgICAgICAgICAgICAgICBDRkRhdGFSZWYgcHVibGljS2V5RGF0YVJl
ZiA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBhdXRv
IHB1YmxpY0tleSA9IGFkb3B0Q0YoU2VjS2V5Q29weVB1YmxpY0tleShwcml2YXRlS2V5KSk7Ci0g
ICAgICAgICAgICAgICAgICAgIENGRXJyb3JSZWYgZXJyb3JSZWYgPSBOVUxMOworICAgICAgICAg
ICAgICAgICAgICBDRkVycm9yUmVmIGVycm9yUmVmID0gbnVsbHB0cjsKICAgICAgICAgICAgICAg
ICAgICAgcHVibGljS2V5RGF0YVJlZiA9IFNlY0tleUNvcHlFeHRlcm5hbFJlcHJlc2VudGF0aW9u
KHB1YmxpY0tleS5nZXQoKSwgJmVycm9yUmVmKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBy
ZXRhaW5FcnJvciA9IGFkb3B0Q0YoZXJyb3JSZWYpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
ZXJyb3JSZWYpIHsKQEAgLTI4OCwyNSArMzIzLDMxIEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9y
OjptYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0IFB1Ymxp
CiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHsgVW5rbm93bkVycm9yLCBB
U0NJSUxpdGVyYWwoIlVua25vd24gaW50ZXJuYWwgZXJyb3IuIikgfSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXV0aERh
dGEuYXBwZW5kVmVjdG9yKGNvc2VQdWJsaWNLZXkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
YXR0ZXN0ZWRDcmVkZW50aWFsRGF0YS5hcHBlbmRWZWN0b3IoY29zZVB1YmxpY0tleS52YWx1ZSgp
KTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgLy8gU3RlcCAxMi4KKyAgICAgICAgICAg
IGF1dG8gYXV0aERhdGEgPSBidWlsZEF1dGhEYXRhKG9wdGlvbnMucnAuaWQsIG1ha2VDcmVkZW50
aWFsRmxhZ3MsIGNvdW50ZXIsIGF0dGVzdGVkQ3JlZGVudGlhbERhdGEpOworCisgICAgICAgICAg
ICAvLyBTdGVwIDEzLiBBcHBsZSBBdHRlc3RhdGlvbiBDb250JworICAgICAgICAgICAgLy8gQXNz
ZW1ibGUgdGhlIGF0dGVzdGF0aW9uIG9iamVjdDoKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi93ZWJhdXRobi8jYXR0ZXN0YXRpb24tb2JqZWN0CiAgICAgICAgICAgICBjYm9y
OjpDQk9SVmFsdWU6Ok1hcFZhbHVlIGF0dGVzdGF0aW9uU3RhdGVtZW50TWFwOwogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1cmU7CiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDRkVycm9yUmVmIGVycm9yUmVmID0gTlVM
TDsKKyAgICAgICAgICAgICAgICAgICAgQ0ZFcnJvclJlZiBlcnJvclJlZiA9IG51bGxwdHI7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FKDE4MzY1Mik6IFJlZHVjZSBwcm9tcHQgZm9yIGJp
b21ldHJpY3MKICAgICAgICAgICAgICAgICAgICAgQ0ZEYXRhUmVmIHNpZ25hdHVyZVJlZiA9IFNl
Y0tleUNyZWF0ZVNpZ25hdHVyZShwcml2YXRlS2V5LCBrU2VjS2V5QWxnb3JpdGhtRUNEU0FTaWdu
YXR1cmVNZXNzYWdlWDk2MlNIQTI1NiwgKF9fYnJpZGdlIENGRGF0YVJlZilbTlNEYXRhIGRhdGFX
aXRoQnl0ZXM6YXV0aERhdGEuZGF0YSgpIGxlbmd0aDphdXRoRGF0YS5zaXplKCldLCAmZXJyb3JS
ZWYpOwogICAgICAgICAgICAgICAgICAgICBhdXRvIHJldGFpbkVycm9yID0gYWRvcHRDRihlcnJv
clJlZik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvclJlZikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBleHBvcnQgdGhlIHB1YmxpYyBrZXk6ICVA
IiwgKE5TRXJyb3IqKWVycm9yUmVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGRuJ3QgZ2VuZXJhdGUgdGhlIHNpZ25hdHVyZTogJUAiLCAoTlNFcnJvciopZXJyb3JS
ZWYpOwogICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soeyBVbmtub3du
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5rbm93biBpbnRlcm5hbCBlcnJvci4iKSB9KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBhdXRvIHJldGFpblNpZ25hdHVyZSA9IGFkb3B0Q0Yoc2lnbmF0dXJlUmVm
KTsKICAgICAgICAgICAgICAgICAgICAgTlNEYXRhICpuc1NpZ25hdHVyZSA9IChOU0RhdGEgKilz
aWduYXR1cmVSZWY7Ci0gICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZS5hcHBlbmQoc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG5zU2lnbmF0dXJlLmJ5dGVzKSwgbnNTaWduYXR1cmUubGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLmFwcGVuZChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihuc1NpZ25hdHVyZS5ieXRlcyksIG5zU2lnbmF0dXJlLmxlbmd0
aCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGF0dGVzdGF0aW9uU3RhdGVt
ZW50TWFwW2Nib3I6OkNCT1JWYWx1ZSgiYWxnIildID0gY2Jvcjo6Q0JPUlZhbHVlKENPU0U6OkVT
MjU2KTsKICAgICAgICAgICAgICAgICBhdHRlc3RhdGlvblN0YXRlbWVudE1hcFtjYm9yOjpDQk9S
VmFsdWUoInNpZyIpXSA9IGNib3I6OkNCT1JWYWx1ZShzaWduYXR1cmUpOwpAQCAtMzE2LDcgKzM1
Nyw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0
b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0IFB1YmxpCiAgICAgICAgICAgICAgICAgICAgIGF1dG8g
cmV0YWluRGF0YSA9IGFkb3B0Q0YoZGF0YVJlZik7CiAgICAgICAgICAgICAgICAgICAgIE5TRGF0
YSAqbnNEYXRhID0gKE5TRGF0YSAqKWRhdGFSZWY7CiAgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBkYXRhOwotICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChzdGF0aWNf
Y2FzdDxjb25zdCB1aW50OF90Kj4obnNEYXRhLmJ5dGVzKSwgbnNEYXRhLmxlbmd0aCk7CisgICAg
ICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KG5zRGF0YS5ieXRlcyksIG5zRGF0YS5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICBj
Ym9yQXJyYXkuYXBwZW5kKGNib3I6OkNCT1JWYWx1ZShXVEZNb3ZlKGRhdGEpKSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGF0dGVzdGF0aW9uU3RhdGVtZW50TWFwW2Nib3I6
OkNCT1JWYWx1ZSgieDVjIildID0gY2Jvcjo6Q0JPUlZhbHVlKFdURk1vdmUoY2JvckFycmF5KSk7
CkBAIC0zMzksNiArMzgwLDE0NCBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRl
bnRpYWwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25zdCBQdWJsaQogI2VuZGlmIC8v
ICFQTEFURk9STShJT1MpCiB9CiAKK3ZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjpnZXRBc3NlcnRp
b24oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25zdCBQdWJsaWNLZXlDcmVkZW50aWFs
UmVxdWVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlcXVlc3RDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNl
cHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrKQoreworICAgIHVzaW5nIG5hbWVzcGFj
ZSBMb2NhbEF1dGhlbnRpY2F0b3JJbnRlcm5hbDsKKworI2lmICFQTEFURk9STShJT1MpCisgICAg
Ly8gRklYTUUoMTgyNzcyKQorICAgIEFTU0VSVF9VTlVTRUQoaGFzaCwgaGFzaCA9PSBoYXNoKTsK
KyAgICBBU1NFUlRfVU5VU0VEKG9wdGlvbnMsICFvcHRpb25zLnJwSWQuaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKGNhbGxiYWNrLCBjYWxsYmFjayk7CisgICAgZXhjZXB0aW9uQ2FsbGJh
Y2soeyBOb3RBbGxvd2VkRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiTm8gYXZhbGlhYmxlIGF1dGhlbnRp
Y2F0b3JzLiIpIH0pOworI2Vsc2UKKyAgICAvLyBUaGUgZm9sbG93aW5nIGltcGxlbWVudHMgaHR0
cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLyNvcC1nZXQtYXNzZXJ0aW9uIGFzIG9mIDUgRGVj
ZW1iZXIgMjAxNy4KKyAgICAvLyBTa2lwIFN0ZXAgMiBhcyByZXF1aXJlVXNlclZlcmlmaWNhdGlv
biBpcyBlbmZvcmNlZC4KKyAgICAvLyBTa2lwIFN0ZXAgOCBhcyBleHRlbnNpb25zIGFyZSBub3Qg
c3VwcG9ydGVkIHlldC4KKyAgICAvLyBTdGVwIDEyIGlzIGltcGxpY2l0bHkgY2FwdHVyZWQgYnkg
YWxsIFVua25vd25FcnJvciBleGNlcHRpb24gY2FsbGJhY2tzLgorICAgIC8vIFN0ZXAgMy01LiBV
bmxpa2UgdGhlIHNwZWMsIGlmIGFuIGFsbG93IGxpc3QgaXMgcHJvdmlkZWQgYW5kIHRoZXJlIGlz
IG5vIGludGVyc2VjdGlvbiBiZXR3ZWVuIGV4aXN0aW5nIG9uZXMgYW5kIHRoZSBhbGxvdyBsaXN0
LCB3ZSBhbHdheXMgcmV0dXJuIE5vdEFsbG93ZWRFcnJvci4KKyAgICBIYXNoU2V0PFN0cmluZz4g
YWxsb3dDcmVkZW50aWFsSWRzID0gcHJvZHVjZUhhc2hTZXQob3B0aW9ucy5hbGxvd0NyZWRlbnRp
YWxzKTsKKyAgICBpZiAoIW9wdGlvbnMuYWxsb3dDcmVkZW50aWFscy5pc0VtcHR5KCkgJiYgYWxs
b3dDcmVkZW50aWFsSWRzLmlzRW1wdHkoKSkgeworICAgICAgICBleGNlcHRpb25DYWxsYmFjayh7
IE5vdEFsbG93ZWRFcnJvciwgQVNDSUlMaXRlcmFsKCJObyBtYXRjaGVkIGNyZWRlbnRpYWxzIGFy
ZSBmb3VuZCBpbiB0aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4iKSB9KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNlYXJjaCBLZXljaGFpbiBmb3IgdGhlIFJQ
IElELgorICAgIE5TRGljdGlvbmFyeSAqcXVlcnkgPSBAeworICAgICAgICAoaWQpa1NlY0NsYXNz
OiAoaWQpa1NlY0NsYXNzS2V5LAorICAgICAgICAoaWQpa1NlY0F0dHJLZXlDbGFzczogKGlkKWtT
ZWNBdHRyS2V5Q2xhc3NQcml2YXRlLAorICAgICAgICAoaWQpa1NlY0F0dHJMYWJlbDogb3B0aW9u
cy5ycElkLAorICAgICAgICAoaWQpa1NlY1JldHVybkF0dHJpYnV0ZXM6IEBZRVMsCisgICAgICAg
IChpZClrU2VjTWF0Y2hMaW1pdDogKGlkKWtTZWNNYXRjaExpbWl0QWxsLAorICAgIH07CisgICAg
Q0ZUeXBlUmVmIGF0dHJpYnV0ZXNBcnJheVJlZiA9IG51bGxwdHI7CisgICAgT1NTdGF0dXMgc3Rh
dHVzID0gU2VjSXRlbUNvcHlNYXRjaGluZygoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKXF1ZXJ5
LCAmYXR0cmlidXRlc0FycmF5UmVmKTsKKyAgICBpZiAoc3RhdHVzICYmIHN0YXR1cyAhPSBlcnJT
ZWNJdGVtTm90Rm91bmQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBxdWVyeSBLZXlj
aGFpbjogJWQiLCBzdGF0dXMpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayh7IFVua25vd25F
cnJvciwgQVNDSUlMaXRlcmFsKCJVbmtub3duIGludGVybmFsIGVycm9yLiIpIH0pOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGF1dG8gcmV0YWluQXR0cmlidXRlc0FycmF5ID0gYWRvcHRD
RihhdHRyaWJ1dGVzQXJyYXlSZWYpOworCisgICAgTlNBcnJheSAqaW50ZXJzZWN0ZWRDcmVkZW50
aWFsc0F0dHJpYnV0ZXMgPSBuaWw7CisgICAgaWYgKG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscy5p
c0VtcHR5KCkpCisgICAgICAgIGludGVyc2VjdGVkQ3JlZGVudGlhbHNBdHRyaWJ1dGVzID0gKE5T
QXJyYXkgKilhdHRyaWJ1dGVzQXJyYXlSZWY7CisgICAgZWxzZSB7CisgICAgICAgIE5TTXV0YWJs
ZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6YWxsb3dD
cmVkZW50aWFsSWRzLnNpemUoKV07CisgICAgICAgIGZvciAoTlNEaWN0aW9uYXJ5ICpuc0F0dHJp
YnV0ZXMgaW4gKE5TQXJyYXkgKilhdHRyaWJ1dGVzQXJyYXlSZWYpIHsKKyAgICAgICAgICAgIE5T
RGF0YSAqbnNDcmVkZW50aWFsSWQgPSBuc0F0dHJpYnV0ZXNbKGlkKWtTZWNBdHRyQXBwbGljYXRp
b25MYWJlbF07CisgICAgICAgICAgICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKFN0
cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihuc0NyZWRlbnRpYWxJZC5ieXRlcyks
IG5zQ3JlZGVudGlhbElkLmxlbmd0aCkpKQorICAgICAgICAgICAgICAgIFtyZXN1bHQgYWRkT2Jq
ZWN0Om5zQXR0cmlidXRlc107CisgICAgICAgIH0KKyAgICAgICAgaW50ZXJzZWN0ZWRDcmVkZW50
aWFsc0F0dHJpYnV0ZXMgPSByZXN1bHQ7CisgICAgfQorICAgIGlmICghaW50ZXJzZWN0ZWRDcmVk
ZW50aWFsc0F0dHJpYnV0ZXMuY291bnQpIHsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soeyBO
b3RBbGxvd2VkRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiTm8gbWF0Y2hlZCBjcmVkZW50aWFscyBhcmUg
Zm91bmQgaW4gdGhlIHBsYXRmb3JtIGF0dGFjaGVkIGF1dGhlbnRpY2F0b3IuIikgfSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTdGVwIDYuCisgICAgLy8gRklYTUUocmRhcjov
L3Byb2JsZW0vMzU5MDA1MzQpOiBXZSBkb24ndCBoYXZlIGFuIFVJIHRvIHByb21wdCB1c2VycyBm
b3Igc2VsZWN0aW5nIGludGVyc2VjdGVkQ3JlZGVudGlhbHMsIGFuZCB0aGVyZWZvcmUgd2UgYWx3
YXlzIHVzZSB0aGUgZmlyc3Qgb25lIGZvciBub3cuCisgICAgTlNEaWN0aW9uYXJ5ICpzZWxlY3Rl
ZENyZWRlbnRpYWxBdHRyaWJ1dGVzID0gaW50ZXJzZWN0ZWRDcmVkZW50aWFsc0F0dHJpYnV0ZXNb
MF07CisKKyAgICAvLyBTdGVwIDcuIEdldCB1c2VyIGNvbnNlbnQuCisgICAgLy8gRklYTUUoMTgz
NTM0KTogVGhlIGxpZmV0aW1lIG9mIGNvbnRleHQgaXMgbWFuYWdlZCBieSByZXBseSBhbmQgdGhl
IGVhcmx5IHJldHVybiwgd2hpY2ggaXMgYSBiaXQgc3VidGxlLgorICAgIExBQ29udGV4dCAqY29u
dGV4dCA9IFthbGxvY0xBQ29udGV4dEluc3RhbmNlKCkgaW5pdF07CisgICAgTlNFcnJvciAqZXJy
b3IgPSBuaWw7CisgICAgaWYgKCFbY29udGV4dCBjYW5FdmFsdWF0ZVBvbGljeTpMQVBvbGljeURl
dmljZU93bmVyQXV0aGVudGljYXRpb25XaXRoQmlvbWV0cmljcyBlcnJvcjomZXJyb3JdKSB7Cisg
ICAgICAgIGF1dG8gcmV0YWluQ29udGV4dCA9IGFkb3B0TlMoY29udGV4dCk7CisgICAgICAgIExP
R19FUlJPUigiQ291bGRuJ3QgZXZhbHVhdGUgYXV0aGVudGljYXRpb24gd2l0aCBiaW9tZXRyaWNz
IHBvbGljeTogJUAiLCBlcnJvcik7CisgICAgICAgIC8vIEZJWE1FKDE4Mjc2NykKKyAgICAgICAg
ZXhjZXB0aW9uQ2FsbGJhY2soeyBOb3RBbGxvd2VkRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiTm8gYXZh
bGlhYmxlIGF1dGhlbnRpY2F0b3JzLiIpIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGNyZWRlbnRpYWxJZDsKKyAgICBOU0RhdGEgKm5zQ3JlZGVudGlh
bElkID0gc2VsZWN0ZWRDcmVkZW50aWFsQXR0cmlidXRlc1soaWQpa1NlY0F0dHJBcHBsaWNhdGlv
bkxhYmVsXTsKKyAgICBjcmVkZW50aWFsSWQuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KG5zQ3JlZGVudGlhbElkLmJ5dGVzKSwgbnNDcmVkZW50aWFsSWQubGVuZ3RoKTsK
KyAgICBWZWN0b3I8dWludDhfdD4gdXNlcmhhbmRsZTsKKyAgICBOU0RhdGEgKm5zVXNlcmhhbmRs
ZSA9IHNlbGVjdGVkQ3JlZGVudGlhbEF0dHJpYnV0ZXNbKGlkKWtTZWNBdHRyQXBwbGljYXRpb25U
YWddOworICAgIHVzZXJoYW5kbGUuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KG5zVXNlcmhhbmRsZS5ieXRlcyksIG5zVXNlcmhhbmRsZS5sZW5ndGgpOworICAgIGF1dG8g
cmVwbHkgPSBCbG9ja1B0cjx2b2lkKEJPT0wsIE5TRXJyb3IgKik+Ojpmcm9tQ2FsbGFibGUoW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShl
eGNlcHRpb25DYWxsYmFjayksIHJwSWQgPSBvcHRpb25zLnJwSWQuaXNvbGF0ZWRDb3B5KCksIGhh
c2gsIGNyZWRlbnRpYWxJZCA9IFdURk1vdmUoY3JlZGVudGlhbElkKSwgdXNlcmhhbmRsZSA9IFdU
Rk1vdmUodXNlcmhhbmRsZSksIGNvbnRleHQgPSBhZG9wdE5TKGNvbnRleHQpXSAoQk9PTCBzdWNj
ZXNzLCBOU0Vycm9yICplcnJvcikgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOworICAgICAgICBpZiAoIXN1Y2Nlc3MgfHwgZXJyb3IpIHsKKyAgICAgICAgICAgIExP
R19FUlJPUigiQ291bGRuJ3QgYXV0aGVudGljYXRlIHdpdGggYmlvbWV0cmljczogJUAiLCBlcnJv
cik7CisgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayh7IE5vdEFsbG93ZWRFcnJvciwgQVND
SUlMaXRlcmFsKCJDb3VsZG4ndCBnZXQgdXNlciBjb25zZW50LiIpIH0pOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RlcCA5LTEwLgorICAgICAgICAvLyBG
SVhNRSgxODM1MzMpOiBEdWUgdG8gdGhlIHN0YXRlZCBLZXljaGFpbiBsaW1pdGF0aW9ucywgd2Ug
Y2FuJ3Qgc2F2ZSB0aGUgY291bnRlciB2YWx1ZS4KKyAgICAgICAgLy8gVGhlcmVmb3JlLCBpdCBp
cyBhbHdheXMgemVyby4KKyAgICAgICAgdWludDMyX3QgY291bnRlciA9IDA7CisgICAgICAgIGF1
dG8gYXV0aERhdGEgPSBidWlsZEF1dGhEYXRhKHJwSWQsIGdldEFzc2VydGlvbkZsYWdzLCBjb3Vu
dGVyLCB7IH0pOworCisgICAgICAgIC8vIFN0ZXAgMTEuCisgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBzaWduYXR1cmU7CisgICAgICAgIHsKKyAgICAgICAgICAgIE5TRGljdGlvbmFyeSAqcXVlcnkg
PSBAeworICAgICAgICAgICAgICAgIChpZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NLZXksCisg
ICAgICAgICAgICAgICAgKGlkKWtTZWNBdHRyS2V5Q2xhc3M6IChpZClrU2VjQXR0cktleUNsYXNz
UHJpdmF0ZSwKKyAgICAgICAgICAgICAgICAoaWQpa1NlY0F0dHJBcHBsaWNhdGlvbkxhYmVsOiBb
TlNEYXRhIGRhdGFXaXRoQnl0ZXM6Y3JlZGVudGlhbElkLmRhdGEoKSBsZW5ndGg6Y3JlZGVudGlh
bElkLnNpemUoKV0sCisgICAgICAgICAgICAgICAgKGlkKWtTZWNVc2VBdXRoZW50aWNhdGlvbkNv
bnRleHQ6IGNvbnRleHQuZ2V0KCksCisgICAgICAgICAgICAgICAgKGlkKWtTZWNSZXR1cm5SZWY6
IEBZRVMsCisgICAgICAgICAgICB9OworICAgICAgICAgICAgQ0ZUeXBlUmVmIHByaXZhdGVLZXlS
ZWYgPSBudWxscHRyOworICAgICAgICAgICAgT1NTdGF0dXMgc3RhdHVzID0gU2VjSXRlbUNvcHlN
YXRjaGluZygoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKXF1ZXJ5LCAmcHJpdmF0ZUtleVJlZik7
CisgICAgICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZG4ndCBnZXQgdGhlIHByaXZhdGUga2V5IHJlZmVyZW5jZTogJWQiLCBzdGF0dXMpOworICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHsgVW5rbm93bkVycm9yLCBBU0NJSUxpdGVy
YWwoIlVua25vd24gaW50ZXJuYWwgZXJyb3IuIikgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBwcml2YXRlS2V5ID0gYWRvcHRDRihw
cml2YXRlS2V5UmVmKTsKKworICAgICAgICAgICAgTlNNdXRhYmxlRGF0YSAqZGF0YVRvU2lnbiA9
IFtOU011dGFibGVEYXRhIGRhdGFXaXRoQnl0ZXM6YXV0aERhdGEuZGF0YSgpIGxlbmd0aDphdXRo
RGF0YS5zaXplKCldOworICAgICAgICAgICAgW2RhdGFUb1NpZ24gYXBwZW5kQnl0ZXM6aGFzaC5k
YXRhKCkgbGVuZ3RoOmhhc2guc2l6ZSgpXTsKKworICAgICAgICAgICAgQ0ZFcnJvclJlZiBlcnJv
clJlZiA9IG51bGxwdHI7CisgICAgICAgICAgICAvLyBGSVhNRTogQ29udmVydGluZyBDRlR5cGVS
ZWYgdG8gU2VjS2V5UmVmIGlzIHF1aXRlIHN1YnRsZSBoZXJlLgorICAgICAgICAgICAgQ0ZEYXRh
UmVmIHNpZ25hdHVyZVJlZiA9IFNlY0tleUNyZWF0ZVNpZ25hdHVyZSgoX19icmlkZ2UgU2VjS2V5
UmVmKSgoaWQpcHJpdmF0ZUtleVJlZiksIGtTZWNLZXlBbGdvcml0aG1FQ0RTQVNpZ25hdHVyZU1l
c3NhZ2VYOTYyU0hBMjU2LCAoX19icmlkZ2UgQ0ZEYXRhUmVmKWRhdGFUb1NpZ24sICZlcnJvclJl
Zik7CisgICAgICAgICAgICBhdXRvIHJldGFpbkVycm9yID0gYWRvcHRDRihlcnJvclJlZik7Cisg
ICAgICAgICAgICBpZiAoZXJyb3JSZWYpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNv
dWxkbid0IGdlbmVyYXRlIHRoZSBzaWduYXR1cmU6ICVAIiwgKE5TRXJyb3IqKWVycm9yUmVmKTsK
KyAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayh7IFVua25vd25FcnJvciwgQVNDSUlM
aXRlcmFsKCJVbmtub3duIGludGVybmFsIGVycm9yLiIpIH0pOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gcmV0YWluU2lnbmF0dXJlID0g
YWRvcHRDRihzaWduYXR1cmVSZWYpOworICAgICAgICAgICAgTlNEYXRhICpuc1NpZ25hdHVyZSA9
IChOU0RhdGEgKilzaWduYXR1cmVSZWY7CisgICAgICAgICAgICBzaWduYXR1cmUuYXBwZW5kKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG5zU2lnbmF0dXJlLmJ5dGVzKSwgbnNTaWdu
YXR1cmUubGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0ZXAgMTMuCisgICAgICAg
IGNhbGxiYWNrKGNyZWRlbnRpYWxJZCwgYXV0aERhdGEsIHNpZ25hdHVyZSwgdXNlcmhhbmRsZSk7
CisgICAgfSk7CisKKyAgICAvLyBGSVhNRSgxODM1MzMpOiBVc2UgdXNlcmhhbmRsZSBpbnN0ZWFk
IG9mIHVzZXJuYW1lIGR1ZSB0byB0aGUgc3RhdGVkIEtleWNoYWluIGxpbWl0YXRpb25zLgorICAg
IE5TU3RyaW5nICpyZWFzb24gPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkxvZyBpbnRv
ICVAIHdpdGggJUAuIiwgKGlkKW9wdGlvbnMucnBJZCwgc2VsZWN0ZWRDcmVkZW50aWFsQXR0cmli
dXRlc1soaWQpa1NlY0F0dHJBcHBsaWNhdGlvblRhZ11dOworICAgIFtjb250ZXh0IGV2YWx1YXRl
QWNjZXNzQ29udHJvbDooX19icmlkZ2UgU2VjQWNjZXNzQ29udHJvbFJlZilzZWxlY3RlZENyZWRl
bnRpYWxBdHRyaWJ1dGVzWyhpZClrU2VjQXR0ckFjY2Vzc0NvbnRyb2xdIG9wZXJhdGlvbjpMQUFj
Y2Vzc0NvbnRyb2xPcGVyYXRpb25Vc2VLZXlTaWduIGxvY2FsaXplZFJlYXNvbjpyZWFzb24gcmVw
bHk6cmVwbHkuZ2V0KCldOworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCit9CisKIGJvb2wgTG9j
YWxBdXRoZW50aWNhdG9yOjppc0F2YWlsYWJsZSgpIGNvbnN0CiB7CiAjaWYgIVBMQVRGT1JNKElP
UykKQEAgLTM3MSw3ICs1NTAsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6aXNzdWVDbGll
bnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIHJwSWQsIGNvbnN0IFN0cmluZwogCiAgICAgU2Vj
QWNjZXNzQ29udHJvbFJlZiBhY2Nlc3NDb250cm9sUmVmOwogICAgIHsKLSAgICAgICAgQ0ZFcnJv
clJlZiBlcnJvclJlZiA9IE5VTEw7CisgICAgICAgIENGRXJyb3JSZWYgZXJyb3JSZWYgPSBudWxs
cHRyOwogICAgICAgICBhY2Nlc3NDb250cm9sUmVmID0gU2VjQWNjZXNzQ29udHJvbENyZWF0ZVdp
dGhGbGFncyhOVUxMLCBrU2VjQXR0ckFjY2Vzc2libGVXaGVuUGFzc2NvZGVTZXRUaGlzRGV2aWNl
T25seSwga1NlY0FjY2Vzc0NvbnRyb2xQcml2YXRlS2V5VXNhZ2UgfCBrU2VjQWNjZXNzQ29udHJv
bFVzZXJQcmVzZW5jZSwgJmVycm9yUmVmKTsKICAgICAgICAgYXV0byByZXRhaW5FcnJvciA9IGFk
b3B0Q0YoZXJyb3JSZWYpOwogICAgICAgICBpZiAoZXJyb3JSZWYpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyODkyOWI4YTYz
YWYxM2E3OWY5Njc2ZWM5OWNkMWMxZWQ4YmM3ODg0Li5iMjcyM2I1NzU3YmYwNTI2YzA4NWEwMWQz
M2Y3MTM4MWNhYTFlNjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNzA4LDcgKzE3MDgsNyBAQAogCQk1NzMwM0JFRjIwMDk4
MEM2MDAzNTU5NjUgLyogUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MzAzQkVDMjAwOTgwQkYwMDM1
NTk2NSAvKiBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU3MzAzQkY0MjAwOTkwNDYwMDM1NTk2
NSAvKiBKU1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMwM0JGMjIwMDk5MDQ1MDAzNTU5NjUgLyog
SlNQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oICovOyB9OwogCQk1NzMwM0MwMDIwMDk5
NTFDMDAzNTU5NjUgLyogSlNQdWJsaWNLZXlDcmVkZW50aWFsVHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTczMDNCRjkyMDA5OTEzNDAwMzU1OTY1
IC8qIEpTUHVibGljS2V5Q3JlZGVudGlhbFR5cGUuaCAqLzsgfTsKLQkJNTczMDNDMEEyMDA5OUJB
RDAwMzU1OTY1IC8qIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTczMDNDMDYyMDA5OThGODAw
MzU1OTY1IC8qIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oICovOyB9OworCQk1
NzMwM0MwQTIwMDk5QkFEMDAzNTU5NjUgLyogUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRp
b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMw
M0MwNjIwMDk5OEY4MDAzNTU5NjUgLyogUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25z
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcz
MDNDMTEyMDA5OUNCMTAwMzU1OTY1IC8qIEpTUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRp
b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMw
M0MwQzIwMDk5Qzc1MDAzNTU5NjUgLyogSlNQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMuaCAqLzsgfTsKIAkJNTczMDNDMTkyMDA5QTJGMzAwMzU1OTY1IC8qIEpTUHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTczMDNDMTMyMDA5QTI1NzAwMzU1OTY1IC8qIEpTUHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oICovOyB9OwogCQk1NzMwM0MxRjIwMDlBQjQyMDAzNTU5
NjUgLyogQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MzAzQzFCMjAwOUE5ODYwMDM1NTk2NSAv
KiBBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oICovOyB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlh
bHNNZXNzZW5nZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9DcmVkZW50aWFs
TWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5LmNwcAppbmRleCBmZWFiZWE4
Y2ZmNGNkYWE5YjFkZmJhZWY4YTg3NDBjNTE2YjIxMDY4Li4zYWZkZDEzNWMxYWY4MTQ2ODFiMjAw
MjUwMzA3ZTM2MmQ3OTExN2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
cmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50
aWFsc01lc3NlbmdlclByb3h5LmNwcApAQCAtNTcsNiArNTcsNyBAQCB2b2lkIFdlYkNyZWRlbnRp
YWxzTWVzc2VuZ2VyUHJveHk6Om1ha2VDcmVkZW50aWFsKHVpbnQ2NF90IG1lc3NhZ2VJZCwgY29u
c3QgVmVjdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIEZJWE1FKDE4MzUzNCk6IFdl
YWsgcG9pbnRlcnMgZG9lc24ndCB3b3JrIGluIGFub3RoZXIgdGhyZWFkIGJlY2F1c2Ugb2YgcmFj
ZSBjb25kaXRpb24uCisgICAgLy8gRklYTUUoMTgzNTM0KTogVW5pZnkgY2FsbGJhY2tzLgogICAg
IGF1dG8gd2Vha1RoaXMgPSBtX3dlYWtGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKnRoaXMpOwogICAg
IGF1dG8gY2FsbGJhY2sgPSBbd2Vha1RoaXMsIG1lc3NhZ2VJZF0gKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgY3JlZGVudGlhbElkLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGF0dGVzdGF0aW9uT2Jq
ZWN0KSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCkBAIC03MSw4ICs3MiwyMyBAQCB2b2lkIFdl
YkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHk6Om1ha2VDcmVkZW50aWFsKHVpbnQ2NF90IG1lc3Nh
Z2VJZCwgY29uc3QgVmVjdAogICAgIG1fYXV0aGVudGljYXRvci0+bWFrZUNyZWRlbnRpYWwoaGFz
aCwgb3B0aW9ucywgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
KTsKIH0KIAotdm9pZCBXZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5OjpnZXRBc3NlcnRpb24o
dWludDY0X3QpCit2b2lkIFdlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHk6OmdldEFzc2VydGlv
bih1aW50NjRfdCBtZXNzYWdlSWQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3Qg
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJiBvcHRpb25zKQogewor
ICAgIC8vIEZJWE1FKDE4Mjc2NykKKyAgICBpZiAoIW1fYXV0aGVudGljYXRvcikKKyAgICAgICAg
ZXhjZXB0aW9uUmVwbHkobWVzc2FnZUlkLCB7IFdlYkNvcmU6Ok5vdEFsbG93ZWRFcnJvciwgQVND
SUlMaXRlcmFsKCJObyBhdmFsaWFibGUgYXV0aGVudGljYXRvcnMuIikgfSk7CisgICAgLy8gRklY
TUUoMTgzNTM0KTogV2VhayBwb2ludGVycyBkb2Vzbid0IHdvcmsgaW4gYW5vdGhlciB0aHJlYWQg
YmVjYXVzZSBvZiByYWNlIGNvbmRpdGlvbi4KKyAgICAvLyBGSVhNRSgxODM1MzQpOiBVbmlmeSBj
YWxsYmFja3MuCisgICAgYXV0byB3ZWFrVGhpcyA9IG1fd2Vha0ZhY3RvcnkuY3JlYXRlV2Vha1B0
cigqdGhpcyk7CisgICAgYXV0byBjYWxsYmFjayA9IFt3ZWFrVGhpcywgbWVzc2FnZUlkXSAoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBjcmVkZW50aWFsSWQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
YXV0aGVudGljYXRvckRhdGEsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc2lnbmF0dXJlLCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIHVzZXJIYW5kbGUpIHsKKyAgICAgICAgaWYgKHdlYWtUaGlzKQor
ICAgICAgICAgICAgd2Vha1RoaXMtPmdldEFzc2VydGlvblJlcGx5KG1lc3NhZ2VJZCwgY3JlZGVu
dGlhbElkLCBhdXRoZW50aWNhdG9yRGF0YSwgc2lnbmF0dXJlLCB1c2VySGFuZGxlKTsKKyAgICB9
OworICAgIGF1dG8gZXhjZXB0aW9uQ2FsbGJhY2sgPSBbd2Vha1RoaXMsIG1lc3NhZ2VJZF0gKGNv
bnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlvbikgeworICAgICAgICBpZiAod2Vh
a1RoaXMpCisgICAgICAgICAgICB3ZWFrVGhpcy0+ZXhjZXB0aW9uUmVwbHkobWVzc2FnZUlkLCBl
eGNlcHRpb24pOworICAgIH07CisgICAgbV9hdXRoZW50aWNhdG9yLT5nZXRBc3NlcnRpb24oaGFz
aCwgb3B0aW9ucywgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
KTsKIH0KIAogdm9pZCBXZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5Ojppc1VzZXJWZXJpZnlp
bmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUodWludDY0X3QgbWVzc2FnZUlkKQpAQCAt
OTQsNiArMTEwLDExIEBAIHZvaWQgV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94eTo6bWFrZUNy
ZWRlbnRpYWxSZXBseSh1aW50NjRfdCBtZXNzYWdlSWQsIGNvbnN0CiAgICAgbV93ZWJQYWdlUHJv
eHkuc2VuZChNZXNzYWdlczo6V2ViQ3JlZGVudGlhbHNNZXNzZW5nZXI6Ok1ha2VDcmVkZW50aWFs
UmVwbHkobWVzc2FnZUlkLCBjcmVkZW50aWFsSWQsIGF0dGVzdGF0aW9uT2JqZWN0KSk7CiB9CiAK
K3ZvaWQgV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94eTo6Z2V0QXNzZXJ0aW9uUmVwbHkodWlu
dDY0X3QgbWVzc2FnZUlkLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGNyZWRlbnRpYWxJZCwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBhdXRoZW50aWNhdG9yRGF0YSwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBzaWduYXR1cmUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdXNlckhhbmRsZSkKK3sKKyAg
ICBtX3dlYlBhZ2VQcm94eS5zZW5kKE1lc3NhZ2VzOjpXZWJDcmVkZW50aWFsc01lc3Nlbmdlcjo6
R2V0QXNzZXJ0aW9uUmVwbHkobWVzc2FnZUlkLCBjcmVkZW50aWFsSWQsIGF1dGhlbnRpY2F0b3JE
YXRhLCBzaWduYXR1cmUsIHVzZXJIYW5kbGUpKTsKK30KKwogdm9pZCBXZWJDcmVkZW50aWFsc01l
c3NlbmdlclByb3h5Ojppc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFi
bGVSZXBseSh1aW50NjRfdCBtZXNzYWdlSWQsIGJvb2wgcmVzdWx0KQogewogICAgIG1fd2ViUGFn
ZVByb3h5LnNlbmQoTWVzc2FnZXM6OldlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyOjpJc1VzZXJWZXJp
ZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGVSZXBseShtZXNzYWdlSWQsIHJlc3Vs
dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ3JlZGVudGlhbE1hbmFn
ZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXJQcm94eS5o
CmluZGV4IDY5ZWI3MGU3YzQwOGIxY2NmMzY5YmFiYzhiNjExNGQzMmE4NzIyZjAuLjBjMmE0ZGUx
NWUyOWE3NTNhYWMzNGY3OWRkOTA3OTNiZDYzNDEyODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxzTWVzc2VuZ2Vy
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9DcmVkZW50aWFsTWFuYWdlbWVu
dC9XZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5LmgKQEAgLTM3LDYgKzM3LDcgQEAgY2xhc3Mg
TG9jYWxBdXRoZW50aWNhdG9yOwogCiBzdHJ1Y3QgRXhjZXB0aW9uRGF0YTsKIHN0cnVjdCBQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOworc3RydWN0IFB1YmxpY0tleUNyZWRlbnRp
YWxSZXF1ZXN0T3B0aW9uczsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01NSwxMiArNTYs
MTMgQEAgcHJpdmF0ZToKIAogICAgIC8vIFJlY2VpdmVycy4KICAgICB2b2lkIG1ha2VDcmVkZW50
aWFsKHVpbnQ2NF90IG1lc3NhZ2VJZCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25z
dCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zJik7Ci0gICAgdm9p
ZCBnZXRBc3NlcnRpb24odWludDY0X3QgbWVzc2FnZUlkKTsKKyAgICB2b2lkIGdldEFzc2VydGlv
bih1aW50NjRfdCBtZXNzYWdlSWQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3Qg
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJik7CiAgICAgdm9pZCBp
c1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUodWludDY0X3QgbWVz
c2FnZUlkKTsKIAogICAgIC8vIFNlbmRlcnMuCiAgICAgdm9pZCBleGNlcHRpb25SZXBseSh1aW50
NjRfdCBtZXNzYWdlSWQsIGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmKTsKICAgICB2b2lk
IG1ha2VDcmVkZW50aWFsUmVwbHkodWludDY0X3QgbWVzc2FnZUlkLCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGNyZWRlbnRpYWxJZCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBhdHRlc3RhdGlvbk9i
amVjdCk7CisgICAgdm9pZCBnZXRBc3NlcnRpb25SZXBseSh1aW50NjRfdCBtZXNzYWdlSWQsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgY3JlZGVudGlhbElkLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IGF1dGhlbnRpY2F0b3JEYXRhLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNpZ25hdHVyZSwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiB1c2VySGFuZGxlKTsKICAgICB2b2lkIGlzVXNlclZlcmlmeWlu
Z1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZVJlcGx5KHVpbnQ2NF90IG1lc3NhZ2VJZCwg
Ym9vbCk7CiAKICAgICBXZWJQYWdlUHJveHkmIG1fd2ViUGFnZVByb3h5OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlh
bHNNZXNzZW5nZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Ny
ZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJveHkubWVzc2FnZXMu
aW4KaW5kZXggNTUxMjBhMjhhMzU2YmE3MTc3ZTgwZWQ1ZmZiYmIzOWMyMDZkZjBkYy4uYTU4YmJh
ZTZmMDE0YjBiYmI2Y2U5NzhhODQ5YWZmNTM4ZjMzMjYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNzZW5n
ZXJQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9DcmVkZW50
aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5Lm1lc3NhZ2VzLmluCkBA
IC0yNyw3ICsyNyw3IEBACiBtZXNzYWdlcyAtPiBXZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5
IHsKIAogICAgIE1ha2VDcmVkZW50aWFsKHVpbnQ2NF90IG1lc3NhZ2VJZCwgVmVjdG9yPHVpbnQ4
X3Q+IGhhc2gsIHN0cnVjdCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zIG9wdGlvbnMpOwotICAgIEdldEFzc2VydGlvbih1aW50NjRfdCBtZXNzYWdlSWQpOworICAg
IEdldEFzc2VydGlvbih1aW50NjRfdCBtZXNzYWdlSWQsIFZlY3Rvcjx1aW50OF90PiBoYXNoLCBz
dHJ1Y3QgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIG9wdGlvbnMp
OwogICAgIElzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZSh1aW50
NjRfdCBtZXNzYWdlSWQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXIuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxz
TWVzc2VuZ2VyLmNwcAppbmRleCAwM2JiYTY4OWIwOTk5Mjg0ZWMxOWYwMjkzNjVkOWM4ODhmYWJk
MmQ3Li4yMjc5ZDdlZmUxZWJhMzE2MGRiZmM4ZDAxZGUzMjBlZTRkMWUxYTRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVu
dGlhbHNNZXNzZW5nZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9DcmVkZW50
aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3Nlbmdlci5jcHAKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg+CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCkBAIC01Myw4ICs1NCwxMCBAQCB2b2lkIFdlYkNyZWRlbnRpYWxzTWVz
c2VuZ2VyOjptYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0
CiAgICAgbV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OldlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJv
eHk6Ok1ha2VDcmVkZW50aWFsKG1lc3NhZ2VJZCwgaGFzaCwgb3B0aW9ucykpOwogfQogCi12b2lk
IFdlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyOjpnZXRBc3NlcnRpb24oY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiwgY29uc3QgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJiwg
V2ViQ29yZTo6UmVxdWVzdENvbXBsZXRpb25IYW5kbGVyJiYpCit2b2lkIFdlYkNyZWRlbnRpYWxz
TWVzc2VuZ2VyOjpnZXRBc3NlcnRpb24oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25z
dCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMmIG9wdGlvbnMsIFdl
YkNvcmU6OlJlcXVlc3RDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCiB7CisgICAgYXV0byBt
ZXNzYWdlSWQgPSBhZGRSZXF1ZXN0Q29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGVyKSk7
CisgICAgbV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OldlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyUHJv
eHk6OkdldEFzc2VydGlvbihtZXNzYWdlSWQsIGhhc2gsIG9wdGlvbnMpKTsKIH0KIAogdm9pZCBX
ZWJDcmVkZW50aWFsc01lc3Nlbmdlcjo6aXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNh
dG9yQXZhaWxhYmxlKFdlYkNvcmU6OlF1ZXJ5Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVyKQpA
QCAtNzEsNiArNzQsOCBAQCB2b2lkIFdlYkNyZWRlbnRpYWxzTWVzc2VuZ2VyOjptYWtlQ3JlZGVu
dGlhbFJlcGx5KHVpbnQ2NF90IG1lc3NhZ2VJZCwgY29uc3QgVmVjdAogCiB2b2lkIFdlYkNyZWRl
bnRpYWxzTWVzc2VuZ2VyOjpnZXRBc3NlcnRpb25SZXBseSh1aW50NjRfdCBtZXNzYWdlSWQsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgY3JlZGVudGlhbElkLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IGF1dGhlbnRpY2F0b3JEYXRhLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNpZ25hdHVyZSwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiB1c2VySGFuZGxlKQogeworICAgIGF1dG8gaGFuZGxlciA9IHRh
a2VSZXF1ZXN0Q29tcGxldGlvbkhhbmRsZXIobWVzc2FnZUlkKTsKKyAgICBoYW5kbGVyKFdlYkNv
cmU6OkFzc2VydGlvblJldHVybkJ1bmRsZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNyZWRlbnRpYWxJ
ZC5kYXRhKCksIGNyZWRlbnRpYWxJZC5zaXplKCkpLCBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGF1dGhl
bnRpY2F0b3JEYXRhLmRhdGEoKSwgYXV0aGVudGljYXRvckRhdGEuc2l6ZSgpKSwgQXJyYXlCdWZm
ZXI6OmNyZWF0ZShzaWduYXR1cmUuZGF0YSgpLCBzaWduYXR1cmUuc2l6ZSgpKSwgQXJyYXlCdWZm
ZXI6OmNyZWF0ZSh1c2VySGFuZGxlLmRhdGEoKSwgdXNlckhhbmRsZS5zaXplKCkpKSk7CiB9CiAK
IHZvaWQgV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXI6OmlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0
aGVudGljYXRvckF2YWlsYWJsZVJlcGx5KHVpbnQ2NF90IG1lc3NhZ2VJZCwgYm9vbCByZXN1bHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1l
bnQvV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvQ3JlZGVudGlhbE1hbmFnZW1lbnQvV2ViQ3JlZGVudGlhbHNNZXNzZW5nZXIubWVz
c2FnZXMuaW4KaW5kZXggOTI4MGUwNjk1MWM3ODI5Y2U1Zjc1NjZkODcwZWFhMzYwNTlkZDliNC4u
YTZjOGVlY2E3YzQ3MzQ0MDE4NGZmMTk5MTkwOWYzMjViYzZlN2QxYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0NyZWRlbnRpYWxNYW5hZ2VtZW50L1dlYkNyZWRlbnRpYWxz
TWVzc2VuZ2VyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9DcmVk
ZW50aWFsTWFuYWdlbWVudC9XZWJDcmVkZW50aWFsc01lc3Nlbmdlci5tZXNzYWdlcy5pbgpAQCAt
MzAsNyArMzAsNiBAQCBtZXNzYWdlcyAtPiBXZWJDcmVkZW50aWFsc01lc3NlbmdlciB7CiAgICAg
TWFrZUNyZWRlbnRpYWxSZXBseSh1aW50NjRfdCBtZXNzYWdlSWQsIFZlY3Rvcjx1aW50OF90PiBj
cmVkZW50aWFsSWQsIFZlY3Rvcjx1aW50OF90PiBhdHRlc3RhdGlvbk9iamVjdCk7CiAgICAgR2V0
QXNzZXJ0aW9uUmVwbHkodWludDY0X3QgbWVzc2FnZUlkLCBWZWN0b3I8dWludDhfdD4gY3JlZGVu
dGlhbElkLCBWZWN0b3I8dWludDhfdD4gYXV0aGVudGljYXRvckRhdGEsIFZlY3Rvcjx1aW50OF90
PiBzaWduYXR1cmUsIFZlY3Rvcjx1aW50OF90PiB1c2VySGFuZGxlKTsKICAgICBJc1VzZXJWZXJp
ZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGVSZXBseSh1aW50NjRfdCBtZXNzYWdl
SWQsIGJvb2wgcmVzdWx0KTsKLWV4Y2VwdGlvblJlcGx5KHVpbnQ2NF90IG1lc3NhZ2VJZCwgc3Ry
dWN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgZXhjZXB0aW9uKTsKIH0KIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDZjYjdlZDUz
ZTlhOTAwZmM4NTVjMjdlNzZhNjkzOGMzZGM5YzYzMi4uMGNlNTIwZGFhN2Q5MDFhNzFlZWRiNzM4
OTM3ZjExOWNiYmZiNGM2NyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE4LTAzLTIxICBKaWV3ZW4gVGFuICA8amll
d2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhOXSBJbXBsZW1lbnQgYXV0aGVu
dGljYXRvckdldEFzc2VydGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTgzODgxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNzI1ODYyOD4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBCcmVudCBGdWxnaGFtLgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9pb3MvTG9jYWxBdXRoZW50aWNhdG9yLm1tOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6Z2V0VGVzdEtleSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjphZGRUZXN0S2V5VG9L
ZXljaGFpbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpMQUV2YWx1YXRlUG9saWN5RmFpbGVk
U3dpenpsZXI6OmV2YWx1YXRlUG9saWN5RmFpbGVkKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OkxBRXZhbHVhdGVQb2xpY3lQYXNzZWRTd2l6emxlcjo6ZXZhbHVhdGVQb2xpY3lQYXNzZWQpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6TEFFdmFsdWF0ZUFjY2Vzc0NvbnRyb2xGYWlsZWRTd2l6
emxlcjo6TEFFdmFsdWF0ZUFjY2Vzc0NvbnRyb2xGYWlsZWRTd2l6emxlcik6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpMQUV2YWx1YXRlQWNjZXNzQ29udHJvbEZhaWxlZFN3aXp6bGVyOjpldmFs
dWF0ZUFjY2Vzc0NvbnRyb2xGYWlsZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6TEFFdmFs
dWF0ZUFjY2Vzc0NvbnRyb2xQYXNzZWRTd2l6emxlcjo6TEFFdmFsdWF0ZUFjY2Vzc0NvbnRyb2xQ
YXNzZWRTd2l6emxlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpMQUV2YWx1YXRlQWNjZXNz
Q29udHJvbFBhc3NlZFN3aXp6bGVyOjpldmFsdWF0ZUFjY2Vzc0NvbnRyb2xQYXNzZWQpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTgtMDMtMTkgIEppZXdlbiBUYW4gIDxq
aWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBhbm90aGVyIHF1aWNr
IGZpeCBmb3IgcjIyOTY5OQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9p
b3MvTG9jYWxBdXRoZW50aWNhdG9yLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3Mv
TG9jYWxBdXRoZW50aWNhdG9yLm1tCmluZGV4IDc5YWM2ZDI4YTU0YjliZmYxZDFkZmI1Y2Y5YWFi
NGIyOWQ2ZjA2YTUuLjg1NWIxNGZjY2RjNzRlMzk1OWY1ZDEyZDE0NDIxNDllMzMxM2YyZDcgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0xvY2FsQXV0aGVudGljYXRv
ci5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Mb2NhbEF1dGhlbnRpY2F0
b3IubW0KQEAgLTM4LDYgKzM4LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRXhjZXB0aW9uRGF0YS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbEF1dGhlbnRpY2F0b3IuaD4KICNpbXBvcnQgPFdlYkNv
cmUvUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9QdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaD4KICNpbXBvcnQgPHd0Zi9CbG9j
a1B0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KQEAgLTg1LDcgKzg2LDcgQEAgUmV0YWluUHRyPFNlY0tleVJlZj4gZ2V0VGVz
dEtleSgpCiAgICAgICAgIChpZClrU2VjQXR0cktleUNsYXNzOiAoaWQpa1NlY0F0dHJLZXlDbGFz
c1ByaXZhdGUsCiAgICAgICAgIChpZClrU2VjQXR0cktleVNpemVJbkJpdHM6IEAyNTYsCiAgICAg
fTsKLSAgICBDRkVycm9yUmVmIGVycm9yUmVmID0gTlVMTDsKKyAgICBDRkVycm9yUmVmIGVycm9y
UmVmID0gbnVsbHB0cjsKICAgICBhdXRvIGtleSA9IGFkb3B0Q0YoU2VjS2V5Q3JlYXRlV2l0aERh
dGEoCiAgICAgICAgIChfX2JyaWRnZSBDRkRhdGFSZWYpYWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdFdpdGhCYXNlNjRFbmNvZGVkU3RyaW5nOnRlc3RFUzI1NlByaXZhdGVLZXlCYXNlNjQgb3B0
aW9uczpOU0RhdGFCYXNlNjREZWNvZGluZ0lnbm9yZVVua25vd25DaGFyYWN0ZXJzXSkuZ2V0KCks
CiAgICAgICAgIChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpb3B0aW9ucywKQEAgLTk2LDYgKzk3
LDE5IEBAIFJldGFpblB0cjxTZWNLZXlSZWY+IGdldFRlc3RLZXkoKQogICAgIHJldHVybiBrZXk7
CiB9CiAKK3ZvaWQgYWRkVGVzdEtleVRvS2V5Y2hhaW4oKQoreworICAgIGF1dG8ga2V5ID0gZ2V0
VGVzdEtleSgpOworICAgIE5TRGljdGlvbmFyeSogYWRkUXVlcnkgPSBAeworICAgICAgICAoaWQp
a1NlY1ZhbHVlUmVmOiAoaWQpa2V5LmdldCgpLAorICAgICAgICAoaWQpa1NlY0NsYXNzOiAoaWQp
a1NlY0NsYXNzS2V5LAorICAgICAgICAoaWQpa1NlY0F0dHJMYWJlbDogdGVzdFJwSWQsCisgICAg
ICAgIChpZClrU2VjQXR0ckFwcGxpY2F0aW9uVGFnOiBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6dGVz
dFVzZXJoYW5kbGUgbGVuZ3RoOnNpemVvZih0ZXN0VXNlcmhhbmRsZSldLAorICAgIH07CisgICAg
T1NTdGF0dXMgc3RhdHVzID0gU2VjSXRlbUFkZCgoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKWFk
ZFF1ZXJ5LCBOVUxMKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc3RhdHVzKTsKK30KKwogdm9pZCBjbGVh
blVwS2V5Y2hhaW4oKQogewogICAgIC8vIENsZWFudXAgdGhlIGtleWNoYWluLgpAQCAtMTQxLDcg
KzE1NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9p
ZCBldmFsdWF0ZVBvbGljeUZhaWxlZChpZCBzZWxmLCBTRUwgX2NtZCwgTEFQb2xpY3kgcG9saWN5
LCBOU1N0cmluZyAqIHJlYXNvbiwgdm9pZCAoXnJlcGx5KShCT09MIHN1Y2Nlc3MsIE5TRXJyb3Ig
KmVycm9yKSkKKyAgICBzdGF0aWMgdm9pZCBldmFsdWF0ZVBvbGljeUZhaWxlZChpZCwgU0VMLCBM
QVBvbGljeSwgTlNTdHJpbmcgKiwgdm9pZCAoXnJlcGx5KShCT09MLCBOU0Vycm9yICopKQogICAg
IHsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQ
QVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKICAgICAgICAgICAgIFV0aWw6OnNs
ZWVwKDEpOyAvLyBtaW1pYyB1c2VyIGludGVyYWN0aW9uIGRlbGF5CkBAIC0xNTgsNyArMTcyLDQx
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBldmFs
dWF0ZVBvbGljeVBhc3NlZChpZCBzZWxmLCBTRUwgX2NtZCwgTEFQb2xpY3kgcG9saWN5LCBOU1N0
cmluZyAqIHJlYXNvbiwgdm9pZCAoXnJlcGx5KShCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKmVycm9y
KSkKKyAgICBzdGF0aWMgdm9pZCBldmFsdWF0ZVBvbGljeVBhc3NlZChpZCwgU0VMLCBMQVBvbGlj
eSwgTlNTdHJpbmcgKiwgdm9pZCAoXnJlcGx5KShCT09MLCBOU0Vycm9yICopKQorICAgIHsKKyAg
ICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9R
VUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKKyAgICAgICAgICAgIFV0aWw6OnNsZWVwKDEp
OyAvLyBtaW1pYyB1c2VyIGludGVyYWN0aW9uIGRlbGF5CisgICAgICAgICAgICByZXBseShZRVMs
IG5pbCk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIG1f
c3dpenpsZXI7Cit9OworCitjbGFzcyBMQUV2YWx1YXRlQWNjZXNzQ29udHJvbEZhaWxlZFN3aXp6
bGVyIHsKK3B1YmxpYzoKKyAgICBMQUV2YWx1YXRlQWNjZXNzQ29udHJvbEZhaWxlZFN3aXp6bGVy
KCkKKyAgICAgICAgOiBtX3N3aXp6bGVyKFtMQUNvbnRleHQgY2xhc3NdLCBAc2VsZWN0b3IoZXZh
bHVhdGVBY2Nlc3NDb250cm9sOm9wZXJhdGlvbjpsb2NhbGl6ZWRSZWFzb246cmVwbHk6KSwgcmVp
bnRlcnByZXRfY2FzdDxJTVA+KGV2YWx1YXRlQWNjZXNzQ29udHJvbEZhaWxlZCkpCisgICAgewor
ICAgIH0KK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgZXZhbHVhdGVBY2Nlc3NDb250cm9sRmFp
bGVkKGlkLCBTRUwsIFNlY0FjY2Vzc0NvbnRyb2xSZWYsIExBQWNjZXNzQ29udHJvbE9wZXJhdGlv
biwgTlNTdHJpbmcgKiwgdm9pZCAoXnJlcGx5KShCT09MLCBOU0Vycm9yICopKQorICAgIHsKKyAg
ICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9R
VUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKKyAgICAgICAgICAgIFV0aWw6OnNsZWVwKDEp
OyAvLyBtaW1pYyB1c2VyIGludGVyYWN0aW9uIGRlbGF5CisgICAgICAgICAgICByZXBseShOTywg
bmlsKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgbV9z
d2l6emxlcjsKK307CisKK2NsYXNzIExBRXZhbHVhdGVBY2Nlc3NDb250cm9sUGFzc2VkU3dpenps
ZXIgeworcHVibGljOgorICAgIExBRXZhbHVhdGVBY2Nlc3NDb250cm9sUGFzc2VkU3dpenpsZXIo
KQorICAgICAgICA6IG1fc3dpenpsZXIoW0xBQ29udGV4dCBjbGFzc10sIEBzZWxlY3RvcihldmFs
dWF0ZUFjY2Vzc0NvbnRyb2w6b3BlcmF0aW9uOmxvY2FsaXplZFJlYXNvbjpyZXBseTopLCByZWlu
dGVycHJldF9jYXN0PElNUD4oZXZhbHVhdGVBY2Nlc3NDb250cm9sUGFzc2VkKSkKKyAgICB7Cisg
ICAgfQorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBldmFsdWF0ZUFjY2Vzc0NvbnRyb2xQYXNz
ZWQoaWQsIFNFTCwgU2VjQWNjZXNzQ29udHJvbFJlZiwgTEFBY2Nlc3NDb250cm9sT3BlcmF0aW9u
LCBOU1N0cmluZyAqLCB2b2lkIChecmVwbHkpKEJPT0wsIE5TRXJyb3IgKikpCiAgICAgewogICAg
ICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FV
RVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeewogICAgICAgICAgICAgVXRpbDo6c2xlZXAoMSk7
IC8vIG1pbWljIHVzZXIgaW50ZXJhY3Rpb24gZGVsYXkKQEAgLTIzNCwxOCArMjgyLDggQEAgVEVT
VChMb2NhbEF1dGhlbnRpY2F0b3IsIE1ha2VDcmVkZW50aWFsTm90U3VwcG9ydGVkUHViS2V5Q3Jl
ZFBhcmFtcykKIAogVEVTVChMb2NhbEF1dGhlbnRpY2F0b3IsIE1ha2VDcmVkZW50aWFsRXhjbHVk
ZUNyZWRlbnRpYWxzTWF0Y2gpCiB7Ci0gICAgLy8gSW5zZXJ0IHRoZSB0ZXN0IGtleSBpbnRvIEtl
eWNoYWluCi0gICAgYXV0byBrZXkgPSBnZXRUZXN0S2V5KCk7Ci0gICAgTlNEaWN0aW9uYXJ5KiBh
ZGRRdWVyeSA9IEB7Ci0gICAgICAgIChpZClrU2VjVmFsdWVSZWY6IChpZClrZXkuZ2V0KCksCi0g
ICAgICAgIChpZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NLZXksCi0gICAgICAgIChpZClrU2Vj
QXR0ckxhYmVsOiB0ZXN0UnBJZCwKLSAgICAgICAgKGlkKWtTZWNBdHRyQXBwbGljYXRpb25UYWc6
IFtOU0RhdGEgZGF0YVdpdGhCeXRlczp0ZXN0VXNlcmhhbmRsZSBsZW5ndGg6c2l6ZW9mKHRlc3RV
c2VyaGFuZGxlKV0sCi0gICAgfTsKLSAgICBPU1N0YXR1cyBzdGF0dXMgPSBTZWNJdGVtQWRkKChf
X2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpYWRkUXVlcnksIE5VTEwpOwotICAgIEVYUEVDVF9GQUxT
RShzdGF0dXMpOworICAgIGFkZFRlc3RLZXlUb0tleWNoYWluKCk7CiAKLSAgICAvLyBJbnZva2Ug
dGhlIExvY2FsQXV0aGVudGljYXRvci4KICAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFs
RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGRlc2NyaXB0b3IudHlwZSA9IFdlYkNvcmU6OlB1
YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXk7CiAgICAgV1RGOjpiYXNlNjREZWNvZGUo
dGVzdENyZWRlbnRpYWxJZEJhc2U2NCwgZGVzY3JpcHRvci5pZFZlY3Rvcik7CkBAIC0zNTAsMTUg
KzM4OCw3IEBAIFRFU1QoTG9jYWxBdXRoZW50aWNhdG9yLCBNYWtlQ3JlZGVudGlhbERlbGV0ZU9s
ZGVyQ3JlZGVuaXRhbCkKICAgICBMQUV2YWx1YXRlUG9saWN5UGFzc2VkU3dpenpsZXIgZXZhbHVh
dGVQb2xpY3lQYXNzZWRTd2l6emxlcjsKIAogICAgIC8vIEluc2VydCB0aGUgb2xkZXIgY3JlZGVu
dGlhbAotICAgIGF1dG8ga2V5ID0gZ2V0VGVzdEtleSgpOwotICAgIE5TRGljdGlvbmFyeSogYWRk
UXVlcnkgPSBAewotICAgICAgICAoaWQpa1NlY1ZhbHVlUmVmOiAoaWQpa2V5LmdldCgpLAotICAg
ICAgICAoaWQpa1NlY0NsYXNzOiAoaWQpa1NlY0NsYXNzS2V5LAotICAgICAgICAoaWQpa1NlY0F0
dHJMYWJlbDogdGVzdFJwSWQsCi0gICAgICAgIChpZClrU2VjQXR0ckFwcGxpY2F0aW9uVGFnOiBb
TlNEYXRhIGRhdGFXaXRoQnl0ZXM6dGVzdFVzZXJoYW5kbGUgbGVuZ3RoOnNpemVvZih0ZXN0VXNl
cmhhbmRsZSldLAotICAgIH07Ci0gICAgT1NTdGF0dXMgc3RhdHVzID0gU2VjSXRlbUFkZCgoX19i
cmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKWFkZFF1ZXJ5LCBOVUxMKTsKLSAgICBFWFBFQ1RfRkFMU0Uo
c3RhdHVzKTsKKyAgICBhZGRUZXN0S2V5VG9LZXljaGFpbigpOwogCiAgICAgV2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBjcmVhdGlvbk9wdGlvbnM7CiAgICAgY3Jl
YXRpb25PcHRpb25zLnJwLmlkID0gdGVzdFJwSWQ7CkBAIC00NzUsNyArNTA1LDcgQEAgVEVTVChM
b2NhbEF1dGhlbnRpY2F0b3IsIE1ha2VDcmVkZW50aWFsUGFzc2VkV2l0aFNlbGZBdHRlc3RhdGlv
bikKICAgICAgICAgYXV0byYgeDVjID0gYXR0U3RtdC5maW5kKGNib3I6OkNCT1JWYWx1ZSgieDVj
IikpLT5zZWNvbmQuZ2V0QXJyYXkoKTsKICAgICAgICAgYXV0byYgYXR0ZXN0YXRpb25DZXJ0aWZp
Y2F0ZURhdGEgPSB4NWNbMF0uZ2V0Qnl0ZVN0cmluZygpOwogICAgICAgICBhdXRvIGF0dGVzdGF0
aW9uQ2VydGlmaWNhdGUgPSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ3JlYXRlV2l0aERhdGEoTlVM
TCwgKF9fYnJpZGdlIENGRGF0YVJlZilbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6YXR0ZXN0YXRpb25D
ZXJ0aWZpY2F0ZURhdGEuZGF0YSgpIGxlbmd0aDphdHRlc3RhdGlvbkNlcnRpZmljYXRlRGF0YS5z
aXplKCldKSk7Ci0gICAgICAgIENGU3RyaW5nUmVmIGNvbW1vbk5hbWUgPSBOVUxMOworICAgICAg
ICBDRlN0cmluZ1JlZiBjb21tb25OYW1lID0gbnVsbHB0cjsKICAgICAgICAgc3RhdHVzID0gU2Vj
Q2VydGlmaWNhdGVDb3B5Q29tbW9uTmFtZShhdHRlc3RhdGlvbkNlcnRpZmljYXRlLmdldCgpLCAm
Y29tbW9uTmFtZSk7CiAgICAgICAgIGF1dG8gcmV0YWluQ29tbW9uTmFtZSA9IGFkb3B0Q0YoY29t
bW9uTmFtZSk7CiAgICAgICAgIEFTU0VSVCghc3RhdHVzKTsKQEAgLTQ4Myw3ICs1MTMsNyBAQCBU
RVNUKExvY2FsQXV0aGVudGljYXRvciwgTWFrZUNyZWRlbnRpYWxQYXNzZWRXaXRoU2VsZkF0dGVz
dGF0aW9uKQogCiAgICAgICAgIGF1dG8mIGF0dGVzdGF0aW9uSXNzdWluZ0NBQ2VydGlmaWNhdGVE
YXRhID0geDVjWzFdLmdldEJ5dGVTdHJpbmcoKTsKICAgICAgICAgYXV0byBhdHRlc3RhdGlvbklz
c3VpbmdDQUNlcnRpZmljYXRlID0gYWRvcHRDRihTZWNDZXJ0aWZpY2F0ZUNyZWF0ZVdpdGhEYXRh
KE5VTEwsIChfX2JyaWRnZSBDRkRhdGFSZWYpW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmF0dGVzdGF0
aW9uSXNzdWluZ0NBQ2VydGlmaWNhdGVEYXRhLmRhdGEoKSBsZW5ndGg6YXR0ZXN0YXRpb25Jc3N1
aW5nQ0FDZXJ0aWZpY2F0ZURhdGEuc2l6ZSgpXSkpOwotICAgICAgICBjb21tb25OYW1lID0gTlVM
TDsKKyAgICAgICAgY29tbW9uTmFtZSA9IG51bGxwdHI7CiAgICAgICAgIHN0YXR1cyA9IFNlY0Nl
cnRpZmljYXRlQ29weUNvbW1vbk5hbWUoYXR0ZXN0YXRpb25Jc3N1aW5nQ0FDZXJ0aWZpY2F0ZS5n
ZXQoKSwgJmNvbW1vbk5hbWUpOwogICAgICAgICByZXRhaW5Db21tb25OYW1lID0gYWRvcHRDRihj
b21tb25OYW1lKTsKICAgICAgICAgQVNTRVJUKCFzdGF0dXMpOwpAQCAtNTAzLDYgKzUzMywxOTkg
QEAgVEVTVChMb2NhbEF1dGhlbnRpY2F0b3IsIE1ha2VDcmVkZW50aWFsUGFzc2VkV2l0aFNlbGZB
dHRlc3RhdGlvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogfQogCitU
RVNUKExvY2FsQXV0aGVudGljYXRvciwgR2V0QXNzZXJ0aW9uQWxsb3dDcmVkZW50aWFsc01pc21h
dGNoMSkKK3sKKyAgICAvLyBUcmFuc3BvcnRzIG1pc21hdGNoZWQKKyAgICBXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgIGRlc2NyaXB0b3IudHlw
ZSA9IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXk7CisgICAgZGVz
Y3JpcHRvci50cmFuc3BvcnRzLmFwcGVuZChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVz
Y3JpcHRvcjo6QXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiKTsKKyAgICBXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgcmVxdWVzdE9wdGlvbnM7CisgICAgcmVxdWVz
dE9wdGlvbnMuYWxsb3dDcmVkZW50aWFscy5hcHBlbmQoV1RGTW92ZShkZXNjcmlwdG9yKSk7CisK
KyAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVzdExvY2FsQXV0
aGVudGljYXRvcj4gYXV0aGVudGljYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8VGVzdExvY2FsQXV0
aGVudGljYXRvcj4oKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gWyZkb25lXSAoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JikgeworICAgICAgICBFWFBFQ1RfRkFMU0UodHJ1ZSk7
CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH07CisgICAgYXV0byBleGNlcHRpb25DYWxsYmFj
ayA9IFsmZG9uZV0gKGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlvbikgbXV0
YWJsZSB7CisgICAgICAgIEVYUEVDVF9FUShXZWJDb3JlOjpOb3RBbGxvd2VkRXJyb3IsIGV4Y2Vw
dGlvbi5jb2RlKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJObyBtYXRjaGVkIGNyZWRlbnRpYWxz
IGFyZSBmb3VuZCBpbiB0aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4iLCBleGNl
cHRpb24ubWVzc2FnZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAg
IH07CisgICAgYXV0aGVudGljYXRvci0+Z2V0QXNzZXJ0aW9uKHsgfSwgcmVxdWVzdE9wdGlvbnMs
IFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSk7CisKKyAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworfQorCitURVNUKExvY2FsQXV0aGVudGlj
YXRvciwgR2V0QXNzZXJ0aW9uQWxsb3dDcmVkZW50aWFsc01pc21hdGNoMikKK3sKKyAgICAvLyBO
byBleGlzdGluZyBjcmVkZW50aWFsCisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJl
cXVlc3RPcHRpb25zIHJlcXVlc3RPcHRpb25zOworICAgIHJlcXVlc3RPcHRpb25zLnJwSWQgPSB0
ZXN0UnBJZDsKKworICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxU
ZXN0TG9jYWxBdXRoZW50aWNhdG9yPiBhdXRoZW50aWNhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxU
ZXN0TG9jYWxBdXRoZW50aWNhdG9yPigpOworICAgIGF1dG8gY2FsbGJhY2sgPSBbJmRvbmVdIChj
b25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0
b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mKSB7CisgICAgICAgIEVYUEVDVF9G
QUxTRSh0cnVlKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfTsKKyAgICBhdXRvIGV4Y2Vw
dGlvbkNhbGxiYWNrID0gWyZkb25lXSAoY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSYgZXhj
ZXB0aW9uKSBtdXRhYmxlIHsKKyAgICAgICAgRVhQRUNUX0VRKFdlYkNvcmU6Ok5vdEFsbG93ZWRF
cnJvciwgZXhjZXB0aW9uLmNvZGUpOworICAgICAgICBFWFBFQ1RfU1RSRVEoIk5vIG1hdGNoZWQg
Y3JlZGVudGlhbHMgYXJlIGZvdW5kIGluIHRoZSBwbGF0Zm9ybSBhdHRhY2hlZCBhdXRoZW50aWNh
dG9yLiIsIGV4Y2VwdGlvbi5tZXNzYWdlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgZG9uZSA9
IHRydWU7CisgICAgfTsKKyAgICBhdXRoZW50aWNhdG9yLT5nZXRBc3NlcnRpb24oeyB9LCByZXF1
ZXN0T3B0aW9ucywgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
KTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Cit9CisKK1RFU1QoTG9j
YWxBdXRoZW50aWNhdG9yLCBHZXRBc3NlcnRpb25BbGxvd0NyZWRlbnRpYWxzTWlzbWF0Y2gzKQor
eworICAgIC8vIENyZWRlbnRpYWwgSUQgbWlzbWF0Y2hlZAorICAgIGFkZFRlc3RLZXlUb0tleWNo
YWluKCk7CisKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBkZXNj
cmlwdG9yOworICAgIGRlc2NyaXB0b3IudHlwZSA9IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRp
YWxUeXBlOjpQdWJsaWNLZXk7CisgICAgV1RGOjpiYXNlNjREZWNvZGUodGVzdENyZWRlbnRpYWxJ
ZEJhc2U2NCwgZGVzY3JpcHRvci5pZFZlY3Rvcik7CisgICAgZGVzY3JpcHRvci5pZFZlY3Rvclsx
OV0gPSAwOyAvLyBudWtlIHRoZSBsYXN0IGJ5dGUuCisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zIHJlcXVlc3RPcHRpb25zOworICAgIHJlcXVlc3RPcHRpb25z
LnJwSWQgPSB0ZXN0UnBJZDsKKyAgICByZXF1ZXN0T3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLmFw
cGVuZChkZXNjcmlwdG9yKTsKKworICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxUZXN0TG9jYWxBdXRoZW50aWNhdG9yPiBhdXRoZW50aWNhdG9yID0gc3RkOjptYWtl
X3VuaXF1ZTxUZXN0TG9jYWxBdXRoZW50aWNhdG9yPigpOworICAgIGF1dG8gY2FsbGJhY2sgPSBb
JmRvbmVdIChjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBj
b25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mKSB7CisgICAgICAg
IEVYUEVDVF9GQUxTRSh0cnVlKTsKKyAgICAgICAgY2xlYW5VcEtleWNoYWluKCk7CisgICAgICAg
IGRvbmUgPSB0cnVlOworICAgIH07CisgICAgYXV0byBleGNlcHRpb25DYWxsYmFjayA9IFsmZG9u
ZV0gKGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlvbikgbXV0YWJsZSB7Cisg
ICAgICAgIEVYUEVDVF9FUShXZWJDb3JlOjpOb3RBbGxvd2VkRXJyb3IsIGV4Y2VwdGlvbi5jb2Rl
KTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJObyBtYXRjaGVkIGNyZWRlbnRpYWxzIGFyZSBmb3Vu
ZCBpbiB0aGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGljYXRvci4iLCBleGNlcHRpb24ubWVz
c2FnZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGNsZWFuVXBLZXljaGFpbigpOworICAgICAg
ICBkb25lID0gdHJ1ZTsKKyAgICB9OworICAgIGF1dGhlbnRpY2F0b3ItPmdldEFzc2VydGlvbih7
IH0sIHJlcXVlc3RPcHRpb25zLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25D
YWxsYmFjaykpOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKK30KKwor
VEVTVChMb2NhbEF1dGhlbnRpY2F0b3IsIEdldEFzc2VydGlvbkJpb21ldHJpY3NOb3RFbnJvbGxl
ZCkKK3sKKyAgICBMQUNhbnRFdmFsdWF0ZVBvbGljeVN3aXp6bGVyIHN3aXp6bGVyOworCisgICAg
YWRkVGVzdEtleVRvS2V5Y2hhaW4oKTsKKworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRp
YWxSZXF1ZXN0T3B0aW9ucyByZXF1ZXN0T3B0aW9uczsKKyAgICByZXF1ZXN0T3B0aW9ucy5ycElk
ID0gdGVzdFJwSWQ7CisKKyAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8VGVzdExvY2FsQXV0aGVudGljYXRvcj4gYXV0aGVudGljYXRvciA9IHN0ZDo6bWFrZV91bmlx
dWU8VGVzdExvY2FsQXV0aGVudGljYXRvcj4oKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gWyZkb25l
XSAoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JikgeworICAgICAgICBFWFBF
Q1RfRkFMU0UodHJ1ZSk7CisgICAgICAgIGNsZWFuVXBLZXljaGFpbigpOworICAgICAgICBkb25l
ID0gdHJ1ZTsKKyAgICB9OworICAgIGF1dG8gZXhjZXB0aW9uQ2FsbGJhY2sgPSBbJmRvbmVdIChj
b25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiBleGNlcHRpb24pIG11dGFibGUgeworICAgICAg
ICBFWFBFQ1RfRVEoV2ViQ29yZTo6Tm90QWxsb3dlZEVycm9yLCBleGNlcHRpb24uY29kZSk7Cisg
ICAgICAgIEVYUEVDVF9TVFJFUSgiTm8gYXZhbGlhYmxlIGF1dGhlbnRpY2F0b3JzLiIsIGV4Y2Vw
dGlvbi5tZXNzYWdlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgY2xlYW5VcEtleWNoYWluKCk7
CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH07CisgICAgYXV0aGVudGljYXRvci0+Z2V0QXNz
ZXJ0aW9uKHsgfSwgcmVxdWVzdE9wdGlvbnMsIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKSk7CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OworfQorCitURVNUKExvY2FsQXV0aGVudGljYXRvciwgR2V0QXNzZXJ0aW9uQmlvbWV0cmljc05v
dEF1dGhlbnRpY2F0ZWQpCit7CisgICAgTEFDYW5FdmFsdWF0ZVBvbGljeVN3aXp6bGVyIGNhbkV2
YWx1YXRlUG9saWN5U3dpenpsZXI7CisgICAgTEFFdmFsdWF0ZUFjY2Vzc0NvbnRyb2xGYWlsZWRT
d2l6emxlciBldmFsdWF0ZUFjY2Vzc0NvbnRyb2xGYWlsZWRTd2l6emxlcjsKKworICAgIGFkZFRl
c3RLZXlUb0tleWNoYWluKCk7CisKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVx
dWVzdE9wdGlvbnMgcmVxdWVzdE9wdGlvbnM7CisgICAgcmVxdWVzdE9wdGlvbnMucnBJZCA9IHRl
c3RScElkOworCisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRl
c3RMb2NhbEF1dGhlbnRpY2F0b3I+IGF1dGhlbnRpY2F0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPFRl
c3RMb2NhbEF1dGhlbnRpY2F0b3I+KCk7CisgICAgYXV0byBjYWxsYmFjayA9IFsmZG9uZV0gKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpIHsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKHRydWUpOworICAgICAgICBjbGVhblVwS2V5Y2hhaW4oKTsKKyAgICAgICAgZG9uZSA9IHRy
dWU7CisgICAgfTsKKyAgICBhdXRvIGV4Y2VwdGlvbkNhbGxiYWNrID0gWyZkb25lXSAoY29uc3Qg
V2ViQ29yZTo6RXhjZXB0aW9uRGF0YSYgZXhjZXB0aW9uKSBtdXRhYmxlIHsKKyAgICAgICAgRVhQ
RUNUX0VRKFdlYkNvcmU6Ok5vdEFsbG93ZWRFcnJvciwgZXhjZXB0aW9uLmNvZGUpOworICAgICAg
ICBFWFBFQ1RfU1RSRVEoIkNvdWxkbid0IGdldCB1c2VyIGNvbnNlbnQuIiwgZXhjZXB0aW9uLm1l
c3NhZ2UuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBjbGVhblVwS2V5Y2hhaW4oKTsKKyAgICAg
ICAgZG9uZSA9IHRydWU7CisgICAgfTsKKyAgICBhdXRoZW50aWNhdG9yLT5nZXRBc3NlcnRpb24o
eyB9LCByZXF1ZXN0T3B0aW9ucywgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spKTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Cit9CisK
K1RFU1QoTG9jYWxBdXRoZW50aWNhdG9yLCBHZXRBc3NlcnRpb25QYXNzZWQpCit7CisgICAgTEFD
YW5FdmFsdWF0ZVBvbGljeVN3aXp6bGVyIGNhbkV2YWx1YXRlUG9saWN5U3dpenpsZXI7CisgICAg
TEFFdmFsdWF0ZUFjY2Vzc0NvbnRyb2xQYXNzZWRTd2l6emxlciBldmFsdWF0ZUFjY2Vzc0NvbnRy
b2xQYXNzZWRTd2l6emxlcjsKKworICAgIGFkZFRlc3RLZXlUb0tleWNoYWluKCk7CisKKyAgICBX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgcmVxdWVzdE9wdGlvbnM7
CisgICAgcmVxdWVzdE9wdGlvbnMucnBJZCA9IHRlc3RScElkOworCisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGhhc2goMzIpOworCisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFRlc3RMb2NhbEF1dGhlbnRpY2F0b3I+IGF1dGhlbnRpY2F0b3IgPSBzdGQ6Om1ha2VfdW5p
cXVlPFRlc3RMb2NhbEF1dGhlbnRpY2F0b3I+KCk7CisgICAgYXV0byBjYWxsYmFjayA9IFsmZG9u
ZSwgaGFzaF0gKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgY3JlZGVudGlhbElkLCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIGF1dGhEYXRhLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNpZ25hdHVyZSwg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB1c2VyaGFuZGxlKSB7CisgICAgICAgIC8vIENoZWNrIENy
ZWRlbnRpYWwgSUQKKyAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjpiYXNlNjRFbmNvZGUoY3JlZGVu
dGlhbElkLmRhdGEoKSwgY3JlZGVudGlhbElkLnNpemUoKSkgPT0gdGVzdENyZWRlbnRpYWxJZEJh
c2U2NCk7CisKKyAgICAgICAgLy8gQ2hlY2sgQXV0aGVudGljYXRvciBEYXRhLgorICAgICAgICBz
aXplX3QgcG9zID0gMDsKKyAgICAgICAgdWludDhfdCBleHBlY3RlZFJwSWRIYXNoW10gPSB7Cisg
ICAgICAgICAgICAweDQ5LCAweDk2LCAweDBkLCAweGU1LCAweDg4LCAweDBlLCAweDhjLCAweDY4
LAorICAgICAgICAgICAgMHg3NCwgMHgzNCwgMHgxNywgMHgwZiwgMHg2NCwgMHg3NiwgMHg2MCwg
MHg1YiwKKyAgICAgICAgICAgIDB4OGYsIDB4ZTQsIDB4YWUsIDB4YjksIDB4YTIsIDB4ODYsIDB4
MzIsIDB4YzcsCisgICAgICAgICAgICAweDk5LCAweDVjLCAweGYzLCAweGJhLCAweDgzLCAweDFk
LCAweDk3LCAweDYzCisgICAgICAgIH07CisgICAgICAgIEVYUEVDVF9GQUxTRShtZW1jbXAoYXV0
aERhdGEuZGF0YSgpICsgcG9zLCBleHBlY3RlZFJwSWRIYXNoLCBzaXplb2YoZXhwZWN0ZWRScElk
SGFzaCkpKTsKKyAgICAgICAgcG9zICs9IHNpemVvZihleHBlY3RlZFJwSWRIYXNoKTsKKworICAg
ICAgICAvLyBGTEFHUworICAgICAgICBFWFBFQ1RfRVEoNSwgYXV0aERhdGFbcG9zXSk7CisgICAg
ICAgIHBvcysrOworCisgICAgICAgIHVpbnQzMl90IGNvdW50ZXIgPSAtMTsKKyAgICAgICAgbWVt
Y3B5KCZjb3VudGVyLCBhdXRoRGF0YS5kYXRhKCkgKyBwb3MsIHNpemVvZih1aW50MzJfdCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoMHUsIGNvdW50ZXIpOworCisgICAgICAgIC8vIENoZWNrIHNpZ25h
dHVyZQorICAgICAgICBhdXRvIHByaXZhdGVLZXkgPSBnZXRUZXN0S2V5KCk7CisgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBkYXRhVG9TaWduKGF1dGhEYXRhKTsKKyAgICAgICAgZGF0YVRvU2lnbi5h
cHBlbmRWZWN0b3IoaGFzaCk7CisgICAgICAgIEVYUEVDVF9UUlVFKFNlY0tleVZlcmlmeVNpZ25h
dHVyZShTZWNLZXlDb3B5UHVibGljS2V5KHByaXZhdGVLZXkuZ2V0KCkpLCBrU2VjS2V5QWxnb3Jp
dGhtRUNEU0FTaWduYXR1cmVNZXNzYWdlWDk2MlNIQTI1NiwgKF9fYnJpZGdlIENGRGF0YVJlZilb
TlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YVRvU2lnbi5kYXRhKCkgbGVuZ3RoOmRhdGFUb1NpZ24u
c2l6ZSgpXSwgKF9fYnJpZGdlIENGRGF0YVJlZilbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6c2lnbmF0
dXJlLmRhdGEoKSBsZW5ndGg6c2lnbmF0dXJlLnNpemUoKV0sIE5VTEwpKTsKKworICAgICAgICAv
LyBDaGVjayBVc2VyIEhhbmRsZQorICAgICAgICBFWFBFQ1RfRVEodXNlcmhhbmRsZS5zaXplKCks
IHNpemVvZih0ZXN0VXNlcmhhbmRsZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UobWVtY21wKHVz
ZXJoYW5kbGUuZGF0YSgpLCB0ZXN0VXNlcmhhbmRsZSwgc2l6ZW9mKHRlc3RVc2VyaGFuZGxlKSkp
OworCisgICAgICAgIGNsZWFuVXBLZXljaGFpbigpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAg
ICB9OworICAgIGF1dG8gZXhjZXB0aW9uQ2FsbGJhY2sgPSBbJmRvbmVdIChjb25zdCBXZWJDb3Jl
OjpFeGNlcHRpb25EYXRhJiBleGNlcHRpb24pIG11dGFibGUgeworICAgICAgICBFWFBFQ1RfRkFM
U0UodHJ1ZSk7CisgICAgICAgIGNsZWFuVXBLZXljaGFpbigpOworICAgICAgICBkb25lID0gdHJ1
ZTsKKyAgICB9OworICAgIGF1dGhlbnRpY2F0b3ItPmdldEFzc2VydGlvbihoYXNoLCByZXF1ZXN0
T3B0aW9ucywgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spKTsK
KworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
</data>

          </attachment>
      

    </bug>

</bugzilla>