<?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>150910</bug_id>
          
          <creation_ts>2015-11-04 16:42:56 -0800</creation_ts>
          <short_desc>Modern IDB: Implement IDBIndex get/getKey/count requests</short_desc>
          <delta_ts>2015-11-05 12:24:00 -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>Safari 9</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>149117</blocked>
    
    <blocked>150939</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1139485</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-04 16:42:56 -0800</bug_when>
    <thetext>Modern IDB: Implement IDBIndex get/getKey/count requests

For the sake of patch reviewing, this initial run will already return empty values for get/getKey and always return 0 for count.

That is because indexes don&apos;t actually *index* yet.

But doing it this way first (returning the bum values) will make this patch much more reviewable, and make the &quot;actually index things&quot; patch much more reviewable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139688</commentid>
    <comment_count>1</comment_count>
      <attachid>264874</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-05 11:38:07 -0800</bug_when>
    <thetext>Created attachment 264874
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139689</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-05 11:39:02 -0800</bug_when>
    <thetext>FWIW, after this is resolved, https://bugs.webkit.org/show_bug.cgi?id=150939 will make indexes actually index.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139698</commentid>
    <comment_count>3</comment_count>
      <attachid>264874</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-05 11:56:43 -0800</bug_when>
    <thetext>Comment on attachment 264874
Patch v1

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

&gt; Source/WebCore/Modules/indexeddb/client/IDBTransactionImpl.cpp:449
&gt; +Ref&lt;IDBRequest&gt; IDBTransaction::requestGetValue(ScriptExecutionContext&amp; context, IDBIndex&amp; index, const IDBKeyRangeData&amp; range)

This is just like requestGetKey.  Factor the common code out.

&gt; Source/WebCore/Modules/indexeddb/server/MemoryIndex.cpp:52
&gt; +    return { };

Will this be filled in soon?  Maybe a FIXME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139699</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-05 12:02:25 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 264874 [details]
&gt; Patch v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264874&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBTransactionImpl.cpp:449
&gt; &gt; +Ref&lt;IDBRequest&gt; IDBTransaction::requestGetValue(ScriptExecutionContext&amp; context, IDBIndex&amp; index, const IDBKeyRangeData&amp; range)
&gt; 
&gt; This is just like requestGetKey.  Factor the common code out.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/MemoryIndex.cpp:52
&gt; &gt; +    return { };
&gt; 
&gt; Will this be filled in soon?  Maybe a FIXME

See https://bugs.webkit.org/show_bug.cgi?id=150910#c2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139700</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-05 12:02:47 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Comment on attachment 264874 [details]
&gt; &gt; Patch v1
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=264874&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBTransactionImpl.cpp:449
&gt; &gt; &gt; +Ref&lt;IDBRequest&gt; IDBTransaction::requestGetValue(ScriptExecutionContext&amp; context, IDBIndex&amp; index, const IDBKeyRangeData&amp; range)
&gt; &gt; 
&gt; &gt; This is just like requestGetKey.  Factor the common code out.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/indexeddb/server/MemoryIndex.cpp:52
&gt; &gt; &gt; +    return { };
&gt; &gt; 
&gt; &gt; Will this be filled in soon?  Maybe a FIXME
&gt; 
&gt; See https://bugs.webkit.org/show_bug.cgi?id=150910#c2

(But I&apos;ll put the fixme in code)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139701</commentid>
    <comment_count>6</comment_count>
      <attachid>264876</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-05 12:07:55 -0800</bug_when>
    <thetext>Created attachment 264876
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139706</commentid>
    <comment_count>7</comment_count>
      <attachid>264876</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-05 12:23:57 -0800</bug_when>
    <thetext>Comment on attachment 264876
Patch for landing

Clearing flags on attachment: 264876

Committed r192068: &lt;http://trac.webkit.org/changeset/192068&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139707</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-05 12:24:00 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264874</attachid>
            <date>2015-11-05 11:38:07 -0800</date>
            <delta_ts>2015-11-05 12:07:55 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>61285</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwOThjNTk1Li45NmUyZTk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMTEt
MDUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IEltcGxlbWVudCBJREJJbmRleCBnZXQvZ2V0S2V5L2NvdW50IHJlcXVlc3RzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTEwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4
ZWRkYi9tb2Rlcm4vaW5kZXgtZ2V0LWNvdW50LWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LWdldC1jb3VudC1iYXNpYy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtZ2V0
LWNvdW50LWZhaWx1cmVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9p
bmRleGVkZGIvbW9kZXJuL2luZGV4LWdldC1jb3VudC1mYWlsdXJlcy5odG1sOiBBZGRlZC4KKwog
MjAxNS0xMS0wMyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgQWNj
ZXB0IDggYW5kIDQgdmFsdWUgaGV4IGNvbG9ycyAoI1JSR0dCQkFBKQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LWdldC1jb3VudC1iYXNpYy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgt
Z2V0LWNvdW50LWJhc2ljLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4xM2UxZjYzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvbW9kZXJuL2luZGV4LWdldC1jb3VudC1iYXNpYy1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSw5IEBACitBTEVSVDogSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZlcnNpb24gLSAw
IE5ldyB2ZXJzaW9uIC0gMQorQUxFUlQ6IGdldCByZXN1bHQgaXM6IHVuZGVmaW5lZAorQUxFUlQ6
IGdldEtleSByZXN1bHQgaXM6IHVuZGVmaW5lZAorQUxFUlQ6IGNvdW50IHJlc3VsdCBpczogMAor
QUxFUlQ6IEluaXRpYWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRl
CitBTEVSVDogRG9uZQorVGhpcyB0ZXN0cyB0aGUgbW9zdCBiYXNpYyBvcGVyYXRpb24gb2YgdGhl
IElEQkluZGV4IG1ldGhvZHMgZ2V0KCksIGdldEtleSgpLCBhbmQgY291bnQoKS4KK0l0IGRvZXNu
J3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgb3RoZXIgdGhhbiBleGVyY2lzZSB0aGUgcmVxdWVzdHMg
dGhlbXNlbHZlcyBiZWNhdXNlIHdlIGRvbid0IGFjdHVhbGx5IGluZGV4IHlldC4KKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LWdldC1jb3Vu
dC1iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4
LWdldC1jb3VudC1iYXNpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
Ljk1NWJjOWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vaW5kZXgtZ2V0LWNvdW50LWJhc2ljLmh0bWwKQEAgLTAsMCArMSw2NiBAQAorVGhp
cyB0ZXN0cyB0aGUgbW9zdCBiYXNpYyBvcGVyYXRpb24gb2YgdGhlIElEQkluZGV4IG1ldGhvZHMg
Z2V0KCksIGdldEtleSgpLCBhbmQgY291bnQoKS48YnI+CitJdCBkb2Vzbid0IGFjdHVhbGx5IGRv
IGFueXRoaW5nIG90aGVyIHRoYW4gZXhlcmNpc2UgdGhlIHJlcXVlc3RzIHRoZW1zZWx2ZXMgYmVj
YXVzZSB3ZSBkb24ndCBhY3R1YWxseSBpbmRleCB5ZXQuPGJyPgorPGRpdiBpZD0ibG9nZ2VyIj48
L2Rpdj4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworfQorCitm
dW5jdGlvbiBkb25lKCkKK3sKKyAgICBhbGVydCgiRG9uZSIpOworICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9u
IGdvbChtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dnZXIiKS5p
bm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKwordmFyIGNyZWF0ZVJlcXVlc3QgPSB3
aW5kb3cuaW5kZXhlZERCLm9wZW4oIkluZGV4R2V0Q291bnRCYXNpY0RhdGFiYXNlIiwgMSk7CisK
K2NyZWF0ZVJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBh
bGVydCgiSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZlcnNpb24gLSAiICsgZXZlbnQub2xk
VmVyc2lvbiArICIgTmV3IHZlcnNpb24gLSAiICsgZXZlbnQubmV3VmVyc2lvbik7CisKKyAgICB2
YXIgdmVyc2lvblRyYW5zYWN0aW9uID0gY3JlYXRlUmVxdWVzdC50cmFuc2FjdGlvbjsKKyAgICB2
YXIgZGF0YWJhc2UgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgIHZhciBvYmplY3RTdG9yZSA9
IGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKCJUZXN0T2JqZWN0U3RvcmUiKTsKKyAgICB2YXIg
aW5kZXggPSBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgiVGVzdEluZGV4IiwgImZvbyIpOworCisg
ICAgb2JqZWN0U3RvcmUucHV0KCJiYXIiLCAiZm9vIik7CisgICAgCisgICAgdmFyIHJlcXVlc3Qx
ID0gaW5kZXguZ2V0KCJiYXIiKTsKKyAgICByZXF1ZXN0MS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgYWxlcnQoImdldCByZXN1bHQgaXM6ICIgKyByZXF1ZXN0MS5yZXN1bHQpOwor
ICAgIH0KKworICAgIHJlcXVlc3QyID0gaW5kZXguZ2V0S2V5KCJiYXIiKTsKKyAgICByZXF1ZXN0
Mi5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgYWxlcnQoImdldEtleSByZXN1bHQg
aXM6ICIgKyByZXF1ZXN0Mi5yZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2YXIgcmVxdWVzdDMg
PSBpbmRleC5jb3VudCgpOworICAgIHJlcXVlc3QzLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICBhbGVydCgiY291bnQgcmVzdWx0IGlzOiAiICsgcmVxdWVzdDMucmVzdWx0KTsKKyAg
ICB9CisgICAgICAgIAorICAgIHZlcnNpb25UcmFuc2FjdGlvbi5vbmFib3J0ID0gZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICAgICAgYWxlcnQoIkluaXRpYWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRy
YW5zYWN0aW9uIHVuZXhwZWN0ZWQgYWJvcnRlZCIpOworICAgICAgICBkb25lKCk7CisgICAgfQor
CisgICAgdmVyc2lvblRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbihldmVudCkgewor
ICAgICAgICBhbGVydCgiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24g
Y29tcGxldGUiKTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KKworICAgIHZlcnNpb25UcmFuc2Fj
dGlvbi5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxlcnQoIkluaXRpYWwg
dXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIHVuZXhwZWN0ZWQgZXJyb3IiICsgZXZl
bnQpOworICAgICAgICBkb25lKCk7CisgICAgfQorfQorCis8L3NjcmlwdD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC1nZXQtY291bnQtZmFp
bHVyZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJu
L2luZGV4LWdldC1jb3VudC1mYWlsdXJlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYmNmMDBhNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC1nZXQtY291bnQtZmFpbHVyZXMtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1RoaXMgdGVzdHMgc29tZSBvYnZpb3VzIGZhaWx1cmVz
IHRoYXQgY2FuIGhhcHBlbiB3aGlsZSBjYWxsaW5nIHRoZSBJREJJbmRleCBtZXRob2RzIGdldCgp
LCBnZXRLZXkoKSwgYW5kIGNvdW50KCkuCitJbml0aWFsIHVwZ3JhZGUgbmVlZGVkOiBPbGQgdmVy
c2lvbiAtIDAgTmV3IHZlcnNpb24gLSAxCitGYWlsZWQgdG8gZ2V0IHdpdGggYSBudWxsIGtleQor
RmFpbGVkIHRvIGdldEtleSB3aXRoIGEgbnVsbCBrZXkKK0ZhaWxlZCB0byBjb3VudCB3aXRoIGEg
bnVsbCByYW5nZQorRmFpbGVkIHRvIGdldCB3aXRoIGRlbGV0ZWQgSURCT2JqZWN0U3RvcmUKK0Zh
aWxlZCB0byBnZXRLZXkgd2l0aCBkZWxldGVkIElEQk9iamVjdFN0b3JlCitGYWlsZWQgdG8gY291
bnQgd2l0aCBkZWxldGVkIElEQk9iamVjdFN0b3JlCitJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNo
YW5nZSB0cmFuc2FjdGlvbiBjb21wbGV0ZQorRmFpbGVkIHRvIGdldCB3aGlsZSB0cmFuc2FjdGlv
biBpbmFjdGl2ZQorRmFpbGVkIHRvIGdldEtleSB3aGlsZSB0cmFuc2FjdGlvbiBpbmFjdGl2ZQor
RmFpbGVkIHRvIGNvdW50IHdoaWxlIHRyYW5zYWN0aW9uIGluYWN0aXZlCityZWFkb25seSB0cmFu
c2FjdGlvbiBjb21wbGV0ZQorRG9uZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtZ2V0LWNvdW50LWZhaWx1cmVzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtZ2V0LWNvdW50LWZhaWx1cmVzLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyOWUxYQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC1nZXQt
Y291bnQtZmFpbHVyZXMuaHRtbApAQCAtMCwwICsxLDE2NyBAQAorVGhpcyB0ZXN0cyBzb21lIG9i
dmlvdXMgZmFpbHVyZXMgdGhhdCBjYW4gaGFwcGVuIHdoaWxlIGNhbGxpbmcgdGhlIElEQkluZGV4
IG1ldGhvZHMgZ2V0KCksIGdldEtleSgpLCBhbmQgY291bnQoKS48YnI+Cis8ZGl2IGlkPSJsb2dn
ZXIiPjwvZGl2PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit9
CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGxvZygiRG9uZSIpOworICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dnZXIi
KS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKwordmFyIGNyZWF0ZVJlcXVlc3Qg
PSB3aW5kb3cuaW5kZXhlZERCLm9wZW4oIkluZGV4R2V0Q291bnRGYWlsdXJlc0RhdGFiYXNlIiwg
MSk7Cit2YXIgZGF0YWJhc2U7Cit2YXIgaW5kZXg7CisKK2NyZWF0ZVJlcXVlc3Qub251cGdyYWRl
bmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBsb2coIkluaXRpYWwgdXBncmFkZSBuZWVk
ZWQ6IE9sZCB2ZXJzaW9uIC0gIiArIGV2ZW50Lm9sZFZlcnNpb24gKyAiIE5ldyB2ZXJzaW9uIC0g
IiArIGV2ZW50Lm5ld1ZlcnNpb24pOworCisgICAgdmFyIHZlcnNpb25UcmFuc2FjdGlvbiA9IGNy
ZWF0ZVJlcXVlc3QudHJhbnNhY3Rpb247CisgICAgZGF0YWJhc2UgPSBldmVudC50YXJnZXQucmVz
dWx0OworICAgIHZhciBvYmplY3RTdG9yZSA9IGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKCJU
ZXN0T2JqZWN0U3RvcmUiKTsKKyAgICBpbmRleCA9IG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCJU
ZXN0SW5kZXgiLCAiZm9vIik7CisgICAgCisgICAgdHJ5IHsKKyAgICAgICAgaW5kZXguZ2V0KG51
bGwpOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBsb2coIkZhaWxlZCB0byBnZXQgd2l0aCBh
IG51bGwga2V5Iik7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgaW5kZXguZ2V0S2V5KG51
bGwpOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBsb2coIkZhaWxlZCB0byBnZXRLZXkgd2l0
aCBhIG51bGwga2V5Iik7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgaW5kZXguY291bnQo
bnVsbCk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGxvZygiRmFpbGVkIHRvIGNvdW50IHdp
dGggYSBudWxsIHJhbmdlIik7CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBvbmNlIElEQk9i
amVjdFN0b3JlLmRlbGV0ZUluZGV4KCkgaXMgaW1wbGVtZW50ZWQsIHRyeSB0aGVzZQorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA5MTEKKyAgICAvLyBv
YmplY3RTdG9yZS5kZWxldGVJbmRleCgiVGVzdEluZGV4Iik7CisgICAgLy8gCisgICAgLy8gdHJ5
IHsKKyAgICAvLyAgICAgaW5kZXguZ2V0KCJ0ZXN0Iik7CisgICAgLy8gfSBjYXRjaChlKSB7Cisg
ICAgLy8gICAgIGxvZygiRmFpbGVkIHRvIGdldCB3aXRoIGRlbGV0ZWQgSURCSW5kZXgiKTsKKyAg
ICAvLyB9CisgICAgLy8gCisgICAgLy8gdHJ5IHsKKyAgICAvLyAgICAgaW5kZXguZ2V0S2V5KCJ0
ZXN0Iik7CisgICAgLy8gfSBjYXRjaChlKSB7CisgICAgLy8gICAgIGxvZygiRmFpbGVkIHRvIGdl
dEtleSB3aXRoIGRlbGV0ZWQgSURCSW5kZXgiKTsKKyAgICAvLyB9CisgICAgLy8gCisgICAgLy8g
dHJ5IHsKKyAgICAvLyAgICAgaW5kZXguY291bnQoKTsKKyAgICAvLyB9IGNhdGNoKGUpIHsKKyAg
ICAvLyAgICAgbG9nKCJGYWlsZWQgdG8gY291bnQgd2l0aCBkZWxldGVkIElEQkluZGV4Iik7Cisg
ICAgLy8gfQorCisgICAgZGF0YWJhc2UuZGVsZXRlT2JqZWN0U3RvcmUoIlRlc3RPYmplY3RTdG9y
ZSIpOworICAgIHRyeSB7CisgICAgICAgIGluZGV4LmdldChudWxsKTsKKyAgICB9IGNhdGNoKGUp
IHsKKyAgICAgICAgIGxvZygiRmFpbGVkIHRvIGdldCB3aXRoIGRlbGV0ZWQgSURCT2JqZWN0U3Rv
cmUiKTsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAgICBpbmRleC5nZXRLZXkobnVsbCk7Cisg
ICAgfSBjYXRjaChlKSB7CisgICAgICAgICBsb2coIkZhaWxlZCB0byBnZXRLZXkgd2l0aCBkZWxl
dGVkIElEQk9iamVjdFN0b3JlIik7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgaW5kZXgu
Y291bnQobnVsbCk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgICBsb2coIkZhaWxlZCB0byBj
b3VudCB3aXRoIGRlbGV0ZWQgSURCT2JqZWN0U3RvcmUiKTsKKyAgICB9CisKKyAgICB2YXIgb2Jq
ZWN0U3RvcmUgPSBkYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3JlMiIp
OworICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCJUZXN0SW5kZXgiLCAiZm9vIik7CisgICAg
ICAgIAorICAgIHZlcnNpb25UcmFuc2FjdGlvbi5vbmFib3J0ID0gZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICAgICAgbG9nKCJJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiB1
bmV4cGVjdGVkIGFib3J0ZWQiKTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KKworICAgIHZlcnNp
b25UcmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgbG9n
KCJJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBjb21wbGV0ZSIpOwor
ICAgICAgICBjb250aW51ZVRlc3QxKCk7CisgICAgfQorCisgICAgdmVyc2lvblRyYW5zYWN0aW9u
Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBsb2coIkluaXRpYWwgdXBncmFk
ZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIHVuZXhwZWN0ZWQgZXJyb3IiICsgZXZlbnQpOwor
ICAgICAgICBkb25lKCk7CisgICAgfQorfQorCitmdW5jdGlvbiBjb250aW51ZVRlc3QxKCkKK3sK
KyAgICB2YXIgdHJhbnNhY3Rpb24gPSBkYXRhYmFzZS50cmFuc2FjdGlvbigiVGVzdE9iamVjdFN0
b3JlMiIsICJyZWFkb25seSIpOworICAgIHZhciBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9i
amVjdFN0b3JlKCJUZXN0T2JqZWN0U3RvcmUyIik7CisgICAgaW5kZXggPSBvYmplY3RTdG9yZS5p
bmRleCgiVGVzdEluZGV4Iik7CisKKyAgICAvLyBTcGluIHRoZSB0cmFuc2FjdGlvbiB3aXRoIGdl
dCByZXF1ZXN0cyB0byBrZWVwIGl0IGFsaXZlIGxvbmcgZW5vdWdoIGZvciB0aGUgc2V0VGltZW91
dCB0byBmaXJlLgorICAgIHZhciBjYW5GaW5pc2ggPSBmYWxzZTsKKyAgICB2YXIgc3BpbkdldCA9
IGZ1bmN0aW9uKCkgeyAKKyAgICAgICAgb2JqZWN0U3RvcmUuZ2V0KCJmb28iKS5vbnN1Y2Nlc3Mg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICghY2FuRmluaXNoKQorICAgICAgICAgICAg
ICAgIHNwaW5HZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzcGluR2V0KCk7CisKKyAgICB2
YXIgdGVzdFdoaWxlSW5hY3RpdmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIGluZGV4LmdldChudWxsKTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAg
ICAgbG9nKCJGYWlsZWQgdG8gZ2V0IHdoaWxlIHRyYW5zYWN0aW9uIGluYWN0aXZlIik7CisgICAg
ICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgaW5kZXguZ2V0S2V5KG51bGwpOwor
ICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICBsb2coIkZhaWxlZCB0byBnZXRLZXkg
d2hpbGUgdHJhbnNhY3Rpb24gaW5hY3RpdmUiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7
CisgICAgICAgICAgICBpbmRleC5jb3VudChudWxsKTsKKyAgICAgICAgfSBjYXRjaChlKSB7Cisg
ICAgICAgICAgICAgbG9nKCJGYWlsZWQgdG8gY291bnQgd2hpbGUgdHJhbnNhY3Rpb24gaW5hY3Rp
dmUiKTsKKyAgICAgICAgfQorICAgICAgICBjYW5GaW5pc2ggPSB0cnVlOworICAgIH0KKyAgICAK
KyAgICBzZXRUaW1lb3V0KHRlc3RXaGlsZUluYWN0aXZlLCAwKTsKKyAgICAKKyAgICB0cmFuc2Fj
dGlvbi5vbmFib3J0ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgbG9nKCJyZWFkb25seSB0
cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGFib3J0IiArIGV2ZW50KTsKKyAgICAgICAgZG9uZSgpOwor
ICAgIH0KKworICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbihldmVudCkgewor
ICAgICAgICBsb2coInJlYWRvbmx5IHRyYW5zYWN0aW9uIGNvbXBsZXRlIik7CisgICAgICAgIGRv
bmUoKTsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICAgICAgbG9nKCJyZWFkb25seSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGVycm9yIiAr
IGV2ZW50KTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KK30KKworPC9zY3JpcHQ+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggYjNlOGQxNS4uYzQ5NzAwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDE1
LTExLTA1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rl
cm4gSURCOiBJbXBsZW1lbnQgSURCSW5kZXggZ2V0L2dldEtleS9jb3VudCByZXF1ZXN0cy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDkxMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBzdG9y
YWdlL2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtZ2V0LWNvdW50LWJhc2ljLmh0bWwKKyAgICAgICAg
ICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC1nZXQtY291bnQtZmFpbHVyZXMu
aHRtbAorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSW5kZXhlZERCLmg6CisKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDbGllbnQ6OklEQkFueTo6SURCQW55KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkNsaWVudDo6SURCQW55Ojptb2Rlcm5JREJJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQkFueUltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6
SURCQW55OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJBbnk6OmNy
ZWF0ZVVuZGVmaW5lZCk6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
SW5kZXhJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCSW5kZXg6OmNv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCSW5kZXg6OmRvQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJJbmRleDo6Z2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkNsaWVudDo6SURCSW5kZXg6OmRvR2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkNsaWVudDo6SURCSW5kZXg6OmdldEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6
OklEQkluZGV4Ojpkb0dldEtleSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkluZGV4SW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJJbmRleDo6
aW5mbyk6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJP
YmplY3RTdG9yZUltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCT2JqZWN0
U3RvcmU6OmlzRGVsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9iamVj
dFN0b3JlOjptb2Rlcm5UcmFuc2FjdGlvbik6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDbGllbnQ6OklEQlJlcXVlc3Q6OmNyZWF0ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkNsaWVudDo6SURCUmVxdWVzdDo6Y3JlYXRlR2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNs
aWVudDo6SURCUmVxdWVzdDo6SURCUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGll
bnQ6OklEQlJlcXVlc3Q6OnNvdXJjZU9iamVjdFN0b3JlSWRlbnRpZmllcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OnJlcXVlc3RlZEluZGV4UmVj
b3JkVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OnNldFJl
c3VsdFRvVW5kZWZpbmVkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
UmVxdWVzdEltcGwuaDoKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6
OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q2xpZW50OjpJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldEtleSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaDoK
KyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9u
T3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6VHJhbnNhY3Rpb25P
cGVyYXRpb246OlRyYW5zYWN0aW9uT3BlcmF0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb246OmluZGV4SWRlbnRpZmllcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uOjppbmRleFJlY29yZFR5
cGUpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFj
a2luZ1N0b3JlLmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldENvdW50KToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3Jl
Lmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJ
bmRleC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUluZGV4Ojp2YWx1
ZUZvcktleVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SW5kZXg6
OmNvdW50Rm9yS2V5UmFuZ2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9N
ZW1vcnlJbmRleC5oOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpN
ZW1vcnlPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpNZW1vcnlPYmplY3RTdG9yZTo6Y291bnRGb3JLZXlSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjppbmRleFZhbHVlRm9yS2V5UmFuZ2Up
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5o
OgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCk6
IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJSZXF1ZXN0RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0RGF0YTo6SURC
UmVxdWVzdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdERhdGE6Om9iamVjdFN0
b3JlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0RGF0YTo6aW5kZXhJ
ZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3REYXRhOjppbmRleFJlY29y
ZFR5cGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0
YS5oOgorCiAyMDE1LTExLTAzICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBY2NlcHQgOCBhbmQgNCB2YWx1ZSBoZXggY29sb3JzICgjUlJHR0JCQUEpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JbmRleGVkREIuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oCmluZGV4IDQ2YTRhM2QuLjVi
OGIwMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0luZGV4
ZWREQi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5o
CkBAIC03Nyw2ICs3NywxMSBAQCBlbnVtIGNsYXNzIE9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSB7
CiAgICAgTm9PdmVyd3JpdGUsCiB9OwogCitlbnVtIGNsYXNzIEluZGV4UmVjb3JkVHlwZSB7Cisg
ICAgS2V5LAorICAgIFZhbHVlLAorfTsKKwogLy8gSW4gb3JkZXIgb2YgdGhlIGxlYXN0IHRvIHRo
ZSBoaWdoZXN0IHByZWNlZGVudCBpbiB0ZXJtcyBvZiBzb3J0IG9yZGVyLgogZW51bSBLZXlUeXBl
IHsKICAgICBNYXggPSAtMSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmNwcAppbmRleCAwYjU0NjAxLi4wYzg0NDUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFu
eUltcGwuY3BwCkBAIC0zNiw2ICszNiwxMSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNw
YWNlIElEQkNsaWVudCB7CiAKK0lEQkFueTo6SURCQW55KElEQkFueTo6VHlwZSB0eXBlKQorICAg
IDogbV90eXBlKHR5cGUpCit7Cit9CisKIElEQkFueTo6SURCQW55KFJlZjxJREJEYXRhYmFzZT4m
JiBkYXRhYmFzZSkKICAgICA6IG1fdHlwZShJREJBbnk6OlR5cGU6OklEQkRhdGFiYXNlKQogICAg
ICwgbV9kYXRhYmFzZShhZG9wdFJlZigmZGF0YWJhc2UubGVha1JlZigpKSkKQEAgLTQ0LDcgKzQ5
LDEzIEBAIElEQkFueTo6SURCQW55KFJlZjxJREJEYXRhYmFzZT4mJiBkYXRhYmFzZSkKIAogSURC
QW55OjpJREJBbnkoUmVmPElEQk9iamVjdFN0b3JlPiYmIG9iamVjdFN0b3JlKQogICAgIDogbV90
eXBlKElEQkFueTo6VHlwZTo6SURCT2JqZWN0U3RvcmUpCi0gICAgLCBtX29iamVjdFN0b3JlKGFk
b3B0UmVmKCZvYmplY3RTdG9yZS5sZWFrUmVmKCkpKQorICAgICwgbV9vYmplY3RTdG9yZShXVEY6
Om1vdmUob2JqZWN0U3RvcmUpKQoreworfQorCitJREJBbnk6OklEQkFueShSZWY8SURCSW5kZXg+
JiYgaW5kZXgpCisgICAgOiBtX3R5cGUoSURCQW55OjpUeXBlOjpJREJJbmRleCkKKyAgICAsIG1f
aW5kZXgoV1RGOjptb3ZlKGluZGV4KSkKIHsKIH0KIApAQCAtMTA2LDYgKzExNywxMiBAQCBJREJP
YmplY3RTdG9yZSogSURCQW55Ojptb2Rlcm5JREJPYmplY3RTdG9yZSgpCiAgICAgcmV0dXJuIG1f
b2JqZWN0U3RvcmUuZ2V0KCk7CiB9CiAKK0lEQkluZGV4KiBJREJBbnk6Om1vZGVybklEQkluZGV4
KCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6VHlwZTo6SURCSW5kZXgpOworICAg
IHJldHVybiBtX2luZGV4LmdldCgpOworfQorCiBSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rp
b24+IElEQkFueTo6aWRiVHJhbnNhY3Rpb24oKQogewogICAgIHJldHVybiBudWxscHRyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUlt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBs
LmgKaW5kZXggOTAzMWQzNi4uNjNhMWY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5oCkBAIC0zMCw2ICszMCw3IEBACiAK
ICNpbmNsdWRlICJJREJBbnkuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUltcGwuaCIKKyNpbmNs
dWRlICJJREJJbmRleEltcGwuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUltcGwuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcsNiArNDgsMTEgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueShXVEY6Om1vdmUob2JqZWN0U3RvcmUpKSk7CiAgICAg
fQogCisgICAgc3RhdGljIFJlZlB0cjxJREJBbnk+IGNyZWF0ZShSZWY8SURCSW5kZXg+JiYgaW5k
ZXgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueShXVEY6Om1vdmUo
aW5kZXgpKSk7CisgICAgfQorCiAgICAgc3RhdGljIFJlZlB0cjxJREJBbnk+IGNyZWF0ZShjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJREJBbnkoa2V5UGF0aCkpOwpAQCAtNTcsNiArNjMsMTEgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueSh2YWx1ZSkpOwogICAgIH0KIAorICAgIHN0YXRpYyBS
ZWZQdHI8SURCQW55PiBjcmVhdGVVbmRlZmluZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJREJBbnkoSURCQW55OjpUeXBlOjpVbmRlZmluZWQpKTsKKyAgICB9CisKICAg
ICB2aXJ0dWFsIH5JREJBbnkoKTsKIAogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWwgeyByZXR1cm4gbV90eXBlOyB9CkBAIC03NCwxNiArODUsMjAgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCgpIG92ZXJyaWRlIGZpbmFs
OwogCiAgICAgSURCT2JqZWN0U3RvcmUqIG1vZGVybklEQk9iamVjdFN0b3JlKCk7CisgICAgSURC
SW5kZXgqIG1vZGVybklEQkluZGV4KCk7CiAKIHByaXZhdGU6CisgICAgZXhwbGljaXQgSURCQW55
KElEQkFueTo6VHlwZSk7CiAgICAgZXhwbGljaXQgSURCQW55KFJlZjxJREJEYXRhYmFzZT4mJik7
CiAgICAgZXhwbGljaXQgSURCQW55KFJlZjxJREJPYmplY3RTdG9yZT4mJik7CisgICAgZXhwbGlj
aXQgSURCQW55KFJlZjxJREJJbmRleD4mJik7CiAgICAgZXhwbGljaXQgSURCQW55KGNvbnN0IElE
QktleVBhdGgmKTsKICAgICBleHBsaWNpdCBJREJBbnkoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmKTsKIAogICAgIElEQkFueTo6VHlwZSBtX3R5cGUgeyBJREJBbnk6OlR5cGU6OlVuZGVm
aW5lZCB9OwogICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gbV9kYXRhYmFzZTsKICAgICBSZWZQdHI8
SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElEQkluZGV4PiBtX2lu
ZGV4OwogCiAgICAgY29uc3QgSURCS2V5UGF0aCBtX2lkYktleVBhdGg7CiAgICAgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9zY3JpcHRWYWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJJbmRleEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1wbC5jcHAKaW5kZXgg
Y2VjZjkzMy4uZjY5YjJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQkluZGV4SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1wbC5jcHAKQEAgLTI4LDggKzI4LDEzIEBACiAK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0
ZS5oIgogI2luY2x1ZGUgIklEQkFueUltcGwuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmVJbXBsLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25JbXBsLmgiCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCQ2xpZW50IHsK
QEAgLTg5LDE5ICs5NCw2OSBAQCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6
Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0CiAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElE
QkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpCitS
ZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmNvdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4Ojpjb3VudCIp
OworCisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIElEQktleVJhbmdlRGF0YSBy
YW5nZTsKKyAgICByYW5nZS5pc051bGwgPSBmYWxzZTsKKyAgICByZXR1cm4gZG9Db3VudCgqY29u
dGV4dCwgcmFuZ2UsIGVjKTt9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRl
eDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgSURCS2V5UmFuZ2UqIHJh
bmdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6
OmNvdW50Iik7CisKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGRv
Q291bnQoKmNvbnRleHQsIElEQktleVJhbmdlRGF0YShyYW5nZSksIGVjKTsKIH0KIAotUmVmUHRy
PFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlJikKK1JlZlB0cjxXZWJDb3JlOjpJREJS
ZXF1ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBMT0coSW5kZXhlZERCLCAi
SURCSW5kZXg6OmNvdW50Iik7CisKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
RE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZShjb250ZXh0KTsKKyAgICBSZWZQdHI8SURCS2V5
PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7CisgICAg
aWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgeworICAg
ICAgICBlYyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNvZGU6OkRh
dGFFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBk
b0NvdW50KCpjb250ZXh0LCBJREJLZXlSYW5nZURhdGEoaWRiS2V5LmdldCgpKSwgZWMpOwogfQog
Ci1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmNvdW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNv
ZGUmKQorUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0NvdW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0b3JlLT5pc0RlbGV0ZWQoKSkgeworICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBpZiAocmFuZ2UuaXNOdWxsKSB7CisgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8
RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29kZTo6RGF0YUVycm9yKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byYgdHJhbnNhY3Rpb24gPSBtX29iamVjdFN0
b3JlLT5tb2Rlcm5UcmFuc2FjdGlvbigpOworICAgIGlmICghdHJhbnNhY3Rpb24uaXNBY3RpdmUo
KSkgeworICAgICAgICBlYyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlv
bkNvZGU6OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZXF1ZXN0Q291bnQoY29udGV4dCwg
KnRoaXMsIHJhbmdlKTsKIH0KIAogUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4
OjpvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBJREJLZXlSYW5nZSosIGNv
bnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKQpAQCAtMTE0LDI0ICsxNjksMTA4IEBAIFJlZlB0
cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbktleUN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZSYpCitSZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4Ojpn
ZXQiKTsKKworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVf
RVJSOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gZG9HZXQo
KmNvbnRleHQsIElEQktleVJhbmdlRGF0YShyYW5nZSksIGVjKTsKIH0KIAotUmVmUHRyPFdlYkNv
cmU6OklEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpCitSZWZQdHI8V2Vi
Q29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIExPRyhJbmRl
eGVkREIsICJJREJJbmRleDo6Z2V0Iik7CisKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZShjb250ZXh0KTsKKyAgICBSZWZQdHI8
SURCS2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7
CisgICAgaWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkg
eworICAgICAgICBlYyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNv
ZGU6OkRhdGFFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJl
dHVybiBkb0dldCgqY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhKGlkYktleS5nZXQoKSksIGVjKTsK
IH0KIAotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXRLZXkoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZSYpCitSZWZQdHI8
V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmRvR2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaWYgKG1fZGVs
ZXRlZCB8fCBtX29iamVjdFN0b3JlLT5pc0RlbGV0ZWQoKSkgeworICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAo
cmFuZ2UuaXNOdWxsKSB7CisgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4o
SURCRXhjZXB0aW9uQ29kZTo6RGF0YUVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgYXV0byYgdHJhbnNhY3Rpb24gPSBtX29iamVjdFN0b3JlLT5tb2Rlcm5UcmFu
c2FjdGlvbigpOworICAgIGlmICghdHJhbnNhY3Rpb24uaXNBY3RpdmUoKSkgeworICAgICAgICBl
YyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNvZGU6OlRyYW5zYWN0
aW9uSW5hY3RpdmVFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IHJldHVybiB0cmFuc2FjdGlvbi5yZXF1ZXN0R2V0VmFsdWUoY29udGV4dCwgKnRoaXMsIHJhbmdl
KTsKIH0KIAotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXRLZXkoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhj
ZXB0aW9uQ29kZSYpCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldEtl
eShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpnZXRLZXkiKTsKKworICAgIGlmICghY29udGV4
dCkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gZG9HZXRLZXkoKmNvbnRleHQsIElEQktleVJhbmdl
RGF0YShyYW5nZSksIGVjKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQklu
ZGV4OjpnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKElu
ZGV4ZWREQiwgIklEQkluZGV4OjpnZXRLZXkiKTsKKworICAgIGlmICghY29udGV4dCkgeworICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQpOworICAgIFJl
ZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwg
a2V5KTsKKyAgICBpZiAoIWlkYktleSB8fCBpZGJLZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZh
bGlkKSB7CisgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0
aW9uQ29kZTo6RGF0YUVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgcmV0dXJuIGRvR2V0S2V5KCpjb250ZXh0LCBJREJLZXlSYW5nZURhdGEoaWRiS2V5LmdldCgp
KSwgZWMpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmRvR2V0
S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYgcmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9v
YmplY3RTdG9yZS0+aXNEZWxldGVkKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKHJhbmdlLmlzTnVs
bCkgeworICAgICAgICBlYyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlv
bkNvZGU6OkRhdGFFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IGF1dG8mIHRyYW5zYWN0aW9uID0gbV9vYmplY3RTdG9yZS0+bW9kZXJuVHJhbnNhY3Rpb24oKTsK
KyAgICBpZiAoIXRyYW5zYWN0aW9uLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBzdGF0aWNf
Y2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpUcmFuc2FjdGlvbkluYWN0aXZl
RXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gdHJh
bnNhY3Rpb24ucmVxdWVzdEdldEtleShjb250ZXh0LCAqdGhpcywgcmFuZ2UpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBJREJDbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJJbmRleEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJJbmRleEltcGwuaAppbmRleCAwZjYxYjgwLi41MDgwOWMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCSW5k
ZXhJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QkluZGV4SW1wbC5oCkBAIC0zMyw2ICszMyw5IEBACiAjaW5jbHVkZSAiSURCSW5kZXhJbmZvLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IElEQktleVJhbmdlRGF0YTsKKwogbmFt
ZXNwYWNlIElEQkNsaWVudCB7CiAKIGNsYXNzIElEQk9iamVjdFN0b3JlOwpAQCAtNzIsMTEgKzc1
LDE5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBn
ZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29k
ZSYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVl
c3Q+IGdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlIGZpbmFsOwogCisgICAgY29u
c3QgSURCSW5kZXhJbmZvJiBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CisKIHByaXZh
dGU6CiAgICAgSURCSW5kZXgoY29uc3QgSURCSW5kZXhJbmZvJiwgSURCT2JqZWN0U3RvcmUmKTsK
IAorICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBkb0NvdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFeGNlcHRpb25Db2RlJik7CisgICAg
UmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGRvR2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFeGNlcHRpb25Db2RlJik7CisgICAgUmVmUHRyPFdl
YkNvcmU6OklEQlJlcXVlc3Q+IGRvR2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25z
dCBJREJLZXlSYW5nZURhdGEmLCBFeGNlcHRpb25Db2RlJik7CisKICAgICBJREJJbmRleEluZm8g
bV9pbmZvOwogICAgIFJlZjxJREJPYmplY3RTdG9yZT4gbV9vYmplY3RTdG9yZTsKKworICAgIGJv
b2wgbV9kZWxldGVkIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9i
amVjdFN0b3JlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQk9iamVjdFN0b3JlSW1wbC5oCmluZGV4IGQ5YWQ3ZGEuLjkyZTdkYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUlt
cGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2Jq
ZWN0U3RvcmVJbXBsLmgKQEAgLTc5LDkgKzc5LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJl
ZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpIG92ZXJy
aWRlIGZpbmFsOwogCiAgICAgdm9pZCBtYXJrQXNEZWxldGVkKCk7CisgICAgYm9vbCBpc0RlbGV0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KIAogICAgIGNvbnN0IElEQk9iamVjdFN0
b3JlSW5mbyYgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQogCisgICAgLy8gRklYTUU6
IEFmdGVyIHJlbW92aW5nIExlZ2FjeUlEQiBhbmQgZm9sZGluZyBhYnN0cmFjdC9pbXBsZW1lbnRh
dGlvbiBjbGFzc2VzIHRvZ2V0aGVyLAorICAgIC8vIHRoaXMgd2lsbCBubyBsb25nZXIgYmUgbmVj
ZXNzYXJ5LgorICAgIElEQlRyYW5zYWN0aW9uJiBtb2Rlcm5UcmFuc2FjdGlvbigpIHsgcmV0dXJu
IG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KKwogcHJpdmF0ZToKICAgICBJREJPYmplY3RTdG9yZShj
b25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBJREJUcmFuc2FjdGlvbiYpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJ
bXBsLmNwcAppbmRleCBkYmQyZDdhLi43NWI5NjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHAKQEAg
LTQ3LDYgKzQ3LDE2IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvCiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSURCUmVxdWVzdChjb250ZXh0LCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pKTsK
IH0KIAorUmVmPElEQlJlcXVlc3Q+IElEQlJlcXVlc3Q6OmNyZWF0ZUNvdW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgSURCVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlJlcXVlc3QoY29udGV4
dCwgaW5kZXgsIHRyYW5zYWN0aW9uKSk7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJREJSZXF1ZXN0
OjpjcmVhdGVHZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCSW5kZXgmIGlu
ZGV4LCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSByZXF1ZXN0ZWRSZWNvcmRUeXBlLCBJREJU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURC
UmVxdWVzdChjb250ZXh0LCBpbmRleCwgcmVxdWVzdGVkUmVjb3JkVHlwZSwgdHJhbnNhY3Rpb24p
KTsKK30KKwogSURCUmVxdWVzdDo6SURCUmVxdWVzdChJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNv
bm5lY3Rpb24sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBJREJPcGVu
REJSZXF1ZXN0KGNvbnRleHQpCiAgICAgLCBtX2Nvbm5lY3Rpb24oY29ubmVjdGlvbikKQEAgLTYw
LDExICs3MCwyNyBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdAogICAgICwgbV90cmFuc2FjdGlv
bigmdHJhbnNhY3Rpb24pCiAgICAgLCBtX2Nvbm5lY3Rpb24odHJhbnNhY3Rpb24uc2VydmVyQ29u
bmVjdGlvbigpKQogICAgICwgbV9yZXNvdXJjZUlkZW50aWZpZXIodHJhbnNhY3Rpb24uc2VydmVy
Q29ubmVjdGlvbigpKQotICAgICwgbV9zb3VyY2UoYWRvcHRSZWYoKklEQkFueTo6Y3JlYXRlKG9i
amVjdFN0b3JlKS5sZWFrUmVmKCkpKQorICAgICwgbV9zb3VyY2UoSURCQW55OjpjcmVhdGUob2Jq
ZWN0U3RvcmUpKQoreworICAgIHN1c3BlbmRJZk5lZWRlZCgpOworfQorCitJREJSZXF1ZXN0OjpJ
REJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRl
eCwgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQorICAgIDogSURCT3BlbkRCUmVxdWVzdCgm
Y29udGV4dCkKKyAgICAsIG1fdHJhbnNhY3Rpb24oJnRyYW5zYWN0aW9uKQorICAgICwgbV9jb25u
ZWN0aW9uKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5lY3Rpb24oKSkKKyAgICAsIG1fcmVzb3VyY2VJ
ZGVudGlmaWVyKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5lY3Rpb24oKSkKKyAgICAsIG1fc291cmNl
KElEQkFueTo6Y3JlYXRlKGluZGV4KSkKIHsKICAgICBzdXNwZW5kSWZOZWVkZWQoKTsKIH0KIAor
SURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJ
REJJbmRleCYgaW5kZXgsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIHJlcXVlc3RlZFJlY29y
ZFR5cGUsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKKyAgICA6IElEQlJlcXVlc3QoY29u
dGV4dCwgaW5kZXgsIHRyYW5zYWN0aW9uKQoreworICAgIG1fcmVxdWVzdGVkSW5kZXhSZWNvcmRU
eXBlID0gcmVxdWVzdGVkUmVjb3JkVHlwZTsKK30KKwogSURCUmVxdWVzdDo6fklEQlJlcXVlc3Qo
KQogewogfQpAQCAtMTA0LDEyICsxMzAsNDIgQEAgdWludDY0X3QgSURCUmVxdWVzdDo6c291cmNl
T2JqZWN0U3RvcmVJZGVudGlmaWVyKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc291cmNlKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAobV9zb3VyY2UtPnR5cGUoKSAhPSBJREJBbnk6OlR5cGU6
OklEQk9iamVjdFN0b3JlKQorCisgICAgaWYgKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpU
eXBlOjpJREJPYmplY3RTdG9yZSkgeworICAgICAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fc291
cmNlLT5tb2Rlcm5JREJPYmplY3RTdG9yZSgpOworICAgICAgICBpZiAoIW9iamVjdFN0b3JlKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBvYmplY3RTdG9yZS0+aW5mbygp
LmlkZW50aWZpZXIoKTsKKyAgICB9CisKKyAgICBpZiAobV9zb3VyY2UtPnR5cGUoKSA9PSBJREJB
bnk6OlR5cGU6OklEQkluZGV4KSB7CisgICAgICAgIGF1dG8qIGluZGV4ID0gbV9zb3VyY2UtPm1v
ZGVybklEQkluZGV4KCk7CisgICAgICAgIGlmICghaW5kZXgpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIGluZGV4LT5pbmZvKCkub2JqZWN0U3RvcmVJZGVudGlmaWVyKCk7
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3VpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJj
ZUluZGV4SWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKG1fc291cmNlLT50eXBlKCkgIT0gSURCQW55OjpUeXBlOjpJREJJ
bmRleCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX3NvdXJjZS0+bW9kZXJuSURCT2Jq
ZWN0U3RvcmUoKSkKKyAgICBpZiAoIW1fc291cmNlLT5tb2Rlcm5JREJJbmRleCgpKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIHJldHVybiBtX3NvdXJjZS0+bW9kZXJuSURCT2JqZWN0U3RvcmUo
KS0+aW5mbygpLmlkZW50aWZpZXIoKTsKKyAgICByZXR1cm4gbV9zb3VyY2UtPm1vZGVybklEQklu
ZGV4KCktPmluZm8oKS5pZGVudGlmaWVyKCk7Cit9CisKK0luZGV4ZWREQjo6SW5kZXhSZWNvcmRU
eXBlIElEQlJlcXVlc3Q6OnJlcXVlc3RlZEluZGV4UmVjb3JkVHlwZSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1fc291cmNlKTsKKyAgICBBU1NFUlQobV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6
OlR5cGU6OklEQkluZGV4KTsKKworICAgIHJldHVybiBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlw
ZTsKIH0KIAogRXZlbnRUYXJnZXRJbnRlcmZhY2UgSURCUmVxdWVzdDo6ZXZlbnRUYXJnZXRJbnRl
cmZhY2UoKSBjb25zdApAQCAtMjA0LDEzICsyNjAsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJl
c3VsdFRvU3RydWN0dXJlZENsb25lKGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURh
dAogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVkKCkKIHsKLSAgICBhdXRv
IGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBET01SZXF1ZXN0U3RhdGUgc3RhdGUoY29udGV4dCk7Ci0g
ICAgaWYgKGF1dG8qIGV4ZWNTdGF0ZSA9IHN0YXRlLmV4ZWMoKSkKLSAgICAgICAgbV9yZXN1bHQg
PSBJREJBbnk6OmNyZWF0ZShEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShleGVjU3RhdGUtPnZtKCks
IEpTQzo6anNVbmRlZmluZWQoKSkpOworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGVVbmRl
ZmluZWQoKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpyZXF1ZXN0Q29tcGxldGVkKGNvbnN0IElE
QlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5oCmluZGV4IDE0NTYxZWQuLmE0
MmIxN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJSZXF1ZXN0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJSZXF1ZXN0SW1wbC5oCkBAIC00MSw2ICs0MSw5IEBAIGNsYXNzIElEQktleURh
dGE7CiBjbGFzcyBJREJSZXN1bHREYXRhOwogY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CiAK
K25hbWVzcGFjZSBJbmRleGVkREIgeworZW51bSBjbGFzcyBJbmRleFJlY29yZFR5cGU7Cit9CiAK
IG5hbWVzcGFjZSBJREJDbGllbnQgewogCkBAIC00OSw2ICs1Miw4IEBAIGNsYXNzIElEQkNvbm5l
Y3Rpb25Ub1NlcnZlcjsKIGNsYXNzIElEQlJlcXVlc3QgOiBwdWJsaWMgV2ViQ29yZTo6SURCT3Bl
bkRCUmVxdWVzdCwgcHVibGljIFJlZkNvdW50ZWQ8SURCUmVxdWVzdD4gewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJ
REJPYmplY3RTdG9yZSYsIElEQlRyYW5zYWN0aW9uJik7CisgICAgc3RhdGljIFJlZjxJREJSZXF1
ZXN0PiBjcmVhdGVDb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJREJU
cmFuc2FjdGlvbiYpOworICAgIHN0YXRpYyBSZWY8SURCUmVxdWVzdD4gY3JlYXRlR2V0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBl
LCBJREJUcmFuc2FjdGlvbiYpOwogCiAgICAgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBy
ZXNvdXJjZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlSWRlbnRpZmllcjsg
fQogCkBAIC02Miw2ICs2Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYg
cmVhZHlTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdWludDY0X3Qgc291cmNlT2JqZWN0
U3RvcmVJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdWludDY0X3Qgc291cmNlSW5kZXhJZGVudGlm
aWVyKCkgY29uc3Q7CisgICAgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVxdWVzdGVkSW5k
ZXhSZWNvcmRUeXBlKCkgY29uc3Q7CiAKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwg
RXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlk
ZTsKQEAgLTg1LDYgKzkyLDggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIElEQlJlcXVlc3Qo
SURCQ29ubmVjdGlvblRvU2VydmVyJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIElE
QlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgSURCVHJh
bnNhY3Rpb24mKTsKKyAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJ
bmRleCYsIElEQlRyYW5zYWN0aW9uJik7CisgICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgSURCSW5kZXgmLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgSURCVHJhbnNh
Y3Rpb24mKTsKIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdC4KICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKQEAgLTEwOSw2
ICsxMTgsNyBAQCBwcml2YXRlOgogICAgIElEQlJlc291cmNlSWRlbnRpZmllciBtX3Jlc291cmNl
SWRlbnRpZmllcjsKICAgICBSZWZQdHI8SURCQW55PiBtX3NvdXJjZTsKICAgICBib29sIG1faGFz
UGVuZGluZ0FjdGl2aXR5IHsgdHJ1ZSB9OworICAgIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBl
IG1fcmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURCQ2xp
ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCmluZGV4IGNmZTA0YzMuLmVmNmIyNTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFu
c2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCkBAIC00NDYsNiArNDQ2LDM2IEBAIFJlZjxJREJS
ZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0CiAgICAgcmV0dXJuIFdURjo6bW92ZShyZXF1ZXN0KTsKIH0KIAorUmVm
PElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0VmFsdWUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJLZXlSYW5nZURh
dGEmIHJhbmdlKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVz
dEdldFZhbHVlIik7CisgICAgQVNTRVJUKGlzQWN0aXZlKCkpOworICAgIEFTU0VSVCghcmFuZ2Uu
aXNOdWxsKTsKKworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3Jl
YXRlR2V0KGNvbnRleHQsIGluZGV4LCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZTo6VmFsdWUs
ICp0aGlzKTsKKyAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOworCisgICAgYXV0byBvcGVy
YXRpb24gPSBjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwg
JklEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpn
ZXRSZWNvcmRPblNlcnZlciwgcmFuZ2UpOworICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURjo6bW92
ZShvcGVyYXRpb24pKTsKKworICAgIHJldHVybiBXVEY6Om1vdmUocmVxdWVzdCk7Cit9CisKK1Jl
ZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldEtleShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYgcmFuZ2UpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0
R2V0VmFsdWUiKTsKKyAgICBBU1NFUlQoaXNBY3RpdmUoKSk7CisgICAgQVNTRVJUKCFyYW5nZS5p
c051bGwpOworCisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVh
dGVHZXQoY29udGV4dCwgaW5kZXgsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlOjpLZXksICp0
aGlzKTsKKyAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOworCisgICAgYXV0byBvcGVyYXRp
b24gPSBjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklE
QlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpnZXRS
ZWNvcmRPblNlcnZlciwgcmFuZ2UpOworICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURjo6bW92ZShv
cGVyYXRpb24pKTsKKworICAgIHJldHVybiBXVEY6Om1vdmUocmVxdWVzdCk7Cit9CisKIHZvaWQg
SURCVHJhbnNhY3Rpb246OmdldFJlY29yZE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBv
cGVyYXRpb24sIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UpCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZlciIpOwpAQCAtNDU3LDEz
ICs0ODcsMjQgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIoSURC
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGEKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCVHJhbnNhY3Rpb246OmRpZEdldFJlY29yZE9uU2VydmVyIik7CiAKLSAgICByZXF1ZXN0
LnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKHJlc3VsdERhdGEucmVzdWx0RGF0YSgpKTsKKyAg
ICBpZiAocmVxdWVzdC5zb3VyY2VJbmRleElkZW50aWZpZXIoKSAmJiByZXF1ZXN0LnJlcXVlc3Rl
ZEluZGV4UmVjb3JkVHlwZSgpID09IEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlOjpLZXkpIHsK
KyAgICAgICAgaWYgKHJlc3VsdERhdGEucmVzdWx0S2V5KCkpCisgICAgICAgICAgICByZXF1ZXN0
LnNldFJlc3VsdChyZXN1bHREYXRhLnJlc3VsdEtleSgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmVxdWVzdC5zZXRSZXN1bHRUb1VuZGVmaW5lZCgpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChyZXN1bHREYXRhLnJlc3VsdERhdGEoKS5kYXRhKCkpCisgICAgICAgICAgICByZXF1
ZXN0LnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKHJlc3VsdERhdGEucmVzdWx0RGF0YSgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVxdWVzdC5zZXRSZXN1bHRUb1VuZGVmaW5lZCgp
OworICAgIH0KKwogICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRhKTsKIH0K
IAogUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25z
dCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQogewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFu
c2FjdGlvbjo6cmVxdWVzdENvdW50Iik7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0
aW9uOjpyZXF1ZXN0Q291bnQgKElEQk9iamVjdFN0b3JlKSIpOwogICAgIEFTU0VSVChpc0FjdGl2
ZSgpKTsKICAgICBBU1NFUlQoIXJhbmdlLmlzTnVsbCk7CiAKQEAgLTQ3NSw2ICs1MTYsMjAgQEAg
UmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgSUQKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAorUmVmPElE
QlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJh
bmdlKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENvdW50
IChJREJJbmRleCkiKTsKKyAgICBBU1NFUlQoaXNBY3RpdmUoKSk7CisgICAgQVNTRVJUKCFyYW5n
ZS5pc051bGwpOworCisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0Ojpj
cmVhdGVDb3VudChjb250ZXh0LCBpbmRleCwgKnRoaXMpOworICAgIGFkZFJlcXVlc3QocmVxdWVz
dC5nZXQoKSk7CisKKyAgICBzY2hlZHVsZU9wZXJhdGlvbihjcmVhdGVUcmFuc2FjdGlvbk9wZXJh
dGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRHZXRDb3VudE9u
U2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmdldENvdW50T25TZXJ2ZXIsIHJhbmdlKSk7CisKKyAg
ICByZXR1cm4gcmVxdWVzdDsKK30KKwogdm9pZCBJREJUcmFuc2FjdGlvbjo6Z2V0Q291bnRPblNl
cnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJLZXlSYW5nZURh
dGEmIGtleVJhbmdlKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Z2V0
Q291bnRPblNlcnZlciIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCmluZGV4IDllY2FlZjguLjcz
NjYxZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJUcmFuc2FjdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTUwLDYgKzUwLDcgQEAgc3RydWN0
IElEQktleVJhbmdlRGF0YTsKIG5hbWVzcGFjZSBJREJDbGllbnQgewogCiBjbGFzcyBJREJEYXRh
YmFzZTsKK2NsYXNzIElEQkluZGV4OwogY2xhc3MgVHJhbnNhY3Rpb25PcGVyYXRpb247CiAKIGNs
YXNzIElEQlRyYW5zYWN0aW9uIDogcHVibGljIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uIHsKQEAg
LTk3LDYgKzk4LDkgQEAgcHVibGljOgogICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0RGVsZXRl
UmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYpOwogICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0Q2xlYXJPYmplY3RT
dG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUmKTsKICAgICBSZWY8
SURCUmVxdWVzdD4gcmVxdWVzdENvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmpl
Y3RTdG9yZSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworICAgIFJlZjxJREJSZXF1ZXN0PiBy
ZXF1ZXN0Q291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkluZGV4JiwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJik7CisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RHZXRWYWx1ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsK
KyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdEdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgSURCSW5kZXgmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKIAogICAgIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVy
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5z
YWN0aW9uT3BlcmF0aW9uLmNwcAppbmRleCA0NjU2NDlmLi5mZTg0Y2JjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFu
c2FjdGlvbk9wZXJhdGlvbi5jcHAKQEAgLTM1LDYgKzM1LDkgQEAgVHJhbnNhY3Rpb25PcGVyYXRp
b246OlRyYW5zYWN0aW9uT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgSURC
UmVxdWUKICAgICA6IFRyYW5zYWN0aW9uT3BlcmF0aW9uKHRyYW5zYWN0aW9uKQogewogICAgIG1f
b2JqZWN0U3RvcmVJZGVudGlmaWVyID0gcmVxdWVzdC5zb3VyY2VPYmplY3RTdG9yZUlkZW50aWZp
ZXIoKTsKKyAgICBtX2luZGV4SWRlbnRpZmllciA9IHJlcXVlc3Quc291cmNlSW5kZXhJZGVudGlm
aWVyKCk7CisgICAgaWYgKG1faW5kZXhJZGVudGlmaWVyKQorICAgICAgICBtX2luZGV4UmVjb3Jk
VHlwZSA9IHJlcXVlc3QucmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlKCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIElEQkNsaWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaAppbmRleCBhYzYwNmM5
Li4xMGE2NzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaApAQCAtMzYsNiArMzYsMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJSZXN1bHREYXRhOwogCituYW1lc3Bh
Y2UgSW5kZXhlZERCIHsKK2VudW0gY2xhc3MgSW5kZXhSZWNvcmRUeXBlOworfQorCiBuYW1lc3Bh
Y2UgSURCQ2xpZW50IHsKIAogY2xhc3MgVHJhbnNhY3Rpb25PcGVyYXRpb24gOiBwdWJsaWMgUmVm
Q291bnRlZDxUcmFuc2FjdGlvbk9wZXJhdGlvbj4gewpAQCAtNTQsNyArNTgsOSBAQCBwdWJsaWM6
CiAgICAgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAgICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIHRyYW5zYWN0
aW9uSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24tPmluZm8oKS5pZGVu
dGlmaWVyKCk7IH0KICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX29iamVjdFN0b3JlSWRlbnRpZmllcjsgfQorICAgIHVpbnQ2NF90IGluZGV4SWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhJZGVudGlmaWVyOyB9CiAgICAgSURCVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uKCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsgfQor
ICAgIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIGluZGV4UmVjb3JkVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXhSZWNvcmRUeXBlOyB9CiAKIHByb3RlY3RlZDoKICAgICBUcmFuc2FjdGlv
bk9wZXJhdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCkBAIC02OCw2ICs3NCw4IEBA
IHByb3RlY3RlZDoKICAgICBSZWY8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CiAgICAg
SURCUmVzb3VyY2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICB1aW50NjRfdCBtX29iamVj
dFN0b3JlSWRlbnRpZmllciB7IDAgfTsKKyAgICB1aW50NjRfdCBtX2luZGV4SWRlbnRpZmllciB7
IDAgfTsKKyAgICBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBtX2luZGV4UmVjb3JkVHlwZTsK
ICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fcGVyZm9ybUZ1bmN0aW9uOwogICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCUmVzdWx0RGF0YSYpPiBtX2NvbXBsZXRlRnVuY3Rpb247
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDM4OWIxZmEuLjdhOGMyNGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2lu
Z1N0b3JlLmgKQEAgLTQyLDYgKzQyLDEwIEBAIGNsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwog
CiBzdHJ1Y3QgSURCS2V5UmFuZ2VEYXRhOwogCituYW1lc3BhY2UgSW5kZXhlZERCIHsKK2VudW0g
Y2xhc3MgSW5kZXhSZWNvcmRUeXBlOworfQorCiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAogY2xh
c3MgSURCQmFja2luZ1N0b3JlIHsKQEAgLTYyLDcgKzY2LDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgSURCRXJyb3IgZGVsZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
SURCS2V5UmFuZ2VEYXRhJikgPSAwOwogICAgIHZpcnR1YWwgSURCRXJyb3IgcHV0UmVjb3JkKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRT
YWZlRGF0YUJ1ZmZlciYgdmFsdWUpID0gMDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGdldFJlY29y
ZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBUaHJl
YWRTYWZlRGF0YUJ1ZmZlciYgb3V0VmFsdWUpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIGdl
dENvdW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYs
IHVpbnQ2NF90JiBvdXRDb3VudCkgPSAwOworICAgIHZpcnR1YWwgSURCRXJyb3IgZ2V0SW5kZXhS
ZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVy
LCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgVGhy
ZWFkU2FmZURhdGFCdWZmZXImIG91dFZhbHVlKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvciBn
ZXRDb3VudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZp
ZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIHVpbnQ2NF90JiBvdXRDb3VudCkgPSAwOwogICAg
IHZpcnR1YWwgSURCRXJyb3IgZ2VuZXJhdGVLZXlOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QmIGtleU51bWJlcikgPSAwOwogCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFj
a2luZ1N0b3JlLmNwcAppbmRleCBmMmUwYTc3Li4wZmVkYjg5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURC
QmFja2luZ1N0b3JlLmNwcApAQCAtMjYyLDcgKzI2Miw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJh
Y2tpbmdTdG9yZTo6cHV0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3RpCiAgICAgcmV0dXJuIElEQkVycm9yKCk7CiB9CiAKLUlEQkVycm9yIE1lbW9yeUlEQkJhY2tp
bmdTdG9yZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgb3V0VmFsdWUp
CitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBUaHJlYWRTYWZlRGF0
YUJ1ZmZlciYgb3V0VmFsdWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tp
bmdTdG9yZTo6Z2V0UmVjb3JkIik7CiAKQEAgLTI3NSwxMSArMjc1LDI4IEBAIElEQkVycm9yIE1l
bW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3RpCiAgICAgaWYgKCFvYmplY3RTdG9yZSkKICAgICAgICAgcmV0dXJuIElEQkVy
cm9yKElEQkV4Y2VwdGlvbkNvZGU6OlVua25vd24sIFdURjo6QVNDSUlMaXRlcmFsKCJObyBiYWNr
aW5nIHN0b3JlIG9iamVjdCBzdG9yZSBmb3VuZCIpKTsKIAotICAgIG91dFZhbHVlID0gb2JqZWN0
U3RvcmUtPnZhbHVlRm9yS2V5UmFuZ2Uoa2V5UmFuZ2VEYXRhKTsKKyAgICBvdXRWYWx1ZSA9IG9i
amVjdFN0b3JlLT52YWx1ZUZvcktleVJhbmdlKHJhbmdlKTsKICAgICByZXR1cm4gSURCRXJyb3Io
KTsKIH0KIAotSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRDb3VudChjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCB1aW50NjRf
dCYgb3V0Q291bnQpCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldEluZGV4UmVj
b3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwg
SW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJiByYW5nZSwgVGhyZWFkU2FmZURhdGFCdWZmZXImIG91dFZhbHVlKQoreworICAgIExPRyhJ
bmRleGVkREIsICJNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldEluZGV4UmVjb3JkIik7CisKKyAg
ICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKworICAgIGlmICghbV90cmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb25JZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIElEQkVy
cm9yKElEQkV4Y2VwdGlvbkNvZGU6OlVua25vd24sIFdURjo6QVNDSUlMaXRlcmFsKCJObyBiYWNr
aW5nIHN0b3JlIHRyYW5zYWN0aW9uIGZvdW5kIHRvIGdldCByZWNvcmQiKSk7CisKKyAgICBNZW1v
cnlPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlc0J5SWRlbnRpZmllci5n
ZXQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICBpZiAoIW9iamVjdFN0b3JlKQorICAgICAg
ICByZXR1cm4gSURCRXJyb3IoSURCRXhjZXB0aW9uQ29kZTo6VW5rbm93biwgV1RGOjpBU0NJSUxp
dGVyYWwoIk5vIGJhY2tpbmcgc3RvcmUgb2JqZWN0IHN0b3JlIGZvdW5kIikpOworCisgICAgb3V0
VmFsdWUgPSBvYmplY3RTdG9yZS0+aW5kZXhWYWx1ZUZvcktleVJhbmdlKGluZGV4SWRlbnRpZmll
ciwgcmVjb3JkVHlwZSwgcmFuZ2UpOworICAgIHJldHVybiBJREJFcnJvcigpOworfQorCitJREJF
cnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBy
YW5nZSwgdWludDY0X3QmIG91dENvdW50KQogewogICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJ
REJCYWNraW5nU3RvcmU6OmdldENvdW50Iik7CiAKQEAgLTI5Miw3ICszMDksOCBAQCBJREJFcnJv
ciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3RpbwogICAgIGlmICghb2JqZWN0U3RvcmUpCiAgICAgICAgIHJldHVybiBJ
REJFcnJvcihJREJFeGNlcHRpb25Db2RlOjpVbmtub3duLCBXVEY6OkFTQ0lJTGl0ZXJhbCgiTm8g
YmFja2luZyBzdG9yZSBvYmplY3Qgc3RvcmUgZm91bmQiKSk7CiAKLSAgICBvdXRDb3VudCA9IG9i
amVjdFN0b3JlLT5jb3VudEZvcktleVJhbmdlKHJhbmdlKTsKKyAgICBvdXRDb3VudCA9IG9iamVj
dFN0b3JlLT5jb3VudEZvcktleVJhbmdlKGluZGV4SWRlbnRpZmllciwgcmFuZ2UpOworCiAgICAg
cmV0dXJuIElEQkVycm9yKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaAppbmRl
eCA2NjZmNWQ3Li5kODUwNGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCkBAIC02
MCw3ICs2MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIElEQkVycm9yIGRlbGV0ZVJhbmdlKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpIG92ZXJyaWRl
IGZpbmFsOwogICAgIHZpcnR1YWwgSURCRXJyb3IgcHV0UmVjb3JkKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYg
dmFsdWUpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgSURCRXJyb3IgZ2V0UmVjb3JkKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIFRocmVhZFNh
ZmVEYXRhQnVmZmVyJiBvdXRWYWx1ZSkgb3ZlcnJpZGUgZmluYWw7Ci0gICAgdmlydHVhbCBJREJF
cnJvciBnZXRDb3VudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmLCB1aW50NjRfdCYgb3V0Q291bnQpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwg
SURCRXJyb3IgZ2V0SW5kZXhSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0
X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiwgVGhyZWFkU2FmZURhdGFCdWZmZXImIG91dFZhbHVlKSBvdmVycmlkZSBm
aW5hbDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwg
dWludDY0X3QmIG91dENvdW50KSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIElEQkVycm9y
IGdlbmVyYXRlS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90JiBr
ZXlOdW1iZXIpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdm9pZCByZW1vdmVPYmplY3RTdG9yZUZv
clZlcnNpb25DaGFuZ2VBYm9ydChNZW1vcnlPYmplY3RTdG9yZSYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5jcHAKaW5k
ZXggNjlhYWM3YS4uMmNmZWRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SW5kZXguY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIlRocmVhZFNhZmVEYXRh
QnVmZmVyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewog
CkBAIC00NSw2ICs0NywxNiBAQCBNZW1vcnlJbmRleDo6fk1lbW9yeUluZGV4KCkKIHsKIH0KIAor
VGhyZWFkU2FmZURhdGFCdWZmZXIgTWVtb3J5SW5kZXg6OnZhbHVlRm9yS2V5UmFuZ2UoSW5kZXhl
ZERCOjpJbmRleFJlY29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordWludDY0X3QgTWVtb3J5SW5kZXg6OmNvdW50Rm9yS2V5UmFu
Z2UoY29uc3QgSURCS2V5UmFuZ2VEYXRhJikKK3sKKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSURCU2VydmVyCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmgKaW5k
ZXggZGE0YjU3MS4uZDlmZGRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmgKQEAgLTMxLDYgKzMxLDE1IEBACiAjaW5j
bHVkZSAiSURCSW5kZXhJbmZvLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGhy
ZWFkU2FmZURhdGFCdWZmZXI7CisKK3N0cnVjdCBJREJLZXlSYW5nZURhdGE7CisKK25hbWVzcGFj
ZSBJbmRleGVkREIgeworZW51bSBjbGFzcyBJbmRleFJlY29yZFR5cGU7Cit9CisKIG5hbWVzcGFj
ZSBJREJTZXJ2ZXIgewogCiBjbGFzcyBNZW1vcnlJbmRleCB7CkBAIC00Miw2ICs1MSw5IEBAIHB1
YmxpYzoKIAogICAgIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1f
aW5mbzsgfQogCisgICAgVGhyZWFkU2FmZURhdGFCdWZmZXIgdmFsdWVGb3JLZXlSYW5nZShJbmRl
eGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJikgY29uc3Q7Cisg
ICAgdWludDY0X3QgY291bnRGb3JLZXlSYW5nZShjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAg
ICAKIHByaXZhdGU6CiAgICAgTWVtb3J5SW5kZXgoY29uc3QgSURCSW5kZXhJbmZvJik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlP
YmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5T2JqZWN0U3RvcmUuY3BwCmluZGV4IGZhMjNjYjUuLjc0MTliYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9y
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9y
eU9iamVjdFN0b3JlLmNwcApAQCAtNzIsNyArNzIsNyBAQCBJREJFcnJvciBNZW1vcnlPYmplY3RT
dG9yZTo6Y3JlYXRlSW5kZXgoTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24mIHRyYW5zYWN0
aQogewogICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgi
KTsKIAotICAgIGlmICghbV93cml0ZVRyYW5zYWN0aW9uIHx8IG1fd3JpdGVUcmFuc2FjdGlvbi0+
aXNWZXJzaW9uQ2hhbmdlKCkgfHwgbV93cml0ZVRyYW5zYWN0aW9uICE9ICZ0cmFuc2FjdGlvbikK
KyAgICBpZiAoIW1fd3JpdGVUcmFuc2FjdGlvbiB8fCAhbV93cml0ZVRyYW5zYWN0aW9uLT5pc1Zl
cnNpb25DaGFuZ2UoKSB8fCBtX3dyaXRlVHJhbnNhY3Rpb24gIT0gJnRyYW5zYWN0aW9uKQogICAg
ICAgICByZXR1cm4gSURCRXJyb3IoSURCRXhjZXB0aW9uQ29kZTo6Q29uc3RyYWludEVycm9yKTsK
IAogICAgIEFTU0VSVCghbV9pbmRleGVzQnlJZGVudGlmaWVyLmNvbnRhaW5zKGluZm8uaWRlbnRp
ZmllcigpKSk7CkBAIC0xNzUsMTAgKzE3NSwxNiBAQCB2b2lkIE1lbW9yeU9iamVjdFN0b3JlOjpz
ZXRLZXlWYWx1ZShjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRAog
ICAgICAgICBtX29yZGVyZWRLZXlzLT5pbnNlcnQoa2V5RGF0YSk7CiB9CiAKLXVpbnQ2NF90IE1l
bW9yeU9iamVjdFN0b3JlOjpjb3VudEZvcktleVJhbmdlKGNvbnN0IElEQktleVJhbmdlRGF0YSYg
aW5SYW5nZSkgY29uc3QKK3VpbnQ2NF90IE1lbW9yeU9iamVjdFN0b3JlOjpjb3VudEZvcktleVJh
bmdlKHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBpblJh
bmdlKSBjb25zdAogewogICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlPYmplY3RTdG9yZTo6Y291
bnRGb3JLZXlSYW5nZSIpOwogCisgICAgaWYgKGluZGV4SWRlbnRpZmllcikgeworICAgICAgICBh
dXRvKiBpbmRleCA9IG1faW5kZXhlc0J5SWRlbnRpZmllci5nZXQoaW5kZXhJZGVudGlmaWVyKTsK
KyAgICAgICAgQVNTRVJUKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGluZGV4LT5jb3VudEZvcktl
eVJhbmdlKGluUmFuZ2UpOworICAgIH0KKwogICAgIGlmICghbV9rZXlWYWx1ZVN0b3JlKQogICAg
ICAgICByZXR1cm4gMDsKIApAQCAtMjA5LDYgKzIxNSwxNSBAQCBUaHJlYWRTYWZlRGF0YUJ1ZmZl
ciBNZW1vcnlPYmplY3RTdG9yZTo6dmFsdWVGb3JLZXlSYW5nZShjb25zdCBJREJLZXlSYW5nZURh
dGEmCiAgICAgcmV0dXJuIG1fa2V5VmFsdWVTdG9yZS0+Z2V0KGtleSk7CiB9CiAKK1RocmVhZFNh
ZmVEYXRhQnVmZmVyIE1lbW9yeU9iamVjdFN0b3JlOjppbmRleFZhbHVlRm9yS2V5UmFuZ2UodWlu
dDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSByZWNvcmRU
eXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKSBjb25zdAoreworICAgIExPRyhJbmRl
eGVkREIsICJNZW1vcnlPYmplY3RTdG9yZTo6aW5kZXhWYWx1ZUZvcktleVJhbmdlIik7CisKKyAg
ICBhdXRvKiBpbmRleCA9IG1faW5kZXhlc0J5SWRlbnRpZmllci5nZXQoaW5kZXhJZGVudGlmaWVy
KTsKKyAgICBBU1NFUlQoaW5kZXgpOworICAgIHJldHVybiBpbmRleC0+dmFsdWVGb3JLZXlSYW5n
ZShyZWNvcmRUeXBlLCByYW5nZSk7Cit9CisKIElEQktleURhdGEgTWVtb3J5T2JqZWN0U3RvcmU6
Omxvd2VzdEtleVdpdGhSZWNvcmRJblJhbmdlKGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFu
Z2VEYXRhKSBjb25zdAogewogICAgIGlmICghbV9rZXlWYWx1ZVN0b3JlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3Jl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0
U3RvcmUuaAppbmRleCBlNjQxOTczLi5mOTA0OWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaApA
QCAtNDIsNiArNDIsMTAgQEAgY2xhc3MgSURCS2V5RGF0YTsKIAogc3RydWN0IElEQktleVJhbmdl
RGF0YTsKIAorbmFtZXNwYWNlIEluZGV4ZWREQiB7CitlbnVtIGNsYXNzIEluZGV4UmVjb3JkVHlw
ZTsKK30KKwogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKIGNsYXNzIE1lbW9yeUJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uOwpAQCAtNzQsNyArNzgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBsYWNl
S2V5VmFsdWVTdG9yZShzdGQ6OnVuaXF1ZV9wdHI8S2V5VmFsdWVNYXA+JiYpOwogCiAgICAgVGhy
ZWFkU2FmZURhdGFCdWZmZXIgdmFsdWVGb3JLZXlSYW5nZShjb25zdCBJREJLZXlSYW5nZURhdGEm
KSBjb25zdDsKLSAgICB1aW50NjRfdCBjb3VudEZvcktleVJhbmdlKGNvbnN0IElEQktleVJhbmdl
RGF0YSYpIGNvbnN0OworICAgIFRocmVhZFNhZmVEYXRhQnVmZmVyIGluZGV4VmFsdWVGb3JLZXlS
YW5nZSh1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBl
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmKSBjb25zdDsKKyAgICB1aW50NjRfdCBjb3VudEZvcktl
eVJhbmdlKHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJikg
Y29uc3Q7CiAKICAgICBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8oKSBjb25zdCB7IHJl
dHVybiBtX2luZm87IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggY2QzNTc3Mi4u
YmVjYmEyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC00NDcsMTMgKzQ0NywxNyBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2Fs
bGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIAotdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29u
c3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIFZhbHVlRGF0YUNhbGxiYWNrIGNhbGxi
YWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgVmFsdWVEYXRh
Q2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQiKTsKIAog
ICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNrKTsKLSAgICBt
X3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0
YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlm
aWVyKCksIGtleVJhbmdlRGF0YSkpOworCisgICAgaWYgKHVpbnQ2NF90IGluZGV4SWRlbnRpZmll
ciA9IHJlcXVlc3REYXRhLmluZGV4SWRlbnRpZmllcigpKQorICAgICAgICBtX3NlcnZlci5wb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwg
aW5kZXhJZGVudGlmaWVyLCByZXF1ZXN0RGF0YS5pbmRleFJlY29yZFR5cGUoKSwgcmFuZ2UpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQsIGNh
bGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0
YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwgcmFuZ2UpKTsKIH0KIAogdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VE
YXRhKQpAQCAtNDYyLDcgKzQ2Niw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1H
ZXRSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSCiAgICAgTE9H
KEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQiKTsK
IAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlSWRl
bnRpZmllcik7CiAKICAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciB2YWx1ZURhdGE7CiAgICAgSURC
RXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEsIHZhbHVlRGF0YSk7CkBA
IC00NzAsNiArNDczLDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNv
cmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSCiAgICAgbV9zZXJ2ZXIu
cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLCB2YWx1ZURhdGEpKTsKIH0KIAordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdl
dEluZGV4UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVj
b3JkVHlwZSByZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQoreworICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQiKTsKKworICAgIEFTU0VSVChtX2Jh
Y2tpbmdTdG9yZSk7CisKKyAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciB2YWx1ZURhdGE7CisgICAg
SURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0SW5kZXhSZWNvcmQodHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgcmVj
b3JkVHlwZSwgcmFuZ2UsIHZhbHVlRGF0YSk7CisKKyAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHZhbHVlRGF0
YSkpOworfQorCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBU
aHJlYWRTYWZlRGF0YUJ1ZmZlciYgcmVzdWx0RGF0YSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwpAQCAtNDg0LDEwICs1MDAsMTAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0
Q291bnQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXkKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudCIpOwog
CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2soY2FsbGJhY2spOwotICAg
IG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCwgY2FsbGJhY2tJRCwgcmVxdWVzdERh
dGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRp
ZmllcigpLCByYW5nZSkpOworICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCwg
Y2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3RE
YXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIo
KSwgcmFuZ2UpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldENvdW50
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEpCit2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0
Q291bnQiKTsKQEAgLTQ5Niw3ICs1MTIsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZQogICAg
IEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogCiAgICAgdWludDY0X3QgY291bnQ7Ci0g
ICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0Q291bnQodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleVJhbmdlRGF0YSwgY291bnQpOwor
ICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldENvdW50KHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIGtleVJh
bmdlRGF0YSwgY291bnQpOwogCiAgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
R2V0Q291bnQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGNvdW50KSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5oCmluZGV4IDRmNTU2ZDEuLjRmNzI5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5oCkBAIC00OCw2ICs0OCwxMCBAQCBjbGFzcyBJREJFcnJvcjsKIGNsYXNzIElEQlJlcXVlc3RE
YXRhOwogY2xhc3MgSURCVHJhbnNhY3Rpb25JbmZvOwogCituYW1lc3BhY2UgSW5kZXhlZERCIHsK
K2VudW0gY2xhc3MgSW5kZXhSZWNvcmRUeXBlOworfQorCiBuYW1lc3BhY2UgSURCU2VydmVyIHsK
IAogY2xhc3MgSURCQ29ubmVjdGlvblRvQ2xpZW50OwpAQCAtMTA5LDcgKzExMyw4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCSW5kZXhJbmZvJik7CiAgICAgdm9pZCBwZXJmb3JtUHV0T3JBZGQodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJL
ZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwgSW5kZXhlZERC
OjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOwogICAgIHZvaWQgcGVyZm9ybUdldFJlY29yZCh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYpOwotICAgIHZvaWQgcGVyZm9ybUdldENvdW50KHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJik7CisgICAgdm9pZCBwZXJmb3JtR2V0SW5kZXhSZWNvcmQodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBp
bmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmKTsKKyAgICB2b2lkIHBlcmZvcm1HZXRDb3VudCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRp
ZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CiAgICAgdm9pZCBwZXJmb3JtRGVsZXRlUmVj
b3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CiAgICAgdm9pZCBwZXJmb3JtQWN0aXZhdGVUcmFu
c2FjdGlvbkluQmFja2luZ1N0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCVHJhbnNhY3Rpb25JbmZvJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuY3BwCmluZGV4IDVhM2Q5ZTUu
LmRmMTY0YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJSZXF1ZXN0RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmNwcApAQCAtNDYsMTIgKzQ2LDE3IEBAIElEQlJl
cXVlc3REYXRhOjpJREJSZXF1ZXN0RGF0YShJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9u
JiBvcGVyYXRpb24pCiAgICAgLCBtX3JlcXVlc3RJZGVudGlmaWVyKHN0ZDo6bWFrZV91bmlxdWU8
SURCUmVzb3VyY2VJZGVudGlmaWVyPihvcGVyYXRpb24uaWRlbnRpZmllcigpKSkKICAgICAsIG1f
dHJhbnNhY3Rpb25JZGVudGlmaWVyKHN0ZDo6bWFrZV91bmlxdWU8SURCUmVzb3VyY2VJZGVudGlm
aWVyPihvcGVyYXRpb24udHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpKQogICAgICwgbV9vYmplY3RT
dG9yZUlkZW50aWZpZXIob3BlcmF0aW9uLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKQorICAgICwg
bV9pbmRleElkZW50aWZpZXIob3BlcmF0aW9uLmluZGV4SWRlbnRpZmllcigpKQogeworICAgIGlm
IChtX2luZGV4SWRlbnRpZmllcikKKyAgICAgICAgbV9pbmRleFJlY29yZFR5cGUgPSBvcGVyYXRp
b24uaW5kZXhSZWNvcmRUeXBlKCk7CiB9CiAKIElEQlJlcXVlc3REYXRhOjpJREJSZXF1ZXN0RGF0
YShjb25zdCBJREJSZXF1ZXN0RGF0YSYgb3RoZXIpCiAgICAgOiBtX3NlcnZlckNvbm5lY3Rpb25J
ZGVudGlmaWVyKG90aGVyLm1fc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIpCiAgICAgLCBtX29i
amVjdFN0b3JlSWRlbnRpZmllcihvdGhlci5tX29iamVjdFN0b3JlSWRlbnRpZmllcikKKyAgICAs
IG1faW5kZXhJZGVudGlmaWVyKG90aGVyLm1faW5kZXhJZGVudGlmaWVyKQorICAgICwgbV9pbmRl
eFJlY29yZFR5cGUob3RoZXIubV9pbmRleFJlY29yZFR5cGUpCiAgICAgLCBtX2RhdGFiYXNlSWRl
bnRpZmllcihvdGhlci5tX2RhdGFiYXNlSWRlbnRpZmllcikKICAgICAsIG1fcmVxdWVzdGVkVmVy
c2lvbihvdGhlci5tX3JlcXVlc3RlZFZlcnNpb24pCiB7CkBAIC04MSwxMCArODYsMjIgQEAgSURC
UmVzb3VyY2VJZGVudGlmaWVyIElEQlJlcXVlc3REYXRhOjp0cmFuc2FjdGlvbklkZW50aWZpZXIo
KSBjb25zdAogCiB1aW50NjRfdCBJREJSZXF1ZXN0RGF0YTo6b2JqZWN0U3RvcmVJZGVudGlmaWVy
KCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX29iamVjdFN0b3JlSWRlbnRpZmllcik7
CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICByZXR1cm4gbV9vYmpl
Y3RTdG9yZUlkZW50aWZpZXI7CiB9CiAKK3VpbnQ2NF90IElEQlJlcXVlc3REYXRhOjppbmRleElk
ZW50aWZpZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWRlbnRpZmllciB8
fCBtX2luZGV4SWRlbnRpZmllcik7CisgICAgcmV0dXJuIG1faW5kZXhJZGVudGlmaWVyOworfQor
CitJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBJREJSZXF1ZXN0RGF0YTo6aW5kZXhSZWNvcmRU
eXBlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pbmRleElkZW50aWZpZXIpOworICAgIHJldHVy
biBtX2luZGV4UmVjb3JkVHlwZTsKK30KKwogdWludDY0X3QgSURCUmVxdWVzdERhdGE6OnJlcXVl
c3RlZFZlcnNpb24oKSBjb25zdAogewogICAgIHJldHVybiBtX3JlcXVlc3RlZFZlcnNpb247CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVx
dWVzdERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJS
ZXF1ZXN0RGF0YS5oCmluZGV4IGI4YjRhMjguLjIxYTI2MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5oCkBA
IC0zMyw2ICszMywxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSBJbmRl
eGVkREIgeworZW51bSBjbGFzcyBJbmRleFJlY29yZFR5cGU7Cit9CisKIG5hbWVzcGFjZSBJREJD
bGllbnQgewogY2xhc3MgSURCQ29ubmVjdGlvblRvU2VydmVyOwogY2xhc3MgSURCT3BlbkRCUmVx
dWVzdDsKQEAgLTUwLDYgKzU0LDggQEAgcHVibGljOgogICAgIElEQlJlc291cmNlSWRlbnRpZmll
ciByZXF1ZXN0SWRlbnRpZmllcigpIGNvbnN0OwogICAgIElEQlJlc291cmNlSWRlbnRpZmllciB0
cmFuc2FjdGlvbklkZW50aWZpZXIoKSBjb25zdDsKICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIoKSBjb25zdDsKKyAgICB1aW50NjRfdCBpbmRleElkZW50aWZpZXIoKSBjb25zdDsK
KyAgICBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBpbmRleFJlY29yZFR5cGUoKSBjb25zdDsK
IAogICAgIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgZGF0YWJhc2VJZGVudGlmaWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZUlkZW50aWZpZXI7IH0KICAgICB1aW50NjRfdCByZXF1
ZXN0ZWRWZXJzaW9uKCkgY29uc3Q7CkBAIC02MSw2ICs2Nyw4IEBAIHByaXZhdGU6CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPElEQlJlc291cmNlSWRlbnRpZmllcj4gbV9yZXF1ZXN0SWRlbnRpZmllcjsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCUmVzb3VyY2VJZGVudGlmaWVyPiBtX3RyYW5zYWN0aW9u
SWRlbnRpZmllcjsKICAgICB1aW50NjRfdCBtX29iamVjdFN0b3JlSWRlbnRpZmllciB7IDAgfTsK
KyAgICB1aW50NjRfdCBtX2luZGV4SWRlbnRpZmllciB7IDAgfTsKKyAgICBJbmRleGVkREI6Oklu
ZGV4UmVjb3JkVHlwZSBtX2luZGV4UmVjb3JkVHlwZTsKIAogICAgIElEQkRhdGFiYXNlSWRlbnRp
ZmllciBtX2RhdGFiYXNlSWRlbnRpZmllcjsKICAgICB1aW50NjRfdCBtX3JlcXVlc3RlZFZlcnNp
b24geyAwIH07Cg==
</data>
<flag name="review"
          id="289987"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264876</attachid>
            <date>2015-11-05 12:07:55 -0800</date>
            <delta_ts>2015-11-05 12:23:57 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>61859</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjY2RjYzU2Li4zMTkyYmZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMTEt
MDUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IEltcGxlbWVudCBJREJJbmRleCBnZXQvZ2V0S2V5L2NvdW50IHJlcXVlc3RzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTEwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIHN0b3JhZ2UvaW5k
ZXhlZGRiL21vZGVybi9pbmRleC1nZXQtY291bnQtYmFzaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtZ2V0LWNvdW50LWJhc2lj
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC1n
ZXQtY291bnQtZmFpbHVyZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtZ2V0LWNvdW50LWZhaWx1cmVzLmh0bWw6IEFkZGVkLgor
CiAyMDE1LTExLTA1ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAg
ICAgIE1hcmtpbmcgaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9hc3luYy14aHItb25lcnJv
ci5odG1sIGFzIGZsYWt5IG9uIG1hYy13azIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC1nZXQtY291bnQtYmFzaWMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LWdldC1jb3VudC1iYXNp
Yy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlMWY2
MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVy
bi9pbmRleC1nZXQtY291bnQtYmFzaWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorQUxF
UlQ6IEluaXRpYWwgdXBncmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gMCBOZXcgdmVyc2lvbiAt
IDEKK0FMRVJUOiBnZXQgcmVzdWx0IGlzOiB1bmRlZmluZWQKK0FMRVJUOiBnZXRLZXkgcmVzdWx0
IGlzOiB1bmRlZmluZWQKK0FMRVJUOiBjb3VudCByZXN1bHQgaXM6IDAKK0FMRVJUOiBJbml0aWFs
IHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBjb21wbGV0ZQorQUxFUlQ6IERvbmUK
K1RoaXMgdGVzdHMgdGhlIG1vc3QgYmFzaWMgb3BlcmF0aW9uIG9mIHRoZSBJREJJbmRleCBtZXRo
b2RzIGdldCgpLCBnZXRLZXkoKSwgYW5kIGNvdW50KCkuCitJdCBkb2Vzbid0IGFjdHVhbGx5IGRv
IGFueXRoaW5nIG90aGVyIHRoYW4gZXhlcmNpc2UgdGhlIHJlcXVlc3RzIHRoZW1zZWx2ZXMgYmVj
YXVzZSB3ZSBkb24ndCBhY3R1YWxseSBpbmRleCB5ZXQuCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC1nZXQtY291bnQtYmFzaWMuaHRtbCBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC1nZXQtY291bnQtYmFz
aWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTViYzlkCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4
LWdldC1jb3VudC1iYXNpYy5odG1sCkBAIC0wLDAgKzEsNjYgQEAKK1RoaXMgdGVzdHMgdGhlIG1v
c3QgYmFzaWMgb3BlcmF0aW9uIG9mIHRoZSBJREJJbmRleCBtZXRob2RzIGdldCgpLCBnZXRLZXko
KSwgYW5kIGNvdW50KCkuPGJyPgorSXQgZG9lc24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyBvdGhl
ciB0aGFuIGV4ZXJjaXNlIHRoZSByZXF1ZXN0cyB0aGVtc2VsdmVzIGJlY2F1c2Ugd2UgZG9uJ3Qg
YWN0dWFsbHkgaW5kZXggeWV0Ljxicj4KKzxkaXYgaWQ9ImxvZ2dlciI+PC9kaXY+Cis8c2NyaXB0
PgorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERv
bmUoKTsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK30KKworZnVuY3Rpb24gZG9uZSgp
Cit7CisgICAgYWxlcnQoIkRvbmUiKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBnb2wobWVzc2FnZSkK
K3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nZ2VyIikuaW5uZXJIVE1MICs9IG1l
c3NhZ2UgKyAiPGJyPiI7Cit9CisKK3ZhciBjcmVhdGVSZXF1ZXN0ID0gd2luZG93LmluZGV4ZWRE
Qi5vcGVuKCJJbmRleEdldENvdW50QmFzaWNEYXRhYmFzZSIsIDEpOworCitjcmVhdGVSZXF1ZXN0
Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgYWxlcnQoIkluaXRpYWwg
dXBncmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gIiArIGV2ZW50Lm9sZFZlcnNpb24gKyAiIE5l
dyB2ZXJzaW9uIC0gIiArIGV2ZW50Lm5ld1ZlcnNpb24pOworCisgICAgdmFyIHZlcnNpb25UcmFu
c2FjdGlvbiA9IGNyZWF0ZVJlcXVlc3QudHJhbnNhY3Rpb247CisgICAgdmFyIGRhdGFiYXNlID0g
ZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYXRhYmFzZS5jcmVh
dGVPYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3JlIik7CisgICAgdmFyIGluZGV4ID0gb2JqZWN0
U3RvcmUuY3JlYXRlSW5kZXgoIlRlc3RJbmRleCIsICJmb28iKTsKKworICAgIG9iamVjdFN0b3Jl
LnB1dCgiYmFyIiwgImZvbyIpOworICAgIAorICAgIHZhciByZXF1ZXN0MSA9IGluZGV4LmdldCgi
YmFyIik7CisgICAgcmVxdWVzdDEub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGFs
ZXJ0KCJnZXQgcmVzdWx0IGlzOiAiICsgcmVxdWVzdDEucmVzdWx0KTsKKyAgICB9CisKKyAgICBy
ZXF1ZXN0MiA9IGluZGV4LmdldEtleSgiYmFyIik7CisgICAgcmVxdWVzdDIub25zdWNjZXNzID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIGFsZXJ0KCJnZXRLZXkgcmVzdWx0IGlzOiAiICsgcmVxdWVz
dDIucmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdmFyIHJlcXVlc3QzID0gaW5kZXguY291bnQo
KTsKKyAgICByZXF1ZXN0My5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgYWxlcnQo
ImNvdW50IHJlc3VsdCBpczogIiArIHJlcXVlc3QzLnJlc3VsdCk7CisgICAgfQorICAgICAgICAK
KyAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
ICAgIGFsZXJ0KCJJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiB1bmV4
cGVjdGVkIGFib3J0ZWQiKTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KKworICAgIHZlcnNpb25U
cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxlcnQo
IkluaXRpYWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlIik7Cisg
ICAgICAgIGRvbmUoKTsKKyAgICB9CisKKyAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25lcnJvciA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJJbml0aWFsIHVwZ3JhZGUgdmVyc2lv
bmNoYW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGVycm9yIiArIGV2ZW50KTsKKyAgICAgICAg
ZG9uZSgpOworICAgIH0KK30KKworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtZ2V0LWNvdW50LWZhaWx1cmVzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC1nZXQtY291
bnQtZmFpbHVyZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmJjZjAwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9tb2Rlcm4vaW5kZXgtZ2V0LWNvdW50LWZhaWx1cmVzLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDE1IEBACitUaGlzIHRlc3RzIHNvbWUgb2J2aW91cyBmYWlsdXJlcyB0aGF0IGNhbiBoYXBw
ZW4gd2hpbGUgY2FsbGluZyB0aGUgSURCSW5kZXggbWV0aG9kcyBnZXQoKSwgZ2V0S2V5KCksIGFu
ZCBjb3VudCgpLgorSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZlcnNpb24gLSAwIE5ldyB2
ZXJzaW9uIC0gMQorRmFpbGVkIHRvIGdldCB3aXRoIGEgbnVsbCBrZXkKK0ZhaWxlZCB0byBnZXRL
ZXkgd2l0aCBhIG51bGwga2V5CitGYWlsZWQgdG8gY291bnQgd2l0aCBhIG51bGwgcmFuZ2UKK0Zh
aWxlZCB0byBnZXQgd2l0aCBkZWxldGVkIElEQk9iamVjdFN0b3JlCitGYWlsZWQgdG8gZ2V0S2V5
IHdpdGggZGVsZXRlZCBJREJPYmplY3RTdG9yZQorRmFpbGVkIHRvIGNvdW50IHdpdGggZGVsZXRl
ZCBJREJPYmplY3RTdG9yZQorSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rp
b24gY29tcGxldGUKK0ZhaWxlZCB0byBnZXQgd2hpbGUgdHJhbnNhY3Rpb24gaW5hY3RpdmUKK0Zh
aWxlZCB0byBnZXRLZXkgd2hpbGUgdHJhbnNhY3Rpb24gaW5hY3RpdmUKK0ZhaWxlZCB0byBjb3Vu
dCB3aGlsZSB0cmFuc2FjdGlvbiBpbmFjdGl2ZQorcmVhZG9ubHkgdHJhbnNhY3Rpb24gY29tcGxl
dGUKK0RvbmUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2luZGV4LWdldC1jb3VudC1mYWlsdXJlcy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvbW9kZXJuL2luZGV4LWdldC1jb3VudC1mYWlsdXJlcy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MjllMWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtZ2V0LWNvdW50LWZhaWx1cmVz
Lmh0bWwKQEAgLTAsMCArMSwxNjcgQEAKK1RoaXMgdGVzdHMgc29tZSBvYnZpb3VzIGZhaWx1cmVz
IHRoYXQgY2FuIGhhcHBlbiB3aGlsZSBjYWxsaW5nIHRoZSBJREJJbmRleCBtZXRob2RzIGdldCgp
LCBnZXRLZXkoKSwgYW5kIGNvdW50KCkuPGJyPgorPGRpdiBpZD0ibG9nZ2VyIj48L2Rpdj4KKzxz
Y3JpcHQ+CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIud2FpdFVu
dGlsRG9uZSgpOworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworfQorCitmdW5jdGlvbiBk
b25lKCkKK3sKKyAgICBsb2coIkRvbmUiKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBsb2cobWVzc2Fn
ZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nZ2VyIikuaW5uZXJIVE1MICs9
IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK3ZhciBjcmVhdGVSZXF1ZXN0ID0gd2luZG93LmluZGV4
ZWREQi5vcGVuKCJJbmRleEdldENvdW50RmFpbHVyZXNEYXRhYmFzZSIsIDEpOwordmFyIGRhdGFi
YXNlOwordmFyIGluZGV4OworCitjcmVhdGVSZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgbG9nKCJJbml0aWFsIHVwZ3JhZGUgbmVlZGVkOiBPbGQgdmVyc2lv
biAtICIgKyBldmVudC5vbGRWZXJzaW9uICsgIiBOZXcgdmVyc2lvbiAtICIgKyBldmVudC5uZXdW
ZXJzaW9uKTsKKworICAgIHZhciB2ZXJzaW9uVHJhbnNhY3Rpb24gPSBjcmVhdGVSZXF1ZXN0LnRy
YW5zYWN0aW9uOworICAgIGRhdGFiYXNlID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICB2YXIg
b2JqZWN0U3RvcmUgPSBkYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3Jl
Iik7CisgICAgaW5kZXggPSBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgiVGVzdEluZGV4IiwgImZv
byIpOworICAgIAorICAgIHRyeSB7CisgICAgICAgIGluZGV4LmdldChudWxsKTsKKyAgICB9IGNh
dGNoKGUpIHsKKyAgICAgICAgbG9nKCJGYWlsZWQgdG8gZ2V0IHdpdGggYSBudWxsIGtleSIpOwor
ICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGluZGV4LmdldEtleShudWxsKTsKKyAgICB9IGNh
dGNoKGUpIHsKKyAgICAgICAgbG9nKCJGYWlsZWQgdG8gZ2V0S2V5IHdpdGggYSBudWxsIGtleSIp
OworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGluZGV4LmNvdW50KG51bGwpOworICAgIH0g
Y2F0Y2goZSkgeworICAgICAgICBsb2coIkZhaWxlZCB0byBjb3VudCB3aXRoIGEgbnVsbCByYW5n
ZSIpOworICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTogb25jZSBJREJPYmplY3RTdG9yZS5kZWxl
dGVJbmRleCgpIGlzIGltcGxlbWVudGVkLCB0cnkgdGhlc2UKKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTExCisgICAgLy8gb2JqZWN0U3RvcmUuZGVs
ZXRlSW5kZXgoIlRlc3RJbmRleCIpOworICAgIC8vIAorICAgIC8vIHRyeSB7CisgICAgLy8gICAg
IGluZGV4LmdldCgidGVzdCIpOworICAgIC8vIH0gY2F0Y2goZSkgeworICAgIC8vICAgICBsb2co
IkZhaWxlZCB0byBnZXQgd2l0aCBkZWxldGVkIElEQkluZGV4Iik7CisgICAgLy8gfQorICAgIC8v
IAorICAgIC8vIHRyeSB7CisgICAgLy8gICAgIGluZGV4LmdldEtleSgidGVzdCIpOworICAgIC8v
IH0gY2F0Y2goZSkgeworICAgIC8vICAgICBsb2coIkZhaWxlZCB0byBnZXRLZXkgd2l0aCBkZWxl
dGVkIElEQkluZGV4Iik7CisgICAgLy8gfQorICAgIC8vIAorICAgIC8vIHRyeSB7CisgICAgLy8g
ICAgIGluZGV4LmNvdW50KCk7CisgICAgLy8gfSBjYXRjaChlKSB7CisgICAgLy8gICAgIGxvZygi
RmFpbGVkIHRvIGNvdW50IHdpdGggZGVsZXRlZCBJREJJbmRleCIpOworICAgIC8vIH0KKworICAg
IGRhdGFiYXNlLmRlbGV0ZU9iamVjdFN0b3JlKCJUZXN0T2JqZWN0U3RvcmUiKTsKKyAgICB0cnkg
eworICAgICAgICBpbmRleC5nZXQobnVsbCk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgICBs
b2coIkZhaWxlZCB0byBnZXQgd2l0aCBkZWxldGVkIElEQk9iamVjdFN0b3JlIik7CisgICAgfQor
CisgICAgdHJ5IHsKKyAgICAgICAgaW5kZXguZ2V0S2V5KG51bGwpOworICAgIH0gY2F0Y2goZSkg
eworICAgICAgICAgbG9nKCJGYWlsZWQgdG8gZ2V0S2V5IHdpdGggZGVsZXRlZCBJREJPYmplY3RT
dG9yZSIpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGluZGV4LmNvdW50KG51bGwpOwor
ICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgbG9nKCJGYWlsZWQgdG8gY291bnQgd2l0aCBkZWxl
dGVkIElEQk9iamVjdFN0b3JlIik7CisgICAgfQorCisgICAgdmFyIG9iamVjdFN0b3JlID0gZGF0
YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUoIlRlc3RPYmplY3RTdG9yZTIiKTsKKyAgICBvYmplY3RT
dG9yZS5jcmVhdGVJbmRleCgiVGVzdEluZGV4IiwgImZvbyIpOworICAgICAgICAKKyAgICB2ZXJz
aW9uVHJhbnNhY3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygi
SW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24gdW5leHBlY3RlZCBhYm9y
dGVkIik7CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisKKyAgICB2ZXJzaW9uVHJhbnNhY3Rpb24u
b25jb21wbGV0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygiSW5pdGlhbCB1cGdy
YWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24gY29tcGxldGUiKTsKKyAgICAgICAgY29udGlu
dWVUZXN0MSgpOworICAgIH0KKworICAgIHZlcnNpb25UcmFuc2FjdGlvbi5vbmVycm9yID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgICAgbG9nKCJJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5n
ZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGVycm9yIiArIGV2ZW50KTsKKyAgICAgICAgZG9uZSgp
OworICAgIH0KK30KKworZnVuY3Rpb24gY29udGludWVUZXN0MSgpCit7CisgICAgdmFyIHRyYW5z
YWN0aW9uID0gZGF0YWJhc2UudHJhbnNhY3Rpb24oIlRlc3RPYmplY3RTdG9yZTIiLCAicmVhZG9u
bHkiKTsKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgiVGVz
dE9iamVjdFN0b3JlMiIpOworICAgIGluZGV4ID0gb2JqZWN0U3RvcmUuaW5kZXgoIlRlc3RJbmRl
eCIpOworCisgICAgLy8gU3BpbiB0aGUgdHJhbnNhY3Rpb24gd2l0aCBnZXQgcmVxdWVzdHMgdG8g
a2VlcCBpdCBhbGl2ZSBsb25nIGVub3VnaCBmb3IgdGhlIHNldFRpbWVvdXQgdG8gZmlyZS4KKyAg
ICB2YXIgY2FuRmluaXNoID0gZmFsc2U7CisgICAgdmFyIHNwaW5HZXQgPSBmdW5jdGlvbigpIHsg
CisgICAgICAgIG9iamVjdFN0b3JlLmdldCgiZm9vIikub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBpZiAoIWNhbkZpbmlzaCkKKyAgICAgICAgICAgICAgICBzcGluR2V0KCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgc3BpbkdldCgpOworCisgICAgdmFyIHRlc3RXaGlsZUlu
YWN0aXZlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbmRleC5n
ZXQobnVsbCk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgIGxvZygiRmFpbGVk
IHRvIGdldCB3aGlsZSB0cmFuc2FjdGlvbiBpbmFjdGl2ZSIpOworICAgICAgICB9CisKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgIGluZGV4LmdldEtleShudWxsKTsKKyAgICAgICAgfSBjYXRj
aChlKSB7CisgICAgICAgICAgICAgbG9nKCJGYWlsZWQgdG8gZ2V0S2V5IHdoaWxlIHRyYW5zYWN0
aW9uIGluYWN0aXZlIik7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAg
aW5kZXguY291bnQobnVsbCk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgIGxv
ZygiRmFpbGVkIHRvIGNvdW50IHdoaWxlIHRyYW5zYWN0aW9uIGluYWN0aXZlIik7CisgICAgICAg
IH0KKyAgICAgICAgY2FuRmluaXNoID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgc2V0VGltZW91
dCh0ZXN0V2hpbGVJbmFjdGl2ZSwgMCk7CisgICAgCisgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygicmVhZG9ubHkgdHJhbnNhY3Rpb24gdW5l
eHBlY3RlZCBhYm9ydCIgKyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisKKyAgICB0
cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgbG9nKCJy
ZWFkb25seSB0cmFuc2FjdGlvbiBjb21wbGV0ZSIpOworICAgICAgICBkb25lKCk7CisgICAgfQor
CisgICAgdHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGxv
ZygicmVhZG9ubHkgdHJhbnNhY3Rpb24gdW5leHBlY3RlZCBlcnJvciIgKyBldmVudCk7CisgICAg
ICAgIGRvbmUoKTsKKyAgICB9Cit9CisKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDI0NjgxZjgu
LjQ4MDdmZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MyBAQAorMjAxNS0xMS0wNSAgQnJhZHkg
RWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuIElEQjogSW1wbGVt
ZW50IElEQkluZGV4IGdldC9nZXRLZXkvY291bnQgcmVxdWVzdHMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA5MTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vaW5kZXgtZ2V0LWNvdW50LWJhc2ljLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3Jh
Z2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC1nZXQtY291bnQtZmFpbHVyZXMuaHRtbAorCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSW5kZXhlZERCLmg6CisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJD
bGllbnQ6OklEQkFueTo6SURCQW55KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURC
QW55Ojptb2Rlcm5JREJJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkFueUltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCQW55OjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJBbnk6OmNyZWF0ZVVuZGVmaW5l
ZCk6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCSW5kZXg6OmNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCSW5kZXg6OmRvQ291bnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpJREJJbmRleDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNs
aWVudDo6SURCSW5kZXg6OmRvR2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURC
SW5kZXg6OmdldEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkluZGV4Ojpk
b0dldEtleSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1w
bC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJJbmRleDo6aW5mbyk6CisgICAg
ICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUlt
cGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCT2JqZWN0U3RvcmU6OmlzRGVs
ZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9iamVjdFN0b3JlOjptb2Rl
cm5UcmFuc2FjdGlvbik6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJSZXF1ZXN0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklE
QlJlcXVlc3Q6OmNyZWF0ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURC
UmVxdWVzdDo6Y3JlYXRlR2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCUmVx
dWVzdDo6SURCUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlJlcXVl
c3Q6OnNvdXJjZU9iamVjdFN0b3JlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJD
bGllbnQ6OklEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OnJlcXVlc3RlZEluZGV4UmVjb3JkVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZp
bmVkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwu
aDoKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5z
YWN0aW9uSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlRyYW5zYWN0
aW9uOjpyZXF1ZXN0R2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdEdldEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6
OklEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaDoKKyAgICAgICAgCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb246OlRy
YW5zYWN0aW9uT3BlcmF0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
VHJhbnNhY3Rpb25PcGVyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6VHJh
bnNhY3Rpb25PcGVyYXRpb246OmluZGV4SWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uOjppbmRleFJlY29yZFR5cGUpOgorICAgICAg
ICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmg6
CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJC
YWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJC
YWNraW5nU3RvcmU6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1l
bW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldENvdW50KToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmg6CisgICAgICAg
IAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUluZGV4Ojp2YWx1ZUZvcktleVJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SW5kZXg6OmNvdW50Rm9yS2V5
UmFuZ2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5o
OgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2Jq
ZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RT
dG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlP
YmplY3RTdG9yZTo6Y291bnRGb3JLZXlSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjppbmRleFZhbHVlRm9yS2V5UmFuZ2UpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5oOgorICAgICAgICAK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVj
b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1HZXRJbmRleFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6Cisg
ICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdERhdGE6Om9iamVjdFN0b3JlSWRlbnRpZmll
cik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0RGF0YTo6aW5kZXhJZGVudGlmaWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3REYXRhOjppbmRleFJlY29yZFR5cGUpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5oOgorCiAyMDE1
LTExLTA1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAg
V2ViIEluc3BlY3RvcjogQ2xlYW4gdXAgSW5qZWN0ZWRTY3JpcHQgdXNlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSW5kZXhlZERCLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JbmRleGVkREIuaAppbmRleCA0NmE0YTNkLi41YjhiMDBl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JbmRleGVkREIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JbmRleGVkREIuaApAQCAt
NzcsNiArNzcsMTEgQEAgZW51bSBjbGFzcyBPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgewogICAg
IE5vT3ZlcndyaXRlLAogfTsKIAorZW51bSBjbGFzcyBJbmRleFJlY29yZFR5cGUgeworICAgIEtl
eSwKKyAgICBWYWx1ZSwKK307CisKIC8vIEluIG9yZGVyIG9mIHRoZSBsZWFzdCB0byB0aGUgaGln
aGVzdCBwcmVjZWRlbnQgaW4gdGVybXMgb2Ygc29ydCBvcmRlci4KIGVudW0gS2V5VHlwZSB7CiAg
ICAgTWF4ID0gLTEsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCQW55SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCQW55SW1wbC5jcHAKaW5kZXggMGI1NDYwMS4uMGM4NDQ1MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBs
LmNwcApAQCAtMzYsNiArMzYsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBJ
REJDbGllbnQgewogCitJREJBbnk6OklEQkFueShJREJBbnk6OlR5cGUgdHlwZSkKKyAgICA6IG1f
dHlwZSh0eXBlKQoreworfQorCiBJREJBbnk6OklEQkFueShSZWY8SURCRGF0YWJhc2U+JiYgZGF0
YWJhc2UpCiAgICAgOiBtX3R5cGUoSURCQW55OjpUeXBlOjpJREJEYXRhYmFzZSkKICAgICAsIG1f
ZGF0YWJhc2UoYWRvcHRSZWYoJmRhdGFiYXNlLmxlYWtSZWYoKSkpCkBAIC00NCw3ICs0OSwxMyBA
QCBJREJBbnk6OklEQkFueShSZWY8SURCRGF0YWJhc2U+JiYgZGF0YWJhc2UpCiAKIElEQkFueTo6
SURCQW55KFJlZjxJREJPYmplY3RTdG9yZT4mJiBvYmplY3RTdG9yZSkKICAgICA6IG1fdHlwZShJ
REJBbnk6OlR5cGU6OklEQk9iamVjdFN0b3JlKQotICAgICwgbV9vYmplY3RTdG9yZShhZG9wdFJl
Zigmb2JqZWN0U3RvcmUubGVha1JlZigpKSkKKyAgICAsIG1fb2JqZWN0U3RvcmUoV1RGOjptb3Zl
KG9iamVjdFN0b3JlKSkKK3sKK30KKworSURCQW55OjpJREJBbnkoUmVmPElEQkluZGV4PiYmIGlu
ZGV4KQorICAgIDogbV90eXBlKElEQkFueTo6VHlwZTo6SURCSW5kZXgpCisgICAgLCBtX2luZGV4
KFdURjo6bW92ZShpbmRleCkpCiB7CiB9CiAKQEAgLTEwNiw2ICsxMTcsMTIgQEAgSURCT2JqZWN0
U3RvcmUqIElEQkFueTo6bW9kZXJuSURCT2JqZWN0U3RvcmUoKQogICAgIHJldHVybiBtX29iamVj
dFN0b3JlLmdldCgpOwogfQogCitJREJJbmRleCogSURCQW55Ojptb2Rlcm5JREJJbmRleCgpCit7
CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQkluZGV4KTsKKyAgICByZXR1
cm4gbV9pbmRleC5nZXQoKTsKK30KKwogUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uPiBJ
REJBbnk6OmlkYlRyYW5zYWN0aW9uKCkKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5oCmlu
ZGV4IDkwMzFkMzYuLjYzYTFmN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuaApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiSURCQW55LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VJbXBsLmgiCisjaW5jbHVkZSAi
SURCSW5kZXhJbXBsLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVJbXBsLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTQ3LDYgKzQ4LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJREJBbnkoV1RGOjptb3ZlKG9iamVjdFN0b3JlKSkpOwogICAgIH0KIAor
ICAgIHN0YXRpYyBSZWZQdHI8SURCQW55PiBjcmVhdGUoUmVmPElEQkluZGV4PiYmIGluZGV4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoV1RGOjptb3ZlKGluZGV4
KSkpOworICAgIH0KKwogICAgIHN0YXRpYyBSZWZQdHI8SURCQW55PiBjcmVhdGUoY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURC
QW55KGtleVBhdGgpKTsKQEAgLTU3LDYgKzYzLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJREJBbnkodmFsdWUpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUmVmUHRy
PElEQkFueT4gY3JlYXRlVW5kZWZpbmVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSURCQW55KElEQkFueTo6VHlwZTo6VW5kZWZpbmVkKSk7CisgICAgfQorCiAgICAgdmly
dHVhbCB+SURCQW55KCk7CiAKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsIHsgcmV0dXJuIG1fdHlwZTsgfQpAQCAtNzQsMTYgKzg1LDIwIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgoKSBvdmVycmlkZSBmaW5hbDsKIAog
ICAgIElEQk9iamVjdFN0b3JlKiBtb2Rlcm5JREJPYmplY3RTdG9yZSgpOworICAgIElEQkluZGV4
KiBtb2Rlcm5JREJJbmRleCgpOwogCiBwcml2YXRlOgorICAgIGV4cGxpY2l0IElEQkFueShJREJB
bnk6OlR5cGUpOwogICAgIGV4cGxpY2l0IElEQkFueShSZWY8SURCRGF0YWJhc2U+JiYpOwogICAg
IGV4cGxpY2l0IElEQkFueShSZWY8SURCT2JqZWN0U3RvcmU+JiYpOworICAgIGV4cGxpY2l0IElE
QkFueShSZWY8SURCSW5kZXg+JiYpOwogICAgIGV4cGxpY2l0IElEQkFueShjb25zdCBJREJLZXlQ
YXRoJik7CiAgICAgZXhwbGljaXQgSURCQW55KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
Jik7CiAKICAgICBJREJBbnk6OlR5cGUgbV90eXBlIHsgSURCQW55OjpUeXBlOjpVbmRlZmluZWQg
fTsKICAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7CiAgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlPiBtX29iamVjdFN0b3JlOworICAgIFJlZlB0cjxJREJJbmRleD4gbV9pbmRleDsK
IAogICAgIGNvbnN0IElEQktleVBhdGggbV9pZGJLZXlQYXRoOwogICAgIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIG1fc2NyaXB0VmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJJbmRleEltcGwuY3BwCmluZGV4IGNlY2Y5
MzMuLmY2OWIyYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJJbmRleEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJJbmRleEltcGwuY3BwCkBAIC0yOCw4ICsyOCwxMyBAQAogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJET01SZXF1ZXN0U3RhdGUuaCIK
ICNpbmNsdWRlICJJREJBbnlJbXBsLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5o
IgorI2luY2x1ZGUgIklEQktleVJhbmdlRGF0YS5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3Jl
SW1wbC5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uSW1wbC5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIElEQkNsaWVudCB7CkBAIC04
OSwxOSArOTQsNjkgQEAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVu
Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdAogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRl
eDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKQorUmVmUHRy
PFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6Y291bnQiKTsKKwor
ICAgIGlmICghY29udGV4dCkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBJREJLZXlSYW5nZURhdGEgcmFuZ2U7
CisgICAgcmFuZ2UuaXNOdWxsID0gZmFsc2U7CisgICAgcmV0dXJuIGRvQ291bnQoKmNvbnRleHQs
IHJhbmdlLCBlYyk7fQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmNv
dW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIElEQktleVJhbmdlKiByYW5nZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4Ojpjb3Vu
dCIpOworCisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9F
UlI7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBkb0NvdW50
KCpjb250ZXh0LCBJREJLZXlSYW5nZURhdGEocmFuZ2UpLCBlYyk7CiB9CiAKLVJlZlB0cjxXZWJD
b3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZSYpCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVz
dD4gSURCSW5kZXg6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQklu
ZGV4Ojpjb3VudCIpOworCisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIGVjID0gSU5WQUxJ
RF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIERPTVJl
cXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoY29udGV4dCk7CisgICAgUmVmUHRyPElEQktleT4gaWRi
S2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOworICAgIGlmICgh
aWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6OkludmFsaWQpIHsKKyAgICAgICAg
ZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpEYXRhRXJy
b3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gZG9Db3Vu
dCgqY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhKGlkYktleS5nZXQoKSksIGVjKTsKIH0KIAotUmVm
UHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJikK
K1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6ZG9Db3VudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS0+aXNEZWxldGVkKCkpIHsKKyAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgaWYgKHJhbmdlLmlzTnVsbCkgeworICAgICAgICBlYyA9IHN0YXRpY19jYXN0PEV4Y2Vw
dGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNvZGU6OkRhdGFFcnJvcik7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIGF1dG8mIHRyYW5zYWN0aW9uID0gbV9vYmplY3RTdG9yZS0+
bW9kZXJuVHJhbnNhY3Rpb24oKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLmlzQWN0aXZlKCkpIHsK
KyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2Rl
OjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVxdWVzdENvdW50KGNvbnRleHQsICp0aGlz
LCByYW5nZSk7CiB9CiAKIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6b3Bl
bktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgSURCS2V5UmFuZ2UqLCBjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJikKQEAgLTExNCwyNCArMTY5LDEwOCBAQCBSZWZQdHI8V2Vi
Q29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVJl
ZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGUmKQorUmVmUHRyPFdlYkNvcmU6OklE
QlJlcXVlc3Q+IElEQkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
SURCS2V5UmFuZ2UqIHJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6Z2V0Iik7
CisKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGRvR2V0KCpjb250
ZXh0LCBJREJLZXlSYW5nZURhdGEocmFuZ2UpLCBlYyk7CiB9CiAKLVJlZlB0cjxXZWJDb3JlOjpJ
REJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKQorUmVmUHRyPFdlYkNvcmU6
OklEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBMT0coSW5kZXhlZERC
LCAiSURCSW5kZXg6OmdldCIpOworCisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIGVjID0g
SU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoY29udGV4dCk7CisgICAgUmVmUHRyPElEQktl
eT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOworICAg
IGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6OkludmFsaWQpIHsKKyAg
ICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpE
YXRhRXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4g
ZG9HZXQoKmNvbnRleHQsIElEQktleVJhbmdlRGF0YShpZGJLZXkuZ2V0KCkpLCBlYyk7CiB9CiAK
LVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGUmKQorUmVmUHRyPFdlYkNv
cmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGlmIChtX2RlbGV0ZWQg
fHwgbV9vYmplY3RTdG9yZS0+aXNEZWxldGVkKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKHJhbmdl
LmlzTnVsbCkgeworICAgICAgICBlYyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4
Y2VwdGlvbkNvZGU6OkRhdGFFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIGF1dG8mIHRyYW5zYWN0aW9uID0gbV9vYmplY3RTdG9yZS0+bW9kZXJuVHJhbnNhY3Rp
b24oKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBz
dGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpUcmFuc2FjdGlvbklu
YWN0aXZlRXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJhbnNhY3Rpb24ucmVxdWVzdEdldFZhbHVlKGNvbnRleHQsICp0aGlzLCByYW5nZSk7CiB9
CiAKLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlv
bkNvZGUmKQorUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXRLZXkoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgSURCS2V5UmFuZ2UqIHJhbmdlLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIExP
RyhJbmRleGVkREIsICJJREJJbmRleDo6Z2V0S2V5Iik7CisKKyAgICBpZiAoIWNvbnRleHQpIHsK
KyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgcmV0dXJuIGRvR2V0S2V5KCpjb250ZXh0LCBJREJLZXlSYW5nZURhdGEo
cmFuZ2UpLCBlYyk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6
Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhJbmRleGVk
REIsICJJREJJbmRleDo6Z2V0S2V5Iik7CisKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZShjb250ZXh0KTsKKyAgICBSZWZQdHI8
SURCS2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7
CisgICAgaWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkg
eworICAgICAgICBlYyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNv
ZGU6OkRhdGFFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJl
dHVybiBkb0dldEtleSgqY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhKGlkYktleS5nZXQoKSksIGVj
KTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldEtleShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJh
bmdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0
U3RvcmUtPmlzRGVsZXRlZCgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChyYW5nZS5pc051bGwpIHsK
KyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2Rl
OjpEYXRhRXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRv
JiB0cmFuc2FjdGlvbiA9IG1fb2JqZWN0U3RvcmUtPm1vZGVyblRyYW5zYWN0aW9uKCk7CisgICAg
aWYgKCF0cmFuc2FjdGlvbi5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8
RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29kZTo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9y
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIHRyYW5zYWN0
aW9uLnJlcXVlc3RHZXRLZXkoY29udGV4dCwgKnRoaXMsIHJhbmdlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSURCQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmgKaW5kZXggMGY2MWI4MC4uNTA4MDljMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJJbmRl
eEltcGwuaApAQCAtMzMsNiArMzMsOSBAQAogI2luY2x1ZGUgIklEQkluZGV4SW5mby5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBJREJLZXlSYW5nZURhdGE7CisKIG5hbWVzcGFj
ZSBJREJDbGllbnQgewogCiBjbGFzcyBJREJPYmplY3RTdG9yZTsKQEAgLTcyLDExICs3NSwxOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gZ2V0S2V5
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGUmKSBv
dmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBn
ZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKIAorICAgIGNvbnN0IElE
QkluZGV4SW5mbyYgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorCiBwcml2YXRlOgog
ICAgIElEQkluZGV4KGNvbnN0IElEQkluZGV4SW5mbyYsIElEQk9iamVjdFN0b3JlJik7CiAKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gZG9Db3VudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0
cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBkb0dldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29u
c3QgSURCS2V5UmFuZ2VEYXRhJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpJREJSZXF1ZXN0PiBkb0dldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiwgRXhjZXB0aW9uQ29kZSYpOworCiAgICAgSURCSW5kZXhJbmZvIG1faW5m
bzsKICAgICBSZWY8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7CisKKyAgICBib29sIG1f
ZGVsZXRlZCB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RT
dG9yZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJP
YmplY3RTdG9yZUltcGwuaAppbmRleCBkOWFkN2RhLi45MmU3ZGFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0
b3JlSW1wbC5oCkBAIC03OSw5ICs3OSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8
V2ViQ29yZTo6SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZSBm
aW5hbDsKIAogICAgIHZvaWQgbWFya0FzRGVsZXRlZCgpOworICAgIGJvb2wgaXNEZWxldGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9CiAKICAgICBjb25zdCBJREJPYmplY3RTdG9yZUlu
Zm8mIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KIAorICAgIC8vIEZJWE1FOiBBZnRl
ciByZW1vdmluZyBMZWdhY3lJREIgYW5kIGZvbGRpbmcgYWJzdHJhY3QvaW1wbGVtZW50YXRpb24g
Y2xhc3NlcyB0b2dldGhlciwKKyAgICAvLyB0aGlzIHdpbGwgbm8gbG9uZ2VyIGJlIG5lY2Vzc2Fy
eS4KKyAgICBJREJUcmFuc2FjdGlvbiYgbW9kZXJuVHJhbnNhY3Rpb24oKSB7IHJldHVybiBtX3Ry
YW5zYWN0aW9uLmdldCgpOyB9CisKIHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmUoY29uc3Qg
SURCT2JqZWN0U3RvcmVJbmZvJiwgSURCVHJhbnNhY3Rpb24mKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5j
cHAKaW5kZXggZGJkMmQ3YS4uNzViOTY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuY3BwCkBAIC00Nyw2
ICs0NywxNiBAQCBSZWY8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQk9iamVjdFN0bwogICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IElEQlJlcXVlc3QoY29udGV4dCwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSk7CiB9CiAK
K1JlZjxJREJSZXF1ZXN0PiBJREJSZXF1ZXN0OjpjcmVhdGVDb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIGlu
ZGV4LCB0cmFuc2FjdGlvbikpOworfQorCitSZWY8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3Jl
YXRlR2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwg
SW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVxdWVzdGVkUmVjb3JkVHlwZSwgSURCVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlJlcXVl
c3QoY29udGV4dCwgaW5kZXgsIHJlcXVlc3RlZFJlY29yZFR5cGUsIHRyYW5zYWN0aW9uKSk7Cit9
CisKIElEQlJlcXVlc3Q6OklEQlJlcXVlc3QoSURCQ29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0
aW9uLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIDogSURCT3BlbkRCUmVx
dWVzdChjb250ZXh0KQogICAgICwgbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pCkBAIC02MCwxMSAr
NzAsMjcgQEAgSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3QKICAgICAsIG1fdHJhbnNhY3Rpb24oJnRy
YW5zYWN0aW9uKQogICAgICwgbV9jb25uZWN0aW9uKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5lY3Rp
b24oKSkKICAgICAsIG1fcmVzb3VyY2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5l
Y3Rpb24oKSkKLSAgICAsIG1fc291cmNlKGFkb3B0UmVmKCpJREJBbnk6OmNyZWF0ZShvYmplY3RT
dG9yZSkubGVha1JlZigpKSkKKyAgICAsIG1fc291cmNlKElEQkFueTo6Y3JlYXRlKG9iamVjdFN0
b3JlKSkKK3sKKyAgICBzdXNwZW5kSWZOZWVkZWQoKTsKK30KKworSURCUmVxdWVzdDo6SURCUmVx
dWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgsIElE
QlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKKyAgICA6IElEQk9wZW5EQlJlcXVlc3QoJmNvbnRl
eHQpCisgICAgLCBtX3RyYW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikKKyAgICAsIG1fY29ubmVjdGlv
bih0cmFuc2FjdGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCisgICAgLCBtX3Jlc291cmNlSWRlbnRp
Zmllcih0cmFuc2FjdGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCisgICAgLCBtX3NvdXJjZShJREJB
bnk6OmNyZWF0ZShpbmRleCkpCiB7CiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CiAKK0lEQlJl
cXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCSW5k
ZXgmIGluZGV4LCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSByZXF1ZXN0ZWRSZWNvcmRUeXBl
LCBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCisgICAgOiBJREJSZXF1ZXN0KGNvbnRleHQs
IGluZGV4LCB0cmFuc2FjdGlvbikKK3sKKyAgICBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlwZSA9
IHJlcXVlc3RlZFJlY29yZFR5cGU7Cit9CisKIElEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKIHsK
IH0KQEAgLTEwNCwxMiArMTMwLDQyIEBAIHVpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZU9iamVj
dFN0b3JlSWRlbnRpZmllcigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NvdXJjZSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKG1fc291cmNlLT50eXBlKCkgIT0gSURCQW55OjpUeXBlOjpJREJP
YmplY3RTdG9yZSkKKworICAgIGlmIChtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6
SURCT2JqZWN0U3RvcmUpIHsKKyAgICAgICAgYXV0byogb2JqZWN0U3RvcmUgPSBtX3NvdXJjZS0+
bW9kZXJuSURCT2JqZWN0U3RvcmUoKTsKKyAgICAgICAgaWYgKCFvYmplY3RTdG9yZSkKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gb2JqZWN0U3RvcmUtPmluZm8oKS5pZGVu
dGlmaWVyKCk7CisgICAgfQorCisgICAgaWYgKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpU
eXBlOjpJREJJbmRleCkgeworICAgICAgICBhdXRvKiBpbmRleCA9IG1fc291cmNlLT5tb2Rlcm5J
REJJbmRleCgpOworICAgICAgICBpZiAoIWluZGV4KQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBpbmRleC0+aW5mbygpLm9iamVjdFN0b3JlSWRlbnRpZmllcigpOworICAg
IH0KKworICAgIHJldHVybiAwOworfQorCit1aW50NjRfdCBJREJSZXF1ZXN0Ojpzb3VyY2VJbmRl
eElkZW50aWZpZXIoKSBjb25zdAoreworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVy
biAwOworICAgIGlmIChtX3NvdXJjZS0+dHlwZSgpICE9IElEQkFueTo6VHlwZTo6SURCSW5kZXgp
CiAgICAgICAgIHJldHVybiAwOwotICAgIGlmICghbV9zb3VyY2UtPm1vZGVybklEQk9iamVjdFN0
b3JlKCkpCisgICAgaWYgKCFtX3NvdXJjZS0+bW9kZXJuSURCSW5kZXgoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICByZXR1cm4gbV9zb3VyY2UtPm1vZGVybklEQk9iamVjdFN0b3JlKCktPmlu
Zm8oKS5pZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIG1fc291cmNlLT5tb2Rlcm5JREJJbmRleCgp
LT5pbmZvKCkuaWRlbnRpZmllcigpOworfQorCitJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBJ
REJSZXF1ZXN0OjpyZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGUoKSBjb25zdAoreworICAgIEFTU0VS
VChtX3NvdXJjZSk7CisgICAgQVNTRVJUKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpUeXBl
OjpJREJJbmRleCk7CisKKyAgICByZXR1cm4gbV9yZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGU7CiB9
CiAKIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIElEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3QKQEAgLTIwNCwxMyArMjYwLDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRU
b1N0cnVjdHVyZWRDbG9uZShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXQKIAog
dm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1VuZGVmaW5lZCgpCiB7Ci0gICAgYXV0byBjb250
ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgRE9NUmVxdWVzdFN0YXRlIHN0YXRlKGNvbnRleHQpOwotICAgIGlm
IChhdXRvKiBleGVjU3RhdGUgPSBzdGF0ZS5leGVjKCkpCi0gICAgICAgIG1fcmVzdWx0ID0gSURC
QW55OjpjcmVhdGUoRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoZXhlY1N0YXRlLT52bSgpLCBKU0M6
OmpzVW5kZWZpbmVkKCkpKTsKKyAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlVW5kZWZpbmVk
KCk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZChjb25zdCBJREJSZXN1
bHREYXRhJiByZXN1bHREYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuaAppbmRleCAxNDU2MWVkLi5hNDJiMTdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
UmVxdWVzdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCUmVxdWVzdEltcGwuaApAQCAtNDEsNiArNDEsOSBAQCBjbGFzcyBJREJLZXlEYXRhOwog
Y2xhc3MgSURCUmVzdWx0RGF0YTsKIGNsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwogCituYW1l
c3BhY2UgSW5kZXhlZERCIHsKK2VudW0gY2xhc3MgSW5kZXhSZWNvcmRUeXBlOworfQogCiBuYW1l
c3BhY2UgSURCQ2xpZW50IHsKIApAQCAtNDksNiArNTIsOCBAQCBjbGFzcyBJREJDb25uZWN0aW9u
VG9TZXJ2ZXI7CiBjbGFzcyBJREJSZXF1ZXN0IDogcHVibGljIFdlYkNvcmU6OklEQk9wZW5EQlJl
cXVlc3QsIHB1YmxpYyBSZWZDb3VudGVkPElEQlJlcXVlc3Q+IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPElEQlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2Jq
ZWN0U3RvcmUmLCBJREJUcmFuc2FjdGlvbiYpOworICAgIHN0YXRpYyBSZWY8SURCUmVxdWVzdD4g
Y3JlYXRlQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkluZGV4JiwgSURCVHJhbnNh
Y3Rpb24mKTsKKyAgICBzdGF0aWMgUmVmPElEQlJlcXVlc3Q+IGNyZWF0ZUdldChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgSURC
VHJhbnNhY3Rpb24mKTsKIAogICAgIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVzb3Vy
Y2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZUlkZW50aWZpZXI7IH0KIApA
QCAtNjIsNiArNjcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHJlYWR5
U3RhdGUoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHVpbnQ2NF90IHNvdXJjZU9iamVjdFN0b3Jl
SWRlbnRpZmllcigpIGNvbnN0OworICAgIHVpbnQ2NF90IHNvdXJjZUluZGV4SWRlbnRpZmllcigp
IGNvbnN0OworICAgIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIHJlcXVlc3RlZEluZGV4UmVj
b3JkVHlwZSgpIGNvbnN0OwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIEV2ZW50
VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGU7CkBA
IC04NSw2ICs5Miw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBJREJSZXF1ZXN0KElEQkNv
bm5lY3Rpb25Ub1NlcnZlciYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICBJREJSZXF1
ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIElEQlRyYW5zYWN0
aW9uJik7CisgICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgm
LCBJREJUcmFuc2FjdGlvbiYpOworICAgIElEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIElEQkluZGV4JiwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUsIElEQlRyYW5zYWN0aW9u
Jik7CiAKICAgICAvLyBBY3RpdmVET01PYmplY3QuCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBh
Y3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CkBAIC0xMDksNiArMTE4
LDcgQEAgcHJpdmF0ZToKICAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIgbV9yZXNvdXJjZUlkZW50
aWZpZXI7CiAgICAgUmVmUHRyPElEQkFueT4gbV9zb3VyY2U7CiAgICAgYm9vbCBtX2hhc1BlbmRp
bmdBY3Rpdml0eSB7IHRydWUgfTsKKyAgICBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBtX3Jl
cXVlc3RlZEluZGV4UmVjb3JkVHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRy
YW5zYWN0aW9uSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcAppbmRleCBjZmUwNGMzLi5mYjgwMWEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rp
b25JbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCVHJhbnNhY3Rpb25JbXBsLmNwcApAQCAtNDQ2LDYgKzQ0NiwzMyBAQCBSZWY8SURCUmVxdWVz
dD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRSZWNvcmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dAogICAgIHJldHVybiBXVEY6Om1vdmUocmVxdWVzdCk7CiB9CiAKK1JlZjxJREJS
ZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBy
YW5nZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRW
YWx1ZSIpOworICAgIHJldHVybiByZXF1ZXN0SW5kZXhSZWNvcmQoY29udGV4dCwgaW5kZXgsIElu
ZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlOjpWYWx1ZSwgcmFuZ2UpOworfQorCitSZWY8SURCUmVx
dWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdl
KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVl
Iik7CisgICAgcmV0dXJuIHJlcXVlc3RJbmRleFJlY29yZChjb250ZXh0LCBpbmRleCwgSW5kZXhl
ZERCOjpJbmRleFJlY29yZFR5cGU6OktleSwgcmFuZ2UpOworfQorCitSZWY8SURCUmVxdWVzdD4g
SURCVHJhbnNhY3Rpb246OnJlcXVlc3RJbmRleFJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIHR5
cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSZyYW5nZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAi
SURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRWYWx1ZSIpOworICAgIEFTU0VSVChpc0FjdGl2ZSgp
KTsKKyAgICBBU1NFUlQoIXJhbmdlLmlzTnVsbCk7CisKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVx
dWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZUdldChjb250ZXh0LCBpbmRleCwgdHlwZSwgKnRoaXMp
OworICAgIGFkZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7CisKKyAgICBhdXRvIG9wZXJhdGlvbiA9
IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCByZXF1ZXN0LmdldCgpLCAmSURCVHJh
bnNhY3Rpb246OmRpZEdldFJlY29yZE9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmdldFJlY29y
ZE9uU2VydmVyLCByYW5nZSk7CisgICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGOjptb3ZlKG9wZXJh
dGlvbikpOworCisgICAgcmV0dXJuIFdURjo6bW92ZShyZXF1ZXN0KTsKK30KKwogdm9pZCBJREJU
cmFuc2FjdGlvbjo6Z2V0UmVjb3JkT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJh
dGlvbiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZSkKIHsKICAgICBMT0coSW5kZXhl
ZERCLCAiSURCVHJhbnNhY3Rpb246OmdldFJlY29yZE9uU2VydmVyIik7CkBAIC00NTcsMTMgKzQ4
NCwyNCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlcihJREJSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYQogewogICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIiKTsKIAotICAgIHJlcXVlc3Quc2V0
UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUocmVzdWx0RGF0YS5yZXN1bHREYXRhKCkpOworICAgIGlm
IChyZXF1ZXN0LnNvdXJjZUluZGV4SWRlbnRpZmllcigpICYmIHJlcXVlc3QucmVxdWVzdGVkSW5k
ZXhSZWNvcmRUeXBlKCkgPT0gSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGU6OktleSkgeworICAg
ICAgICBpZiAocmVzdWx0RGF0YS5yZXN1bHRLZXkoKSkKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0
UmVzdWx0KHJlc3VsdERhdGEucmVzdWx0S2V5KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXF1ZXN0LnNldFJlc3VsdFRvVW5kZWZpbmVkKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKHJlc3VsdERhdGEucmVzdWx0RGF0YSgpLmRhdGEoKSkKKyAgICAgICAgICAgIHJlcXVlc3Qu
c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUocmVzdWx0RGF0YS5yZXN1bHREYXRhKCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXF1ZXN0LnNldFJlc3VsdFRvVW5kZWZpbmVkKCk7Cisg
ICAgfQorCiAgICAgcmVxdWVzdC5yZXF1ZXN0Q29tcGxldGVkKHJlc3VsdERhdGEpOwogfQogCiBS
ZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYgcmFuZ2UpCiB7Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0
aW9uOjpyZXF1ZXN0Q291bnQiKTsKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OnJlcXVlc3RDb3VudCAoSURCT2JqZWN0U3RvcmUpIik7CiAgICAgQVNTRVJUKGlzQWN0aXZlKCkp
OwogICAgIEFTU0VSVCghcmFuZ2UuaXNOdWxsKTsKIApAQCAtNDc1LDYgKzUxMywyMCBAQCBSZWY8
SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJRAogICAgIHJldHVybiByZXF1ZXN0OwogfQogCitSZWY8SURCUmVx
dWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2Up
Cit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQgKElE
QkluZGV4KSIpOworICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKKyAgICBBU1NFUlQoIXJhbmdlLmlz
TnVsbCk7CisKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0
ZUNvdW50KGNvbnRleHQsIGluZGV4LCAqdGhpcyk7CisgICAgYWRkUmVxdWVzdChyZXF1ZXN0Lmdl
dCgpKTsKKworICAgIHNjaGVkdWxlT3BlcmF0aW9uKGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9u
KCp0aGlzLCByZXF1ZXN0LmdldCgpLCAmSURCVHJhbnNhY3Rpb246OmRpZEdldENvdW50T25TZXJ2
ZXIsICZJREJUcmFuc2FjdGlvbjo6Z2V0Q291bnRPblNlcnZlciwgcmFuZ2UpKTsKKworICAgIHJl
dHVybiByZXF1ZXN0OworfQorCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpnZXRDb3VudE9uU2VydmVy
KFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IElEQktleVJhbmdlRGF0YSYg
a2V5UmFuZ2UpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpnZXRDb3Vu
dE9uU2VydmVyIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKaW5kZXggOWVjYWVmOC4uYjNkN2Iz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QlRyYW5zYWN0aW9uSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaApAQCAtNTAsNiArNTAsNyBAQCBzdHJ1Y3QgSURC
S2V5UmFuZ2VEYXRhOwogbmFtZXNwYWNlIElEQkNsaWVudCB7CiAKIGNsYXNzIElEQkRhdGFiYXNl
OworY2xhc3MgSURCSW5kZXg7CiBjbGFzcyBUcmFuc2FjdGlvbk9wZXJhdGlvbjsKIAogY2xhc3Mg
SURCVHJhbnNhY3Rpb24gOiBwdWJsaWMgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb24gewpAQCAtOTcs
NiArOTgsOSBAQCBwdWJsaWM6CiAgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3REZWxldGVSZWNv
cmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJik7CiAgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RDbGVhck9iamVjdFN0b3Jl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYpOwogICAgIFJlZjxJREJS
ZXF1ZXN0PiByZXF1ZXN0Q291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0
b3JlJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVl
c3RDb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmKTsKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdEdldFZhbHVlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworICAg
IFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0R2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJ
REJJbmRleCYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwogCiAgICAgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSk7CiAKQEAgLTEyNiw2ICsxMzAs
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgZmlyZU9uQWJvcnQoKTsKICAgICB2b2lkIGVucXVldWVF
dmVudChSZWY8RXZlbnQ+KTsKIAorICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0SW5kZXhSZWNv
cmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkluZGV4JiwgSW5kZXhlZERCOjpJbmRleFJl
Y29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworCiAgICAgdm9pZCBjb21taXRPblNl
cnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYpOwogICAgIHZvaWQgYWJvcnRPblNlcnZlcihUcmFu
c2FjdGlvbk9wZXJhdGlvbiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcAppbmRl
eCA0NjU2NDlmLi5mZTg0Y2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5jcHAKQEAg
LTM1LDYgKzM1LDkgQEAgVHJhbnNhY3Rpb25PcGVyYXRpb246OlRyYW5zYWN0aW9uT3BlcmF0aW9u
KElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgSURCUmVxdWUKICAgICA6IFRyYW5zYWN0aW9u
T3BlcmF0aW9uKHRyYW5zYWN0aW9uKQogewogICAgIG1fb2JqZWN0U3RvcmVJZGVudGlmaWVyID0g
cmVxdWVzdC5zb3VyY2VPYmplY3RTdG9yZUlkZW50aWZpZXIoKTsKKyAgICBtX2luZGV4SWRlbnRp
ZmllciA9IHJlcXVlc3Quc291cmNlSW5kZXhJZGVudGlmaWVyKCk7CisgICAgaWYgKG1faW5kZXhJ
ZGVudGlmaWVyKQorICAgICAgICBtX2luZGV4UmVjb3JkVHlwZSA9IHJlcXVlc3QucmVxdWVzdGVk
SW5kZXhSZWNvcmRUeXBlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9u
T3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJh
bnNhY3Rpb25PcGVyYXRpb24uaAppbmRleCBhYzYwNmM5Li4xMGE2NzU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNh
Y3Rpb25PcGVyYXRpb24uaApAQCAtMzYsNiArMzYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBJREJSZXN1bHREYXRhOwogCituYW1lc3BhY2UgSW5kZXhlZERCIHsKK2VudW0gY2xh
c3MgSW5kZXhSZWNvcmRUeXBlOworfQorCiBuYW1lc3BhY2UgSURCQ2xpZW50IHsKIAogY2xhc3Mg
VHJhbnNhY3Rpb25PcGVyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFuc2FjdGlvbk9wZXJh
dGlvbj4gewpAQCAtNTQsNyArNTgsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAg
ICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIHRyYW5zYWN0aW9uSWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1fdHJhbnNhY3Rpb24tPmluZm8oKS5pZGVudGlmaWVyKCk7IH0KICAgICB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSWRl
bnRpZmllcjsgfQorICAgIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXhJZGVudGlmaWVyOyB9CiAgICAgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKCkg
eyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsgfQorICAgIEluZGV4ZWREQjo6SW5kZXhSZWNv
cmRUeXBlIGluZGV4UmVjb3JkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhSZWNvcmRUeXBl
OyB9CiAKIHByb3RlY3RlZDoKICAgICBUcmFuc2FjdGlvbk9wZXJhdGlvbihJREJUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24pCkBAIC02OCw2ICs3NCw4IEBAIHByb3RlY3RlZDoKICAgICBSZWY8SURC
VHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CiAgICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIG1f
aWRlbnRpZmllcjsKICAgICB1aW50NjRfdCBtX29iamVjdFN0b3JlSWRlbnRpZmllciB7IDAgfTsK
KyAgICB1aW50NjRfdCBtX2luZGV4SWRlbnRpZmllciB7IDAgfTsKKyAgICBJbmRleGVkREI6Oklu
ZGV4UmVjb3JkVHlwZSBtX2luZGV4UmVjb3JkVHlwZTsKICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+IG1fcGVyZm9ybUZ1bmN0aW9uOwogICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgSURC
UmVzdWx0RGF0YSYpPiBtX2NvbXBsZXRlRnVuY3Rpb247CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCmlu
ZGV4IDM4OWIxZmEuLjdhOGMyNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTQyLDYgKzQyLDEw
IEBAIGNsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwogCiBzdHJ1Y3QgSURCS2V5UmFuZ2VEYXRh
OwogCituYW1lc3BhY2UgSW5kZXhlZERCIHsKK2VudW0gY2xhc3MgSW5kZXhSZWNvcmRUeXBlOwor
fQorCiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAogY2xhc3MgSURCQmFja2luZ1N0b3JlIHsKQEAg
LTYyLDcgKzY2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgSURCRXJyb3IgZGVsZXRlUmFuZ2Uo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJikgPSAwOwog
ICAgIHZpcnR1YWwgSURCRXJyb3IgcHV0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUpID0g
MDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGdldFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgb3V0VmFs
dWUpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIGdldENvdW50KGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIHVpbnQ2NF90JiBvdXRDb3VudCkgPSAw
OworICAgIHZpcnR1YWwgSURCRXJyb3IgZ2V0SW5kZXhSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3Jk
VHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgVGhyZWFkU2FmZURhdGFCdWZmZXImIG91dFZh
bHVlKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvciBnZXRDb3VudChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYsIHVpbnQ2NF90JiBvdXRDb3VudCkgPSAwOwogICAgIHZpcnR1YWwgSURCRXJyb3IgZ2VuZXJh
dGVLZXlOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QmIGtleU51bWJl
cikgPSAwOwogCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcAppbmRleCBmMmUw
YTc3Li4wZmVkYjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcApAQCAtMjYy
LDcgKzI2Miw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAgICAgcmV0dXJuIElEQkVycm9y
KCk7CiB9CiAKLUlEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRh
LCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgb3V0VmFsdWUpCitJREJFcnJvciBNZW1vcnlJREJCYWNr
aW5nU3RvcmU6OmdldFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJL
ZXlSYW5nZURhdGEmIHJhbmdlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgb3V0VmFsdWUpCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkIik7CiAK
QEAgLTI3NSwxMSArMjc1LDI4IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0
UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAgICAgaWYgKCFv
YmplY3RTdG9yZSkKICAgICAgICAgcmV0dXJuIElEQkVycm9yKElEQkV4Y2VwdGlvbkNvZGU6OlVu
a25vd24sIFdURjo6QVNDSUlMaXRlcmFsKCJObyBiYWNraW5nIHN0b3JlIG9iamVjdCBzdG9yZSBm
b3VuZCIpKTsKIAotICAgIG91dFZhbHVlID0gb2JqZWN0U3RvcmUtPnZhbHVlRm9yS2V5UmFuZ2Uo
a2V5UmFuZ2VEYXRhKTsKKyAgICBvdXRWYWx1ZSA9IG9iamVjdFN0b3JlLT52YWx1ZUZvcktleVJh
bmdlKHJhbmdlKTsKICAgICByZXR1cm4gSURCRXJyb3IoKTsKIH0KIAotSURCRXJyb3IgTWVtb3J5
SURCQmFja2luZ1N0b3JlOjpnZXRDb3VudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25z
dCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCB1aW50NjRfdCYgb3V0Q291bnQpCitJREJFcnJvciBN
ZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldEluZGV4UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5
cGUgcmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgVGhyZWFkU2FmZURh
dGFCdWZmZXImIG91dFZhbHVlKQoreworICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJREJCYWNr
aW5nU3RvcmU6OmdldEluZGV4UmVjb3JkIik7CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKKworICAgIGlmICghbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25J
ZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIElEQkVycm9yKElEQkV4Y2VwdGlvbkNvZGU6OlVu
a25vd24sIFdURjo6QVNDSUlMaXRlcmFsKCJObyBiYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIGZv
dW5kIHRvIGdldCByZWNvcmQiKSk7CisKKyAgICBNZW1vcnlPYmplY3RTdG9yZSogb2JqZWN0U3Rv
cmUgPSBtX29iamVjdFN0b3Jlc0J5SWRlbnRpZmllci5nZXQob2JqZWN0U3RvcmVJZGVudGlmaWVy
KTsKKyAgICBpZiAoIW9iamVjdFN0b3JlKQorICAgICAgICByZXR1cm4gSURCRXJyb3IoSURCRXhj
ZXB0aW9uQ29kZTo6VW5rbm93biwgV1RGOjpBU0NJSUxpdGVyYWwoIk5vIGJhY2tpbmcgc3RvcmUg
b2JqZWN0IHN0b3JlIGZvdW5kIikpOworCisgICAgb3V0VmFsdWUgPSBvYmplY3RTdG9yZS0+aW5k
ZXhWYWx1ZUZvcktleVJhbmdlKGluZGV4SWRlbnRpZmllciwgcmVjb3JkVHlwZSwgcmFuZ2UpOwor
ICAgIHJldHVybiBJREJFcnJvcigpOworfQorCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3Rv
cmU6OmdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRl
bnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgdWludDY0X3QmIG91dENvdW50
KQogewogICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldENvdW50
Iik7CiAKQEAgLTI5Miw3ICszMDksOCBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6
OmdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpbwogICAgIGlm
ICghb2JqZWN0U3RvcmUpCiAgICAgICAgIHJldHVybiBJREJFcnJvcihJREJFeGNlcHRpb25Db2Rl
OjpVbmtub3duLCBXVEY6OkFTQ0lJTGl0ZXJhbCgiTm8gYmFja2luZyBzdG9yZSBvYmplY3Qgc3Rv
cmUgZm91bmQiKSk7CiAKLSAgICBvdXRDb3VudCA9IG9iamVjdFN0b3JlLT5jb3VudEZvcktleVJh
bmdlKHJhbmdlKTsKKyAgICBvdXRDb3VudCA9IG9iamVjdFN0b3JlLT5jb3VudEZvcktleVJhbmdl
KGluZGV4SWRlbnRpZmllciwgcmFuZ2UpOworCiAgICAgcmV0dXJuIElEQkVycm9yKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1v
cnlJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaAppbmRleCA2NjZmNWQ3Li5kODUwNGZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURC
QmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCkBAIC02MCw3ICs2MCw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIElEQkVycm9yIGRlbGV0ZVJhbmdlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgSURC
RXJyb3IgcHV0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURh
dGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUpIG92ZXJyaWRlIGZpbmFsOwog
ICAgIHZpcnR1YWwgSURCRXJyb3IgZ2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYsIFRocmVhZFNhZmVEYXRhQnVmZmVyJiBvdXRWYWx1ZSkg
b3ZlcnJpZGUgZmluYWw7Ci0gICAgdmlydHVhbCBJREJFcnJvciBnZXRDb3VudChjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCB1aW50NjRfdCYgb3V0Q291
bnQpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgSURCRXJyb3IgZ2V0SW5kZXhSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRl
eGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgVGhyZWFkU2Fm
ZURhdGFCdWZmZXImIG91dFZhbHVlKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIElEQkVy
cm9yIGdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRl
bnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgdWludDY0X3QmIG91dENvdW50KSBvdmVy
cmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGdlbmVyYXRlS2V5TnVtYmVyKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90JiBrZXlOdW1iZXIpIG92ZXJyaWRlIGZpbmFs
OwogCiAgICAgdm9pZCByZW1vdmVPYmplY3RTdG9yZUZvclZlcnNpb25DaGFuZ2VBYm9ydChNZW1v
cnlPYmplY3RTdG9yZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5jcHAKaW5kZXggNjlhYWM3YS4uMjVmYjI2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlu
ZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVt
b3J5SW5kZXguY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIAorI2luY2x1ZGUgIlRocmVhZFNhZmVEYXRhQnVmZmVyLmgiCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogCkBAIC00NSw2ICs0NywyMCBAQCBNZW1v
cnlJbmRleDo6fk1lbW9yeUluZGV4KCkKIHsKIH0KIAorVGhyZWFkU2FmZURhdGFCdWZmZXIgTWVt
b3J5SW5kZXg6OnZhbHVlRm9yS2V5UmFuZ2UoSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IE9uY2UgaW5kZXhl
cyBhY3R1YWxseSBpbmRleCwgd2UnbGwgcmV0dXJuIHNvbWV0aGluZyByZWFsLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA5MzkKKyAgICByZXR1cm4g
eyB9OworfQorCit1aW50NjRfdCBNZW1vcnlJbmRleDo6Y291bnRGb3JLZXlSYW5nZShjb25zdCBJ
REJLZXlSYW5nZURhdGEmKQoreworICAgIC8vIEZJWE1FOiBPbmNlIGluZGV4ZXMgYWN0dWFsbHkg
aW5kZXgsIHdlJ2xsIHJldHVybiBzb21ldGhpbmcgcmVhbC4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTM5CisgICAgcmV0dXJuIDA7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIElEQlNlcnZlcgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SW5kZXgu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5o
CmluZGV4IGRhNGI1NzEuLmQ5ZmRkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5oCkBAIC0zMSw2ICszMSwxNSBAQAog
I2luY2x1ZGUgIklEQkluZGV4SW5mby5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFRocmVhZFNhZmVEYXRhQnVmZmVyOworCitzdHJ1Y3QgSURCS2V5UmFuZ2VEYXRhOworCituYW1l
c3BhY2UgSW5kZXhlZERCIHsKK2VudW0gY2xhc3MgSW5kZXhSZWNvcmRUeXBlOworfQorCiBuYW1l
c3BhY2UgSURCU2VydmVyIHsKIAogY2xhc3MgTWVtb3J5SW5kZXggewpAQCAtNDIsNiArNTEsOSBA
QCBwdWJsaWM6CiAKICAgICBjb25zdCBJREJJbmRleEluZm8mIGluZm8oKSBjb25zdCB7IHJldHVy
biBtX2luZm87IH0KIAorICAgIFRocmVhZFNhZmVEYXRhQnVmZmVyIHZhbHVlRm9yS2V5UmFuZ2Uo
SW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpIGNvbnN0
OworICAgIHVpbnQ2NF90IGNvdW50Rm9yS2V5UmFuZ2UoY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7
CisgICAgCiBwcml2YXRlOgogICAgIE1lbW9yeUluZGV4KGNvbnN0IElEQkluZGV4SW5mbyYpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVt
b3J5T2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcAppbmRleCBmYTIzY2I1Li43NDE5YmFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9N
ZW1vcnlPYmplY3RTdG9yZS5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgSURCRXJyb3IgTWVtb3J5T2Jq
ZWN0U3RvcmU6OmNyZWF0ZUluZGV4KE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5T2JqZWN0U3RvcmU6OmNyZWF0ZUlu
ZGV4Iik7CiAKLSAgICBpZiAoIW1fd3JpdGVUcmFuc2FjdGlvbiB8fCBtX3dyaXRlVHJhbnNhY3Rp
b24tPmlzVmVyc2lvbkNoYW5nZSgpIHx8IG1fd3JpdGVUcmFuc2FjdGlvbiAhPSAmdHJhbnNhY3Rp
b24pCisgICAgaWYgKCFtX3dyaXRlVHJhbnNhY3Rpb24gfHwgIW1fd3JpdGVUcmFuc2FjdGlvbi0+
aXNWZXJzaW9uQ2hhbmdlKCkgfHwgbV93cml0ZVRyYW5zYWN0aW9uICE9ICZ0cmFuc2FjdGlvbikK
ICAgICAgICAgcmV0dXJuIElEQkVycm9yKElEQkV4Y2VwdGlvbkNvZGU6OkNvbnN0cmFpbnRFcnJv
cik7CiAKICAgICBBU1NFUlQoIW1faW5kZXhlc0J5SWRlbnRpZmllci5jb250YWlucyhpbmZvLmlk
ZW50aWZpZXIoKSkpOwpAQCAtMTc1LDEwICsxNzUsMTYgQEAgdm9pZCBNZW1vcnlPYmplY3RTdG9y
ZTo6c2V0S2V5VmFsdWUoY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgVGhyZWFkU2Fm
ZUQKICAgICAgICAgbV9vcmRlcmVkS2V5cy0+aW5zZXJ0KGtleURhdGEpOwogfQogCi11aW50NjRf
dCBNZW1vcnlPYmplY3RTdG9yZTo6Y291bnRGb3JLZXlSYW5nZShjb25zdCBJREJLZXlSYW5nZURh
dGEmIGluUmFuZ2UpIGNvbnN0Cit1aW50NjRfdCBNZW1vcnlPYmplY3RTdG9yZTo6Y291bnRGb3JL
ZXlSYW5nZSh1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYg
aW5SYW5nZSkgY29uc3QKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5T2JqZWN0U3RvcmU6
OmNvdW50Rm9yS2V5UmFuZ2UiKTsKIAorICAgIGlmIChpbmRleElkZW50aWZpZXIpIHsKKyAgICAg
ICAgYXV0byogaW5kZXggPSBtX2luZGV4ZXNCeUlkZW50aWZpZXIuZ2V0KGluZGV4SWRlbnRpZmll
cik7CisgICAgICAgIEFTU0VSVChpbmRleCk7CisgICAgICAgIHJldHVybiBpbmRleC0+Y291bnRG
b3JLZXlSYW5nZShpblJhbmdlKTsKKyAgICB9CisKICAgICBpZiAoIW1fa2V5VmFsdWVTdG9yZSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTIwOSw2ICsyMTUsMTUgQEAgVGhyZWFkU2FmZURhdGFC
dWZmZXIgTWVtb3J5T2JqZWN0U3RvcmU6OnZhbHVlRm9yS2V5UmFuZ2UoY29uc3QgSURCS2V5UmFu
Z2VEYXRhJgogICAgIHJldHVybiBtX2tleVZhbHVlU3RvcmUtPmdldChrZXkpOwogfQogCitUaHJl
YWRTYWZlRGF0YUJ1ZmZlciBNZW1vcnlPYmplY3RTdG9yZTo6aW5kZXhWYWx1ZUZvcktleVJhbmdl
KHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVj
b3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkgY29uc3QKK3sKKyAgICBMT0co
SW5kZXhlZERCLCAiTWVtb3J5T2JqZWN0U3RvcmU6OmluZGV4VmFsdWVGb3JLZXlSYW5nZSIpOwor
CisgICAgYXV0byogaW5kZXggPSBtX2luZGV4ZXNCeUlkZW50aWZpZXIuZ2V0KGluZGV4SWRlbnRp
Zmllcik7CisgICAgQVNTRVJUKGluZGV4KTsKKyAgICByZXR1cm4gaW5kZXgtPnZhbHVlRm9yS2V5
UmFuZ2UocmVjb3JkVHlwZSwgcmFuZ2UpOworfQorCiBJREJLZXlEYXRhIE1lbW9yeU9iamVjdFN0
b3JlOjpsb3dlc3RLZXlXaXRoUmVjb3JkSW5SYW5nZShjb25zdCBJREJLZXlSYW5nZURhdGEmIGtl
eVJhbmdlRGF0YSkgY29uc3QKIHsKICAgICBpZiAoIW1fa2V5VmFsdWVTdG9yZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RT
dG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9i
amVjdFN0b3JlLmgKaW5kZXggZTY0MTk3My4uZjkwNDljMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3Jl
LmgKQEAgLTQyLDYgKzQyLDEwIEBAIGNsYXNzIElEQktleURhdGE7CiAKIHN0cnVjdCBJREJLZXlS
YW5nZURhdGE7CiAKK25hbWVzcGFjZSBJbmRleGVkREIgeworZW51bSBjbGFzcyBJbmRleFJlY29y
ZFR5cGU7Cit9CisKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogCiBjbGFzcyBNZW1vcnlCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbjsKQEAgLTc0LDcgKzc4LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVw
bGFjZUtleVZhbHVlU3RvcmUoc3RkOjp1bmlxdWVfcHRyPEtleVZhbHVlTWFwPiYmKTsKIAogICAg
IFRocmVhZFNhZmVEYXRhQnVmZmVyIHZhbHVlRm9yS2V5UmFuZ2UoY29uc3QgSURCS2V5UmFuZ2VE
YXRhJikgY29uc3Q7Ci0gICAgdWludDY0X3QgY291bnRGb3JLZXlSYW5nZShjb25zdCBJREJLZXlS
YW5nZURhdGEmKSBjb25zdDsKKyAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBpbmRleFZhbHVlRm9y
S2V5UmFuZ2UodWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3Jk
VHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJikgY29uc3Q7CisgICAgdWludDY0X3QgY291bnRG
b3JLZXlSYW5nZSh1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYpIGNvbnN0OwogCiAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKCkgY29uc3Qg
eyByZXR1cm4gbV9pbmZvOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IGNkMzU3
NzIuLmJlY2JhMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtNDQ3LDEzICs0NDcs
MTcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAgICBwZXJmb3JtS2V5RGF0YUNhbGxiYWNr
KGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdEtleSk7CiB9CiAKLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBWYWx1ZURhdGFDYWxsYmFjayBj
YWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZChjb25zdCBJREJSZXF1
ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIFZhbHVl
RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkIik7
CiAKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFjayhjYWxsYmFjayk7Ci0g
ICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJRCwgcmVxdWVz
dERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRl
bnRpZmllcigpLCBrZXlSYW5nZURhdGEpKTsKKworICAgIGlmICh1aW50NjRfdCBpbmRleElkZW50
aWZpZXIgPSByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSkKKyAgICAgICAgbV9zZXJ2ZXIu
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50
cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVy
KCksIGluZGV4SWRlbnRpZmllciwgcmVxdWVzdERhdGEuaW5kZXhSZWNvcmRUeXBlKCksIHJhbmdl
KSk7CisgICAgZWxzZQorICAgICAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3Jk
LCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVz
dERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIHJhbmdlKSk7CiB9CiAKIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJh
bmdlRGF0YSkKQEAgLTQ2Miw3ICs0NjYsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtR2V0UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUgogICAg
IExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3Jk
Iik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIEFTU0VSVChvYmplY3RTdG9y
ZUlkZW50aWZpZXIpOwogCiAgICAgVGhyZWFkU2FmZURhdGFCdWZmZXIgdmFsdWVEYXRhOwogICAg
IElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldFJlY29yZCh0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5UmFuZ2VEYXRhLCB2YWx1ZURhdGEp
OwpAQCAtNDcwLDYgKzQ3MywxOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0
UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUgogICAgIG1fc2Vy
dmVyLnBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvciwgdmFsdWVEYXRhKSk7CiB9CiAKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1HZXRJbmRleFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRl
eFJlY29yZFR5cGUgcmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKK3sK
KyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkIik7CisKKyAgICBBU1NFUlQo
bV9iYWNraW5nU3RvcmUpOworCisgICAgVGhyZWFkU2FmZURhdGFCdWZmZXIgdmFsdWVEYXRhOwor
ICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldEluZGV4UmVjb3JkKHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIs
IHJlY29yZFR5cGUsIHJhbmdlLCB2YWx1ZURhdGEpOworCisgICAgbV9zZXJ2ZXIucG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB2YWx1
ZURhdGEpKTsKK30KKwogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29y
ZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29u
c3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHJlc3VsdERhdGEpCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKQEAgLTQ4NCwxMCArNTAwLDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmdldENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5
CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQi
KTsKIAogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNrKTsK
LSAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQsIGNhbGxiYWNrSUQsIHJlcXVl
c3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlk
ZW50aWZpZXIoKSwgcmFuZ2UpKTsKKyAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291
bnQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1
ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEuaW5kZXhJZGVudGlm
aWVyKCksIHJhbmdlKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRD
b3VudCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhKQordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUdldENvdW50Iik7CkBAIC00OTYsNyArNTEyLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmUK
ICAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIAogICAgIHVpbnQ2NF90IGNvdW50
OwotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldENvdW50KHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEsIGNvdW50
KTsKKyAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRDb3VudCh0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBr
ZXlSYW5nZURhdGEsIGNvdW50KTsKIAogICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2tSZXBs
eShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybUdldENvdW50LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBjb3VudCkpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2UuaAppbmRleCA0ZjU1NmQxLi40ZjcyOThkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2UuaApAQCAtNDgsNiArNDgsMTAgQEAgY2xhc3MgSURCRXJyb3I7CiBjbGFzcyBJREJSZXF1
ZXN0RGF0YTsKIGNsYXNzIElEQlRyYW5zYWN0aW9uSW5mbzsKIAorbmFtZXNwYWNlIEluZGV4ZWRE
QiB7CitlbnVtIGNsYXNzIEluZGV4UmVjb3JkVHlwZTsKK30KKwogbmFtZXNwYWNlIElEQlNlcnZl
ciB7CiAKIGNsYXNzIElEQkNvbm5lY3Rpb25Ub0NsaWVudDsKQEAgLTEwOSw3ICsxMTMsOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgcGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQkluZGV4SW5mbyYpOwogICAgIHZvaWQgcGVyZm9ybVB1dE9yQWRkKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
SURCS2V5RGF0YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4
ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsKICAgICB2b2lkIHBlcmZvcm1HZXRSZWNv
cmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKLSAgICB2b2lkIHBlcmZvcm1HZXRDb3VudCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYpOworICAgIHZvaWQgcGVyZm9ybUdldEluZGV4UmVjb3JkKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0
X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJik7CisgICAgdm9pZCBwZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElk
ZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwogICAgIHZvaWQgcGVyZm9ybURlbGV0
ZVJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwogICAgIHZvaWQgcGVyZm9ybUFjdGl2YXRl
VHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmNwcAppbmRleCA1YTNk
OWU1Li5kZjE2NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCUmVxdWVzdERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHAKQEAgLTQ2LDEyICs0NiwxNyBAQCBJ
REJSZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJh
dGlvbiYgb3BlcmF0aW9uKQogICAgICwgbV9yZXF1ZXN0SWRlbnRpZmllcihzdGQ6Om1ha2VfdW5p
cXVlPElEQlJlc291cmNlSWRlbnRpZmllcj4ob3BlcmF0aW9uLmlkZW50aWZpZXIoKSkpCiAgICAg
LCBtX3RyYW5zYWN0aW9uSWRlbnRpZmllcihzdGQ6Om1ha2VfdW5pcXVlPElEQlJlc291cmNlSWRl
bnRpZmllcj4ob3BlcmF0aW9uLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKSkKICAgICAsIG1fb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKG9wZXJhdGlvbi5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSkKKyAg
ICAsIG1faW5kZXhJZGVudGlmaWVyKG9wZXJhdGlvbi5pbmRleElkZW50aWZpZXIoKSkKIHsKKyAg
ICBpZiAobV9pbmRleElkZW50aWZpZXIpCisgICAgICAgIG1faW5kZXhSZWNvcmRUeXBlID0gb3Bl
cmF0aW9uLmluZGV4UmVjb3JkVHlwZSgpOwogfQogCiBJREJSZXF1ZXN0RGF0YTo6SURCUmVxdWVz
dERhdGEoY29uc3QgSURCUmVxdWVzdERhdGEmIG90aGVyKQogICAgIDogbV9zZXJ2ZXJDb25uZWN0
aW9uSWRlbnRpZmllcihvdGhlci5tX3NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKQogICAgICwg
bV9vYmplY3RTdG9yZUlkZW50aWZpZXIob3RoZXIubV9vYmplY3RTdG9yZUlkZW50aWZpZXIpCisg
ICAgLCBtX2luZGV4SWRlbnRpZmllcihvdGhlci5tX2luZGV4SWRlbnRpZmllcikKKyAgICAsIG1f
aW5kZXhSZWNvcmRUeXBlKG90aGVyLm1faW5kZXhSZWNvcmRUeXBlKQogICAgICwgbV9kYXRhYmFz
ZUlkZW50aWZpZXIob3RoZXIubV9kYXRhYmFzZUlkZW50aWZpZXIpCiAgICAgLCBtX3JlcXVlc3Rl
ZFZlcnNpb24ob3RoZXIubV9yZXF1ZXN0ZWRWZXJzaW9uKQogewpAQCAtODEsMTAgKzg2LDIyIEBA
IElEQlJlc291cmNlSWRlbnRpZmllciBJREJSZXF1ZXN0RGF0YTo6dHJhbnNhY3Rpb25JZGVudGlm
aWVyKCkgY29uc3QKIAogdWludDY0X3QgSURCUmVxdWVzdERhdGE6Om9iamVjdFN0b3JlSWRlbnRp
ZmllcigpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9vYmplY3RTdG9yZUlkZW50aWZp
ZXIpOworICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgcmV0dXJuIG1f
b2JqZWN0U3RvcmVJZGVudGlmaWVyOwogfQogCit1aW50NjRfdCBJREJSZXF1ZXN0RGF0YTo6aW5k
ZXhJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkZW50aWZp
ZXIgfHwgbV9pbmRleElkZW50aWZpZXIpOworICAgIHJldHVybiBtX2luZGV4SWRlbnRpZmllcjsK
K30KKworSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgSURCUmVxdWVzdERhdGE6OmluZGV4UmVj
b3JkVHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faW5kZXhJZGVudGlmaWVyKTsKKyAgICBy
ZXR1cm4gbV9pbmRleFJlY29yZFR5cGU7Cit9CisKIHVpbnQ2NF90IElEQlJlcXVlc3REYXRhOjpy
ZXF1ZXN0ZWRWZXJzaW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXF1ZXN0ZWRWZXJzaW9u
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lE
QlJlcXVlc3REYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCUmVxdWVzdERhdGEuaAppbmRleCBiOGI0YTI4Li4yMWEyNjA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEu
aApAQCAtMzMsNiArMzMsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCituYW1lc3BhY2Ug
SW5kZXhlZERCIHsKK2VudW0gY2xhc3MgSW5kZXhSZWNvcmRUeXBlOworfQorCiBuYW1lc3BhY2Ug
SURCQ2xpZW50IHsKIGNsYXNzIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjsKIGNsYXNzIElEQk9wZW5E
QlJlcXVlc3Q7CkBAIC01MCw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICBJREJSZXNvdXJjZUlkZW50
aWZpZXIgcmVxdWVzdElkZW50aWZpZXIoKSBjb25zdDsKICAgICBJREJSZXNvdXJjZUlkZW50aWZp
ZXIgdHJhbnNhY3Rpb25JZGVudGlmaWVyKCkgY29uc3Q7CiAgICAgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyKCkgY29u
c3Q7CisgICAgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgaW5kZXhSZWNvcmRUeXBlKCkgY29u
c3Q7CiAKICAgICBjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGRhdGFiYXNlSWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VJZGVudGlmaWVyOyB9CiAgICAgdWludDY0X3Qg
cmVxdWVzdGVkVmVyc2lvbigpIGNvbnN0OwpAQCAtNjEsNiArNjcsOCBAQCBwcml2YXRlOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJREJSZXNvdXJjZUlkZW50aWZpZXI+IG1fcmVxdWVzdElkZW50aWZp
ZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQlJlc291cmNlSWRlbnRpZmllcj4gbV90cmFuc2Fj
dGlvbklkZW50aWZpZXI7CiAgICAgdWludDY0X3QgbV9vYmplY3RTdG9yZUlkZW50aWZpZXIgeyAw
IH07CisgICAgdWludDY0X3QgbV9pbmRleElkZW50aWZpZXIgeyAwIH07CisgICAgSW5kZXhlZERC
OjpJbmRleFJlY29yZFR5cGUgbV9pbmRleFJlY29yZFR5cGU7CiAKICAgICBJREJEYXRhYmFzZUlk
ZW50aWZpZXIgbV9kYXRhYmFzZUlkZW50aWZpZXI7CiAgICAgdWludDY0X3QgbV9yZXF1ZXN0ZWRW
ZXJzaW9uIHsgMCB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>