<?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>123628</bug_id>
          
          <creation_ts>2013-11-01 12:26:07 -0700</creation_ts>
          <short_desc>WebCrypto algorithms should check that key algorithm matches</short_desc>
          <delta_ts>2013-11-22 15:41:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>122679</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>945979</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-01 12:26:07 -0700</bug_when>
    <thetext>We already check usage, but don&apos;t check algorithm yet. Key objects should not be usable in violation of their algorithm attribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948769</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-08 11:38:14 -0800</bug_when>
    <thetext>At the moment, we only have HMAC and AES-CBC, which use different keys, so this is not an observable issue. But once we add e.g. AES-GCM, an explicit check will be needed to prevent key reuse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953699</commentid>
    <comment_count>2</comment_count>
      <attachid>217721</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-22 15:29:01 -0800</bug_when>
    <thetext>Created attachment 217721
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953701</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-22 15:30:12 -0800</bug_when>
    <thetext>Attachment 217721 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoKeySerializationJWK.cpp&apos;, u&apos;Source/WebCore/crypto/CryptoAlgorithmParameters.h&apos;, u&apos;Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp&apos;, u&apos;Source/WebCore/crypto/CryptoAlgorithmRegistry.h&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.h&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.h&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmHMACMac.cpp&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmRegistryMac.cpp&apos;, u&apos;Source/WebCore/crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h&apos;, u&apos;Source/WebCore/crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h&apos;]&quot; exit_code: 1
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:58:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.h:58:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:38:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:45:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:50:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:51:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:52:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:53:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:54:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:59:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:91:  CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:122:  CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:85:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:90:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:59:  CryptoAlgorithmAES_CBC::keyAlgorithmMatches is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:68:  CryptoAlgorithmAES_CBC::encrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:80:  CryptoAlgorithmAES_CBC::decrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:60:  CryptoAlgorithmRSASSA_PKCS1_v1_5::keyAlgorithmMatches is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:73:  CryptoAlgorithmRSASSA_PKCS1_v1_5::sign is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:85:  CryptoAlgorithmRSASSA_PKCS1_v1_5::verify is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 20 in 17 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>953704</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-22 15:41:53 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r159717&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217721</attachid>
            <date>2013-11-22 15:29:01 -0800</date>
            <delta_ts>2013-11-22 15:38:51 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>CheckAlgorithm.txt</filename>
            <type>text/plain</type>
            <size>59372</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTcxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDEzLTExLTIyICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkNyeXB0byBhbGdvcml0
aG1zIHNob3VsZCBjaGVjayB0aGF0IGtleSBhbGdvcml0aG0gbWF0Y2hlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjI4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2aW9y
IHlldCwgYmVjYXVzZSB3ZSBoYXZlIG9uZSBhbGdvcml0aG0gcGVyIGtleSBjbGFzcy4KKyAgICAg
ICAgV2lsbCBiZSB0ZXN0ZWQgb25jZSBtb3JlIGFsZ29yaXRobXMgYXJlIGFkZGVkLgorCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBVcGRhdGVkIGZvciBmaWxl
IHJlbmFtZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rp
b25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUnNhS2V5UGFyYW1zV2l0aEhhc2gp
OgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQ
YXJhbWV0ZXJzRm9ySW1wb3J0S2V5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0tl
eVNlcmlhbGl6YXRpb25KV0suY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUlNBS2V5UGFy
YW1ldGVyc1dpdGhIYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5U2VyaWFsaXph
dGlvbkpXSzo6cmVjb25jaWxlQWxnb3JpdGhtKToKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycy5oOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVyczo6RU5VTV9DTEFTUyk6CisgICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRv
QWxnb3JpdGhtUnNhS2V5UGFyYW1zV2l0aEhhc2guaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmguCisg
ICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1z
Lmg6IFJlbW92ZWQuCisgICAgICAgIFJlbmFtZWQgUnNhU3NhS2V5UGFyYW1zIHRvIFJzYUtleVBh
cmFtc1dpdGhIYXNoLCBiZWNhdXNlIG90aGVyIGFsZ29yaXRobXMgKGxpa2UgUlNBLU9BRVApCisg
ICAgICAgIGFyZSBpbiB0aGUgc2FtZSBib2F0LiBEZXBlbmRpbmcgb24gd2hlcmUgdGhlIHNwZWMg
Z29lcywgd2UgbWlnaHQgbmVlZCB0byBpbnRyb2R1Y2UKKyAgICAgICAgYWxnb3JpdGhtIHNwZWNp
ZmljIFJTQSBwYXJhbWV0ZXIgY2xhc3NlcyBsYXRlciwgYnV0IGxldCdzIHJlZHVjZSBjb3B5L3Bh
c3RlZCBjb2RlIGF0CisgICAgICAgIGxlYXN0IGZvciBub3cuCisKKyAgICAgICAgKiBjcnlwdG8v
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwOiBNb3ZlZCB0byB0aGUgY29y
cmVjdCBkaXJlY3RvcnkuCisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SU0FT
U0FfUEtDUzFfdjFfNU1hYy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9D
cnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6cGxhdGZvcm1TaWduKTogRmFjdG9y
ZWQgb3V0IE1hYyBzcGVjaWZpYworICAgICAgICBjb2RlLCBsZWF2aW5nIHR5cGUgY2FzdGluZyB0
byBjcm9zcy1wbGF0Zm9ybSBmaWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRo
bVJTQVNTQV9QS0NTMV92MV81OjpwbGF0Zm9ybVZlcmlmeSk6IERpdHRvLgorCisgICAgICAgICog
Y3J5cHRvL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9BbGdvcml0aG1SZWdpc3RyeTo6cmVnaXN0ZXJBbGdvcml0aG0pOgorICAgICAgICAqIGNyeXB0
by9tYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnBsYXRmb3JtUmVnaXN0ZXJBbGdvcml0aG1zKToKKyAg
ICAgICAgUmVkdWNlIGNvcHkvcGFzdGluZyBpbiByZWdpc3RyYXRpb24gY29kZS4KKworICAgICAg
ICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6a2V5QWxnb3JpdGhtTWF0Y2hlcyk6
IENoZWNrIGtleSB0eXBlIGFuZCBhbGdvcml0aG0uCisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDOjplbmNyeXB0KTogQ3Jvc3MgcGxhdGZvcm0gdHlwZSBjYXN0aW5nIGNv
ZGUuCisgICAgICAgIE1heWJlIHdlJ2xsIGZpbmQgYSB3YXkgdG8gYXV0b2dlbmVyYXRlIG9yIGVs
aW1pbmF0ZSBpdCBvbmUgZGF5LgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVT
X0NCQzo6ZGVjcnlwdCk6IERpdHRvLgorCisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtQUVTX0NCQy5oOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobUhNQUMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1B
Qzo6a2V5QWxnb3JpdGhtTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0
aG1ITUFDOjpzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6OnZl
cmlmeSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5o
OgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NT
MV92MV81LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NT
MV92MV81OjprZXlBbGdvcml0aG1NYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0Fs
Z29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0
b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81Ojp2ZXJpZnkpOgorICAgICAgICAoV2ViQ29yZTo6
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OmltcG9ydEtleSk6CisgICAgICAgICog
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaDoKKyAg
ICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlwdCk6
CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6OnBsYXRmb3JtU2lnbik6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1ITUFDOjpwbGF0Zm9ybVZlcmlmeSk6CisgICAgICAg
IFNhbWUgY2hhbmdlcyBmb3IgYWxsIGFsZ29yaXRobXMgdGhhdCBoYXZlIGtleXMuCisKIDIwMTMt
MTEtMjIgIEJyZW5kYW4gTG9uZyAgPGIubG9uZ0BjYWJsZWxhYnMuY29tPgogCiAgICAgICAgIEZp
cmUgImNoYW5nZSIgZXZlbnQgb24gVGV4dFRyYWNrTGlzdCB3aGVuIGEgVGV4dFRyYWNrJ3MgbW9k
ZSBjaGFuZ2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTk2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU2ODEsNyAr
NTY4MSw3IEBACiAJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCRTUx
MkIwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgKi87IH07CiAJCUUxQkU1
MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkU1MTJDMENGNkM1MTIwMDJFQTk1OSAv
KiBYU0xUVW5pY29kZVNvcnQuaCAqLzsgfTsKIAkJRTFDMjY2RDgxODMxN0FCNDAwM0Y4QjMzIC8q
IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzI2NkQ2MTgzMTdBQjQwMDNGOEIzMyAv
KiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAgKi87IH07Ci0JCUUxQzI2
NkRCMTgzMTk5MzUwMDNGOEIzMyAvKiBDcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzI2NkRBMTgz
MTk5MzUwMDNGOEIzMyAvKiBDcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMuaCAqLzsgfTsK
KwkJRTFDMjY2REIxODMxOTkzNTAwM0Y4QjMzIC8qIENyeXB0b0FsZ29yaXRobVJzYUtleVBhcmFt
c1dpdGhIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMUMyNjZEQTE4MzE5OTM1MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUnNhS2V5UGFyYW1z
V2l0aEhhc2guaCAqLzsgfTsKIAkJRTFDMjY2REUxODMxOUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tl
eURhdGFSU0FDb21wb25lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxQzI2NkRDMTgzMTlGMzEwMDNGOEIzMyAvKiBDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50cy5jcHAgKi87IH07CiAJCUUxQzI2NkRGMTgzMTlGMzEwMDNGOEIzMyAvKiBDcnlw
dG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFDMjY2REQxODMxOUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tleURhdGFS
U0FDb21wb25lbnRzLmggKi87IH07CiAJCUUxQzJGMjRBMTUzM0EyMTIwMDgzRjk3NCAvKiBTZXR0
aW5nc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQzJGMjQ4MTUzM0EyMTIwMDgzRjk3NCAvKiBTZXR0aW5nc01hYy5tbSAqLzsgfTsKQEAgLTEy
Nzg5LDggKzEyNzg5LDggQEAKIAkJRTFCRDMzMUQxODJEOEY0MjAwQzA1RDlGIC8qIENyeXB0b0Fs
Z29yaXRobVJzYUtleUdlblBhcmFtcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMuaDsgcGF0aCA9IHBhcmFtZXRlcnMvQ3J5
cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxQkU1MTJCMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNMVFVuaWNvZGVTb3J0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFCRTUxMkMwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhT
TFRVbmljb2RlU29ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU0xUVW5p
Y29kZVNvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTFDMjY2RDYxODMxN0FC
NDAwM0Y4QjMzIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobVJTQVNTQV9Q
S0NTMV92MV81TWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTFDMjY2REEx
ODMxOTkzNTAwM0Y4QjMzIC8qIENyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJh
bXMuaDsgcGF0aCA9IHBhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQzI2NkQ2MTgzMTdBQjQwMDNGOEIzMyAv
KiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1h
Yy5jcHA7IHBhdGggPSBtYWMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUMyNjZEQTE4MzE5OTM1MDAzRjhCMzMg
LyogQ3J5cHRvQWxnb3JpdGhtUnNhS2V5UGFyYW1zV2l0aEhhc2guaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUnNhS2V5UGFyYW1zV2l0aEhhc2guaDsg
cGF0aCA9IHBhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhS2V5UGFyYW1zV2l0aEhhc2guaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDMjY2REMxODMxOUYzMTAwM0Y4QjMzIC8q
IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmNwcDsgcGF0aCA9IGtleXMv
Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUMyNjZERDE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVu
dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3J5cHRvS2V5RGF0YVJTQUNv
bXBvbmVudHMuaDsgcGF0aCA9IGtleXMvQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDMkYyNDgxNTMzQTIxMjAwODNGOTc0IC8qIFNl
dHRpbmdzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2V0
dGluZ3NNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDQzNCw3ICsyMDQz
NCw4IEBACiAJCQkJRTE5REEyOUIxODE4OUFERDAwMDg4QkM4IC8qIENyeXB0b0FsZ29yaXRobUht
YWNLZXlQYXJhbXMuaCAqLywKIAkJCQlFMUM2NTcxRTE4MTZFNTAzMDAyNTZDREQgLyogQ3J5cHRv
QWxnb3JpdGhtSG1hY1BhcmFtcy5oICovLAogCQkJCUUxQkQzMzFEMTgyRDhGNDIwMEMwNUQ5RiAv
KiBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMuaCAqLywKLQkJCQlFMUMyNjZEQTE4MzE5
OTM1MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmggKi8sCisJCQkJ
RTFDMjY2REExODMxOTkzNTAwM0Y4QjMzIC8qIENyeXB0b0FsZ29yaXRobVJzYUtleVBhcmFtc1dp
dGhIYXNoLmggKi8sCisJCQkJRTFGRTEzNkMxODNGRTIxRDAwODkyRjEzIC8qIENyeXB0b0FsZ29y
aXRobVJzYU9hZXBQYXJhbXMuaCAqLywKIAkJCQlFMUJEMzMxQjE4MkQ4RUU5MDBDMDVEOUYgLyog
Q3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IHBhcmFt
ZXRlcnM7CkBAIC0yMzc1Miw3ICsyMzc1Myw3IEBACiAJCQkJQjJGQTNEREQwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHUGF0aFNlZ01vdmV0b0Ficy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNE
REYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ01vdmV0b1JlbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDcwNTg1MjExN0ZEQzE0MDAwNUYyQkNCIC8qIE1lZGlhVHJhY2tDb25zdHJhaW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQlFMUMyNjZEQjE4MzE5OTM1MDAzRjhCMzMgLyogQ3J5cHRv
QWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUMyNjZEQjE4
MzE5OTM1MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUnNhS2V5UGFyYW1zV2l0aEhhc2guaCBp
biBIZWFkZXJzICovLAogCQkJCUNEOEI1QTQ2MTgwREZGNEUwMDhCOEU2NSAvKiBWaWRlb1RyYWNr
TWVkaWFTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREUxMEFCNzVBNkYwMDBFNUFD
NCAvKiBKU1NWR1BhdHRlcm5FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTQyQTc5NTBB
RTVDOTQxMDBERjU4REYgLyogSlNTVkdQb2ludC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGht
RGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDE1OTYzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zLmgiCiAj
aW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdv
cml0aG1Sc2FLZXlHZW5QYXJhbXMuaCIKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1Sc2FTc2FL
ZXlQYXJhbXMuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1Sc2FLZXlQYXJhbXNXaXRoSGFz
aC5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0NyeXB0b09wZXJhdGlvbkRhdGEuaCIKQEAg
LTIzOCwxMCArMjM4LDEwIEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGEKICAgICByZXR1cm4gc3RkOjptb3ZlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlUnNhU3NhS2V5UGFyYW1zKEV4
ZWNTdGF0ZSosIEpTVmFsdWUpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+IGNyZWF0ZVJzYUtleVBhcmFtc1dpdGhIYXNoKEV4ZWNTdGF0ZSosIEpTVmFs
dWUpCiB7Ci0gICAgLy8gV2ViQ3J5cHRvIFJTQVNTQS1QS0NTMS12MV81IGFsZ29yaXRobSBjdXJy
ZW50bHkgZG9lcyBub3QgdGFrZSBhbnkgcGFyYW1ldGVycyB0byBpbXBvcnRLZXkuCi0gICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zPigpOwor
ICAgIC8vIFdlYkNyeXB0byBSU0EgYWxnb3JpdGhtcyBjdXJyZW50bHkgZG8gbm90IHRha2UgYW55
IHBhcmFtZXRlcnMgdG8gaW1wb3J0S2V5LgorICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENy
eXB0b0FsZ29yaXRobVJzYUtleVBhcmFtc1dpdGhIYXNoPigpOwogfQogCiBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZVJzYVNzYVBhcmFtcyhF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCkBAIC01MjYsNyArNTI2LDcgQEAgc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIGNhc2UgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6UlNBRVNfUEtDUzFfdjFfNToKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICBjYXNlIENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81OgotICAgICAgICByZXR1cm4gY3Jl
YXRlUnNhU3NhS2V5UGFyYW1zKGV4ZWMsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVJz
YUtleVBhcmFtc1dpdGhIYXNoKGV4ZWMsIHZhbHVlKTsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OlJTQV9QU1M6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpSU0FfT0FFUDoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkVDRFNBOgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9u
SldLLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0
b0tleVNlcmlhbGl6YXRpb25KV0suY3BwCShyZXZpc2lvbiAxNTk2MzYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtLmgiCiAj
aW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0Fs
Z29yaXRobVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFy
YW1zLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUnNhS2V5UGFyYW1zV2l0aEhhc2guaCIK
ICNpbmNsdWRlICJDcnlwdG9LZXkuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKICNpbmNs
dWRlICJDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5oIgpAQCAtMTU1LDE1ICsxNTUsMTQgQEAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYQogICAgIHJldHVybiBzdGQ6
Om1vdmUoaG1hY1BhcmFtZXRlcnMpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZVJTQVNTQUtleVBhcmFtZXRlcnMoQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBoYXNoRnVuY3Rpb24pCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZVJTQUtleVBhcmFtZXRlcnNXaXRoSGFzaChD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hGdW5jdGlvbikKIHsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zPiByc2FTU0FQYXJhbWV0ZXJzID0g
c3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXM+KCk7Ci0gICAg
cnNhU1NBUGFyYW1ldGVycy0+aGFzSGFzaCA9IHRydWU7Ci0gICAgcnNhU1NBUGFyYW1ldGVycy0+
aGFzaCA9IGhhc2hGdW5jdGlvbjsKLSAgICByZXR1cm4gc3RkOjptb3ZlKHJzYVNTQVBhcmFtZXRl
cnMpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Sc2FLZXlQYXJhbXNXaXRo
SGFzaD4gcnNhS2V5UGFyYW1ldGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGht
UnNhS2V5UGFyYW1zV2l0aEhhc2g+KCk7CisgICAgcnNhS2V5UGFyYW1ldGVycy0+aGFzSGFzaCA9
IHRydWU7CisgICAgcnNhS2V5UGFyYW1ldGVycy0+aGFzaCA9IGhhc2hGdW5jdGlvbjsKKyAgICBy
ZXR1cm4gc3RkOjptb3ZlKHJzYUtleVBhcmFtZXRlcnMpOwogfQogCi0KIGJvb2wgSlNDcnlwdG9L
ZXlTZXJpYWxpemF0aW9uSldLOjpyZWNvbmNpbGVBbGdvcml0aG0oc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobT4mIHN1Z2dlc3RlZEFsZ29yaXRobSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnM+JiBzdWdnZXN0ZWRQYXJhbWV0ZXJzKSBjb25zdAogewogICAg
IGlmICghZ2V0U3RyaW5nRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJhbGciLCBtX2p3
a0FsZ29yaXRobU5hbWUpKSB7CkBAIC0xODQsMTMgKzE4MywxMyBAQCBib29sIEpTQ3J5cHRvS2V5
U2VyaWFsaXphdGlvbkpXSzo6cmVjb25jCiAgICAgICAgIHBhcmFtZXRlcnMgPSBjcmVhdGVITUFD
UGFyYW1ldGVycyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfNTEyKTsKICAgICB9IGVs
c2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiUlMyNTYiKSB7CiAgICAgICAgIGFsZ29yaXRo
bSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzUpOwotICAgICAgICBwYXJhbWV0ZXJzID0g
Y3JlYXRlUlNBU1NBS2V5UGFyYW1ldGVycyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFf
MjU2KTsKKyAgICAgICAgcGFyYW1ldGVycyA9IGNyZWF0ZVJTQUtleVBhcmFtZXRlcnNXaXRoSGFz
aChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjU2KTsKICAgICB9IGVsc2UgaWYgKG1f
andrQWxnb3JpdGhtTmFtZSA9PSAiUlMzODQiKSB7CiAgICAgICAgIGFsZ29yaXRobSA9IENyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6UlNBU1NBX1BLQ1MxX3YxXzUpOwotICAgICAgICBwYXJhbWV0ZXJzID0gY3JlYXRlUlNB
U1NBS2V5UGFyYW1ldGVycyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMzg0KTsKKyAg
ICAgICAgcGFyYW1ldGVycyA9IGNyZWF0ZVJTQUtleVBhcmFtZXRlcnNXaXRoSGFzaChDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMzg0KTsKICAgICB9IGVsc2UgaWYgKG1fandrQWxnb3Jp
dGhtTmFtZSA9PSAiUlM1MTIiKSB7CiAgICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRo
bVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNB
U1NBX1BLQ1MxX3YxXzUpOwotICAgICAgICBwYXJhbWV0ZXJzID0gY3JlYXRlUlNBU1NBS2V5UGFy
YW1ldGVycyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfNTEyKTsKKyAgICAgICAgcGFy
YW1ldGVycyA9IGNyZWF0ZVJTQUtleVBhcmFtZXRlcnNXaXRoSGFzaChDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyOjpTSEFfNTEyKTsKICAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9
PSAiQTEyOENCQyIpIHsKICAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDKTsK
ICAgICAgICAgcGFyYW1ldGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycz4oKTsKQEAgLTIyMCwxMyArMjE5LDEzIEBAIGJvb2wgSlNDcnlwdG9LZXlTZXJpYWxp
emF0aW9uSldLOjpyZWNvbmMKICAgICBpZiAoYWxnb3JpdGhtLT5pZGVudGlmaWVyKCkgPT0gQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6SE1BQykKICAgICAgICAgcmV0dXJuIHRvQ3J5cHRvQWxn
b3JpdGhtSG1hY1BhcmFtcygqcGFyYW1ldGVycykuaGFzaCA9PSB0b0NyeXB0b0FsZ29yaXRobUht
YWNQYXJhbXMoKnN1Z2dlc3RlZFBhcmFtZXRlcnMpLmhhc2g7CiAgICAgaWYgKGFsZ29yaXRobS0+
aWRlbnRpZmllcigpID09IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92
MV81KSB7Ci0gICAgICAgIENyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcyYgcnNhU1NBUGFy
YW1ldGVycyA9IHRvQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zKCpwYXJhbWV0ZXJzKTsK
LSAgICAgICAgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zJiBzdWdnZXN0ZWRSU0FTU0FQ
YXJhbWV0ZXJzID0gdG9DcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMoKnN1Z2dlc3RlZFBh
cmFtZXRlcnMpOwotICAgICAgICBBU1NFUlQocnNhU1NBUGFyYW1ldGVycy5oYXNIYXNoKTsKLSAg
ICAgICAgaWYgKHN1Z2dlc3RlZFJTQVNTQVBhcmFtZXRlcnMuaGFzSGFzaCkKLSAgICAgICAgICAg
IHJldHVybiBzdWdnZXN0ZWRSU0FTU0FQYXJhbWV0ZXJzLmhhc2ggPT0gcnNhU1NBUGFyYW1ldGVy
cy5oYXNoOwotICAgICAgICBzdWdnZXN0ZWRSU0FTU0FQYXJhbWV0ZXJzLmhhc0hhc2ggPSB0cnVl
OwotICAgICAgICBzdWdnZXN0ZWRSU0FTU0FQYXJhbWV0ZXJzLmhhc2ggPSByc2FTU0FQYXJhbWV0
ZXJzLmhhc2g7CisgICAgICAgIENyeXB0b0FsZ29yaXRobVJzYUtleVBhcmFtc1dpdGhIYXNoJiBy
c2FLZXlQYXJhbWV0ZXJzID0gdG9DcnlwdG9BbGdvcml0aG1Sc2FLZXlQYXJhbXNXaXRoSGFzaCgq
cGFyYW1ldGVycyk7CisgICAgICAgIENyeXB0b0FsZ29yaXRobVJzYUtleVBhcmFtc1dpdGhIYXNo
JiBzdWdnZXN0ZWRSU0FLZXlQYXJhbWV0ZXJzID0gdG9DcnlwdG9BbGdvcml0aG1Sc2FLZXlQYXJh
bXNXaXRoSGFzaCgqc3VnZ2VzdGVkUGFyYW1ldGVycyk7CisgICAgICAgIEFTU0VSVChyc2FLZXlQ
YXJhbWV0ZXJzLmhhc0hhc2gpOworICAgICAgICBpZiAoc3VnZ2VzdGVkUlNBS2V5UGFyYW1ldGVy
cy5oYXNIYXNoKQorICAgICAgICAgICAgcmV0dXJuIHN1Z2dlc3RlZFJTQUtleVBhcmFtZXRlcnMu
aGFzaCA9PSByc2FLZXlQYXJhbWV0ZXJzLmhhc2g7CisgICAgICAgIHN1Z2dlc3RlZFJTQUtleVBh
cmFtZXRlcnMuaGFzSGFzaCA9IHRydWU7CisgICAgICAgIHN1Z2dlc3RlZFJTQUtleVBhcmFtZXRl
cnMuaGFzaCA9IHJzYUtleVBhcmFtZXRlcnMuaGFzaDsKICAgICB9CiAKICAgICAvLyBPdGhlciBh
bGdvcml0aG1zIGRvbid0IGhhdmUgcGFyYW1ldGVycy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaAkocmV2aXNpb24gMTU5NjM2
KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIEhtYWNLZXlQ
YXJhbXMsCiAgICAgICAgIEhtYWNQYXJhbXMsCiAgICAgICAgIFJzYUtleUdlblBhcmFtcywKLSAg
ICAgICAgUnNhU3NhS2V5UGFyYW1zLAorICAgICAgICBSc2FLZXlQYXJhbXNXaXRoSGFzaCwKICAg
ICAgICAgUnNhU3NhUGFyYW1zCiAgICAgfTsKICAgICB2aXJ0dWFsIENsYXNzIHBhcmFtZXRlcnND
bGFzcygpIGNvbnN0IHsgcmV0dXJuIENsYXNzOjpOb25lOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFf
djFfNU1hYy5jcHAJKHJldmlzaW9uIDE1OTYzNikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9D
cnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaCIKLQotI2lmIEVOQUJMRShTVUJU
TEVfQ1JZUFRPKQotCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zLmgiCi0j
aW5jbHVkZSAiQ3J5cHRvRGlnZXN0LmgiCi0jaW5jbHVkZSAiQ3J5cHRvS2V5UlNBLmgiCi0jaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgPENvbW1vbkNyeXB0by9Db21tb25Dcnlw
dG9yLmg+Ci0KLSNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpCi0jaWYgX19oYXNfaW5jbHVkZSg8
Q29tbW9uQ3J5cHRvL0NvbW1vblJTQUNyeXB0b3IuaD4pCi0jaW5jbHVkZSA8Q29tbW9uQ3J5cHRv
L0NvbW1vblJTQUNyeXB0b3IuaD4KLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgX0NDX1JTQUNS
WVBUT1JfSF8KLWVudW0gewotICAgIGNjUEtDUzFQYWRkaW5nID0gMTAwMQotfTsKLXR5cGVkZWYg
dWludDMyX3QgQ0NBc3ltbWV0cmljUGFkZGluZzsKLQotZW51bSB7Ci0gICAga0NDRGlnZXN0U0hB
MSA9IDgsCi0gICAga0NDRGlnZXN0U0hBMjI0ID0gOSwKLSAgICBrQ0NEaWdlc3RTSEEyNTYgPSAx
MCwKLSAgICBrQ0NEaWdlc3RTSEEzODQgPSAxMSwKLSAgICBrQ0NEaWdlc3RTSEE1MTIgPSAxMiwK
LX07Ci10eXBlZGVmIHVpbnQzMl90IENDRGlnZXN0QWxnb3JpdGhtOwotCi1lbnVtIHsKLSAgICBr
Q0NOb3RWZXJpZmllZCAgICA9IC00MzA2Ci19OwotI2VuZGlmCi0KLWV4dGVybiAiQyIgQ0NDcnlw
dG9yU3RhdHVzIENDUlNBQ3J5cHRvclNpZ24oQ0NSU0FDcnlwdG9yUmVmIHByaXZhdGVLZXksIEND
QXN5bW1ldHJpY1BhZGRpbmcgcGFkZGluZywgY29uc3Qgdm9pZCAqaGFzaFRvU2lnbiwgc2l6ZV90
IGhhc2hTaWduTGVuLCBDQ0RpZ2VzdEFsZ29yaXRobSBkaWdlc3RUeXBlLCBzaXplX3Qgc2FsdExl
biwgdm9pZCAqc2lnbmVkRGF0YSwgc2l6ZV90ICpzaWduZWREYXRhTGVuKTsKLWV4dGVybiAiQyIg
Q0NDcnlwdG9yU3RhdHVzIENDUlNBQ3J5cHRvclZlcmlmeShDQ1JTQUNyeXB0b3JSZWYgcHVibGlj
S2V5LCBDQ0FzeW1tZXRyaWNQYWRkaW5nIHBhZGRpbmcsIGNvbnN0IHZvaWQgKmhhc2gsIHNpemVf
dCBoYXNoTGVuLCBDQ0RpZ2VzdEFsZ29yaXRobSBkaWdlc3RUeXBlLCBzaXplX3Qgc2FsdExlbiwg
Y29uc3Qgdm9pZCAqc2lnbmVkRGF0YSwgc2l6ZV90IHNpZ25lZERhdGFMZW4pOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGdldENvbW1vbkNyeXB0b0RpZ2VzdEFsZ29yaXRo
bShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hGdW5jdGlvbiwgQ0NEaWdlc3RBbGdvcml0
aG0mIGFsZ29yaXRobSkKLXsKLSAgICBzd2l0Y2ggKGhhc2hGdW5jdGlvbikgewotICAgIGNhc2Ug
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzE6Ci0gICAgICAgIGFsZ29yaXRobSA9IGtD
Q0RpZ2VzdFNIQTE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6U0hBXzIyNDoKLSAgICAgICAgYWxnb3JpdGhtID0ga0NDRGlnZXN0U0hB
MjI0OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OlNIQV8yNTY6Ci0gICAgICAgIGFsZ29yaXRobSA9IGtDQ0RpZ2VzdFNIQTI1NjsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpT
SEFfMzg0OgotICAgICAgICBhbGdvcml0aG0gPSBrQ0NEaWdlc3RTSEEzODQ7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzUxMjoK
LSAgICAgICAgYWxnb3JpdGhtID0ga0NDRGlnZXN0U0hBNTEyOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lk
IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpzaWduKGNvbnN0IENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBD
cnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxsYmFjayBjYWxsYmFjaywgVm9pZENh
bGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgY29uc3Qg
Q3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zJiByc2FTU0FQYXJhbWV0ZXJzID0gdG9DcnlwdG9B
bGdvcml0aG1Sc2FTc2FQYXJhbXMocGFyYW1ldGVycyk7Ci0KLSAgICBpZiAoIWlzQ3J5cHRvS2V5
UlNBKGtleSkpIHsKLSAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjb25zdCBDcnlwdG9LZXlSU0EmIHJzYUtleSA9IHRvQ3J5cHRvS2V5
UlNBKGtleSk7Ci0KLSAgICBDQ0RpZ2VzdEFsZ29yaXRobSBkaWdlc3RBbGdvcml0aG07Ci0gICAg
aWYgKCFnZXRDb21tb25DcnlwdG9EaWdlc3RBbGdvcml0aG0ocnNhU1NBUGFyYW1ldGVycy5oYXNo
LCBkaWdlc3RBbGdvcml0aG0pKSB7Ci0gICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvRGlnZXN0
PiBkaWdlc3QgPSBDcnlwdG9EaWdlc3Q6OmNyZWF0ZShyc2FTU0FQYXJhbWV0ZXJzLmhhc2gpOwot
ICAgIGlmICghZGlnZXN0KSB7Ci0gICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkaWdlc3QtPmFkZEJ5dGVzKGRhdGEuZmlyc3QsIGRh
dGEuc2Vjb25kKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3REYXRhID0gZGlnZXN0LT5j
b21wdXRlSGFzaCgpOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHNpZ25hdHVyZSg1MTIpOwotICAg
IHNpemVfdCBzaWduYXR1cmVTaXplID0gc2lnbmF0dXJlLnNpemUoKTsKLQotICAgIENDQ3J5cHRv
clN0YXR1cyBzdGF0dXMgPSBDQ1JTQUNyeXB0b3JTaWduKHJzYUtleS5wbGF0Zm9ybUtleSgpLCBj
Y1BLQ1MxUGFkZGluZywgZGlnZXN0RGF0YS5kYXRhKCksIGRpZ2VzdERhdGEuc2l6ZSgpLCBkaWdl
c3RBbGdvcml0aG0sIDAsIHNpZ25hdHVyZS5kYXRhKCksICZzaWduYXR1cmVTaXplKTsKLSAgICBp
ZiAoc3RhdHVzKSB7Ci0gICAgICAgIGZhaWx1cmVDYWxsYmFjaygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgc2lnbmF0dXJlLnJlc2l6ZShzaWduYXR1cmVTaXplKTsKLSAgICBjYWxs
YmFjayhzaWduYXR1cmUpOwotfQotCi12b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81Ojp2ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywg
Y29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIHNpZ25hdHVy
ZSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgQm9vbENhbGxiYWNrIGNhbGxiYWNr
LCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMmIHJzYVNTQVBhcmFtZXRlcnMgPSB0
b0NyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyhwYXJhbWV0ZXJzKTsKLQotICAgIGlmICghaXND
cnlwdG9LZXlSU0Eoa2V5KSkgewotICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IENyeXB0b0tleVJTQSYgcnNhS2V5ID0gdG9D
cnlwdG9LZXlSU0Eoa2V5KTsKLQotICAgIENDRGlnZXN0QWxnb3JpdGhtIGRpZ2VzdEFsZ29yaXRo
bTsKLSAgICBpZiAoIWdldENvbW1vbkNyeXB0b0RpZ2VzdEFsZ29yaXRobShyc2FTU0FQYXJhbWV0
ZXJzLmhhc2gsIGRpZ2VzdEFsZ29yaXRobSkpIHsKLSAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVE
X0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9EaWdlc3Q+IGRpZ2VzdCA9IENyeXB0b0RpZ2VzdDo6Y3JlYXRlKHJzYVNTQVBhcmFtZXRlcnMu
aGFzaCk7Ci0gICAgaWYgKCFkaWdlc3QpIHsKLSAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VS
UjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRpZ2VzdC0+YWRkQnl0ZXMoZGF0YS5m
aXJzdCwgZGF0YS5zZWNvbmQpOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdERhdGEgPSBk
aWdlc3QtPmNvbXB1dGVIYXNoKCk7Ci0KLSAgICBDQ0NyeXB0b3JTdGF0dXMgc3RhdHVzID0gQ0NS
U0FDcnlwdG9yVmVyaWZ5KHJzYUtleS5wbGF0Zm9ybUtleSgpLCBjY1BLQ1MxUGFkZGluZywgZGln
ZXN0RGF0YS5kYXRhKCksIGRpZ2VzdERhdGEuc2l6ZSgpLCBkaWdlc3RBbGdvcml0aG0sIDAsIHNp
Z25hdHVyZS5maXJzdCwgc2lnbmF0dXJlLnNlY29uZCk7Ci0gICAgaWYgKCFzdGF0dXMpCi0gICAg
ICAgIGNhbGxiYWNrKHRydWUpOwotICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBrQ0NOb3RWZXJpZmll
ZCB8fCBrQ0NEZWNvZGVFcnJvcikgLy8gPHJkYXI6Ly9wcm9ibGVtLzE1NDY0OTgyPiBDQ1JTQUNy
eXB0b3JWZXJpZnkgcmV0dXJucyBrQ0NEZWNvZGVFcnJvciBpbnN0ZWFkIG9mIGtDQ05vdFZlcmlm
aWVkIHNvbWV0aW1lcwotICAgICAgICBjYWxsYmFjayhmYWxzZSk7Ci0gICAgZWxzZQotICAgICAg
ICBmYWlsdXJlQ2FsbGJhY2soKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaAkocmV2aXNpb24gMTU5NjM2KQorKysgU291
cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDYgKzU3LDExIEBAIHByaXZhdGU6CiAKICAgICB0eXBlZGVmIHN0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG0+ICgqQ3J5cHRvQWxnb3JpdGhtQ29uc3RydWN0b3IpKCk7CiAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBbGdvcml0aG1DbGFzcz4gdm9pZCByZWdpc3RlckFsZ29y
aXRobSgpCisgICAgeworICAgICAgICByZWdpc3RlckFsZ29yaXRobShBbGdvcml0aG1DbGFzczo6
c19uYW1lLCBBbGdvcml0aG1DbGFzczo6c19pZGVudGlmaWVyLCBBbGdvcml0aG1DbGFzczo6Y3Jl
YXRlKTsKKyAgICB9CisKICAgICB2b2lkIHJlZ2lzdGVyQWxnb3JpdGhtKGNvbnN0IFN0cmluZyYg
bmFtZSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGhtQ29uc3RydWN0
b3IpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyPiBtX25h
bWVUb0lkZW50aWZpZXJNYXA7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgU3RyaW5nPiBtX2lkZW50
aWZpZXJUb05hbWVNYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcAkocmV2aXNpb24gMTU5
NjM2KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJM
RShTVUJUTEVfQ1JZUFRPKQogCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1z
LmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzS2V5R2VuUGFyYW1zLmgiCiAjaW5jbHVk
ZSAiQ3J5cHRvS2V5QUVTLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2Uu
aCIKQEAgLTU1LDYgKzU2LDM5IEBAIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgQ3J5cHRvQWxn
b3JpdGgKICAgICByZXR1cm4gc19pZGVudGlmaWVyOwogfQogCitib29sIENyeXB0b0FsZ29yaXRo
bUFFU19DQkM6OmtleUFsZ29yaXRobU1hdGNoZXMoY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2Jj
UGFyYW1zJiwgY29uc3QgQ3J5cHRvS2V5JiBrZXkpIGNvbnN0Cit7CisgICAgaWYgKGtleS5hbGdv
cml0aG1JZGVudGlmaWVyKCkgIT0gc19pZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgQVNTRVJUKGlzQ3J5cHRvS2V5QUVTKGtleSkpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZW5jcnlwdChjb25zdCBDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3Qg
Q3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgVmVjdG9yQ2FsbGJhY2sgY2FsbGJhY2ssIFZvaWRD
YWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGNvbnN0
IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcyYgYWVzQ0JDUGFyYW1ldGVycyA9IHRvQ3J5cHRv
QWxnb3JpdGhtQWVzQ2JjUGFyYW1zKHBhcmFtZXRlcnMpOworCisgICAgaWYgKCFrZXlBbGdvcml0
aG1NYXRjaGVzKGFlc0NCQ1BhcmFtZXRlcnMsIGtleSkpIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQ
UE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBsYXRmb3JtRW5jcnlw
dChhZXNDQkNQYXJhbWV0ZXJzLCB0b0NyeXB0b0tleUFFUyhrZXkpLCBkYXRhLCBzdGQ6Om1vdmUo
Y2FsbGJhY2spLCBzdGQ6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOworfQorCit2b2lkIENy
eXB0b0FsZ29yaXRobUFFU19DQkM6OmRlY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0b09wZXJh
dGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFp
bHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBjb25zdCBDcnlwdG9BbGdv
cml0aG1BZXNDYmNQYXJhbXMmIGFlc0NCQ1BhcmFtZXRlcnMgPSB0b0NyeXB0b0FsZ29yaXRobUFl
c0NiY1BhcmFtcyhwYXJhbWV0ZXJzKTsKKworICAgIGlmICgha2V5QWxnb3JpdGhtTWF0Y2hlcyhh
ZXNDQkNQYXJhbWV0ZXJzLCBrZXkpKSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwbGF0Zm9ybURlY3J5cHQoYWVzQ0JDUGFy
YW1ldGVycywgdG9DcnlwdG9LZXlBRVMoa2V5KSwgZGF0YSwgc3RkOjptb3ZlKGNhbGxiYWNrKSwg
c3RkOjptb3ZlKGZhaWx1cmVDYWxsYmFjayksIGVjKTsKK30KKwogdm9pZCBDcnlwdG9BbGdvcml0
aG1BRVNfQ0JDOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZXMsIEtleU9y
S2V5UGFpckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBF
eGNlcHRpb25Db2RlJikKIHsKICAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNLZXlHZW5QYXJh
bXMmIGFlc1BhcmFtZXRlcnMgPSB0b0NyeXB0b0FsZ29yaXRobUFlc0tleUdlblBhcmFtcyhwYXJh
bWV0ZXJzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DQkMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgJKHJldmlzaW9uIDE1OTYzNikKKysrIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtczsKK2NsYXNzIENyeXB0b0tleUFFUzsK
KwogY2xhc3MgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQyBGSU5BTCA6IHB1YmxpYyBDcnlwdG9BbGdv
cml0aG0gewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX25hbWU7CkBA
IC00OSw2ICs1MiwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIENyeXB0b0FsZ29yaXRobUFF
U19DQkMoKTsKICAgICB2aXJ0dWFsIH5DcnlwdG9BbGdvcml0aG1BRVNfQ0JDKCk7CisKKyAgICBi
b29sIGtleUFsZ29yaXRobU1hdGNoZXMoY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1z
JiBhbGdvcml0aG1QYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmKSBjb25zdDsKKyAgICB2b2lk
IHBsYXRmb3JtRW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMmLCBjb25z
dCBDcnlwdG9LZXlBRVMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJh
Y2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHBsYXRmb3JtRGVjcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMmLCBj
b25zdCBDcnlwdG9LZXlBRVMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2Fs
bGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKTsKIH07
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUhNQUMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUhNQUMuY3BwCShyZXZpc2lvbiAxNTk2MzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNiArNTYsMzkgQEAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBDcnlw
dG9BbGdvcml0aAogICAgIHJldHVybiBzX2lkZW50aWZpZXI7CiB9CiAKK2Jvb2wgQ3J5cHRvQWxn
b3JpdGhtSE1BQzo6a2V5QWxnb3JpdGhtTWF0Y2hlcyhjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFj
UGFyYW1zJiwgY29uc3QgQ3J5cHRvS2V5JiBrZXkpIGNvbnN0Cit7CisgICAgaWYgKGtleS5hbGdv
cml0aG1JZGVudGlmaWVyKCkgIT0gc19pZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgQVNTRVJUKGlzQ3J5cHRvS2V5SE1BQyhrZXkpKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OnNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0
b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJh
Y2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBjb25zdCBDcnlw
dG9BbGdvcml0aG1IbWFjUGFyYW1zJiBobWFjUGFyYW1ldGVycyA9IHRvQ3J5cHRvQWxnb3JpdGht
SG1hY1BhcmFtcyhwYXJhbWV0ZXJzKTsKKworICAgIGlmICgha2V5QWxnb3JpdGhtTWF0Y2hlcyho
bWFjUGFyYW1ldGVycywga2V5KSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcGxhdGZvcm1TaWduKGhtYWNQYXJhbWV0ZXJz
LCB0b0NyeXB0b0tleUhNQUMoa2V5KSwgZGF0YSwgc3RkOjptb3ZlKGNhbGxiYWNrKSwgc3RkOjpt
b3ZlKGZhaWx1cmVDYWxsYmFjayksIGVjKTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1ITUFD
Ojp2ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29u
c3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGV4cGVjdGVkU2ln
bmF0dXJlLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBCb29sQ2FsbGJhY2sgY2Fs
bGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmIGhtYWNQYXJhbWV0ZXJzID0g
dG9DcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zKHBhcmFtZXRlcnMpOworCisgICAgaWYgKCFrZXlB
bGdvcml0aG1NYXRjaGVzKGhtYWNQYXJhbWV0ZXJzLCBrZXkpKSB7CisgICAgICAgIGVjID0gTk9U
X1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwbGF0Zm9ybVZl
cmlmeShobWFjUGFyYW1ldGVycywgdG9DcnlwdG9LZXlITUFDKGtleSksIGV4cGVjdGVkU2lnbmF0
dXJlLCBkYXRhLCBzdGQ6Om1vdmUoY2FsbGJhY2spLCBzdGQ6Om1vdmUoZmFpbHVyZUNhbGxiYWNr
KSwgZWMpOworfQorCiB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OmdlbmVyYXRlS2V5KGNvbnN0
IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUs
IENyeXB0b0tleVVzYWdlIHVzYWdlcywgS2V5T3JLZXlQYWlyQ2FsbGJhY2sgY2FsbGJhY2ssIFZv
aWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKQogewogICAgIGNvbnN0
IENyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMmIGhtYWNQYXJhbWV0ZXJzID0gdG9DcnlwdG9B
bGdvcml0aG1IbWFjS2V5UGFyYW1zKHBhcmFtZXRlcnMpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhNQUMuaAkocmV2
aXNpb24gMTU5NjM2KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtSE1BQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw5IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtczsKK2NsYXNz
IENyeXB0b0tleUhNQUM7CisKIGNsYXNzIENyeXB0b0FsZ29yaXRobUhNQUMgRklOQUwgOiBwdWJs
aWMgQ3J5cHRvQWxnb3JpdGhtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29u
c3Qgc19uYW1lOwpAQCAtNDksNiArNTIsMTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDcnlw
dG9BbGdvcml0aG1ITUFDKCk7CiAgICAgdmlydHVhbCB+Q3J5cHRvQWxnb3JpdGhtSE1BQygpOwor
CisgICAgYm9vbCBrZXlBbGdvcml0aG1NYXRjaGVzKGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQ
YXJhbXMmIGFsZ29yaXRobVBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYpIGNvbnN0OworICAg
IHZvaWQgcGxhdGZvcm1TaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmLCBjb25z
dCBDcnlwdG9LZXlITUFDJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxi
YWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCBwbGF0Zm9ybVZlcmlmeShjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJiwgY29u
c3QgQ3J5cHRvS2V5SE1BQyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIHNpZ25hdHVyZSwg
Y29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgQm9vbENhbGxiYWNrLCBWb2lkQ2FsbGJh
Y2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7CiB9OwogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFf
djFfNS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwCShyZXZpc2lvbiAxNTk2MzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0Ff
UEtDUzFfdjFfNS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDExIEBACiAjaWYgRU5B
QkxFKFNVQlRMRV9DUllQVE8pCiAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5Q
YXJhbXMuaCIKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMuaCIKKyNp
bmNsdWRlICJDcnlwdG9BbGdvcml0aG1Sc2FLZXlQYXJhbXNXaXRoSGFzaC5oIgorI2luY2x1ZGUg
IkNyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleURhdGFS
U0FDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5UlNBLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU1LDYgKzU3LDQzIEBA
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgQ3J5cHRvQWxnb3JpdGgKICAgICByZXR1cm4gc19p
ZGVudGlmaWVyOwogfQogCitib29sIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81Ojpr
ZXlBbGdvcml0aG1NYXRjaGVzKGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyYgYWxn
b3JpdGhtUGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXkpIGNvbnN0Cit7CisgICAgaWYg
KGtleS5hbGdvcml0aG1JZGVudGlmaWVyKCkgIT0gc19pZGVudGlmaWVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgQVNTRVJUKGlzQ3J5cHRvS2V5UlNBKGtleSkpOworCisgICAgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBrZXlIYXNoOworICAgIGlmICh0b0NyeXB0b0tleVJTQShrZXkp
LmlzUmVzdHJpY3RlZFRvSGFzaChrZXlIYXNoKSAmJiBrZXlIYXNoICE9IGFsZ29yaXRobVBhcmFt
ZXRlcnMuaGFzaCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnNpZ24oY29uc3QgQ3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXks
IGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrIGNhbGxiYWNr
LCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMmIHJzYVNTQVBhcmFtZXRlcnMgPSB0
b0NyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyhwYXJhbWV0ZXJzKTsKKworICAgIGlmICgha2V5
QWxnb3JpdGhtTWF0Y2hlcyhyc2FTU0FQYXJhbWV0ZXJzLCBrZXkpKSB7CisgICAgICAgIGVjID0g
Tk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwbGF0Zm9y
bVNpZ24ocnNhU1NBUGFyYW1ldGVycywgdG9DcnlwdG9LZXlSU0Eoa2V5KSwgZGF0YSwgc3RkOjpt
b3ZlKGNhbGxiYWNrKSwgc3RkOjptb3ZlKGZhaWx1cmVDYWxsYmFjayksIGVjKTsKK30KKwordm9p
ZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6dmVyaWZ5KGNvbnN0IENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25z
dCBDcnlwdG9PcGVyYXRpb25EYXRhJiBzaWduYXR1cmUsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRh
dGEmIGRhdGEsIEJvb2xDYWxsYmFjayBjYWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxs
YmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtUnNh
U3NhUGFyYW1zJiByc2FTU0FQYXJhbWV0ZXJzID0gdG9DcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJh
bXMocGFyYW1ldGVycyk7CisKKyAgICBpZiAoIWtleUFsZ29yaXRobU1hdGNoZXMocnNhU1NBUGFy
YW1ldGVycywga2V5KSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgcGxhdGZvcm1WZXJpZnkocnNhU1NBUGFyYW1ldGVycywg
dG9DcnlwdG9LZXlSU0Eoa2V5KSwgc2lnbmF0dXJlLCBkYXRhLCBzdGQ6Om1vdmUoY2FsbGJhY2sp
LCBzdGQ6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOworfQorCiB2b2lkIENyeXB0b0FsZ29y
aXRobVJTQVNTQV9QS0NTMV92MV81OjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1
c2FnZXMsIEtleU9yS2V5UGFpckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVy
ZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJikKIHsKICAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1S
c2FLZXlHZW5QYXJhbXMmIHJzYVBhcmFtZXRlcnMgPSB0b0NyeXB0b0FsZ29yaXRobVJzYUtleUdl
blBhcmFtcyhwYXJhbWV0ZXJzKTsKQEAgLTY4LDcgKzEwNyw3IEBAIHZvaWQgQ3J5cHRvQWxnb3Jp
dGhtUlNBU1NBX1BLQ1MxX3YxXzU6OmcKIAogdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtD
UzFfdjFfNTo6aW1wb3J0S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMsIGNvbnN0IENyeXB0b0tleURhdGEmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFibGUsIENy
eXB0b0tleVVzYWdlIHVzYWdlLCBLZXlDYWxsYmFjayBjYWxsYmFjaywgVm9pZENhbGxiYWNrIGZh
aWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpCiB7Ci0gICAgY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtUnNhU3NhS2V5UGFyYW1zJiByc2FTU0FQYXJhbWV0ZXJzID0gdG9DcnlwdG9BbGdvcml0aG1S
c2FTc2FLZXlQYXJhbXMocGFyYW1ldGVycyk7CisgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtUnNh
S2V5UGFyYW1zV2l0aEhhc2gmIHJzYUtleVBhcmFtZXRlcnMgPSB0b0NyeXB0b0FsZ29yaXRobVJz
YUtleVBhcmFtc1dpdGhIYXNoKHBhcmFtZXRlcnMpOwogICAgIGNvbnN0IENyeXB0b0tleURhdGFS
U0FDb21wb25lbnRzJiByc2FDb21wb25lbnRzID0gdG9DcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50
cyhrZXlEYXRhKTsKIAogICAgIFJlZlB0cjxDcnlwdG9LZXlSU0E+IHJlc3VsdCA9IENyeXB0b0tl
eVJTQTo6Y3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81
LCByc2FDb21wb25lbnRzLCBleHRyYWN0YWJsZSwgdXNhZ2UpOwpAQCAtNzcsOCArMTE2LDggQEAg
dm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKHJzYVNTQVBhcmFtZXRlcnMuaGFzSGFzaCkKLSAgICAgICAgcmVz
dWx0LT5yZXN0cmljdFRvSGFzaChyc2FTU0FQYXJhbWV0ZXJzLmhhc2gpOworICAgIGlmIChyc2FL
ZXlQYXJhbWV0ZXJzLmhhc0hhc2gpCisgICAgICAgIHJlc3VsdC0+cmVzdHJpY3RUb0hhc2gocnNh
S2V5UGFyYW1ldGVycy5oYXNoKTsKIAogICAgIGNhbGxiYWNrKCpyZXN1bHQpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BL
Q1MxX3YxXzUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGht
cy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5oCShyZXZpc2lvbiAxNTk2MzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0Ff
UEtDUzFfdjFfNS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw5IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zOworY2xhc3Mg
Q3J5cHRvS2V5UlNBOworCiBjbGFzcyBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNSBG
SU5BTCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG0gewogcHVibGljOgogICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBzX25hbWU7CkBAIC00OSw2ICs1MiwxMCBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81KCk7CiAgICAgdmlydHVhbCB+
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUoKTsKKworICAgIGJvb2wga2V5QWxnb3Jp
dGhtTWF0Y2hlcyhjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMmIGFsZ29yaXRobVBh
cmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYpIGNvbnN0OworICAgIHZvaWQgcGxhdGZvcm1TaWdu
KGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyYsIGNvbnN0IENyeXB0b0tleVJTQSYs
IGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjaywgVm9pZENhbGxiYWNr
IGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcGxhdGZvcm1WZXJp
ZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zJiwgY29uc3QgQ3J5cHRvS2V5UlNB
JiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgc2lnbmF0dXJlLCBjb25zdCBDcnlwdG9PcGVy
YXRpb25EYXRhJiBkYXRhLCBCb29sQ2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJh
Y2ssIEV4Y2VwdGlvbkNvZGUmKTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcAkocmV2aXNp
b24gMTU5NjM2KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1B
RVNfQ0JDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMzAgKzgyLDE0IEBAIHN0YXRpYyB2
b2lkIHRyYW5zZm9ybUFFU19DQkMoQ0NPcGVyYXRpb24KICAgICBjYWxsYmFjayhyZXN1bHQpOwog
fQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmVuY3J5cHQoY29uc3QgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0
IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lk
Q2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobUFl
c0NiY1BhcmFtcyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5QUVTJiBrZXksIGNvbnN0IENy
eXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2Fs
bGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJikKIHsKLSAgICBjb25zdCBDcnlw
dG9BbGdvcml0aG1BZXNDYmNQYXJhbXMmIGFlc0NCQ1BhcmFtZXRlcnMgPSB0b0NyeXB0b0FsZ29y
aXRobUFlc0NiY1BhcmFtcyhwYXJhbWV0ZXJzKTsKLQotICAgIGlmICghaXNDcnlwdG9LZXlBRVMo
a2V5KSkgewotICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGNvbnN0IENyeXB0b0tleUFFUyYgYWVzS2V5ID0gdG9DcnlwdG9LZXlBRVMo
a2V5KTsKLQotICAgIHRyYW5zZm9ybUFFU19DQkMoa0NDRW5jcnlwdCwgYWVzQ0JDUGFyYW1ldGVy
cywgYWVzS2V5LCBkYXRhLCBzdGQ6Om1vdmUoY2FsbGJhY2spLCBzdGQ6Om1vdmUoZmFpbHVyZUNh
bGxiYWNrKSk7CisgICAgdHJhbnNmb3JtQUVTX0NCQyhrQ0NFbmNyeXB0LCBwYXJhbWV0ZXJzLCBr
ZXksIGRhdGEsIHN0ZDo6bW92ZShjYWxsYmFjayksIHN0ZDo6bW92ZShmYWlsdXJlQ2FsbGJhY2sp
KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpkZWNyeXB0KGNvbnN0IENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBj
b25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxsYmFjayBjYWxsYmFjaywg
Vm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENy
eXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlwdChjb25zdCBDcnlwdG9BbGdvcml0
aG1BZXNDYmNQYXJhbXMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleUFFUyYga2V5LCBjb25z
dCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxsYmFjayBjYWxsYmFjaywgVm9p
ZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpCiB7Ci0gICAgY29uc3Qg
Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zJiBhZXNDQkNQYXJhbWV0ZXJzID0gdG9DcnlwdG9B
bGdvcml0aG1BZXNDYmNQYXJhbXMocGFyYW1ldGVycyk7Ci0KLSAgICBpZiAoIWlzQ3J5cHRvS2V5
QUVTKGtleSkpIHsKLSAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjb25zdCBDcnlwdG9LZXlBRVMmIGFlc0tleSA9IHRvQ3J5cHRvS2V5
QUVTKGtleSk7Ci0KLSAgICB0cmFuc2Zvcm1BRVNfQ0JDKGtDQ0RlY3J5cHQsIGFlc0NCQ1BhcmFt
ZXRlcnMsIGFlc0tleSwgZGF0YSwgc3RkOjptb3ZlKGNhbGxiYWNrKSwgc3RkOjptb3ZlKGZhaWx1
cmVDYWxsYmFjaykpOworICAgIHRyYW5zZm9ybUFFU19DQkMoa0NDRGVjcnlwdCwgcGFyYW1ldGVy
cywga2V5LCBkYXRhLCBzdGQ6Om1vdmUoY2FsbGJhY2spLCBzdGQ6Om1vdmUoZmFpbHVyZUNhbGxi
YWNrKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcAkocmV2aXNp
b24gMTU5NjM2KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1I
TUFDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNDQgKzg4LDI4IEBAIHN0YXRpYyBWZWN0
b3I8dWludDhfdD4gY2FsY3VsYXRlU2lnbmF0dXIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OnNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0b09wZXJh
dGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2ssIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpwbGF0Zm9ybVNpZ24o
Y29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRv
S2V5SE1BQyYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxs
YmFjayBjYWxsYmFjaywgVm9pZENhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBj
b25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJiBobWFjUGFyYW1ldGVycyA9IHRvQ3J5cHRv
QWxnb3JpdGhtSG1hY1BhcmFtcyhwYXJhbWV0ZXJzKTsKLQotICAgIGlmICghaXNDcnlwdG9LZXlI
TUFDKGtleSkpIHsKLSAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjb25zdCBDcnlwdG9LZXlITUFDJiBobWFjS2V5ID0gdG9DcnlwdG9L
ZXlITUFDKGtleSk7Ci0KICAgICBDQ0htYWNBbGdvcml0aG0gYWxnb3JpdGhtOwotICAgIGlmICgh
Z2V0Q29tbW9uQ3J5cHRvQWxnb3JpdGhtKGhtYWNQYXJhbWV0ZXJzLmhhc2gsIGFsZ29yaXRobSkp
IHsKKyAgICBpZiAoIWdldENvbW1vbkNyeXB0b0FsZ29yaXRobShwYXJhbWV0ZXJzLmhhc2gsIGFs
Z29yaXRobSkpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1cmUgPSBjYWxjdWxhdGVT
aWduYXR1cmUoYWxnb3JpdGhtLCBobWFjS2V5LmtleSgpLCBkYXRhKTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwga2V5LmtleSgp
LCBkYXRhKTsKIAogICAgIGNhbGxiYWNrKHNpZ25hdHVyZSk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxn
b3JpdGhtSE1BQzo6dmVyaWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBl
eHBlY3RlZFNpZ25hdHVyZSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgQm9vbENh
bGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBD
cnlwdG9BbGdvcml0aG1ITUFDOjpwbGF0Zm9ybVZlcmlmeShjb25zdCBDcnlwdG9BbGdvcml0aG1I
bWFjUGFyYW1zJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXlITUFDJiBrZXksIGNvbnN0IENy
eXB0b09wZXJhdGlvbkRhdGEmIGV4cGVjdGVkU2lnbmF0dXJlLCBjb25zdCBDcnlwdG9PcGVyYXRp
b25EYXRhJiBkYXRhLCBCb29sQ2FsbGJhY2sgY2FsbGJhY2ssIFZvaWRDYWxsYmFjaywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcyYgaG1h
Y1BhcmFtZXRlcnMgPSB0b0NyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMocGFyYW1ldGVycyk7Ci0K
LSAgICBpZiAoIWlzQ3J5cHRvS2V5SE1BQyhrZXkpKSB7Ci0gICAgICAgIGVjID0gTk9UX1NVUFBP
UlRFRF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgQ3J5cHRvS2V5SE1B
QyYgaG1hY0tleSA9IHRvQ3J5cHRvS2V5SE1BQyhrZXkpOwotCiAgICAgQ0NIbWFjQWxnb3JpdGht
IGFsZ29yaXRobTsKLSAgICBpZiAoIWdldENvbW1vbkNyeXB0b0FsZ29yaXRobShobWFjUGFyYW1l
dGVycy5oYXNoLCBhbGdvcml0aG0pKSB7CisgICAgaWYgKCFnZXRDb21tb25DcnlwdG9BbGdvcml0
aG0ocGFyYW1ldGVycy5oYXNoLCBhbGdvcml0aG0pKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBP
UlRFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8dWludDhfdD4g
c2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwgaG1hY0tleS5rZXkoKSwg
ZGF0YSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNpZ25hdHVyZSA9IGNhbGN1bGF0ZVNpZ25hdHVy
ZShhbGdvcml0aG0sIGtleS5rZXkoKSwgZGF0YSk7CiAKICAgICBib29sIHJlc3VsdCA9IHNpZ25h
dHVyZS5zaXplKCkgPT0gZXhwZWN0ZWRTaWduYXR1cmUuc2Vjb25kICYmICFtZW1jbXAoc2lnbmF0
dXJlLmRhdGEoKSwgZXhwZWN0ZWRTaWduYXR1cmUuZmlyc3QsIHNpZ25hdHVyZS5zaXplKCkpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9Q
S0NTMV92MV81TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFj
L0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcAkocmV2aXNpb24gMTU5NjM2
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1Mx
X3YxXzVNYWMuY3BwOjE1OTYzNikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRv
QWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNy
eXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NS
WVBUTykKKworI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oIgorI2luY2x1
ZGUgIkNyeXB0b0RpZ2VzdC5oIgorI2luY2x1ZGUgIkNyeXB0b0tleVJTQS5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlIDxDb21tb25DcnlwdG8vQ29tbW9uQ3J5cHRvci5o
PgorCisjaWYgZGVmaW5lZChfX2hhc19pbmNsdWRlKQorI2lmIF9faGFzX2luY2x1ZGUoPENvbW1v
bkNyeXB0by9Db21tb25SU0FDcnlwdG9yLmg+KQorI2luY2x1ZGUgPENvbW1vbkNyeXB0by9Db21t
b25SU0FDcnlwdG9yLmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9DQ19SU0FDUllQVE9S
X0hfCitlbnVtIHsKKyAgICBjY1BLQ1MxUGFkZGluZyA9IDEwMDEKK307Cit0eXBlZGVmIHVpbnQz
Ml90IENDQXN5bW1ldHJpY1BhZGRpbmc7CisKK2VudW0geworICAgIGtDQ0RpZ2VzdFNIQTEgPSA4
LAorICAgIGtDQ0RpZ2VzdFNIQTIyNCA9IDksCisgICAga0NDRGlnZXN0U0hBMjU2ID0gMTAsCisg
ICAga0NDRGlnZXN0U0hBMzg0ID0gMTEsCisgICAga0NDRGlnZXN0U0hBNTEyID0gMTIsCit9Owor
dHlwZWRlZiB1aW50MzJfdCBDQ0RpZ2VzdEFsZ29yaXRobTsKKworZW51bSB7CisgICAga0NDTm90
VmVyaWZpZWQgICAgPSAtNDMwNgorfTsKKyNlbmRpZgorCitleHRlcm4gIkMiIENDQ3J5cHRvclN0
YXR1cyBDQ1JTQUNyeXB0b3JTaWduKENDUlNBQ3J5cHRvclJlZiBwcml2YXRlS2V5LCBDQ0FzeW1t
ZXRyaWNQYWRkaW5nIHBhZGRpbmcsIGNvbnN0IHZvaWQgKmhhc2hUb1NpZ24sIHNpemVfdCBoYXNo
U2lnbkxlbiwgQ0NEaWdlc3RBbGdvcml0aG0gZGlnZXN0VHlwZSwgc2l6ZV90IHNhbHRMZW4sIHZv
aWQgKnNpZ25lZERhdGEsIHNpemVfdCAqc2lnbmVkRGF0YUxlbik7CitleHRlcm4gIkMiIENDQ3J5
cHRvclN0YXR1cyBDQ1JTQUNyeXB0b3JWZXJpZnkoQ0NSU0FDcnlwdG9yUmVmIHB1YmxpY0tleSwg
Q0NBc3ltbWV0cmljUGFkZGluZyBwYWRkaW5nLCBjb25zdCB2b2lkICpoYXNoLCBzaXplX3QgaGFz
aExlbiwgQ0NEaWdlc3RBbGdvcml0aG0gZGlnZXN0VHlwZSwgc2l6ZV90IHNhbHRMZW4sIGNvbnN0
IHZvaWQgKnNpZ25lZERhdGEsIHNpemVfdCBzaWduZWREYXRhTGVuKTsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgYm9vbCBnZXRDb21tb25DcnlwdG9EaWdlc3RBbGdvcml0aG0oQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoRnVuY3Rpb24sIENDRGlnZXN0QWxnb3JpdGhtJiBh
bGdvcml0aG0pCit7CisgICAgc3dpdGNoIChoYXNoRnVuY3Rpb24pIHsKKyAgICBjYXNlIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xOgorICAgICAgICBhbGdvcml0aG0gPSBrQ0NEaWdl
c3RTSEExOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXI6OlNIQV8yMjQ6CisgICAgICAgIGFsZ29yaXRobSA9IGtDQ0RpZ2VzdFNIQTIyNDsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpTSEFfMjU2OgorICAgICAgICBhbGdvcml0aG0gPSBrQ0NEaWdlc3RTSEEyNTY7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzM4
NDoKKyAgICAgICAgYWxnb3JpdGhtID0ga0NDRGlnZXN0U0hBMzg0OworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV81MTI6CisgICAg
ICAgIGFsZ29yaXRobSA9IGtDQ0RpZ2VzdFNIQTUxMjsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBDcnlw
dG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6c2lnbihjb25zdCBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgQ3J5cHRv
T3BlcmF0aW9uRGF0YSYgZGF0YSwgVmVjdG9yQ2FsbGJhY2sgY2FsbGJhY2ssIFZvaWRDYWxsYmFj
ayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGNvbnN0IENyeXB0
b0FsZ29yaXRobVJzYVNzYVBhcmFtcyYgcnNhU1NBUGFyYW1ldGVycyA9IHRvQ3J5cHRvQWxnb3Jp
dGhtUnNhU3NhUGFyYW1zKHBhcmFtZXRlcnMpOworCisgICAgaWYgKCFpc0NyeXB0b0tleVJTQShr
ZXkpKSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY29uc3QgQ3J5cHRvS2V5UlNBJiByc2FLZXkgPSB0b0NyeXB0b0tleVJTQShr
ZXkpOworCisgICAgQ0NEaWdlc3RBbGdvcml0aG0gZGlnZXN0QWxnb3JpdGhtOworICAgIGlmICgh
Z2V0Q29tbW9uQ3J5cHRvRGlnZXN0QWxnb3JpdGhtKHJzYVNTQVBhcmFtZXRlcnMuaGFzaCwgZGln
ZXN0QWxnb3JpdGhtKSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0RpZ2VzdD4gZGln
ZXN0ID0gQ3J5cHRvRGlnZXN0OjpjcmVhdGUocnNhU1NBUGFyYW1ldGVycy5oYXNoKTsKKyAgICBp
ZiAoIWRpZ2VzdCkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZGlnZXN0LT5hZGRCeXRlcyhkYXRhLmZpcnN0LCBkYXRhLnNl
Y29uZCk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gZGlnZXN0RGF0YSA9IGRpZ2VzdC0+Y29tcHV0
ZUhhc2goKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1cmUoNTEyKTsKKyAgICBzaXpl
X3Qgc2lnbmF0dXJlU2l6ZSA9IHNpZ25hdHVyZS5zaXplKCk7CisKKyAgICBDQ0NyeXB0b3JTdGF0
dXMgc3RhdHVzID0gQ0NSU0FDcnlwdG9yU2lnbihyc2FLZXkucGxhdGZvcm1LZXkoKSwgY2NQS0NT
MVBhZGRpbmcsIGRpZ2VzdERhdGEuZGF0YSgpLCBkaWdlc3REYXRhLnNpemUoKSwgZGlnZXN0QWxn
b3JpdGhtLCAwLCBzaWduYXR1cmUuZGF0YSgpLCAmc2lnbmF0dXJlU2l6ZSk7CisgICAgaWYgKHN0
YXR1cykgeworICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHNpZ25hdHVyZS5yZXNpemUoc2lnbmF0dXJlU2l6ZSk7CisgICAgY2FsbGJhY2so
c2lnbmF0dXJlKTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6
dmVyaWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0
IENyeXB0b0tleSYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBzaWduYXR1cmUsIGNv
bnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIEJvb2xDYWxsYmFjayBjYWxsYmFjaywgVm9p
ZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgY29u
c3QgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zJiByc2FTU0FQYXJhbWV0ZXJzID0gdG9Dcnlw
dG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMocGFyYW1ldGVycyk7CisKKyAgICBpZiAoIWlzQ3J5cHRv
S2V5UlNBKGtleSkpIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjb25zdCBDcnlwdG9LZXlSU0EmIHJzYUtleSA9IHRvQ3J5cHRv
S2V5UlNBKGtleSk7CisKKyAgICBDQ0RpZ2VzdEFsZ29yaXRobSBkaWdlc3RBbGdvcml0aG07Cisg
ICAgaWYgKCFnZXRDb21tb25DcnlwdG9EaWdlc3RBbGdvcml0aG0ocnNhU1NBUGFyYW1ldGVycy5o
YXNoLCBkaWdlc3RBbGdvcml0aG0pKSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvRGln
ZXN0PiBkaWdlc3QgPSBDcnlwdG9EaWdlc3Q6OmNyZWF0ZShyc2FTU0FQYXJhbWV0ZXJzLmhhc2gp
OworICAgIGlmICghZGlnZXN0KSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkaWdlc3QtPmFkZEJ5dGVzKGRhdGEuZmlyc3Qs
IGRhdGEuc2Vjb25kKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3REYXRhID0gZGlnZXN0
LT5jb21wdXRlSGFzaCgpOworCisgICAgQ0NDcnlwdG9yU3RhdHVzIHN0YXR1cyA9IENDUlNBQ3J5
cHRvclZlcmlmeShyc2FLZXkucGxhdGZvcm1LZXkoKSwgY2NQS0NTMVBhZGRpbmcsIGRpZ2VzdERh
dGEuZGF0YSgpLCBkaWdlc3REYXRhLnNpemUoKSwgZGlnZXN0QWxnb3JpdGhtLCAwLCBzaWduYXR1
cmUuZmlyc3QsIHNpZ25hdHVyZS5zZWNvbmQpOworICAgIGlmICghc3RhdHVzKQorICAgICAgICBj
YWxsYmFjayh0cnVlKTsKKyAgICBlbHNlIGlmIChzdGF0dXMgPT0ga0NDTm90VmVyaWZpZWQgfHwg
a0NDRGVjb2RlRXJyb3IpIC8vIDxyZGFyOi8vcHJvYmxlbS8xNTQ2NDk4Mj4gQ0NSU0FDcnlwdG9y
VmVyaWZ5IHJldHVybnMga0NDRGVjb2RlRXJyb3IgaW5zdGVhZCBvZiBrQ0NOb3RWZXJpZmllZCBz
b21ldGltZXMKKyAgICAgICAgY2FsbGJhY2soZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgZmFp
bHVyZUNhbGxiYWNrKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9D
cnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1h
Yy5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRv
QWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwy
MyArODgsMTUgQEAgc3RhdGljIGJvb2wgZ2V0Q29tbW9uQ3J5cHRvRGlnZXN0QWxnb3JpdAogICAg
IH0KIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6c2lnbihjb25z
dCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkm
IGtleSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgVmVjdG9yQ2FsbGJhY2sgY2Fs
bGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQor
dm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6cGxhdGZvcm1TaWduKGNvbnN0
IENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5
UlNBJiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNr
IGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMmIHJzYVNTQVBhcmFt
ZXRlcnMgPSB0b0NyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyhwYXJhbWV0ZXJzKTsKLQotICAg
IGlmICghaXNDcnlwdG9LZXlSU0Eoa2V5KSkgewotICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURf
RVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IENyeXB0b0tleVJTQSYgcnNh
S2V5ID0gdG9DcnlwdG9LZXlSU0Eoa2V5KTsKLQogICAgIENDRGlnZXN0QWxnb3JpdGhtIGRpZ2Vz
dEFsZ29yaXRobTsKLSAgICBpZiAoIWdldENvbW1vbkNyeXB0b0RpZ2VzdEFsZ29yaXRobShyc2FT
U0FQYXJhbWV0ZXJzLmhhc2gsIGRpZ2VzdEFsZ29yaXRobSkpIHsKKyAgICBpZiAoIWdldENvbW1v
bkNyeXB0b0RpZ2VzdEFsZ29yaXRobShwYXJhbWV0ZXJzLmhhc2gsIGRpZ2VzdEFsZ29yaXRobSkp
IHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+IGRpZ2VzdCA9IENyeXB0b0Rp
Z2VzdDo6Y3JlYXRlKHJzYVNTQVBhcmFtZXRlcnMuaGFzaCk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0RpZ2VzdD4gZGlnZXN0ID0gQ3J5cHRvRGlnZXN0OjpjcmVhdGUocGFyYW1ldGVycy5o
YXNoKTsKICAgICBpZiAoIWRpZ2VzdCkgewogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJS
OwogICAgICAgICByZXR1cm47CkBAIC0xMTcsNyArMTA5LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0
aG1SU0FTU0FfUEtDUzFfdjFfNTo6cwogICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1cmUoNTEy
KTsKICAgICBzaXplX3Qgc2lnbmF0dXJlU2l6ZSA9IHNpZ25hdHVyZS5zaXplKCk7CiAKLSAgICBD
Q0NyeXB0b3JTdGF0dXMgc3RhdHVzID0gQ0NSU0FDcnlwdG9yU2lnbihyc2FLZXkucGxhdGZvcm1L
ZXkoKSwgY2NQS0NTMVBhZGRpbmcsIGRpZ2VzdERhdGEuZGF0YSgpLCBkaWdlc3REYXRhLnNpemUo
KSwgZGlnZXN0QWxnb3JpdGhtLCAwLCBzaWduYXR1cmUuZGF0YSgpLCAmc2lnbmF0dXJlU2l6ZSk7
CisgICAgQ0NDcnlwdG9yU3RhdHVzIHN0YXR1cyA9IENDUlNBQ3J5cHRvclNpZ24oa2V5LnBsYXRm
b3JtS2V5KCksIGNjUEtDUzFQYWRkaW5nLCBkaWdlc3REYXRhLmRhdGEoKSwgZGlnZXN0RGF0YS5z
aXplKCksIGRpZ2VzdEFsZ29yaXRobSwgMCwgc2lnbmF0dXJlLmRhdGEoKSwgJnNpZ25hdHVyZVNp
emUpOwogICAgIGlmIChzdGF0dXMpIHsKICAgICAgICAgZmFpbHVyZUNhbGxiYWNrKCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTEyNywyMyArMTE5LDE1IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNB
U1NBX1BLQ1MxX3YxXzU6OnMKICAgICBjYWxsYmFjayhzaWduYXR1cmUpOwogfQogCi12b2lkIENy
eXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81Ojp2ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENy
eXB0b09wZXJhdGlvbkRhdGEmIHNpZ25hdHVyZSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYg
ZGF0YSwgQm9vbENhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNr
LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3Yx
XzU6OnBsYXRmb3JtVmVyaWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyYgcGFy
YW1ldGVycywgY29uc3QgQ3J5cHRvS2V5UlNBJiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRh
dGEmIHNpZ25hdHVyZSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgQm9vbENhbGxi
YWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKLSAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMmIHJzYVNTQVBh
cmFtZXRlcnMgPSB0b0NyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyhwYXJhbWV0ZXJzKTsKLQot
ICAgIGlmICghaXNDcnlwdG9LZXlSU0Eoa2V5KSkgewotICAgICAgICBlYyA9IE5PVF9TVVBQT1JU
RURfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IENyeXB0b0tleVJTQSYg
cnNhS2V5ID0gdG9DcnlwdG9LZXlSU0Eoa2V5KTsKLQogICAgIENDRGlnZXN0QWxnb3JpdGhtIGRp
Z2VzdEFsZ29yaXRobTsKLSAgICBpZiAoIWdldENvbW1vbkNyeXB0b0RpZ2VzdEFsZ29yaXRobShy
c2FTU0FQYXJhbWV0ZXJzLmhhc2gsIGRpZ2VzdEFsZ29yaXRobSkpIHsKKyAgICBpZiAoIWdldENv
bW1vbkNyeXB0b0RpZ2VzdEFsZ29yaXRobShwYXJhbWV0ZXJzLmhhc2gsIGRpZ2VzdEFsZ29yaXRo
bSkpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+IGRpZ2VzdCA9IENyeXB0
b0RpZ2VzdDo6Y3JlYXRlKHJzYVNTQVBhcmFtZXRlcnMuaGFzaCk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0RpZ2VzdD4gZGlnZXN0ID0gQ3J5cHRvRGlnZXN0OjpjcmVhdGUocGFyYW1ldGVy
cy5oYXNoKTsKICAgICBpZiAoIWRpZ2VzdCkgewogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURf
RVJSOwogICAgICAgICByZXR1cm47CkBAIC0xNTMsNyArMTM3LDcgQEAgdm9pZCBDcnlwdG9BbGdv
cml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6dgogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdERh
dGEgPSBkaWdlc3QtPmNvbXB1dGVIYXNoKCk7CiAKLSAgICBDQ0NyeXB0b3JTdGF0dXMgc3RhdHVz
ID0gQ0NSU0FDcnlwdG9yVmVyaWZ5KHJzYUtleS5wbGF0Zm9ybUtleSgpLCBjY1BLQ1MxUGFkZGlu
ZywgZGlnZXN0RGF0YS5kYXRhKCksIGRpZ2VzdERhdGEuc2l6ZSgpLCBkaWdlc3RBbGdvcml0aG0s
IDAsIHNpZ25hdHVyZS5maXJzdCwgc2lnbmF0dXJlLnNlY29uZCk7CisgICAgQ0NDcnlwdG9yU3Rh
dHVzIHN0YXR1cyA9IENDUlNBQ3J5cHRvclZlcmlmeShrZXkucGxhdGZvcm1LZXkoKSwgY2NQS0NT
MVBhZGRpbmcsIGRpZ2VzdERhdGEuZGF0YSgpLCBkaWdlc3REYXRhLnNpemUoKSwgZGlnZXN0QWxn
b3JpdGhtLCAwLCBzaWduYXR1cmUuZmlyc3QsIHNpZ25hdHVyZS5zZWNvbmQpOwogICAgIGlmICgh
c3RhdHVzKQogICAgICAgICBjYWxsYmFjayh0cnVlKTsKICAgICBlbHNlIGlmIChzdGF0dXMgPT0g
a0NDTm90VmVyaWZpZWQgfHwga0NDRGVjb2RlRXJyb3IpIC8vIDxyZGFyOi8vcHJvYmxlbS8xNTQ2
NDk4Mj4gQ0NSU0FDcnlwdG9yVmVyaWZ5IHJldHVybnMga0NDRGVjb2RlRXJyb3IgaW5zdGVhZCBv
ZiBrQ0NOb3RWZXJpZmllZCBzb21ldGltZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwCShyZXZpc2lv
biAxNTk2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTQgKzQxLDE0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdm9pZCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6cGxhdGZvcm1SZWdp
c3RlckFsZ29yaXRobXMoKQogewotICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENyeXB0b0FsZ29yaXRo
bUFFU19DQkM6OnNfbmFtZSwgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6c19pZGVudGlmaWVyLCBD
cnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpjcmVhdGUpOwotICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENy
eXB0b0FsZ29yaXRobUhNQUM6OnNfbmFtZSwgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6c19pZGVudGlm
aWVyLCBDcnlwdG9BbGdvcml0aG1ITUFDOjpjcmVhdGUpOwotICAgIHJlZ2lzdGVyQWxnb3JpdGht
KENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpzX25hbWUsIENyeXB0b0FsZ29yaXRo
bVJTQVNTQV9QS0NTMV92MV81OjpzX2lkZW50aWZpZXIsIENyeXB0b0FsZ29yaXRobVJTQVNTQV9Q
S0NTMV92MV81OjpjcmVhdGUpOwotICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENyeXB0b0FsZ29yaXRo
bVNIQTE6OnNfbmFtZSwgQ3J5cHRvQWxnb3JpdGhtU0hBMTo6c19pZGVudGlmaWVyLCBDcnlwdG9B
bGdvcml0aG1TSEExOjpjcmVhdGUpOwotICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENyeXB0b0FsZ29y
aXRobVNIQTIyNDo6c19uYW1lLCBDcnlwdG9BbGdvcml0aG1TSEEyMjQ6OnNfaWRlbnRpZmllciwg
Q3J5cHRvQWxnb3JpdGhtU0hBMjI0OjpjcmVhdGUpOwotICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENy
eXB0b0FsZ29yaXRobVNIQTI1Njo6c19uYW1lLCBDcnlwdG9BbGdvcml0aG1TSEEyNTY6OnNfaWRl
bnRpZmllciwgQ3J5cHRvQWxnb3JpdGhtU0hBMjU2OjpjcmVhdGUpOwotICAgIHJlZ2lzdGVyQWxn
b3JpdGhtKENyeXB0b0FsZ29yaXRobVNIQTM4NDo6c19uYW1lLCBDcnlwdG9BbGdvcml0aG1TSEEz
ODQ6OnNfaWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGhtU0hBMzg0OjpjcmVhdGUpOwotICAgIHJl
Z2lzdGVyQWxnb3JpdGhtKENyeXB0b0FsZ29yaXRobVNIQTUxMjo6c19uYW1lLCBDcnlwdG9BbGdv
cml0aG1TSEE1MTI6OnNfaWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGhtU0hBNTEyOjpjcmVhdGUp
OworICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobUFFU19DQkM+KCk7CisgICAg
cmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3JpdGhtSE1BQz4oKTsKKyAgICByZWdpc3RlckFs
Z29yaXRobTxDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNT4oKTsKKyAgICByZWdpc3Rl
ckFsZ29yaXRobTxDcnlwdG9BbGdvcml0aG1TSEExPigpOworICAgIHJlZ2lzdGVyQWxnb3JpdGht
PENyeXB0b0FsZ29yaXRobVNIQTIyND4oKTsKKyAgICByZWdpc3RlckFsZ29yaXRobTxDcnlwdG9B
bGdvcml0aG1TSEEyNTY+KCk7CisgICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3JpdGht
U0hBMzg0PigpOworICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobVNIQTUxMj4o
KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRv
QWxnb3JpdGhtUnNhS2V5UGFyYW1zV2l0aEhhc2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FLZXlQYXJhbXNXaXRoSGFz
aC5oCShyZXZpc2lvbiAxNTk2MzYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0
ZXJzL0NyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcy5oOjE1OTYzNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUtleVBhcmFtc1dpdGhI
YXNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zX2gKKyNkZWZpbmUgQ3J5cHRvQWxnb3Jp
dGhtUnNhU3NhS2V5CisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLmgiCisj
aW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5oIgorCisjaWYgRU5BQkxFKFNVQlRM
RV9DUllQVE8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBwYXJhbWV0ZXJzIGNs
YXNzIGlzIGN1cnJlbnRseSBub3Qgc3BlY2lmaWVkIGluIFdlYkNyeXB0by4KKy8vIEl0IGlzIG5l
Y2Vzc2FyeSB0byBzdXBwb3J0IGltcG9ydCBmcm9tIEpXSywgd2hpY2ggdHJlYXRzIGhhc2ggZnVu
Y3Rpb24gYXMgcGFydCBvZiBhbGdvcml0aG0KKy8vIGlkZW50aWZpZXIsIHNvIHdlIG5lZWQgdG8g
cmVtZW1iZXIgaXQgdG8gY29tcGFyZSB3aXRoIG9uZSBwYXNzZWQgdG8gc2lnbiBvciB2ZXJpZnkg
ZnVuY3Rpb25zLgorY2xhc3MgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zIEZJTkFMIDog
cHVibGljIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMgeworcHVibGljOgorICAgIENyeXB0b0Fs
Z29yaXRobVJzYVNzYUtleVBhcmFtcygpCisgICAgICAgIDogaGFzSGFzaChmYWxzZSkKKyAgICB7
CisgICAgfQorCisgICAgLy8gVGhlIGhhc2ggYWxnb3JpdGhtIHRvIHVzZS4KKyAgICBib29sIGhh
c0hhc2g7CisgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoOworCisgICAgdmlydHVh
bCBDbGFzcyBwYXJhbWV0ZXJzQ2xhc3MoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDbGFzczo6
UnNhU3NhS2V5UGFyYW1zOyB9Cit9OworCitDUllQVE9fQUxHT1JJVEhNX1BBUkFNRVRFUlNfQ0FT
VFMoUnNhU3NhS2V5UGFyYW1zKQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBU
TykKKyNlbmRpZiAvLyBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXNfaApJbmRleDogU291cmNl
L1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhS2V5UGFyYW1zV2l0
aEhhc2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9D
cnlwdG9BbGdvcml0aG1Sc2FLZXlQYXJhbXNXaXRoSGFzaC5oCSh3b3JraW5nIGNvcHkpCisrKyBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FLZXlQYXJh
bXNXaXRoSGFzaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBDcnlwdG9BbGdvcml0aG1S
c2FTc2FLZXlQYXJhbXNfaAorI2lmbmRlZiBDcnlwdG9BbGdvcml0aG1Sc2FLZXlQYXJhbXNXaXRo
SGFzaF9oCiAjZGVmaW5lIENyeXB0b0FsZ29yaXRobVJzYVNzYUtleQogCiAjaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllci5oIgpAQCAtMzYsOSArMzYsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAvLyBUaGlzIHBhcmFtZXRlcnMgY2xhc3MgaXMgY3VycmVudGx5IG5vdCBzcGVjaWZp
ZWQgaW4gV2ViQ3J5cHRvLgogLy8gSXQgaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgaW1wb3J0IGZy
b20gSldLLCB3aGljaCB0cmVhdHMgaGFzaCBmdW5jdGlvbiBhcyBwYXJ0IG9mIGFsZ29yaXRobQog
Ly8gaWRlbnRpZmllciwgc28gd2UgbmVlZCB0byByZW1lbWJlciBpdCB0byBjb21wYXJlIHdpdGgg
b25lIHBhc3NlZCB0byBzaWduIG9yIHZlcmlmeSBmdW5jdGlvbnMuCi1jbGFzcyBDcnlwdG9BbGdv
cml0aG1Sc2FTc2FLZXlQYXJhbXMgRklOQUwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycyB7CitjbGFzcyBDcnlwdG9BbGdvcml0aG1Sc2FLZXlQYXJhbXNXaXRoSGFzaCBGSU5BTCA6
IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoKLSAgICBDcnlwdG9B
bGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMoKQorICAgIENyeXB0b0FsZ29yaXRobVJzYUtleVBhcmFt
c1dpdGhIYXNoKCkKICAgICAgICAgOiBoYXNIYXNoKGZhbHNlKQogICAgIHsKICAgICB9CkBAIC00
NywxMCArNDcsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSGFzaDsKICAgICBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGhhc2g7CiAKLSAgICB2aXJ0dWFsIENsYXNzIHBhcmFtZXRlcnNDbGFz
cygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENsYXNzOjpSc2FTc2FLZXlQYXJhbXM7IH0KKyAg
ICB2aXJ0dWFsIENsYXNzIHBhcmFtZXRlcnNDbGFzcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IENsYXNzOjpSc2FLZXlQYXJhbXNXaXRoSGFzaDsgfQogfTsKIAotQ1JZUFRPX0FMR09SSVRITV9Q
QVJBTUVURVJTX0NBU1RTKFJzYVNzYUtleVBhcmFtcykKK0NSWVBUT19BTEdPUklUSE1fUEFSQU1F
VEVSU19DQVNUUyhSc2FLZXlQYXJhbXNXaXRoSGFzaCkKIAogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdv
cml0aG1Sc2FTc2FLZXlQYXJhbXMuaAkocmV2aXNpb24gMTU5NjM2KQorKysgU291cmNlL1dlYkNv
cmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ3J5cHRv
QWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zX2gKLSNkZWZpbmUgQ3J5cHRvQWxnb3JpdGhtUnNhU3Nh
S2V5Ci0KLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5oIgotCi0jaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8p
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVGhpcyBwYXJhbWV0ZXJzIGNsYXNzIGlzIGN1
cnJlbnRseSBub3Qgc3BlY2lmaWVkIGluIFdlYkNyeXB0by4KLS8vIEl0IGlzIG5lY2Vzc2FyeSB0
byBzdXBwb3J0IGltcG9ydCBmcm9tIEpXSywgd2hpY2ggdHJlYXRzIGhhc2ggZnVuY3Rpb24gYXMg
cGFydCBvZiBhbGdvcml0aG0KLS8vIGlkZW50aWZpZXIsIHNvIHdlIG5lZWQgdG8gcmVtZW1iZXIg
aXQgdG8gY29tcGFyZSB3aXRoIG9uZSBwYXNzZWQgdG8gc2lnbiBvciB2ZXJpZnkgZnVuY3Rpb25z
LgotY2xhc3MgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zIEZJTkFMIDogcHVibGljIENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnMgewotcHVibGljOgotICAgIENyeXB0b0FsZ29yaXRobVJz
YVNzYUtleVBhcmFtcygpCi0gICAgICAgIDogaGFzSGFzaChmYWxzZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgLy8gVGhlIGhhc2ggYWxnb3JpdGhtIHRvIHVzZS4KLSAgICBib29sIGhhc0hhc2g7Ci0g
ICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoOwotCi0gICAgdmlydHVhbCBDbGFzcyBw
YXJhbWV0ZXJzQ2xhc3MoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDbGFzczo6UnNhU3NhS2V5
UGFyYW1zOyB9Ci19OwotCi1DUllQVE9fQUxHT1JJVEhNX1BBUkFNRVRFUlNfQ0FTVFMoUnNhU3Nh
S2V5UGFyYW1zKQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKLSNlbmRp
ZiAvLyBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXNfaAo=
</data>
<flag name="review"
          id="240906"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>