<?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>150911</bug_id>
          
          <creation_ts>2015-11-04 16:51:08 -0800</creation_ts>
          <short_desc>Modern IDB: IDBObjectStore.deleteIndex() support</short_desc>
          <delta_ts>2015-11-19 11:57:39 -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>
          <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>1139488</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-04 16:51:08 -0800</bug_when>
    <thetext>Modern IDB: IDBObjectStore.deleteIndex() support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143331</commentid>
    <comment_count>1</comment_count>
      <attachid>265871</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-19 10:28:05 -0800</bug_when>
    <thetext>Created attachment 265871
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143334</commentid>
    <comment_count>2</comment_count>
      <attachid>265873</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-19 10:29:49 -0800</bug_when>
    <thetext>Created attachment 265873
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143335</commentid>
    <comment_count>3</comment_count>
      <attachid>265874</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-19 10:30:54 -0800</bug_when>
    <thetext>Created attachment 265874
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143343</commentid>
    <comment_count>4</comment_count>
      <attachid>265874</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-19 11:01:43 -0800</bug_when>
    <thetext>Comment on attachment 265874
Patch v3

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

&gt; Source/WebCore/Modules/indexeddb/client/IDBIndexImpl.cpp:332
&gt; +    m_deleted = true;

Add tests for this.  Probably to existing tests.

&gt; Source/WebCore/Modules/indexeddb/client/TransactionOperation.h:149
&gt; +    auto operation = new TransactionOperationImpl&lt;MP1, MP2&gt;(transaction, complete, perform, parameter1, parameter2);

auto*

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:211
&gt; +    if (!transaction)

There are no tests that delete a non-existent index.

&gt; Source/WebCore/Modules/indexeddb/server/MemoryObjectStore.cpp:109
&gt; +    if (m_info.hasIndex(index-&gt;info().name()))

ASSERT(index); or early return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143363</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-19 11:54:26 -0800</bug_when>
    <thetext>(In reply to comment #4)

&gt; &gt; Source/WebCore/Modules/indexeddb/client/TransactionOperation.h:149
&gt; &gt; +    auto operation = new TransactionOperationImpl&lt;MP1, MP2&gt;(transaction, complete, perform, parameter1, parameter2);
&gt; 
&gt; auto*

None of the other impls in this file do that, and it&apos;s not necessary to resolve an ambiguity, so I&apos;ll be skipping it in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143368</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-19 11:57:39 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/192645</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265871</attachid>
            <date>2015-11-19 10:28:05 -0800</date>
            <delta_ts>2015-11-19 10:29:49 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>62729</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlMzQwZmJmLi4yYzhlNmRjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMTEt
MTkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IElEQk9iamVjdFN0b3JlLmRlbGV0ZUluZGV4KCkgc3VwcG9ydC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDkxMQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2RlbGV0ZWluZGV4LTEtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtMS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBz
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtMi1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9kZWxldGVpbmRleC0yLmh0bWw6
IEFkZGVkLgorCiAyMDE1LTExLTE5ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+
CiAKICAgICAgICAgU2tpcCBtb3JlIG1lZGlhc3RyZWFtIHRlc3RzIHRoYXQgY3Jhc2ggd2hlbiBw
YWludGluZyBhIG1vY2sgdmlkZW8gc291cmNlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTEtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWFjODYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgt
MS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGhpcyB0ZXN0cyBkZWxldGluZyBhbiBp
bmRleCBhbmQgdGhlbiBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbi4KK0luaXRpYWwgdXBncmFk
ZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gMCBOZXcgdmVyc2lvbiAtIDEKK0NvdW50IGlzOiAyCitD
dXJzb3IgYXQgcmVjb3JkOiBBIC8gMQorQ3Vyc29yIGF0IHJlY29yZDogQSAvIDIKK0N1cnNvciBh
dCByZWNvcmQ6IHVuZGVmaW5lZCAvIHVuZGVmaW5lZAorRGVsZXRlZCB0aGUgaW5kZXgKK0luaXRp
YWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlCitPYmplY3Qgc3Rv
cmUgaGFzIGluZGV4ZXM6CitVbmFibGUgdG8gZ2V0IGluZGV4IGZyb20gb2JqZWN0IHN0b3JlIChp
dCBzaG91bGRuJ3QgZXhpc3QpCitUcmFuc2FjdGlvbiBjb21wbGV0ZQorRG9uZQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtMS5o
dG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTEu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmY3OGZkCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWlu
ZGV4LTEuaHRtbApAQCAtMCwwICsxLDExMyBAQAorVGhpcyB0ZXN0cyBkZWxldGluZyBhbiBpbmRl
eCBhbmQgdGhlbiBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbi48YnI+Cis8ZGl2IGlkPSJsb2dn
ZXIiPjwvZGl2PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit9
CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGxvZygiRG9uZSIpOworICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dnZXIi
KS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKwordmFyIGluZGV4OwordmFyIG9i
amVjdFN0b3JlOwordmFyIGRhdGFiYXNlOworCitmdW5jdGlvbiBjaGVja0luZGV4VmFsdWVzKCkK
K3sKKyAgICB2YXIgY291bnRSZXF1ZXN0ID0gaW5kZXguY291bnQoKTsKKyAgICBjb3VudFJlcXVl
c3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygiQ291bnQgaXM6ICIgKyBj
b3VudFJlcXVlc3QucmVzdWx0KTsKKyAgICB9CisKKyAgICB2YXIgY3Vyc29yUmVxdWVzdCA9IGlu
ZGV4Lm9wZW5DdXJzb3IoKTsKKyAgICBjdXJzb3JSZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgY3Vyc29yID0gY3Vyc29yUmVxdWVzdC5yZXN1bHQ7CisgICAgICAg
IGxvZygiQ3Vyc29yIGF0IHJlY29yZDogIiArIGN1cnNvci5rZXkgKyAiIC8gIiArIGN1cnNvci5w
cmltYXJ5S2V5KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjdXJzb3Iua2V5ICE9IHVuZGVmaW5l
ZCkKKyAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIG9iamVjdFN0b3JlLmRlbGV0ZUluZGV4KCJUZXN0SW5kZXgxIik7CisgICAgICAgICAg
ICBsb2coIkRlbGV0ZWQgdGhlIGluZGV4Iik7CisgICAgICAgIH0KKyAgICB9CisgICAgY3Vyc29y
UmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZSkgeworICAgICAgICBsb2coIlVuZXhwZWN0ZWQg
ZXJyb3Igb3BlbmluZyBvciBpdGVyYXRpbmcgY3Vyc29yIik7CisgICAgICAgIGxvZ0N1cnNvcihj
dXJzb3JSZXF1ZXN0LnJlc3VsdCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9IAorfQorCit2YXIg
Y3JlYXRlUmVxdWVzdCA9IHdpbmRvdy5pbmRleGVkREIub3BlbigiRGVsZXRlSW5kZXgxRGF0YWJh
c2UiLCAxKTsKK2NyZWF0ZVJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICBsb2coIkluaXRpYWwgdXBncmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gIiArIGV2
ZW50Lm9sZFZlcnNpb24gKyAiIE5ldyB2ZXJzaW9uIC0gIiArIGV2ZW50Lm5ld1ZlcnNpb24pOwor
CisgICAgdmFyIHZlcnNpb25UcmFuc2FjdGlvbiA9IGNyZWF0ZVJlcXVlc3QudHJhbnNhY3Rpb247
CisgICAgZGF0YWJhc2UgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgIG9iamVjdFN0b3JlID0g
ZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUoIlRlc3RPYmplY3RTdG9yZSIpOworICAgIG9iamVj
dFN0b3JlLnB1dCh7IGJhcjogIkEiIH0sIDEpOworICAgIG9iamVjdFN0b3JlLnB1dCh7IGJhcjog
IkEiIH0sIDIpOworCisgICAgaW5kZXggPSBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgiVGVzdElu
ZGV4MSIsICJiYXIiKTsKKyAgICAKKyAgICBjaGVja0luZGV4VmFsdWVzKCk7CisgICAgCisgICAg
dmVyc2lvblRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBs
b2coIkluaXRpYWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIHVuZXhwZWN0ZWQg
YWJvcnQiKTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KKworICAgIHZlcnNpb25UcmFuc2FjdGlv
bi5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgbG9nKCJJbml0aWFsIHVw
Z3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBjb21wbGV0ZSIpOworICAgICAgICBjb250
aW51ZVRlc3QoKTsKKyAgICB9CisKKyAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFu
Z2UgdHJhbnNhY3Rpb24gdW5leHBlY3RlZCBlcnJvciIgKyBldmVudCk7CisgICAgICAgIGRvbmUo
KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNvbnRpbnVlVGVzdCgpIHsKKyAgICB2YXIgdHJhbnNh
Y3Rpb24gPSBkYXRhYmFzZS50cmFuc2FjdGlvbigiVGVzdE9iamVjdFN0b3JlIik7CisgICAgb2Jq
ZWN0U3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3JlIik7CisK
KyAgICB2YXIgbmFtZXMgPSBvYmplY3RTdG9yZS5pbmRleE5hbWVzOworICAgIGxvZygiT2JqZWN0
IHN0b3JlIGhhcyBpbmRleGVzOiIpCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgbG9nKG5hbWVzW2ldKTsKKyAgICAKKyAgICB0cnkgeworICAgICAg
ICBvYmplY3RTdG9yZS5pbmRleCgiVGVzdEluZGV4MSIpOworICAgIH0gY2F0Y2goZSkgeworICAg
ICAgICBsb2coIlVuYWJsZSB0byBnZXQgaW5kZXggZnJvbSBvYmplY3Qgc3RvcmUgKGl0IHNob3Vs
ZG4ndCBleGlzdCkiKTsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiB1bmV4cGVjdGVkIGFib3J0Iik7
CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0g
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiBjb21wbGV0ZSIpOwor
ICAgICAgICBkb25lKCk7CisgICAgfQorCisgICAgdHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygiVHJhbnNhY3Rpb24gdW5leHBlY3RlZCBlcnJvciIg
KyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CisKKzwvc2NyaXB0PgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTIt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0
ZWluZGV4LTItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNiYzU4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vZGVsZXRlaW5kZXgtMi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGhp
cyB0ZXN0cyBkZWxldGluZyBhbiBpbmRleCBhbmQgdGhlbiBhYm9ydGluZyB0aGUgdHJhbnNhY3Rp
b24uCitJbml0aWFsIHVwZ3JhZGUgbmVlZGVkOiBPbGQgdmVyc2lvbiAtIDAgTmV3IHZlcnNpb24g
LSAxCitDb3VudCBpczogMgorQ3Vyc29yIGF0IHJlY29yZDogQSAvIDEKK0N1cnNvciBhdCByZWNv
cmQ6IEEgLyAyCitDdXJzb3IgYXQgcmVjb3JkOiB1bmRlZmluZWQgLyB1bmRlZmluZWQKK0luaXRp
YWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlCitTZWNvbmQgdXBn
cmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gMSBOZXcgdmVyc2lvbiAtIDIKK0RlbGV0ZWQgdGhl
IGluZGV4CitBYm9ydGVkIHRoZSB0cmFuc2FjdGlvbgorU2Vjb25kIHVwZ3JhZGUgdmVyc2lvbmNo
YW5nZSB0cmFuc2FjdGlvbiBhYm9ydAorVGhpcmQgdXBncmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9u
IC0gMSBOZXcgdmVyc2lvbiAtIDMKK0NvdW50IGlzOiAyCitDdXJzb3IgYXQgcmVjb3JkOiBBIC8g
MQorQ3Vyc29yIGF0IHJlY29yZDogQSAvIDIKK0N1cnNvciBhdCByZWNvcmQ6IHVuZGVmaW5lZCAv
IHVuZGVmaW5lZAorVGhpcmQgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBs
ZXRlCitEb25lCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9kZWxldGVpbmRleC0yLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vZGVsZXRlaW5kZXgtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM4MDE1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtMi5odG1sCkBAIC0wLDAgKzEsMTM4IEBACitUaGlzIHRl
c3RzIGRlbGV0aW5nIGFuIGluZGV4IGFuZCB0aGVuIGFib3J0aW5nIHRoZSB0cmFuc2FjdGlvbi48
YnI+Cis8ZGl2IGlkPSJsb2dnZXIiPjwvZGl2PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0
UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7Cit9CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGxvZygiRG9uZSIp
OworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJsb2dnZXIiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKwor
dmFyIGluZGV4OwordmFyIG9iamVjdFN0b3JlOwordmFyIGRhdGFiYXNlOworCitmdW5jdGlvbiBj
aGVja0luZGV4VmFsdWVzKCkKK3sKKyAgICB2YXIgY291bnRSZXF1ZXN0ID0gaW5kZXguY291bnQo
KTsKKyAgICBjb3VudFJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGxv
ZygiQ291bnQgaXM6ICIgKyBjb3VudFJlcXVlc3QucmVzdWx0KTsKKyAgICB9CisKKyAgICB2YXIg
Y3Vyc29yUmVxdWVzdCA9IGluZGV4Lm9wZW5DdXJzb3IoKTsKKyAgICBjdXJzb3JSZXF1ZXN0Lm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgY3Vyc29yID0gY3Vyc29yUmVxdWVz
dC5yZXN1bHQ7CisgICAgICAgIGxvZygiQ3Vyc29yIGF0IHJlY29yZDogIiArIGN1cnNvci5rZXkg
KyAiIC8gIiArIGN1cnNvci5wcmltYXJ5S2V5KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjdXJz
b3Iua2V5ICE9IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOworICAg
IH0KKyAgICBjdXJzb3JSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGxv
ZygiVW5leHBlY3RlZCBlcnJvciBvcGVuaW5nIG9yIGl0ZXJhdGluZyBjdXJzb3IiKTsKKyAgICAg
ICAgbG9nQ3Vyc29yKGN1cnNvclJlcXVlc3QucmVzdWx0KTsKKyAgICAgICAgZG9uZSgpOworICAg
IH0gCit9CisKK3ZhciBjcmVhdGVSZXF1ZXN0ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKCJEZWxl
dGVJbmRleDJEYXRhYmFzZSIsIDEpOworY3JlYXRlUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBm
dW5jdGlvbihldmVudCkgeworICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZl
cnNpb24gLSAiICsgZXZlbnQub2xkVmVyc2lvbiArICIgTmV3IHZlcnNpb24gLSAiICsgZXZlbnQu
bmV3VmVyc2lvbik7CisKKyAgICB2YXIgdmVyc2lvblRyYW5zYWN0aW9uID0gY3JlYXRlUmVxdWVz
dC50cmFuc2FjdGlvbjsKKyAgICBkYXRhYmFzZSA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAg
b2JqZWN0U3RvcmUgPSBkYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3Jl
Iik7CisgICAgb2JqZWN0U3RvcmUucHV0KHsgYmFyOiAiQSIgfSwgMSk7CisgICAgb2JqZWN0U3Rv
cmUucHV0KHsgYmFyOiAiQSIgfSwgMik7CisKKyAgICBpbmRleCA9IG9iamVjdFN0b3JlLmNyZWF0
ZUluZGV4KCJUZXN0SW5kZXgxIiwgImJhciIpOworICAgIAorICAgIGNoZWNrSW5kZXhWYWx1ZXMo
KTsKKyAgICAKKyAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rp
b24gdW5leHBlY3RlZCBhYm9ydCIpOworICAgICAgICBkb25lKCk7CisgICAgfQorCisgICAgdmVy
c2lvblRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBs
b2coIkluaXRpYWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlIik7
CisgICAgICAgIGRhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIGNvbnRpbnVlVGVzdDEoKTsKKyAg
ICB9CisKKyAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7
CisgICAgICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24g
dW5leHBlY3RlZCBlcnJvciIgKyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIGNvbnRpbnVlVGVzdDEoKSB7CisgICAgdmFyIGNyZWF0ZVJlcXVlc3QgPSB3aW5k
b3cuaW5kZXhlZERCLm9wZW4oIkRlbGV0ZUluZGV4MkRhdGFiYXNlIiwgMik7CisgICAgY3JlYXRl
UmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBsb2co
IlNlY29uZCB1cGdyYWRlIG5lZWRlZDogT2xkIHZlcnNpb24gLSAiICsgZXZlbnQub2xkVmVyc2lv
biArICIgTmV3IHZlcnNpb24gLSAiICsgZXZlbnQubmV3VmVyc2lvbik7CisKKyAgICAgICAgZGF0
YWJhc2UgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgdmVyc2lvblRyYW5zYWN0
aW9uID0gY3JlYXRlUmVxdWVzdC50cmFuc2FjdGlvbjsKKyAgICAgICAgb2JqZWN0U3RvcmUgPSB2
ZXJzaW9uVHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoIlRlc3RPYmplY3RTdG9yZSIpOworICAgICAg
ICBvYmplY3RTdG9yZS5kZWxldGVJbmRleCgiVGVzdEluZGV4MSIpOworICAgICAgICBsb2coIkRl
bGV0ZWQgdGhlIGluZGV4Iik7CisgICAgICAgIHZlcnNpb25UcmFuc2FjdGlvbi5hYm9ydCgpOwor
ICAgICAgICBsb2coIkFib3J0ZWQgdGhlIHRyYW5zYWN0aW9uIik7CisKKyAgICAgICAgdmVyc2lv
blRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgbG9n
KCJTZWNvbmQgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGFib3J0Iik7CisgICAg
ICAgICAgICBkYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAgY29udGludWVUZXN0MigpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmVyc2lvblRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5j
dGlvbihldmVudCkgeworICAgICAgICAgICAgbG9nKCJTZWNvbmQgdXBncmFkZSB2ZXJzaW9uY2hh
bmdlIHRyYW5zYWN0aW9uIHVuZXhwZWN0ZWQgY29tcGxldGUiKTsKKyAgICAgICAgICAgIGRvbmUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnNpb25UcmFuc2FjdGlvbi5vbmVycm9yID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGxvZygiU2Vjb25kIHVwZ3JhZGUgdmVyc2lvbmNo
YW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGVycm9yIiArIGV2ZW50KTsKKyAgICAgICAgICAg
IGRvbmUoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gY29udGludWVUZXN0Migp
IHsKKyAgICB2YXIgY3JlYXRlUmVxdWVzdCA9IHdpbmRvdy5pbmRleGVkREIub3BlbigiRGVsZXRl
SW5kZXgyRGF0YWJhc2UiLCAzKTsKKyAgICBjcmVhdGVSZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygiVGhpcmQgdXBncmFkZSBuZWVkZWQ6IE9s
ZCB2ZXJzaW9uIC0gIiArIGV2ZW50Lm9sZFZlcnNpb24gKyAiIE5ldyB2ZXJzaW9uIC0gIiArIGV2
ZW50Lm5ld1ZlcnNpb24pOworCisgICAgICAgIHZhciB2ZXJzaW9uVHJhbnNhY3Rpb24gPSBjcmVh
dGVSZXF1ZXN0LnRyYW5zYWN0aW9uOworICAgICAgICBvYmplY3RTdG9yZSA9IHZlcnNpb25UcmFu
c2FjdGlvbi5vYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3JlIik7CisgICAgICAgIGluZGV4ID0g
b2JqZWN0U3RvcmUuaW5kZXgoIlRlc3RJbmRleDEiKTsKKyAgICAKKyAgICAgICAgY2hlY2tJbmRl
eFZhbHVlcygpOyAgICAKKyAgICAgICAgCisgICAgICAgIHZlcnNpb25UcmFuc2FjdGlvbi5vbmFi
b3J0ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGxvZygiVGhpcmQgdXBncmFkZSB2
ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIHVuZXhwZWN0ZWQgYWJvcnQiKTsKKyAgICAgICAgICAg
IGRvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnNpb25UcmFuc2FjdGlvbi5vbmNvbXBs
ZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGxvZygiVGhpcmQgdXBncmFkZSB2
ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlIik7CisgICAgICAgICAgICBkb25lKCk7
CisgICAgICAgIH0KKworICAgICAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgICAgICBsb2coIlRoaXJkIHVwZ3JhZGUgdmVyc2lvbmNoYW5n
ZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGVycm9yIiArIGV2ZW50KTsKKyAgICAgICAgICAgIGRv
bmUoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDUx
ZTZmMS4uNzEyNGNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAxNS0xMS0xOSAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuIElEQjog
SURCT2JqZWN0U3RvcmUuZGVsZXRlSW5kZXgoKSBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTExCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9kZWxldGVpbmRleC0xLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9kZWxldGVpbmRleC0yLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpkaWREZWxldGVJbmRleCk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZl
ci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9T
ZXJ2ZXJEZWxlZ2F0ZS5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QkRhdGFiYXNlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkRhdGFi
YXNlOjpkaWREZWxldGVJbmRleEluZm8pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJEYXRhYmFzZUltcGwuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJJbmRleEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJJ
bmRleDo6bWFya0FzRGVsZXRlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkluZGV4SW1wbC5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
Qk9iamVjdFN0b3JlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9i
amVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9iamVj
dFN0b3JlOjpkZWxldGVJbmRleCk6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6
SURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVu
dDo6SURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4T25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlSW5kZXhPblNlcnZlcik6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oOgor
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9u
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0
aW9uKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3Rv
cmUuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9u
VG9DbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJDb25uZWN0aW9u
VG9DbGllbnQ6OmRpZERlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLmg6CisKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmluZGV4RGVs
ZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uOjphYm9ydCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01l
bW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oOgorCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SW5kZXg6OmNsZWFySW5kZXhWYWx1ZVN0b3Jl
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SW5kZXguaDoKKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjptYXliZVJl
c3RvcmVEZWxldGVkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlP
YmplY3RTdG9yZTo6dGFrZUluZGV4QnlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6TWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaDoKKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybURlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2UuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZERlbGV0ZUluZGV4KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9u
Lmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5oOgorCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZUluZm86OmxvZ2dpbmdTdHJpbmcpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaDoKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCSW5kZXhJbmZvOjpsb2dnaW5nU3RyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlSW5mbzo6aGFzSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVJbmZvOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUlu
Zm86OmxvZ2dpbmdTdHJpbmcpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJPYmplY3RTdG9yZUluZm8uaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JREJSZXN1bHREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc3VsdERhdGE6OmRl
bGV0ZUluZGV4U3VjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lE
QlJlc3VsdERhdGEuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblBy
b2Nlc3NJREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVy
OjpkaWREZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6
OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6ZGVs
ZXRlSW5kZXgpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJ
REJTZXJ2ZXIuaDoKKwogMjAxNS0xMS0xOSAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIGEgdGVzdCBmb3IgbWVkaWEgY29udHJvbCBkcm9wb2ZmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRv
U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJD
b25uZWN0aW9uVG9TZXJ2ZXIuY3BwCmluZGV4IDI3NGZiYTcuLjZlM2I1NDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9T
ZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCkBAIC0xNTUsNiArMTU1LDIxIEBAIHZvaWQgSURCQ29u
bmVjdGlvblRvU2VydmVyOjpkaWRDcmVhdGVJbmRleChjb25zdCBJREJSZXN1bHREYXRhJiByZXN1
bHREYXRhKQogICAgIGNvbXBsZXRlT3BlcmF0aW9uKHJlc3VsdERhdGEpOwogfQogCit2b2lkIElE
QkNvbm5lY3Rpb25Ub1NlcnZlcjo6ZGVsZXRlSW5kZXgoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9w
ZXJhdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGlu
ZGV4TmFtZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCQ29ubmVjdGlvblRvU2VydmVyOjpk
ZWxldGVJbmRleCIpOworCisgICAgc2F2ZU9wZXJhdGlvbihvcGVyYXRpb24pOworCisgICAgbV9k
ZWxlZ2F0ZS0+ZGVsZXRlSW5kZXgoSURCUmVxdWVzdERhdGEob3BlcmF0aW9uKSwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBpbmRleE5hbWUpOworfQorCit2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZl
cjo6ZGlkRGVsZXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCQ29ubmVjdGlvblRvU2VydmVyOjpkaWREZWxldGVJbmRleCIp
OworICAgIGNvbXBsZXRlT3BlcmF0aW9uKHJlc3VsdERhdGEpOworfQorCiB2b2lkIElEQkNvbm5l
Y3Rpb25Ub1NlcnZlcjo6cHV0T3JBZGQoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwg
UmVmUHRyPElEQktleT4mIGtleSwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mIHZhbHVl
LCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2Rl
KQogewogICAgIExPRyhJbmRleGVkREIsICJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OnB1dE9yQWRk
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCQ29ubmVjdGlvblRvU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmgKaW5kZXggMWNkY2U3My4uMjA2MWQxMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNv
bm5lY3Rpb25Ub1NlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaApAQCAtNzQsNiArNzQsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjcmVhdGVJbmRleChUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQklu
ZGV4SW5mbyYpOwogICAgIHZvaWQgZGlkQ3JlYXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYp
OwogCisgICAgdm9pZCBkZWxldGVJbmRleChUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOworICAgIHZv
aWQgZGlkRGVsZXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYpOworCiAgICAgdm9pZCBwdXRP
ckFkZChUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIFJlZlB0cjxJREJLZXk+JiwgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4mLCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRl
TW9kZSk7CiAgICAgdm9pZCBkaWRQdXRPckFkZChjb25zdCBJREJSZXN1bHREYXRhJik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25u
ZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKaW5kZXggZjliOGM5Yy4u
MGI5MDkwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgK
QEAgLTYzLDYgKzYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1l
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVz
dERhdGEmLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJbmRleElu
Zm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IElEQlJlcXVlc3RE
YXRhJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0
YSYsIElEQktleSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IEluZGV4ZWREQjo6T2Jq
ZWN0U3RvcmVPdmVyd3JpdGVNb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGdldFJlY29yZChj
b25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZ2V0Q291bnQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCmluZGV4IDYxYjE3N2MuLmFlNmMw
ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJEYXRhYmFzZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCkBAIC0zNDEsNiArMzQxLDEzIEBAIHZvaWQgSURC
RGF0YWJhc2U6OmRpZENyZWF0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRleEluZm8mIGluZm8pCiAg
ICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7CiB9CiAKK3ZvaWQgSURCRGF0
YWJhc2U6OmRpZERlbGV0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRleEluZm8mIGluZm8pCit7Cisg
ICAgYXV0byogb2JqZWN0U3RvcmUgPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUo
aW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKG9iamVjdFN0b3JlKTsK
KyAgICBvYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgoaW5mby5uYW1lKCkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBJREJDbGllbnQKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1w
bC5oCmluZGV4IDJhMzA2ODAuLjZhOTE3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmgKQEAgLTg1LDYg
Kzg1LDcgQEAgcHVibGljOgogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgc2VydmVyQ29ubmVj
dGlvbigpIHsgcmV0dXJuIG1fc2VydmVyQ29ubmVjdGlvbi5nZXQoKTsgfQogCiAgICAgdm9pZCBk
aWRDcmVhdGVJbmRleEluZm8oY29uc3QgSURCSW5kZXhJbmZvJik7CisgICAgdm9pZCBkaWREZWxl
dGVJbmRleEluZm8oY29uc3QgSURCSW5kZXhJbmZvJik7CiAKIHByaXZhdGU6CiAgICAgSURCRGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIGNv
bnN0IElEQlJlc3VsdERhdGEmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJJbmRleEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1wbC5jcHAKaW5kZXggMjRjZWQ4Mi4uNWNiOTk4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QkluZGV4SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkluZGV4SW1wbC5jcHAKQEAgLTMyNyw2ICszMjcsMTEgQEAgUmVmUHRyPFdlYkNvcmU6
OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LAogICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZXF1ZXN0R2V0S2V5KGNvbnRleHQsICp0
aGlzLCByYW5nZSk7CiB9CiAKK3ZvaWQgSURCSW5kZXg6Om1hcmtBc0RlbGV0ZWQoKQoreworICAg
IG1fZGVsZXRlZCA9IHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmgKaW5kZXggMTcwNGRkYi4uNDdmOGY4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJJ
bmRleEltcGwuaApAQCAtNzgsNiArNzgsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgSURCSW5kZXhJ
bmZvJiBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CiAKICAgICBJREJPYmplY3RTdG9y
ZSYgbW9kZXJuT2JqZWN0U3RvcmUoKSB7IHJldHVybiBtX29iamVjdFN0b3JlLmdldCgpOyB9CisK
KyAgICB2b2lkIG1hcmtBc0RlbGV0ZWQoKTsKICAgICBib29sIGlzRGVsZXRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVsZXRlZDsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNw
cAppbmRleCBiZGY2YTQyLi41NDcwODUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcApA
QCAtNDQxLDYgKzQ0MSwxMSBAQCBSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXg+IElEQk9iamVjdFN0
b3JlOjppbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgRXhjZXB0aQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkp
IHsKKyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25D
b2RlOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZWZlcmVuY2VkSW5kZXhlcy5maW5kKGlu
ZGV4TmFtZSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fcmVmZXJlbmNlZEluZGV4ZXMuZW5kKCkp
CiAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7CkBAIC00NTcsOSArNDYyLDQxIEBAIFJl
ZlB0cjxXZWJDb3JlOjpJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmlu
ZyYgaW5kZXhOYW1lLCBFeGNlcHRpCiAgICAgcmV0dXJuIFdURjo6bW92ZShpbmRleCk7CiB9CiAK
LXZvaWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlv
bkNvZGUmKQordm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXggJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBl
YyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNvZGU6OkludmFsaWRT
dGF0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV90cmFuc2Fj
dGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkpIHsKKyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNl
cHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpJbnZhbGlkU3RhdGVFcnJvcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsK
KyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2Rl
OjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFtX2luZm8uaGFzSW5kZXgobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGF1dG8qIGluZm8gPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nSW5kZXgobmFtZSk7CisgICAgQVNT
RVJUKGluZm8pOworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuZGlkRGVsZXRlSW5kZXhJ
bmZvKCppbmZvKTsKKworICAgIG1faW5mby5kZWxldGVJbmRleChuYW1lKTsKKworICAgIGF1dG8g
aW5kZXggPSBtX3JlZmVyZW5jZWRJbmRleGVzLnRha2UobmFtZSk7CisgICAgaWYgKGluZGV4KQor
ICAgICAgICBpbmRleC0+bWFya0FzRGVsZXRlZCgpOworICAgICAgICAKKyAgICBtX3RyYW5zYWN0
aW9uLT5kZWxldGVJbmRleChtX2luZm8uaWRlbnRpZmllcigpLCBuYW1lKTsKIH0KIAogUmVmUHRy
PFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9u
SW1wbC5jcHAKaW5kZXggNzJmZDJmMS4uOWJjYjUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1w
bC5jcHAKQEAgLTc1MSw2ICs3NTEsMzAgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRl
T2JqZWN0U3RvcmVPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXQKICAgICBB
U1NFUlRfVU5VU0VEKHJlc3VsdERhdGEsIHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5
cGU6OkRlbGV0ZU9iamVjdFN0b3JlU3VjY2Vzcyk7CiB9CiAKK3ZvaWQgSURCVHJhbnNhY3Rpb246
OmRlbGV0ZUluZGV4KHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBpbmRleE5hbWUpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkZWxl
dGVJbmRleCIpOworCisgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKKworICAgIGF1dG8g
b3BlcmF0aW9uID0gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsICZJREJUcmFuc2Fj
dGlvbjo6ZGlkRGVsZXRlSW5kZXhPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpkZWxldGVJbmRl
eE9uU2VydmVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSk7CisgICAgc2NoZWR1
bGVPcGVyYXRpb24oV1RGOjptb3ZlKG9wZXJhdGlvbikpOworfQorCit2b2lkIElEQlRyYW5zYWN0
aW9uOjpkZWxldGVJbmRleE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24s
IGNvbnN0IHVpbnQ2NF90JiBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5k
ZXhOYW1lKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5k
ZXhPblNlcnZlciIpOworICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CisKKyAgICBzZXJ2
ZXJDb25uZWN0aW9uKCkuZGVsZXRlSW5kZXgob3BlcmF0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGluZGV4TmFtZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZUluZGV4
T25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZUluZGV4T25TZXJ2ZXIiKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHJlc3VsdERhdGEsIHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5
cGU6OkRlbGV0ZUluZGV4U3VjY2Vzcyk7Cit9CisKIHZvaWQgSURCVHJhbnNhY3Rpb246Om9wZXJh
dGlvbkRpZENvbXBsZXRlKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCiB7CiAgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAuZ2V0KG9wZXJhdGlvbi5pZGVudGlmaWVy
KCkpID09ICZvcGVyYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCmluZGV4IDVjM2Y2NmUu
LjM3OWEzOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJUcmFuc2FjdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTEwOSw2ICsxMDksNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBpdGVyYXRlQ3Vyc29yKElEQkN1cnNvciYsIGNvbnN0IElEQktleURh
dGEmLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIAogICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUo
Y29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpOworICAgIHZvaWQgZGVsZXRlSW5kZXgodWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7CiAK
ICAgICB2b2lkIGFkZFJlcXVlc3QoSURCUmVxdWVzdCYpOwogICAgIHZvaWQgcmVtb3ZlUmVxdWVz
dChJREJSZXF1ZXN0Jik7CkBAIC0xNjUsNiArMTY2LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRl
bGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBTdHJp
bmcmIG9iamVjdFN0b3JlTmFtZSk7CiAgICAgdm9pZCBkaWREZWxldGVPYmplY3RTdG9yZU9uU2Vy
dmVyKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKIAorICAgIHZvaWQgZGVsZXRlSW5kZXhPblNlcnZl
cihUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IHVpbnQ2NF90JiBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKTsKKyAgICB2b2lkIGRpZERlbGV0ZUluZGV4
T25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYpOworCiAgICAgUmVmPElEQlJlcXVlc3Q+IGRv
UmVxdWVzdE9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFJlZjxJREJDdXJzb3I+
JiYpOwogICAgIHZvaWQgb3BlbkN1cnNvck9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwg
Y29uc3QgSURCQ3Vyc29ySW5mbyYpOwogICAgIHZvaWQgZGlkT3BlbkN1cnNvck9uU2VydmVyKElE
QlJlcXVlc3QmLCBjb25zdCBJREJSZXN1bHREYXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlv
bi5oCmluZGV4IDU5NTFmN2YuLmVhOWRjZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5o
CkBAIC0xMzgsNiArMTM4LDE4IEBAIFJlZlB0cjxUcmFuc2FjdGlvbk9wZXJhdGlvbj4gY3JlYXRl
VHJhbnNhY3Rpb25PcGVyYXRpb24oCiAgICAgcmV0dXJuIGFkb3B0UmVmKG9wZXJhdGlvbik7CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMiwgdHlw
ZW5hbWUgUDI+CitSZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+IGNyZWF0ZVRyYW5zYWN0aW9u
T3BlcmF0aW9uKAorICAgIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwKKyAgICB2b2lkIChJ
REJUcmFuc2FjdGlvbjo6KmNvbXBsZXRlKShjb25zdCBJREJSZXN1bHREYXRhJiksCisgICAgdm9p
ZCAoSURCVHJhbnNhY3Rpb246OipwZXJmb3JtKShUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIE1QMSwg
TVAyKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVy
MikKK3sKKyAgICBhdXRvIG9wZXJhdGlvbiA9IG5ldyBUcmFuc2FjdGlvbk9wZXJhdGlvbkltcGw8
TVAxLCBNUDI+KHRyYW5zYWN0aW9uLCBjb21wbGV0ZSwgcGVyZm9ybSwgcGFyYW1ldGVyMSwgcGFy
YW1ldGVyMik7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9wZXJhdGlvbik7Cit9CisKIHRlbXBsYXRl
PHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDE+CiBSZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+
IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKAogICAgIElEQlRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJCYWNraW5nU3RvcmUuaAppbmRleCBlZmRjNmUyLi5mZjZlYWE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3Jl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tp
bmdTdG9yZS5oCkBAIC02NCw2ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIElEQkVycm9y
IGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkgPSAwOwogICAgIHZp
cnR1YWwgSURCRXJyb3IgY2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
KSA9IDA7CiAgICAgdmlydHVhbCBJREJFcnJvciBjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJikg
PSAwOworICAgIHZpcnR1YWwgSURCRXJyb3IgZGVsZXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpID0gMDsKICAgICB2aXJ0dWFsIElEQkVy
cm9yIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgSURCS2V5RGF0YSYsIGJvb2wmIGtleUV4aXN0cykgPSAwOwogICAgIHZpcnR1YWwgSURCRXJy
b3IgZGVsZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJikgPSAwOwogICAgIHZpcnR1YWwgSURCRXJyb3IgYWRkUmVjb3JkKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1
ZmZlciYgdmFsdWUpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAKaW5kZXgg
MDJlMWQxYi4uZGEzYmQwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAKQEAg
LTgzLDYgKzgzLDExIEBAIHZvaWQgSURCQ29ubmVjdGlvblRvQ2xpZW50OjpkaWRDcmVhdGVJbmRl
eChjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHQpCiAgICAgbV9kZWxlZ2F0ZS0+ZGlkQ3JlYXRl
SW5kZXgocmVzdWx0KTsKIH0KIAordm9pZCBJREJDb25uZWN0aW9uVG9DbGllbnQ6OmRpZERlbGV0
ZUluZGV4KGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdCkKK3sKKyAgICBtX2RlbGVnYXRlLT5k
aWREZWxldGVJbmRleChyZXN1bHQpOworfQorCiB2b2lkIElEQkNvbm5lY3Rpb25Ub0NsaWVudDo6
ZGlkUHV0T3JBZGQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0KQogewogICAgIG1fZGVsZWdh
dGUtPmRpZFB1dE9yQWRkKHJlc3VsdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmgKaW5k
ZXggZWY4ODBjNi4uNWVlMmIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuaApAQCAt
NTYsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWREZWxldGVPYmplY3RTdG9yZShjb25z
dCBJREJSZXN1bHREYXRhJik7CiAgICAgdm9pZCBkaWRDbGVhck9iamVjdFN0b3JlKGNvbnN0IElE
QlJlc3VsdERhdGEmKTsKICAgICB2b2lkIGRpZENyZWF0ZUluZGV4KGNvbnN0IElEQlJlc3VsdERh
dGEmKTsKKyAgICB2b2lkIGRpZERlbGV0ZUluZGV4KGNvbnN0IElEQlJlc3VsdERhdGEmKTsKICAg
ICB2b2lkIGRpZFB1dE9yQWRkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKICAgICB2b2lkIGRpZEdl
dFJlY29yZChjb25zdCBJREJSZXN1bHREYXRhJik7CiAgICAgdm9pZCBkaWRHZXRDb3VudChjb25z
dCBJREJSZXN1bHREYXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnREZWxl
Z2F0ZS5oCmluZGV4IDNhOGYxNmUuLmM3MDYyMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnREZWxlZ2F0ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0
aW9uVG9DbGllbnREZWxlZ2F0ZS5oCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzdWx0RGF0YSYpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRh
JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVJbmRleChjb25zdCBJREJSZXN1bHRE
YXRhJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWREZWxldGVJbmRleChjb25zdCBJREJSZXN1
bHREYXRhJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRQdXRPckFkZChjb25zdCBJREJSZXN1
bHREYXRhJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRSZWNvcmQoY29uc3QgSURCUmVz
dWx0RGF0YSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0Q291bnQoY29uc3QgSURCUmVz
dWx0RGF0YSYpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXggYzYzNzhlZS4uZGJkYmQ5OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5j
cHAKQEAgLTIwMyw2ICsyMDMsMTggQEAgdm9pZCBJREJTZXJ2ZXI6OmNyZWF0ZUluZGV4KGNvbnN0
IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSW5kZXhJbmYKICAgICB0cmFu
c2FjdGlvbi0+Y3JlYXRlSW5kZXgocmVxdWVzdERhdGEsIGluZm8pOwogfQogCit2b2lkIElEQlNl
cnZlcjo6ZGVsZXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQorewor
ICAgIExPRyhJbmRleGVkREIsICJJREJTZXJ2ZXI6OmRlbGV0ZUluZGV4Iik7CisKKyAgICBhdXRv
IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHJlcXVlc3REYXRhLnRyYW5zYWN0aW9u
SWRlbnRpZmllcigpKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPmlzVmVyc2lvbkNoYW5nZSgpKTsKKyAgICB0cmFuc2Fj
dGlvbi0+ZGVsZXRlSW5kZXgocmVxdWVzdERhdGEsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5k
ZXhOYW1lKTsKK30KKwogdm9pZCBJREJTZXJ2ZXI6OnB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgVGhyZWFk
U2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0
ZU1vZGUgb3ZlcndyaXRlTW9kZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCU2VydmVyOjpw
dXRPckFkZCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQlNlcnZlci5oCmluZGV4IGZhNTg2YzAuLjk0MGZiOTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTY0LDYg
KzY0LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVx
dWVzdERhdGEmLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSk7CiAgICAgdm9pZCBjbGVh
ck9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKTsKICAgICB2b2lkIGNyZWF0ZUluZGV4KGNvbnN0IElEQlJlcXVlc3REYXRhJiwg
Y29uc3QgSURCSW5kZXhJbmZvJik7CisgICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBJREJSZXF1
ZXN0RGF0YSYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBp
bmRleE5hbWUpOwogICAgIHZvaWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25z
dCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwgSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOwogICAgIHZvaWQgZ2V0UmVjb3JkKGNv
bnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CiAgICAgdm9pZCBn
ZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9y
eUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5jcHAKaW5kZXggNDhh
OTI3Mi4uYmUzODA3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24uY3BwCkBAIC04Niw2ICs4NiwxNiBAQCB2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uOjphZGRFeGlzdGluZ0luZGV4KE1lbW9yeUluZGV4JiBpbmRleCkKICAgICBtX2luZGV4
ZXMuYWRkKCZpbmRleCk7CiB9CiAKK3ZvaWQgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246
OmluZGV4RGVsZXRlZChzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5SW5kZXg+IGluZGV4KQoreworICAg
IEFTU0VSVChpbmRleCk7CisgICAgbV9pbmRleGVzLnJlbW92ZShpbmRleC5nZXQoKSk7CisKKyAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVsZXRlZEluZGV4ZXMuYWRkKGluZGV4LT5pbmZvKCkubmFt
ZSgpLCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXVEY6Om1vdmUoaW5kZXgpOworfQorCiB2b2lkIE1l
bW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjphZGRFeGlzdGluZ09iamVjdFN0b3JlKE1lbW9y
eU9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUiKTsKQEAgLTE3
MCw3ICsxODAsNyBAQCB2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjphYm9ydCgp
CiAKICAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2hhbmdlKG1faXNBYm9ydGluZywgdHJ1ZSk7
CiAKLSAgICAvLyBUaGlzIGxvb3AgbW92ZXMgdGhlIHVuZGVybHlpbmcgdW5pcXVlX3B0cnMgZnJv
bSBvdXQgb2YgdGhlIG1fZGVsZXRlT2JqZWN0U3RvcmVzIG1hcCwKKyAgICAvLyBUaGlzIGxvb3Ag
bW92ZXMgdGhlIHVuZGVybHlpbmcgdW5pcXVlX3B0cnMgZnJvbSBvdXQgb2YgdGhlIG1fZGVsZXRl
ZE9iamVjdFN0b3JlcyBtYXAsCiAgICAgLy8gYnV0IHRoZSBlbnRyaWVzIGluIHRoZSBtYXAgc3Rp
bGwgcmVtYWluLgogICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX2RlbGV0ZWRPYmplY3RT
dG9yZXMudmFsdWVzKCkpIHsKICAgICAgICAgTWVtb3J5T2JqZWN0U3RvcmUqIHJhd09iamVjdFN0
b3JlID0gb2JqZWN0U3RvcmUuZ2V0KCk7CkBAIC0yMTQsNiArMjI0LDE2IEBAIHZvaWQgTWVtb3J5
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFib3J0KCkKICAgICAgICAgfQogICAgIH0KIAorICAg
IC8vIFRoaXMgbG9vcCBtb3ZlcyB0aGUgdW5kZXJseWluZyB1bmlxdWVfcHRycyBmcm9tIG91dCBv
ZiB0aGUgbV9kZWxldGVkSW5kZXhlcyBtYXAsCisgICAgLy8gYnV0IHRoZSBlbnRyaWVzIGluIHRo
ZSBtYXAgc3RpbGwgcmVtYWluLgorICAgIGZvciAoYXV0byYgaW5kZXggOiBtX2RlbGV0ZWRJbmRl
eGVzLnZhbHVlcygpKSB7CisgICAgICAgIE1lbW9yeU9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSA9
IGluZGV4LT5vYmplY3RTdG9yZSgpOworICAgICAgICBvYmplY3RTdG9yZS5tYXliZVJlc3RvcmVE
ZWxldGVkSW5kZXgoV1RGOjptb3ZlKGluZGV4KSk7CisgICAgfQorCisgICAgLy8gVGhpcyBjbGVh
cnMgdGhlIGVudHJpZXMgZnJvbSB0aGUgbWFwLgorICAgIG1fZGVsZXRlZEluZGV4ZXMuY2xlYXIo
KTsKKwogICAgIGZpbmlzaCgpOwogCiAgICAgZm9yIChhdXRvIG9iamVjdFN0b3JlIDogbV92ZXJz
aW9uQ2hhbmdlQWRkZWRPYmplY3RTdG9yZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbi5oCmluZGV4IGEyOGMzNjIuLjRjMmNmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9N
ZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5oCkBAIC02OCw2ICs2OCw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgYWRkTmV3SW5kZXgoTWVtb3J5SW5kZXgmKTsKICAgICB2b2lkIGFkZEV4aXN0
aW5nSW5kZXgoTWVtb3J5SW5kZXgmKTsKKyAgICB2b2lkIGluZGV4RGVsZXRlZChzdGQ6OnVuaXF1
ZV9wdHI8TWVtb3J5SW5kZXg+KTsKIAogICAgIHZvaWQgYWJvcnQoKTsKICAgICB2b2lkIGNvbW1p
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcAppbmRleCA5Y2I5OGM2Li5kODYz
MmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcApAQCAtMjAxLDYgKzIwMSwy
MSBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgIHJldHVybiBvYmplY3RTdG9yZS0+Y3Jl
YXRlSW5kZXgoKnJhd1RyYW5zYWN0aW9uLCBpbmZvKTsKIH0KIAorSURCRXJyb3IgTWVtb3J5SURC
QmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFj
a2luZ1N0b3JlOjpkZWxldGVJbmRleCIpOworCisgICAgYXV0byByYXdUcmFuc2FjdGlvbiA9IG1f
dHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOworICAgIEFTU0VSVChyYXdU
cmFuc2FjdGlvbik7CisgICAgQVNTRVJUKHJhd1RyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2Uo
KSk7CisKKyAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fb2JqZWN0U3RvcmVzQnlJZGVudGlmaWVy
LmdldChvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIGlmICghb2JqZWN0U3RvcmUpCisgICAg
ICAgIHJldHVybiBJREJFcnJvcihJREJFeGNlcHRpb25Db2RlOjpDb25zdHJhaW50RXJyb3IpOwor
CisgICAgcmV0dXJuIG9iamVjdFN0b3JlLT5kZWxldGVJbmRleCgqcmF3VHJhbnNhY3Rpb24sIGlu
ZGV4TmFtZSk7Cit9CisKIHZvaWQgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZW1vdmVPYmplY3RT
dG9yZUZvclZlcnNpb25DaGFuZ2VBYm9ydChNZW1vcnlPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUp
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cmVtb3ZlT2Jq
ZWN0U3RvcmVGb3JWZXJzaW9uQ2hhbmdlQWJvcnQiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3Rv
cmUuaAppbmRleCBkMTdjN2MzLi4wZWM1NzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9y
ZS5oCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIElEQkVycm9yIGRlbGV0
ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkgb3ZlcnJpZGUgZmluYWw7CiAg
ICAgdmlydHVhbCBJREJFcnJvciBjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgSURCRXJyb3IgY3JlYXRlSW5kZXgo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0
IElEQkluZGV4SW5mbyYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgSURCRXJyb3IgZGVs
ZXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5h
bWUpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgSURCRXJyb3Iga2V5RXhpc3RzSW5PYmpl
Y3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiwgYm9v
bCYga2V5RXhpc3RzKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGRlbGV0
ZVJhbmdlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYp
IG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgSURCRXJyb3IgYWRkUmVjb3JkKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0
YUJ1ZmZlciYgdmFsdWUpIG92ZXJyaWRlIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5jcHAKaW5kZXggNTE2NjUx
YS4uZjgwZDkxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL01lbW9yeUluZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5SW5kZXguY3BwCkBAIC05Myw2ICs5MywxNCBAQCB2b2lkIE1lbW9y
eUluZGV4Ojpub3RpZnlDdXJzb3JzT2ZBbGxSZWNvcmRzQ2hhbmdlZCgpCiAgICAgQVNTRVJUKG1f
Y2xlYW5DdXJzb3JzLmlzRW1wdHkoKSk7CiB9CiAKK3ZvaWQgTWVtb3J5SW5kZXg6OmNsZWFySW5k
ZXhWYWx1ZVN0b3JlKCkKK3sKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZS53cml0ZVRyYW5zYWN0
aW9uKCkpOworICAgIEFTU0VSVChtX29iamVjdFN0b3JlLndyaXRlVHJhbnNhY3Rpb24oKS0+aXNB
Ym9ydGluZygpKTsKKworICAgIG1fcmVjb3JkcyA9IG51bGxwdHI7Cit9CisKIHZvaWQgTWVtb3J5
SW5kZXg6OnJlcGxhY2VJbmRleFZhbHVlU3RvcmUoc3RkOjp1bmlxdWVfcHRyPEluZGV4VmFsdWVT
dG9yZT4mJiB2YWx1ZVN0b3JlKQogewogICAgIEFTU0VSVChtX29iamVjdFN0b3JlLndyaXRlVHJh
bnNhY3Rpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvTWVtb3J5SW5kZXguaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlJbmRleC5oCmluZGV4IGE4OTI0YjEuLmYwNDViY2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5o
CkBAIC03MSw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZVJlY29yZChjb25zdCBJ
REJLZXlEYXRhJiwgY29uc3QgSW5kZXhLZXkmKTsKIAogICAgIHZvaWQgb2JqZWN0U3RvcmVDbGVh
cmVkKCk7CisgICAgdm9pZCBjbGVhckluZGV4VmFsdWVTdG9yZSgpOwogICAgIHZvaWQgcmVwbGFj
ZUluZGV4VmFsdWVTdG9yZShzdGQ6OnVuaXF1ZV9wdHI8SW5kZXhWYWx1ZVN0b3JlPiYmKTsKIAog
ICAgIE1lbW9yeUluZGV4Q3Vyc29yKiBtYXliZU9wZW5DdXJzb3IoY29uc3QgSURCQ3Vyc29ySW5m
byYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L01lbW9yeU9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKaW5kZXggZDVkYTUzZC4uNWRmMTIyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9i
amVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCkBAIC0xMDIsNiArMTAyLDU3IEBAIElEQkVycm9yIE1l
bW9yeU9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlv
biYgdHJhbnNhY3RpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAordm9pZCBNZW1vcnlPYmplY3RTdG9y
ZTo6bWF5YmVSZXN0b3JlRGVsZXRlZEluZGV4KHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlJbmRleD4g
aW5kZXgpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeU9iamVjdFN0b3JlOjptYXliZVJl
c3RvcmVEZWxldGVkSW5kZXgiKTsKKworICAgIGlmIChtX2luZm8uaGFzSW5kZXgoaW5kZXgtPmlu
Zm8oKS5uYW1lKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luZm8uYWRkRXhpc3RpbmdJ
bmRleChpbmRleC0+aW5mbygpKTsKKworICAgIEFTU0VSVCghbV9pbmRleGVzQnlJZGVudGlmaWVy
LmNvbnRhaW5zKGluZGV4LT5pbmZvKCkuaWRlbnRpZmllcigpKSk7CisgICAgaW5kZXgtPmNsZWFy
SW5kZXhWYWx1ZVN0b3JlKCk7CisgICAgYXV0byBlcnJvciA9IHBvcHVsYXRlSW5kZXhXaXRoRXhp
c3RpbmdSZWNvcmRzKCppbmRleCk7CisKKyAgICAvLyBTaW5jZSB0aGlzIGluZGV4IHdhcyBpbnN0
YWxsZWQgaW4gdGhlIG9iamVjdCBzdG9yZSBiZWZvcmUgdGhpcyB0cmFuc2FjdGlvbiBzdGFydGVk
LAorICAgIC8vIGFzc3VtaW5nIHRoaW5ncyB3ZXJlIGluIGEgdmFsaWQgc3RhdGUgdGhlbiwgd2Ug
c2hvdWxkIGRlZmluaXRlbHkgYmUgYWJsZSB0byBzdWNjZXNzZnVsbHkKKyAgICAvLyByZXBvcHVs
YXRlIHRoZSBpbmRleCB3aXRoIHRoZSBvYmplY3Qgc3RvcmUncyBwcmUtdHJhbnNhY3Rpb24gcmVj
b3Jkcy4KKyAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCBlcnJvci5pc051bGwoKSk7CisKKyAgICBy
ZWdpc3RlckluZGV4KFdURjo6bW92ZShpbmRleCkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8TWVt
b3J5SW5kZXg+IE1lbW9yeU9iamVjdFN0b3JlOjp0YWtlSW5kZXhCeU5hbWUoY29uc3QgU3RyaW5n
JiBuYW1lKQoreworICAgIGF1dG8gcmF3SW5kZXggPSBtX2luZGV4ZXNCeU5hbWUudGFrZShuYW1l
KTsKKyAgICBpZiAoIXJhd0luZGV4KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1
dG8gaW5kZXggPSBtX2luZGV4ZXNCeUlkZW50aWZpZXIudGFrZShyYXdJbmRleC0+aW5mbygpLmlk
ZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKGluZGV4KTsKKworICAgIHJldHVybiBpbmRleDsKK30K
KworSURCRXJyb3IgTWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KE1lbW9yeUJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpCit7
CisgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeU9iamVjdFN0b3JlOjpkZWxldGVJbmRleCIpOwor
CisgICAgaWYgKCFtX3dyaXRlVHJhbnNhY3Rpb24gfHwgIW1fd3JpdGVUcmFuc2FjdGlvbi0+aXNW
ZXJzaW9uQ2hhbmdlKCkgfHwgbV93cml0ZVRyYW5zYWN0aW9uICE9ICZ0cmFuc2FjdGlvbikKKyAg
ICAgICAgcmV0dXJuIElEQkVycm9yKElEQkV4Y2VwdGlvbkNvZGU6OkNvbnN0cmFpbnRFcnJvcik7
CisgICAgCisgICAgYXV0byBpbmRleCA9IHRha2VJbmRleEJ5TmFtZShpbmRleE5hbWUpOworICAg
IEFTU0VSVChpbmRleCk7CisgICAgaWYgKCFpbmRleCkKKyAgICAgICAgcmV0dXJuIElEQkVycm9y
KElEQkV4Y2VwdGlvbkNvZGU6OkNvbnN0cmFpbnRFcnJvcik7CisKKyAgICBtX2luZm8uZGVsZXRl
SW5kZXgoaW5kZXhOYW1lKTsKKyAgICB0cmFuc2FjdGlvbi5pbmRleERlbGV0ZWQoV1RGOjptb3Zl
KGluZGV4KSk7CisKKyAgICByZXR1cm4geyB9OworfQorCiBib29sIE1lbW9yeU9iamVjdFN0b3Jl
Ojpjb250YWluc1JlY29yZChjb25zdCBJREJLZXlEYXRhJiBrZXkpCiB7CiAgICAgaWYgKCFtX2tl
eVZhbHVlU3RvcmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5oCmluZGV4IGQ1OGI3NzIuLmI5OTQ2NjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1v
cnlPYmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9NZW1vcnlPYmplY3RTdG9yZS5oCkBAIC02Niw2ICs2Niw4IEBAIHB1YmxpYzoKICAgICBN
ZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiogd3JpdGVUcmFuc2FjdGlvbigpIHsgcmV0dXJu
IG1fd3JpdGVUcmFuc2FjdGlvbjsgfQogCiAgICAgSURCRXJyb3IgY3JlYXRlSW5kZXgoTWVtb3J5
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJJbmRleEluZm8mKTsKKyAgICBJREJF
cnJvciBkZWxldGVJbmRleChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYsIGNvbnN0IFN0
cmluZyYgaW5kZXhOYW1lKTsKKyAgICB2b2lkIHJlZ2lzdGVySW5kZXgoc3RkOjp1bmlxdWVfcHRy
PE1lbW9yeUluZGV4PiYmKTsKIAogICAgIGJvb2wgY29udGFpbnNSZWNvcmQoY29uc3QgSURCS2V5
RGF0YSYpOwogICAgIHZvaWQgZGVsZXRlUmVjb3JkKGNvbnN0IElEQktleURhdGEmKTsKQEAgLTkx
LDYgKzkzLDggQEAgcHVibGljOgogCiAgICAgTWVtb3J5SW5kZXgqIGluZGV4Rm9ySWRlbnRpZmll
cih1aW50NjRfdCk7CiAKKyAgICB2b2lkIG1heWJlUmVzdG9yZURlbGV0ZWRJbmRleChzdGQ6OnVu
aXF1ZV9wdHI8TWVtb3J5SW5kZXg+KTsKKwogcHJpdmF0ZToKICAgICBNZW1vcnlPYmplY3RTdG9y
ZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKIApAQCAtMTAzLDYgKzEwNyw4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCB1cGRhdGVDdXJzb3JzRm9yUHV0UmVjb3JkKHN0ZDo6c2V0PElEQktleURh
dGE+OjppdGVyYXRvcik7CiAgICAgdm9pZCB1cGRhdGVDdXJzb3JzRm9yRGVsZXRlUmVjb3JkKGNv
bnN0IElEQktleURhdGEmKTsKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlJbmRleD4gdGFr
ZUluZGV4QnlOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSk7CisKICAgICBJREJPYmplY3RTdG9yZUlu
Zm8gbV9pbmZvOwogCiAgICAgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24qIG1fd3JpdGVU
cmFuc2FjdGlvbiB7IG51bGxwdHIgfTsKQEAgLTExMSw3ICsxMTcsNiBAQCBwcml2YXRlOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxLZXlWYWx1ZU1hcD4gbV9rZXlWYWx1ZVN0b3JlOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxzdGQ6OnNldDxJREJLZXlEYXRhPj4gbV9vcmRlcmVkS2V5czsKIAotICAgIHZv
aWQgcmVnaXN0ZXJJbmRleChzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5SW5kZXg+JiYpOwogICAgIHZv
aWQgdW5yZWdpc3RlckluZGV4KE1lbW9yeUluZGV4Jik7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwg
c3RkOjp1bmlxdWVfcHRyPE1lbW9yeUluZGV4Pj4gbV9pbmRleGVzQnlJZGVudGlmaWVyOwogICAg
IEhhc2hNYXA8U3RyaW5nLCBNZW1vcnlJbmRleCo+IG1faW5kZXhlc0J5TmFtZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRh
YmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuY3BwCmluZGV4IDc5MzE4ZDIuLmIwNmRjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmNwcApAQCAtMzczLDYgKzM3Myw0MSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAog
ICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQog
Cit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIGluZGV4TmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVl
SURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4Iik7CisKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0g
c3RvcmVDYWxsYmFjayhjYWxsYmFjayk7CisgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURl
bGV0ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSkpOworfQorCit2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZUluZGV4Iik7CisKKyAgICBBU1NFUlQobV9iYWNr
aW5nU3RvcmUpOworICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhOYW1lKTsKKworICAgIElEQkVy
cm9yIGVycm9yOworICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZUlu
ZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGlu
ZGV4TmFtZSkpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRl
SW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3Is
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAiKG1h
aW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlSW5kZXgiKTsKKworICAgIGlm
IChlcnJvci5pc051bGwoKSkgeworICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2Rh
dGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlm
aWVyKTsKKyAgICAgICAgaWYgKG9iamVjdFN0b3JlSW5mbykKKyAgICAgICAgICAgIG9iamVjdFN0
b3JlSW5mby0+ZGVsZXRlSW5kZXgoaW5kZXhOYW1lKTsKKyAgICB9CisKKyAgICBwZXJmb3JtRXJy
b3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKK30KKwogdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBj
b25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFs
dWVEYXRhLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2Rl
LCBLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggYWNiNDcxZi4uNTkxYmE3MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlLmgKQEAgLTc5LDYgKzc5LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IFN0cmluZyYg
b2JqZWN0U3RvcmVOYW1lLCBFcnJvckNhbGxiYWNrKTsKICAgICB2b2lkIGNsZWFyT2JqZWN0U3Rv
cmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgRXJyb3JDYWxsYmFjayk7CiAgICAgdm9pZCBjcmVhdGVJbmRleChVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgRXJyb3JDYWxsYmFjayk7
CisgICAgdm9pZCBkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgRXJy
b3JDYWxsYmFjayk7CiAgICAgdm9pZCBwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNv
bnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhLCBJ
bmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrKTsKICAg
ICB2b2lkIGdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKICAgICB2b2lkIGdldENvdW50KGNvbnN0IElEQlJl
cXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgQ291bnRDYWxsYmFjayk7CkBAIC0x
MTQsNiArMTE1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBlcmZvcm1EZWxldGVPYmplY3RTdG9y
ZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSk7
CiAgICAgdm9pZCBwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIHZvaWQgcGVyZm9ybUNyZWF0
ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYpOworICAg
IHZvaWQgcGVyZm9ybURlbGV0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOwogICAgIHZv
aWQgcGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRh
QnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsK
ICAgICB2b2lkIHBlcmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKICAgICB2
b2lkIHBlcmZvcm1HZXRJbmRleFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhl
ZERCOjpJbmRleFJlY29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwpAQCAtMTI5LDYg
KzEzMSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0U3RvcmVOYW1lKTsKICAgICB2b2lkIGRpZFBlcmZvcm1DbGVhck9iamVjdFN0b3Jl
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lk
IGRpZFBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQkVycm9yJiwgY29uc3QgSURCSW5kZXhJbmZvJik7CisgICAgdm9pZCBkaWRQZXJmb3JtRGVs
ZXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOwog
ICAgIHZvaWQgZGlkUGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJLZXlEYXRhJik7CiAgICAgdm9pZCBkaWRQZXJmb3Jt
R2V0UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCBj
b25zdCBJREJHZXRSZXN1bHQmKTsKICAgICB2b2lkIGRpZFBlcmZvcm1HZXRDb3VudCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcAppbmRleCBkZmU4YTAwLi5jYzhh
MTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcApAQCAt
MTYwLDYgKzE2MCwxMyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkQ3Jl
YXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YQogICAgIG1fY29ubmVjdGlv
blRvQ2xpZW50LmRpZENyZWF0ZUluZGV4KHJlc3VsdERhdGEpOwogfQogCit2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkRGVsZXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYg
cmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uOjpkaWREZWxldGVJbmRleCIpOworCisgICAgbV9jb25uZWN0aW9uVG9DbGllbnQuZGlk
RGVsZXRlSW5kZXgocmVzdWx0RGF0YSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uLmgKaW5kZXggNzMxNDA4ZC4uYzU0NTJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZUNvbm5lY3Rpb24uaApAQCAtNzAsNiArNzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
aWREZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJik7CiAgICAgdm9pZCBkaWRD
bGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKICAgICB2b2lkIGRpZENyZWF0
ZUluZGV4KGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKyAgICB2b2lkIGRpZERlbGV0ZUluZGV4KGNv
bnN0IElEQlJlc3VsdERhdGEmKTsKIAogcHJpdmF0ZToKICAgICBVbmlxdWVJREJEYXRhYmFzZUNv
bm5lY3Rpb24oVW5pcXVlSURCRGF0YWJhc2UmLCBJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAppbmRleCBlZmZiMzhj
Li5iMGI1MWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24u
Y3BwCkBAIC0xNjMsNiArMTYzLDIzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bjo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhCiAgICAgfSk7
CiB9CiAKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXgoY29u
c3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQoreworICAgIExPRyhJbmRleGVkREIsICJV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVJbmRleCIpOworCisgICAgQVNTRVJU
KGlzVmVyc2lvbkNoYW5nZSgpKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRp
ZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKKworICAgIFJl
ZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBzZWxmKHRoaXMpOworICAgIG1fZGF0
YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmRlbGV0ZUluZGV4KCp0aGlzLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGluZGV4TmFtZSwgW3RoaXMsIHNlbGYsIHJlcXVlc3REYXRhXShjb25zdCBJ
REJFcnJvciYgZXJyb3IpIHsKKyAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4IChjYWxsYmFjaykiKTsKKyAgICAgICAgaWYgKGVy
cm9yLmlzTnVsbCgpKQorICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZERlbGV0
ZUluZGV4KElEQlJlc3VsdERhdGE6OmRlbGV0ZUluZGV4U3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1
ZXN0SWRlbnRpZmllcigpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kaWREZWxldGVJbmRleChJREJSZXN1bHREYXRhOjplcnJvcihyZXF1ZXN0RGF0
YS5yZXF1ZXN0SWRlbnRpZmllcigpLCBlcnJvcikpOworICAgIH0pOworfQorCiB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgVGhyZWFkU2FmZURh
dGFCdWZmZXImIHZhbHVlRGF0YSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUg
b3ZlcndyaXRlTW9kZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6cHV0T3JBZGQiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbi5oCmluZGV4IGUxNzM2ZDYuLjgwMzkyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24uaApAQCAtNzAsNiArNzAsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IFN0cmluZyYg
b2JqZWN0U3RvcmVOYW1lKTsKICAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVx
dWVzdERhdGEmLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY3Jl
YXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJbmRleEluZm8mKTsKKyAg
ICB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IElEQlJlcXVlc3REYXRhJiwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7CiAgICAgdm9pZCBwdXRP
ckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJl
YWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zlcndy
aXRlTW9kZSk7CiAgICAgdm9pZCBnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25z
dCBJREJLZXlSYW5nZURhdGEmKTsKICAgICB2b2lkIGdldENvdW50KGNvbnN0IElEQlJlcXVlc3RE
YXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCmluZGV4
IGNiMTY5ZjAuLmFlNDAyMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCkBAIC0xMzUsNiArMTM1
LDE3IEBAIHZvaWQgSURCRGF0YWJhc2VJbmZvOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJp
bmcmIG9iamVjdFN0b3JlTmFtZSkKICAgICBtX29iamVjdFN0b3JlTWFwLnJlbW92ZShpbmZvLT5p
ZGVudGlmaWVyKCkpOwogfQogCisjaWZuZGVmIE5ERUJVRworU3RyaW5nIElEQkRhdGFiYXNlSW5m
bzo6bG9nZ2luZ1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nIHRvcCA9IG1ha2VTdHJpbmco
IkRhdGFiYXNlOiAiLCBtX25hbWUsICIgdmVyc2lvbiAiLCBTdHJpbmc6Om51bWJlcihtX3ZlcnNp
b24pLCAiXG4iKTsKKyAgICBmb3IgKGF1dG8gb2JqZWN0U3RvcmUgOiBtX29iamVjdFN0b3JlTWFw
LnZhbHVlcygpKQorICAgICAgICB0b3AuYXBwZW5kKG1ha2VTdHJpbmcob2JqZWN0U3RvcmUubG9n
Z2luZ1N0cmluZygxKSwgIlxuIikpOworCisgICAgcmV0dXJuIHRvcDsgCit9CisjZW5kaWYKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCRGF0YWJhc2VJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSURCRGF0YWJhc2VJbmZvLmgKaW5kZXggMjAzYTY5My4uYjMzMDM0NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFz
ZUluZm8uaApAQCAtNTgsNiArNTgsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSk7CiAKKyNpZm5kZWYgTkRFQlVH
CisgICAgU3RyaW5nIGxvZ2dpbmdTdHJpbmcoKSBjb25zdDsKKyNlbmRpZgorCiBwcml2YXRlOgog
ICAgIElEQkRhdGFiYXNlSW5mbygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCmluZGV4IDQxY2Y5YTkuLmUx
OWE4ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JREJJbmRleEluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJJbmRleEluZm8uY3BwCkBAIC00OSw2ICs0OSwxNyBAQCBJREJJbmRleEluZm8g
SURCSW5kZXhJbmZvOjppc29sYXRlZENvcHkoKSBjb25zdAogICAgIHJldHVybiB7IG1faWRlbnRp
ZmllciwgbV9vYmplY3RTdG9yZUlkZW50aWZpZXIsIG1fbmFtZS5pc29sYXRlZENvcHkoKSwgbV9r
ZXlQYXRoLmlzb2xhdGVkQ29weSgpLCBtX3VuaXF1ZSwgbV9tdWx0aUVudHJ5IH07CiB9CiAKKyNp
Zm5kZWYgTkRFQlVHCitTdHJpbmcgSURCSW5kZXhJbmZvOjpsb2dnaW5nU3RyaW5nKGludCBpbmRl
bnQpIGNvbnN0Cit7CisgICAgU3RyaW5nIGluZGVudFN0cmluZzsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGluZGVudDsgKytpKQorICAgICAgICBpbmRlbnRTdHJpbmcuYXBwZW5kKCIgIik7CisK
KyAgICByZXR1cm4gbWFrZVN0cmluZyhpbmRlbnRTdHJpbmcsICJJbmRleDogIiwgbV9uYW1lLCBT
dHJpbmc6OmZvcm1hdCgiICglIiBQUkl1NjQgIikgXG4iLCBtX2lkZW50aWZpZXIpKTsKK30KKyNl
bmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJJbmRleEluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJJbmRleEluZm8uaAppbmRleCBlZDNmMWE0Li43ZmM1NmQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5m
by5oCkBAIC00Nyw2ICs0NywxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCB1bmlxdWUoKSBjb25zdCB7
IHJldHVybiBtX3VuaXF1ZTsgfQogICAgIGJvb2wgbXVsdGlFbnRyeSgpIGNvbnN0IHsgcmV0dXJu
IG1fbXVsdGlFbnRyeTsgfQogCisjaWZuZGVmIE5ERUJVRworICAgIFN0cmluZyBsb2dnaW5nU3Ry
aW5nKGludCBpbmRlbnQgPSAwKSBjb25zdDsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHVpbnQ2
NF90IG1faWRlbnRpZmllciB7IDAgfTsKICAgICB1aW50NjRfdCBtX29iamVjdFN0b3JlSWRlbnRp
ZmllciB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAKaW5kZXggNzgxYTk1Mi4uZmYx
MjBkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQk9iamVjdFN0b3JlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAKQEAgLTY5LDYgKzY5LDExIEBAIGJv
b2wgSURCT2JqZWN0U3RvcmVJbmZvOjpoYXNJbmRleChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIElEQk9iamVjdFN0b3JlSW5mbzo6aGFzSW5k
ZXgodWludDY0X3QgaW5kZXhJZGVudGlmaWVyKSBjb25zdAoreworICAgIHJldHVybiBtX2luZGV4
TWFwLmNvbnRhaW5zKGluZGV4SWRlbnRpZmllcik7Cit9CisKIElEQkluZGV4SW5mbyogSURCT2Jq
ZWN0U3RvcmVJbmZvOjppbmZvRm9yRXhpc3RpbmdJbmRleChjb25zdCBTdHJpbmcmIG5hbWUpCiB7
CiAgICAgZm9yIChhdXRvJiBpbmRleCA6IG1faW5kZXhNYXAudmFsdWVzKCkpIHsKQEAgLTk5LDYg
KzEwNCwzMCBAQCBWZWN0b3I8U3RyaW5nPiBJREJPYmplY3RTdG9yZUluZm86OmluZGV4TmFtZXMo
KSBjb25zdAogICAgIHJldHVybiBuYW1lczsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUluZm86
OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQoreworICAgIGF1dG8qIGluZm8g
PSBpbmZvRm9yRXhpc3RpbmdJbmRleChpbmRleE5hbWUpOworICAgIGlmICghaW5mbykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9pbmRleE1hcC5yZW1vdmUoaW5mby0+aWRlbnRpZmllcigpKTsK
K30KKworI2lmbmRlZiBOREVCVUcKK1N0cmluZyBJREJPYmplY3RTdG9yZUluZm86OmxvZ2dpbmdT
dHJpbmcoaW50IGluZGVudCkgY29uc3QKK3sKKyAgICBTdHJpbmcgaW5kZW50U3RyaW5nOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZW50OyArK2kpCisgICAgICAgIGluZGVudFN0cmluZy5h
cHBlbmQoIiAiKTsKKworICAgIFN0cmluZyB0b3AgPSBtYWtlU3RyaW5nKGluZGVudFN0cmluZywg
Ik9iamVjdCBzdG9yZTogIiwgbV9uYW1lLCBTdHJpbmc6OmZvcm1hdCgiICglIiBQUkl1NjQgIikg
XG4iLCBtX2lkZW50aWZpZXIpKTsKKyAgICBmb3IgKGF1dG8gaW5kZXggOiBtX2luZGV4TWFwLnZh
bHVlcygpKQorICAgICAgICB0b3AuYXBwZW5kKG1ha2VTdHJpbmcoaW5kZXgubG9nZ2luZ1N0cmlu
ZyhpbmRlbnQgKyAxKSwgIlxuIikpOworCisgICAgcmV0dXJuIHRvcDsgCit9CisjZW5kaWYKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCT2JqZWN0U3RvcmVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmgKaW5kZXggOTQwNDUwNS4uZmZiZDAzZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0
b3JlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJPYmplY3RTdG9yZUluZm8uaApAQCAtNTIsMTAgKzUyLDE3IEBAIHB1YmxpYzoKICAgICBJREJJ
bmRleEluZm8gY3JlYXRlTmV3SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQ
YXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7CiAgICAgdm9pZCBhZGRFeGlzdGlu
Z0luZGV4KGNvbnN0IElEQkluZGV4SW5mbyYpOwogICAgIGJvb2wgaGFzSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lKSBjb25zdDsKKyAgICBib29sIGhhc0luZGV4KHVpbnQ2NF90IGluZGV4SWRlbnRp
ZmllcikgY29uc3Q7CiAgICAgSURCSW5kZXhJbmZvKiBpbmZvRm9yRXhpc3RpbmdJbmRleChjb25z
dCBTdHJpbmcmIG5hbWUpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lcygpIGNvbnN0
OwogCisgICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7CisKKyNp
Zm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIGxvZ2dpbmdTdHJpbmcoaW50IGluZGVudCA9IDApIGNv
bnN0OworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdWludDY0X3QgbV9pZGVudGlmaWVyIHsgMCB9
OwogICAgIFN0cmluZyBtX25hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0RGF0YS5jcHAKaW5kZXggYzNkMDcxNi4uMmUz
ZDZhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQlJlc3VsdERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJSZXN1bHREYXRhLmNwcApAQCAtMTEwLDYgKzExMCwxMSBAQCBJREJSZXN1bHRE
YXRhIElEQlJlc3VsdERhdGE6OmNyZWF0ZUluZGV4U3VjY2Vzcyhjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHJlcQogICAgIHJldHVybiB7IElEQlJlc3VsdFR5cGU6OkNyZWF0ZUluZGV4U3Vj
Y2VzcywgcmVxdWVzdElkZW50aWZpZXIgfTsKIH0KIAorSURCUmVzdWx0RGF0YSBJREJSZXN1bHRE
YXRhOjpkZWxldGVJbmRleFN1Y2Nlc3MoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1
ZXN0SWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4geyBJREJSZXN1bHRUeXBlOjpEZWxldGVJbmRl
eFN1Y2Nlc3MsIHJlcXVlc3RJZGVudGlmaWVyIH07Cit9CisKIElEQlJlc3VsdERhdGEgSURCUmVz
dWx0RGF0YTo6cHV0T3JBZGRTdWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVx
dWVzdElkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmIHJlc3VsdEtleSkKIHsKICAgICBJREJS
ZXN1bHREYXRhIHJlc3VsdChJREJSZXN1bHRUeXBlOjpQdXRPckFkZFN1Y2Nlc3MsIHJlcXVlc3RJ
ZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJSZXN1bHREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCUmVzdWx0RGF0YS5oCmluZGV4IDJlZGU3YmMuLjE0MWQzZGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3Vs
dERhdGEuaApAQCAtNTMsNiArNTMsNyBAQCBlbnVtIGNsYXNzIElEQlJlc3VsdFR5cGUgewogICAg
IEdldENvdW50U3VjY2VzcywKICAgICBEZWxldGVSZWNvcmRTdWNjZXNzLAogICAgIENyZWF0ZUlu
ZGV4U3VjY2VzcywKKyAgICBEZWxldGVJbmRleFN1Y2Nlc3MsCiAgICAgT3BlbkN1cnNvclN1Y2Nl
c3MsCiAgICAgSXRlcmF0ZUN1cnNvclN1Y2Nlc3MsCiB9OwpAQCAtNzEsNiArNzIsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIElEQlJlc3VsdERhdGEgZGVsZXRlT2JqZWN0U3RvcmVTdWNjZXNzKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYpOwogICAgIHN0YXRpYyBJREJSZXN1bHREYXRhIGNs
ZWFyT2JqZWN0U3RvcmVTdWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYpOwogICAg
IHN0YXRpYyBJREJSZXN1bHREYXRhIGNyZWF0ZUluZGV4U3VjY2Vzcyhjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImKTsKKyAgICBzdGF0aWMgSURCUmVzdWx0RGF0YSBkZWxldGVJbmRleFN1Y2Nl
c3MoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJik7CiAgICAgc3RhdGljIElEQlJlc3VsdERh
dGEgcHV0T3JBZGRTdWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYsIGNvbnN0IElE
QktleURhdGEmKTsKICAgICBzdGF0aWMgSURCUmVzdWx0RGF0YSBnZXRSZWNvcmRTdWNjZXNzKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYsIGNvbnN0IElEQkdldFJlc3VsdCYpOwogICAgIHN0
YXRpYyBJREJSZXN1bHREYXRhIGdldENvdW50U3VjY2Vzcyhjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImLCB1aW50NjRfdCBjb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCmluZGV4
IGRiYmMxMjUuLmFiZTNmMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC0xNTIs
NiArMTUyLDE0IEBAIHZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjpkaWRDcmVhdGVJbmRleChjb25z
dCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogICAgIH0pOwogfQogCit2b2lkIEluUHJvY2Vz
c0lEQlNlcnZlcjo6ZGlkRGVsZXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0
YSkKK3sKKyAgICBSZWZQdHI8SW5Qcm9jZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOworICAgIFJ1
bkxvb3A6OmN1cnJlbnQoKS5kaXNwYXRjaChbdGhpcywgc2VsZiwgcmVzdWx0RGF0YV0geworICAg
ICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlci0+ZGlkRGVsZXRlSW5kZXgocmVzdWx0RGF0YSk7Cisg
ICAgfSk7Cit9CisKIHZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjpkaWRQdXRPckFkZChjb25zdCBJ
REJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogewogICAgIFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2
ZXI+IHNlbGYodGhpcyk7CkBAIC0yNDAsMTEgKzI0OCwxOSBAQCB2b2lkIEluUHJvY2Vzc0lEQlNl
cnZlcjo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEs
IHVpbgogICAgIH0pOwogfQogCi12b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRlSW5kZXgo
Y29uc3QgSURCUmVxdWVzdERhdGEmIHJlc3VsdERhdGEsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5m
bykKK3ZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXF1ZXN0
RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKIHsKICAgICBSZWZQ
dHI8SW5Qcm9jZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOwotICAgIFJ1bkxvb3A6OmN1cnJlbnQo
KS5kaXNwYXRjaChbdGhpcywgc2VsZiwgcmVzdWx0RGF0YSwgaW5mb10gewotICAgICAgICBtX3Nl
cnZlci0+Y3JlYXRlSW5kZXgocmVzdWx0RGF0YSwgaW5mbyk7CisgICAgUnVuTG9vcDo6Y3VycmVu
dCgpLmRpc3BhdGNoKFt0aGlzLCBzZWxmLCByZXF1ZXN0RGF0YSwgaW5mb10geworICAgICAgICBt
X3NlcnZlci0+Y3JlYXRlSW5kZXgocmVxdWVzdERhdGEsIGluZm8pOworICAgIH0pOworfQorCit2
b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6ZGVsZXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEm
IHJlcXVlc3REYXRhLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgaW5kZXhOYW1lKQoreworICAgIFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2ZXI+IHNlbGYodGhp
cyk7CisgICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNoKFt0aGlzLCBzZWxmLCByZXF1ZXN0
RGF0YSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWVdIHsKKyAgICAgICAgbV9zZXJ2
ZXItPmRlbGV0ZUluZGV4KHJlcXVlc3REYXRhLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4
TmFtZSk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAppbmRleCA3NTUzZTE3
Li40N2QwOTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCkBAIC02Miw2ICs2Miw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVz
dERhdGEmLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkgb3ZlcnJpZGUgZmluYWw7CiAg
ICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVzdERhdGEmLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVJbmRleChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkluZGV4
SW5mbyYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChjb25z
dCBJREJSZXF1ZXN0RGF0YSYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBpbmRleE5hbWUpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBwdXRP
ckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIElEQktleSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSYsIGNvbnN0IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKSBvdmVycmlkZSBm
aW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lk
IGdldENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJikg
b3ZlcnJpZGUgZmluYWw7CkBAIC04MSw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZGlkRGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzdWx0RGF0YSYpIG92ZXJyaWRlIGZp
bmFsOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc3Vs
dERhdGEmKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlSW5kZXgo
Y29uc3QgSURCUmVzdWx0RGF0YSYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBk
aWREZWxldGVJbmRleChjb25zdCBJREJSZXN1bHREYXRhJikgb3ZlcnJpZGUgZmluYWw7CiAgICAg
dmlydHVhbCB2b2lkIGRpZFB1dE9yQWRkKGNvbnN0IElEQlJlc3VsdERhdGEmKSBvdmVycmlkZSBm
aW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0UmVjb3JkKGNvbnN0IElEQlJlc3VsdERhdGEm
KSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0Q291bnQoY29uc3QgSURC
UmVzdWx0RGF0YSYpIG92ZXJyaWRlIGZpbmFsOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265873</attachid>
            <date>2015-11-19 10:29:49 -0800</date>
            <delta_ts>2015-11-19 10:30:54 -0800</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>62717</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlMzQwZmJmLi4yYzhlNmRjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMTEt
MTkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IElEQk9iamVjdFN0b3JlLmRlbGV0ZUluZGV4KCkgc3VwcG9ydC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDkxMQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2RlbGV0ZWluZGV4LTEtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtMS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBz
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtMi1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9kZWxldGVpbmRleC0yLmh0bWw6
IEFkZGVkLgorCiAyMDE1LTExLTE5ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+
CiAKICAgICAgICAgU2tpcCBtb3JlIG1lZGlhc3RyZWFtIHRlc3RzIHRoYXQgY3Jhc2ggd2hlbiBw
YWludGluZyBhIG1vY2sgdmlkZW8gc291cmNlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTEtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWFjODYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgt
MS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGhpcyB0ZXN0cyBkZWxldGluZyBhbiBp
bmRleCBhbmQgdGhlbiBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbi4KK0luaXRpYWwgdXBncmFk
ZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gMCBOZXcgdmVyc2lvbiAtIDEKK0NvdW50IGlzOiAyCitD
dXJzb3IgYXQgcmVjb3JkOiBBIC8gMQorQ3Vyc29yIGF0IHJlY29yZDogQSAvIDIKK0N1cnNvciBh
dCByZWNvcmQ6IHVuZGVmaW5lZCAvIHVuZGVmaW5lZAorRGVsZXRlZCB0aGUgaW5kZXgKK0luaXRp
YWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlCitPYmplY3Qgc3Rv
cmUgaGFzIGluZGV4ZXM6CitVbmFibGUgdG8gZ2V0IGluZGV4IGZyb20gb2JqZWN0IHN0b3JlIChp
dCBzaG91bGRuJ3QgZXhpc3QpCitUcmFuc2FjdGlvbiBjb21wbGV0ZQorRG9uZQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtMS5o
dG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTEu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmY3OGZkCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWlu
ZGV4LTEuaHRtbApAQCAtMCwwICsxLDExMyBAQAorVGhpcyB0ZXN0cyBkZWxldGluZyBhbiBpbmRl
eCBhbmQgdGhlbiBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbi48YnI+Cis8ZGl2IGlkPSJsb2dn
ZXIiPjwvZGl2PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit9
CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGxvZygiRG9uZSIpOworICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dnZXIi
KS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKwordmFyIGluZGV4OwordmFyIG9i
amVjdFN0b3JlOwordmFyIGRhdGFiYXNlOworCitmdW5jdGlvbiBjaGVja0luZGV4VmFsdWVzKCkK
K3sKKyAgICB2YXIgY291bnRSZXF1ZXN0ID0gaW5kZXguY291bnQoKTsKKyAgICBjb3VudFJlcXVl
c3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygiQ291bnQgaXM6ICIgKyBj
b3VudFJlcXVlc3QucmVzdWx0KTsKKyAgICB9CisKKyAgICB2YXIgY3Vyc29yUmVxdWVzdCA9IGlu
ZGV4Lm9wZW5DdXJzb3IoKTsKKyAgICBjdXJzb3JSZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgY3Vyc29yID0gY3Vyc29yUmVxdWVzdC5yZXN1bHQ7CisgICAgICAg
IGxvZygiQ3Vyc29yIGF0IHJlY29yZDogIiArIGN1cnNvci5rZXkgKyAiIC8gIiArIGN1cnNvci5w
cmltYXJ5S2V5KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjdXJzb3Iua2V5ICE9IHVuZGVmaW5l
ZCkKKyAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIG9iamVjdFN0b3JlLmRlbGV0ZUluZGV4KCJUZXN0SW5kZXgxIik7CisgICAgICAgICAg
ICBsb2coIkRlbGV0ZWQgdGhlIGluZGV4Iik7CisgICAgICAgIH0KKyAgICB9CisgICAgY3Vyc29y
UmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZSkgeworICAgICAgICBsb2coIlVuZXhwZWN0ZWQg
ZXJyb3Igb3BlbmluZyBvciBpdGVyYXRpbmcgY3Vyc29yIik7CisgICAgICAgIGxvZ0N1cnNvcihj
dXJzb3JSZXF1ZXN0LnJlc3VsdCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9IAorfQorCit2YXIg
Y3JlYXRlUmVxdWVzdCA9IHdpbmRvdy5pbmRleGVkREIub3BlbigiRGVsZXRlSW5kZXgxRGF0YWJh
c2UiLCAxKTsKK2NyZWF0ZVJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICBsb2coIkluaXRpYWwgdXBncmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gIiArIGV2
ZW50Lm9sZFZlcnNpb24gKyAiIE5ldyB2ZXJzaW9uIC0gIiArIGV2ZW50Lm5ld1ZlcnNpb24pOwor
CisgICAgdmFyIHZlcnNpb25UcmFuc2FjdGlvbiA9IGNyZWF0ZVJlcXVlc3QudHJhbnNhY3Rpb247
CisgICAgZGF0YWJhc2UgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgIG9iamVjdFN0b3JlID0g
ZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUoIlRlc3RPYmplY3RTdG9yZSIpOworICAgIG9iamVj
dFN0b3JlLnB1dCh7IGJhcjogIkEiIH0sIDEpOworICAgIG9iamVjdFN0b3JlLnB1dCh7IGJhcjog
IkEiIH0sIDIpOworCisgICAgaW5kZXggPSBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgiVGVzdElu
ZGV4MSIsICJiYXIiKTsKKyAgICAKKyAgICBjaGVja0luZGV4VmFsdWVzKCk7CisgICAgCisgICAg
dmVyc2lvblRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBs
b2coIkluaXRpYWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIHVuZXhwZWN0ZWQg
YWJvcnQiKTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KKworICAgIHZlcnNpb25UcmFuc2FjdGlv
bi5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgbG9nKCJJbml0aWFsIHVw
Z3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBjb21wbGV0ZSIpOworICAgICAgICBjb250
aW51ZVRlc3QoKTsKKyAgICB9CisKKyAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFu
Z2UgdHJhbnNhY3Rpb24gdW5leHBlY3RlZCBlcnJvciIgKyBldmVudCk7CisgICAgICAgIGRvbmUo
KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNvbnRpbnVlVGVzdCgpIHsKKyAgICB2YXIgdHJhbnNh
Y3Rpb24gPSBkYXRhYmFzZS50cmFuc2FjdGlvbigiVGVzdE9iamVjdFN0b3JlIik7CisgICAgb2Jq
ZWN0U3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3JlIik7CisK
KyAgICB2YXIgbmFtZXMgPSBvYmplY3RTdG9yZS5pbmRleE5hbWVzOworICAgIGxvZygiT2JqZWN0
IHN0b3JlIGhhcyBpbmRleGVzOiIpCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgbG9nKG5hbWVzW2ldKTsKKyAgICAKKyAgICB0cnkgeworICAgICAg
ICBvYmplY3RTdG9yZS5pbmRleCgiVGVzdEluZGV4MSIpOworICAgIH0gY2F0Y2goZSkgeworICAg
ICAgICBsb2coIlVuYWJsZSB0byBnZXQgaW5kZXggZnJvbSBvYmplY3Qgc3RvcmUgKGl0IHNob3Vs
ZG4ndCBleGlzdCkiKTsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiB1bmV4cGVjdGVkIGFib3J0Iik7
CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0g
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiBjb21wbGV0ZSIpOwor
ICAgICAgICBkb25lKCk7CisgICAgfQorCisgICAgdHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygiVHJhbnNhY3Rpb24gdW5leHBlY3RlZCBlcnJvciIg
KyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CisKKzwvc2NyaXB0PgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTIt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0
ZWluZGV4LTItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNiYzU4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vZGVsZXRlaW5kZXgtMi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGhp
cyB0ZXN0cyBkZWxldGluZyBhbiBpbmRleCBhbmQgdGhlbiBhYm9ydGluZyB0aGUgdHJhbnNhY3Rp
b24uCitJbml0aWFsIHVwZ3JhZGUgbmVlZGVkOiBPbGQgdmVyc2lvbiAtIDAgTmV3IHZlcnNpb24g
LSAxCitDb3VudCBpczogMgorQ3Vyc29yIGF0IHJlY29yZDogQSAvIDEKK0N1cnNvciBhdCByZWNv
cmQ6IEEgLyAyCitDdXJzb3IgYXQgcmVjb3JkOiB1bmRlZmluZWQgLyB1bmRlZmluZWQKK0luaXRp
YWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlCitTZWNvbmQgdXBn
cmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gMSBOZXcgdmVyc2lvbiAtIDIKK0RlbGV0ZWQgdGhl
IGluZGV4CitBYm9ydGVkIHRoZSB0cmFuc2FjdGlvbgorU2Vjb25kIHVwZ3JhZGUgdmVyc2lvbmNo
YW5nZSB0cmFuc2FjdGlvbiBhYm9ydAorVGhpcmQgdXBncmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9u
IC0gMSBOZXcgdmVyc2lvbiAtIDMKK0NvdW50IGlzOiAyCitDdXJzb3IgYXQgcmVjb3JkOiBBIC8g
MQorQ3Vyc29yIGF0IHJlY29yZDogQSAvIDIKK0N1cnNvciBhdCByZWNvcmQ6IHVuZGVmaW5lZCAv
IHVuZGVmaW5lZAorVGhpcmQgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBs
ZXRlCitEb25lCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9kZWxldGVpbmRleC0yLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vZGVsZXRlaW5kZXgtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM4MDE1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtMi5odG1sCkBAIC0wLDAgKzEsMTM4IEBACitUaGlzIHRl
c3RzIGRlbGV0aW5nIGFuIGluZGV4IGFuZCB0aGVuIGFib3J0aW5nIHRoZSB0cmFuc2FjdGlvbi48
YnI+Cis8ZGl2IGlkPSJsb2dnZXIiPjwvZGl2PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0
UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7Cit9CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGxvZygiRG9uZSIp
OworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJsb2dnZXIiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKwor
dmFyIGluZGV4OwordmFyIG9iamVjdFN0b3JlOwordmFyIGRhdGFiYXNlOworCitmdW5jdGlvbiBj
aGVja0luZGV4VmFsdWVzKCkKK3sKKyAgICB2YXIgY291bnRSZXF1ZXN0ID0gaW5kZXguY291bnQo
KTsKKyAgICBjb3VudFJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGxv
ZygiQ291bnQgaXM6ICIgKyBjb3VudFJlcXVlc3QucmVzdWx0KTsKKyAgICB9CisKKyAgICB2YXIg
Y3Vyc29yUmVxdWVzdCA9IGluZGV4Lm9wZW5DdXJzb3IoKTsKKyAgICBjdXJzb3JSZXF1ZXN0Lm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgY3Vyc29yID0gY3Vyc29yUmVxdWVz
dC5yZXN1bHQ7CisgICAgICAgIGxvZygiQ3Vyc29yIGF0IHJlY29yZDogIiArIGN1cnNvci5rZXkg
KyAiIC8gIiArIGN1cnNvci5wcmltYXJ5S2V5KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjdXJz
b3Iua2V5ICE9IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOworICAg
IH0KKyAgICBjdXJzb3JSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGxv
ZygiVW5leHBlY3RlZCBlcnJvciBvcGVuaW5nIG9yIGl0ZXJhdGluZyBjdXJzb3IiKTsKKyAgICAg
ICAgbG9nQ3Vyc29yKGN1cnNvclJlcXVlc3QucmVzdWx0KTsKKyAgICAgICAgZG9uZSgpOworICAg
IH0gCit9CisKK3ZhciBjcmVhdGVSZXF1ZXN0ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKCJEZWxl
dGVJbmRleDJEYXRhYmFzZSIsIDEpOworY3JlYXRlUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBm
dW5jdGlvbihldmVudCkgeworICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZl
cnNpb24gLSAiICsgZXZlbnQub2xkVmVyc2lvbiArICIgTmV3IHZlcnNpb24gLSAiICsgZXZlbnQu
bmV3VmVyc2lvbik7CisKKyAgICB2YXIgdmVyc2lvblRyYW5zYWN0aW9uID0gY3JlYXRlUmVxdWVz
dC50cmFuc2FjdGlvbjsKKyAgICBkYXRhYmFzZSA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAg
b2JqZWN0U3RvcmUgPSBkYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3Jl
Iik7CisgICAgb2JqZWN0U3RvcmUucHV0KHsgYmFyOiAiQSIgfSwgMSk7CisgICAgb2JqZWN0U3Rv
cmUucHV0KHsgYmFyOiAiQSIgfSwgMik7CisKKyAgICBpbmRleCA9IG9iamVjdFN0b3JlLmNyZWF0
ZUluZGV4KCJUZXN0SW5kZXgxIiwgImJhciIpOworICAgIAorICAgIGNoZWNrSW5kZXhWYWx1ZXMo
KTsKKyAgICAKKyAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rp
b24gdW5leHBlY3RlZCBhYm9ydCIpOworICAgICAgICBkb25lKCk7CisgICAgfQorCisgICAgdmVy
c2lvblRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBs
b2coIkluaXRpYWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlIik7
CisgICAgICAgIGRhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIGNvbnRpbnVlVGVzdDEoKTsKKyAg
ICB9CisKKyAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7
CisgICAgICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24g
dW5leHBlY3RlZCBlcnJvciIgKyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIGNvbnRpbnVlVGVzdDEoKSB7CisgICAgdmFyIGNyZWF0ZVJlcXVlc3QgPSB3aW5k
b3cuaW5kZXhlZERCLm9wZW4oIkRlbGV0ZUluZGV4MkRhdGFiYXNlIiwgMik7CisgICAgY3JlYXRl
UmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBsb2co
IlNlY29uZCB1cGdyYWRlIG5lZWRlZDogT2xkIHZlcnNpb24gLSAiICsgZXZlbnQub2xkVmVyc2lv
biArICIgTmV3IHZlcnNpb24gLSAiICsgZXZlbnQubmV3VmVyc2lvbik7CisKKyAgICAgICAgZGF0
YWJhc2UgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgdmVyc2lvblRyYW5zYWN0
aW9uID0gY3JlYXRlUmVxdWVzdC50cmFuc2FjdGlvbjsKKyAgICAgICAgb2JqZWN0U3RvcmUgPSB2
ZXJzaW9uVHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoIlRlc3RPYmplY3RTdG9yZSIpOworICAgICAg
ICBvYmplY3RTdG9yZS5kZWxldGVJbmRleCgiVGVzdEluZGV4MSIpOworICAgICAgICBsb2coIkRl
bGV0ZWQgdGhlIGluZGV4Iik7CisgICAgICAgIHZlcnNpb25UcmFuc2FjdGlvbi5hYm9ydCgpOwor
ICAgICAgICBsb2coIkFib3J0ZWQgdGhlIHRyYW5zYWN0aW9uIik7CisKKyAgICAgICAgdmVyc2lv
blRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgbG9n
KCJTZWNvbmQgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGFib3J0Iik7CisgICAg
ICAgICAgICBkYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAgY29udGludWVUZXN0MigpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmVyc2lvblRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5j
dGlvbihldmVudCkgeworICAgICAgICAgICAgbG9nKCJTZWNvbmQgdXBncmFkZSB2ZXJzaW9uY2hh
bmdlIHRyYW5zYWN0aW9uIHVuZXhwZWN0ZWQgY29tcGxldGUiKTsKKyAgICAgICAgICAgIGRvbmUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnNpb25UcmFuc2FjdGlvbi5vbmVycm9yID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGxvZygiU2Vjb25kIHVwZ3JhZGUgdmVyc2lvbmNo
YW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGVycm9yIiArIGV2ZW50KTsKKyAgICAgICAgICAg
IGRvbmUoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gY29udGludWVUZXN0Migp
IHsKKyAgICB2YXIgY3JlYXRlUmVxdWVzdCA9IHdpbmRvdy5pbmRleGVkREIub3BlbigiRGVsZXRl
SW5kZXgyRGF0YWJhc2UiLCAzKTsKKyAgICBjcmVhdGVSZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygiVGhpcmQgdXBncmFkZSBuZWVkZWQ6IE9s
ZCB2ZXJzaW9uIC0gIiArIGV2ZW50Lm9sZFZlcnNpb24gKyAiIE5ldyB2ZXJzaW9uIC0gIiArIGV2
ZW50Lm5ld1ZlcnNpb24pOworCisgICAgICAgIHZhciB2ZXJzaW9uVHJhbnNhY3Rpb24gPSBjcmVh
dGVSZXF1ZXN0LnRyYW5zYWN0aW9uOworICAgICAgICBvYmplY3RTdG9yZSA9IHZlcnNpb25UcmFu
c2FjdGlvbi5vYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3JlIik7CisgICAgICAgIGluZGV4ID0g
b2JqZWN0U3RvcmUuaW5kZXgoIlRlc3RJbmRleDEiKTsKKyAgICAKKyAgICAgICAgY2hlY2tJbmRl
eFZhbHVlcygpOyAgICAKKyAgICAgICAgCisgICAgICAgIHZlcnNpb25UcmFuc2FjdGlvbi5vbmFi
b3J0ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGxvZygiVGhpcmQgdXBncmFkZSB2
ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIHVuZXhwZWN0ZWQgYWJvcnQiKTsKKyAgICAgICAgICAg
IGRvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnNpb25UcmFuc2FjdGlvbi5vbmNvbXBs
ZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGxvZygiVGhpcmQgdXBncmFkZSB2
ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlIik7CisgICAgICAgICAgICBkb25lKCk7
CisgICAgICAgIH0KKworICAgICAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgICAgICBsb2coIlRoaXJkIHVwZ3JhZGUgdmVyc2lvbmNoYW5n
ZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGVycm9yIiArIGV2ZW50KTsKKyAgICAgICAgICAgIGRv
bmUoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDUx
ZTZmMS4uNzEyNGNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAxNS0xMS0xOSAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuIElEQjog
SURCT2JqZWN0U3RvcmUuZGVsZXRlSW5kZXgoKSBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTExCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9kZWxldGVpbmRleC0xLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9kZWxldGVpbmRleC0yLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpkaWREZWxldGVJbmRleCk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZl
ci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9T
ZXJ2ZXJEZWxlZ2F0ZS5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QkRhdGFiYXNlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkRhdGFi
YXNlOjpkaWREZWxldGVJbmRleEluZm8pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJEYXRhYmFzZUltcGwuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJJbmRleEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJJ
bmRleDo6bWFya0FzRGVsZXRlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkluZGV4SW1wbC5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
Qk9iamVjdFN0b3JlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9i
amVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9iamVj
dFN0b3JlOjpkZWxldGVJbmRleCk6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6
SURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVu
dDo6SURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4T25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlSW5kZXhPblNlcnZlcik6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oOgor
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9u
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0
aW9uKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3Rv
cmUuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9u
VG9DbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJDb25uZWN0aW9u
VG9DbGllbnQ6OmRpZERlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLmg6CisKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmluZGV4RGVs
ZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uOjphYm9ydCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01l
bW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oOgorCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SW5kZXg6OmNsZWFySW5kZXhWYWx1ZVN0b3Jl
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SW5kZXguaDoKKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjptYXliZVJl
c3RvcmVEZWxldGVkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlP
YmplY3RTdG9yZTo6dGFrZUluZGV4QnlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6TWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaDoKKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybURlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2UuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZERlbGV0ZUluZGV4KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9u
Lmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5oOgorCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZUluZm86OmxvZ2dpbmdTdHJpbmcpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaDoKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCSW5kZXhJbmZvOjpsb2dnaW5nU3RyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlSW5mbzo6aGFzSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVJbmZvOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUlu
Zm86OmxvZ2dpbmdTdHJpbmcpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJPYmplY3RTdG9yZUluZm8uaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JREJSZXN1bHREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc3VsdERhdGE6OmRl
bGV0ZUluZGV4U3VjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lE
QlJlc3VsdERhdGEuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblBy
b2Nlc3NJREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVy
OjpkaWREZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6
OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6ZGVs
ZXRlSW5kZXgpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJ
REJTZXJ2ZXIuaDoKKwogMjAxNS0xMS0xOSAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIGEgdGVzdCBmb3IgbWVkaWEgY29udHJvbCBkcm9wb2ZmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRv
U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJD
b25uZWN0aW9uVG9TZXJ2ZXIuY3BwCmluZGV4IDI3NGZiYTcuLjZlM2I1NDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9T
ZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCkBAIC0xNTUsNiArMTU1LDIxIEBAIHZvaWQgSURCQ29u
bmVjdGlvblRvU2VydmVyOjpkaWRDcmVhdGVJbmRleChjb25zdCBJREJSZXN1bHREYXRhJiByZXN1
bHREYXRhKQogICAgIGNvbXBsZXRlT3BlcmF0aW9uKHJlc3VsdERhdGEpOwogfQogCit2b2lkIElE
QkNvbm5lY3Rpb25Ub1NlcnZlcjo6ZGVsZXRlSW5kZXgoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9w
ZXJhdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGlu
ZGV4TmFtZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCQ29ubmVjdGlvblRvU2VydmVyOjpk
ZWxldGVJbmRleCIpOworCisgICAgc2F2ZU9wZXJhdGlvbihvcGVyYXRpb24pOworCisgICAgbV9k
ZWxlZ2F0ZS0+ZGVsZXRlSW5kZXgoSURCUmVxdWVzdERhdGEob3BlcmF0aW9uKSwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBpbmRleE5hbWUpOworfQorCit2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZl
cjo6ZGlkRGVsZXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCQ29ubmVjdGlvblRvU2VydmVyOjpkaWREZWxldGVJbmRleCIp
OworICAgIGNvbXBsZXRlT3BlcmF0aW9uKHJlc3VsdERhdGEpOworfQorCiB2b2lkIElEQkNvbm5l
Y3Rpb25Ub1NlcnZlcjo6cHV0T3JBZGQoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwg
UmVmUHRyPElEQktleT4mIGtleSwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mIHZhbHVl
LCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2Rl
KQogewogICAgIExPRyhJbmRleGVkREIsICJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OnB1dE9yQWRk
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCQ29ubmVjdGlvblRvU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmgKaW5kZXggMWNkY2U3My4uMjA2MWQxMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNv
bm5lY3Rpb25Ub1NlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaApAQCAtNzQsNiArNzQsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjcmVhdGVJbmRleChUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQklu
ZGV4SW5mbyYpOwogICAgIHZvaWQgZGlkQ3JlYXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYp
OwogCisgICAgdm9pZCBkZWxldGVJbmRleChUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOworICAgIHZv
aWQgZGlkRGVsZXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYpOworCiAgICAgdm9pZCBwdXRP
ckFkZChUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIFJlZlB0cjxJREJLZXk+JiwgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4mLCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRl
TW9kZSk7CiAgICAgdm9pZCBkaWRQdXRPckFkZChjb25zdCBJREJSZXN1bHREYXRhJik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25u
ZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKaW5kZXggZjliOGM5Yy4u
MGI5MDkwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgK
QEAgLTYzLDYgKzYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1l
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVz
dERhdGEmLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJbmRleElu
Zm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IElEQlJlcXVlc3RE
YXRhJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0
YSYsIElEQktleSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IEluZGV4ZWREQjo6T2Jq
ZWN0U3RvcmVPdmVyd3JpdGVNb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGdldFJlY29yZChj
b25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZ2V0Q291bnQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCmluZGV4IDYxYjE3N2MuLmFlNmMw
ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJEYXRhYmFzZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCkBAIC0zNDEsNiArMzQxLDEzIEBAIHZvaWQgSURC
RGF0YWJhc2U6OmRpZENyZWF0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRleEluZm8mIGluZm8pCiAg
ICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7CiB9CiAKK3ZvaWQgSURCRGF0
YWJhc2U6OmRpZERlbGV0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRleEluZm8mIGluZm8pCit7Cisg
ICAgYXV0byogb2JqZWN0U3RvcmUgPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUo
aW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKG9iamVjdFN0b3JlKTsK
KyAgICBvYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgoaW5mby5uYW1lKCkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBJREJDbGllbnQKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1w
bC5oCmluZGV4IDJhMzA2ODAuLjZhOTE3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmgKQEAgLTg1LDYg
Kzg1LDcgQEAgcHVibGljOgogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgc2VydmVyQ29ubmVj
dGlvbigpIHsgcmV0dXJuIG1fc2VydmVyQ29ubmVjdGlvbi5nZXQoKTsgfQogCiAgICAgdm9pZCBk
aWRDcmVhdGVJbmRleEluZm8oY29uc3QgSURCSW5kZXhJbmZvJik7CisgICAgdm9pZCBkaWREZWxl
dGVJbmRleEluZm8oY29uc3QgSURCSW5kZXhJbmZvJik7CiAKIHByaXZhdGU6CiAgICAgSURCRGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIGNv
bnN0IElEQlJlc3VsdERhdGEmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJJbmRleEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1wbC5jcHAKaW5kZXggMjRjZWQ4Mi4uNWNiOTk4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QkluZGV4SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkluZGV4SW1wbC5jcHAKQEAgLTMyNyw2ICszMjcsMTEgQEAgUmVmUHRyPFdlYkNvcmU6
OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LAogICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZXF1ZXN0R2V0S2V5KGNvbnRleHQsICp0
aGlzLCByYW5nZSk7CiB9CiAKK3ZvaWQgSURCSW5kZXg6Om1hcmtBc0RlbGV0ZWQoKQoreworICAg
IG1fZGVsZXRlZCA9IHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmgKaW5kZXggMTcwNGRkYi4uNDdmOGY4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJJ
bmRleEltcGwuaApAQCAtNzgsNiArNzgsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgSURCSW5kZXhJ
bmZvJiBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CiAKICAgICBJREJPYmplY3RTdG9y
ZSYgbW9kZXJuT2JqZWN0U3RvcmUoKSB7IHJldHVybiBtX29iamVjdFN0b3JlLmdldCgpOyB9CisK
KyAgICB2b2lkIG1hcmtBc0RlbGV0ZWQoKTsKICAgICBib29sIGlzRGVsZXRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVsZXRlZDsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNw
cAppbmRleCBiZGY2YTQyLi4zMjliYzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcApA
QCAtNDQxLDYgKzQ0MSwxMSBAQCBSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXg+IElEQk9iamVjdFN0
b3JlOjppbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgRXhjZXB0aQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkp
IHsKKyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25D
b2RlOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZWZlcmVuY2VkSW5kZXhlcy5maW5kKGlu
ZGV4TmFtZSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fcmVmZXJlbmNlZEluZGV4ZXMuZW5kKCkp
CiAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7CkBAIC00NTcsOSArNDYyLDQwIEBAIFJl
ZlB0cjxXZWJDb3JlOjpJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmlu
ZyYgaW5kZXhOYW1lLCBFeGNlcHRpCiAgICAgcmV0dXJuIFdURjo6bW92ZShpbmRleCk7CiB9CiAK
LXZvaWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlv
bkNvZGUmKQordm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXggJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBl
YyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNvZGU6OkludmFsaWRT
dGF0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV90cmFuc2Fj
dGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkpIHsKKyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNl
cHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpJbnZhbGlkU3RhdGVFcnJvcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsK
KyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2Rl
OjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFtX2luZm8uaGFzSW5kZXgobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGF1dG8qIGluZm8gPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nSW5kZXgobmFtZSk7CisgICAgQVNT
RVJUKGluZm8pOworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuZGlkRGVsZXRlSW5kZXhJ
bmZvKCppbmZvKTsKKworICAgIG1faW5mby5kZWxldGVJbmRleChuYW1lKTsKKworICAgIGlmIChh
dXRvIGluZGV4ID0gbV9yZWZlcmVuY2VkSW5kZXhlcy50YWtlKG5hbWUpKQorICAgICAgICBpbmRl
eC0+bWFya0FzRGVsZXRlZCgpOworICAgICAgICAKKyAgICBtX3RyYW5zYWN0aW9uLT5kZWxldGVJ
bmRleChtX2luZm8uaWRlbnRpZmllcigpLCBuYW1lKTsKIH0KIAogUmVmUHRyPFdlYkNvcmU6OklE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHAKaW5k
ZXggNzJmZDJmMS4uOWJjYjUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHAKQEAgLTc1
MSw2ICs3NTEsMzAgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlT2JqZWN0U3RvcmVP
blNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXQKICAgICBBU1NFUlRfVU5VU0VE
KHJlc3VsdERhdGEsIHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkRlbGV0ZU9i
amVjdFN0b3JlU3VjY2Vzcyk7CiB9CiAKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4
KHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUp
Cit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkZWxldGVJbmRleCIpOwor
CisgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKKworICAgIGF1dG8gb3BlcmF0aW9uID0g
Y3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsICZJREJUcmFuc2FjdGlvbjo6ZGlkRGVs
ZXRlSW5kZXhPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpkZWxldGVJbmRleE9uU2VydmVyLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSk7CisgICAgc2NoZWR1bGVPcGVyYXRpb24o
V1RGOjptb3ZlKG9wZXJhdGlvbikpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkZWxldGVJ
bmRleE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IHVpbnQ2
NF90JiBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQorewor
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXhPblNlcnZlciIp
OworICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CisKKyAgICBzZXJ2ZXJDb25uZWN0aW9u
KCkuZGVsZXRlSW5kZXgob3BlcmF0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFt
ZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZUluZGV4T25TZXJ2ZXIoY29u
c3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURC
VHJhbnNhY3Rpb246OmRpZERlbGV0ZUluZGV4T25TZXJ2ZXIiKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHJlc3VsdERhdGEsIHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkRlbGV0ZUlu
ZGV4U3VjY2Vzcyk7Cit9CisKIHZvaWQgSURCVHJhbnNhY3Rpb246Om9wZXJhdGlvbkRpZENvbXBs
ZXRlKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1fdHJh
bnNhY3Rpb25PcGVyYXRpb25NYXAuZ2V0KG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpID09ICZvcGVy
YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCmluZGV4IDVjM2Y2NmUuLjM3OWEzOWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFu
c2FjdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTEwOSw2ICsxMDksNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBpdGVyYXRlQ3Vyc29yKElEQkN1cnNvciYsIGNvbnN0IElEQktleURhdGEmLCB1bnNpZ25l
ZCBsb25nIGNvdW50KTsKIAogICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUpOworICAgIHZvaWQgZGVsZXRlSW5kZXgodWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7CiAKICAgICB2b2lkIGFk
ZFJlcXVlc3QoSURCUmVxdWVzdCYpOwogICAgIHZvaWQgcmVtb3ZlUmVxdWVzdChJREJSZXF1ZXN0
Jik7CkBAIC0xNjUsNiArMTY2LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0
b3JlTmFtZSk7CiAgICAgdm9pZCBkaWREZWxldGVPYmplY3RTdG9yZU9uU2VydmVyKGNvbnN0IElE
QlJlc3VsdERhdGEmKTsKIAorICAgIHZvaWQgZGVsZXRlSW5kZXhPblNlcnZlcihUcmFuc2FjdGlv
bk9wZXJhdGlvbiYsIGNvbnN0IHVpbnQ2NF90JiBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgaW5kZXhOYW1lKTsKKyAgICB2b2lkIGRpZERlbGV0ZUluZGV4T25TZXJ2ZXIoY29u
c3QgSURCUmVzdWx0RGF0YSYpOworCiAgICAgUmVmPElEQlJlcXVlc3Q+IGRvUmVxdWVzdE9wZW5D
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFJlZjxJREJDdXJzb3I+JiYpOwogICAgIHZv
aWQgb3BlbkN1cnNvck9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgSURCQ3Vy
c29ySW5mbyYpOwogICAgIHZvaWQgZGlkT3BlbkN1cnNvck9uU2VydmVyKElEQlJlcXVlc3QmLCBj
b25zdCBJREJSZXN1bHREYXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oCmluZGV4IDU5
NTFmN2YuLmVhOWRjZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oCkBAIC0xMzgsNiAr
MTM4LDE4IEBAIFJlZlB0cjxUcmFuc2FjdGlvbk9wZXJhdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb25P
cGVyYXRpb24oCiAgICAgcmV0dXJuIGFkb3B0UmVmKG9wZXJhdGlvbik7CiB9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDI+CitS
ZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKAor
ICAgIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwKKyAgICB2b2lkIChJREJUcmFuc2FjdGlv
bjo6KmNvbXBsZXRlKShjb25zdCBJREJSZXN1bHREYXRhJiksCisgICAgdm9pZCAoSURCVHJhbnNh
Y3Rpb246OipwZXJmb3JtKShUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIE1QMSwgTVAyKSwKKyAgICBj
b25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVyMikKK3sKKyAgICBh
dXRvIG9wZXJhdGlvbiA9IG5ldyBUcmFuc2FjdGlvbk9wZXJhdGlvbkltcGw8TVAxLCBNUDI+KHRy
YW5zYWN0aW9uLCBjb21wbGV0ZSwgcGVyZm9ybSwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMik7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG9wZXJhdGlvbik7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIE1Q
MSwgdHlwZW5hbWUgUDE+CiBSZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+IGNyZWF0ZVRyYW5z
YWN0aW9uT3BlcmF0aW9uKAogICAgIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5n
U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNr
aW5nU3RvcmUuaAppbmRleCBlZmRjNmUyLi5mZjZlYWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCkBA
IC02NCw2ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIElEQkVycm9yIGRlbGV0ZU9iamVj
dFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkgPSAwOwogICAgIHZpcnR1YWwgSURCRXJy
b3IgY2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSA9IDA7CiAgICAg
dmlydHVhbCBJREJFcnJvciBjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJikgPSAwOworICAgIHZp
cnR1YWwgSURCRXJyb3IgZGVsZXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBpbmRleE5hbWUpID0gMDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGtleUV4aXN0
c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0
YSYsIGJvb2wmIGtleUV4aXN0cykgPSAwOwogICAgIHZpcnR1YWwgSURCRXJyb3IgZGVsZXRlUmFu
Z2UoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJikgPSAw
OwogICAgIHZpcnR1YWwgSURCRXJyb3IgYWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUp
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJDb25uZWN0aW9uVG9DbGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAKaW5kZXggMDJlMWQxYi4uZGEz
YmQwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAKQEAgLTgzLDYgKzgzLDEx
IEBAIHZvaWQgSURCQ29ubmVjdGlvblRvQ2xpZW50OjpkaWRDcmVhdGVJbmRleChjb25zdCBJREJS
ZXN1bHREYXRhJiByZXN1bHQpCiAgICAgbV9kZWxlZ2F0ZS0+ZGlkQ3JlYXRlSW5kZXgocmVzdWx0
KTsKIH0KIAordm9pZCBJREJDb25uZWN0aW9uVG9DbGllbnQ6OmRpZERlbGV0ZUluZGV4KGNvbnN0
IElEQlJlc3VsdERhdGEmIHJlc3VsdCkKK3sKKyAgICBtX2RlbGVnYXRlLT5kaWREZWxldGVJbmRl
eChyZXN1bHQpOworfQorCiB2b2lkIElEQkNvbm5lY3Rpb25Ub0NsaWVudDo6ZGlkUHV0T3JBZGQo
Y29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0KQogewogICAgIG1fZGVsZWdhdGUtPmRpZFB1dE9y
QWRkKHJlc3VsdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmgKaW5kZXggZWY4ODBjNi4u
NWVlMmIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuaApAQCAtNTYsNiArNTYsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkaWREZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHRE
YXRhJik7CiAgICAgdm9pZCBkaWRDbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc3VsdERhdGEm
KTsKICAgICB2b2lkIGRpZENyZWF0ZUluZGV4KGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKyAgICB2
b2lkIGRpZERlbGV0ZUluZGV4KGNvbnN0IElEQlJlc3VsdERhdGEmKTsKICAgICB2b2lkIGRpZFB1
dE9yQWRkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKICAgICB2b2lkIGRpZEdldFJlY29yZChjb25z
dCBJREJSZXN1bHREYXRhJik7CiAgICAgdm9pZCBkaWRHZXRDb3VudChjb25zdCBJREJSZXN1bHRE
YXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnREZWxlZ2F0ZS5oCmluZGV4
IDNhOGYxNmUuLmM3MDYyMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnREZWxlZ2F0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnRE
ZWxlZ2F0ZS5oCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlk
RGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzdWx0RGF0YSYpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVJbmRleChjb25zdCBJREJSZXN1bHREYXRhJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWREZWxldGVJbmRleChjb25zdCBJREJSZXN1bHREYXRhJikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRQdXRPckFkZChjb25zdCBJREJSZXN1bHREYXRhJikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRSZWNvcmQoY29uc3QgSURCUmVzdWx0RGF0YSYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0Q291bnQoY29uc3QgSURCUmVzdWx0RGF0YSYpID0g
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5jcHAKaW5kZXggYzYzNzhlZS4uZGJkYmQ5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTIwMyw2
ICsyMDMsMTggQEAgdm9pZCBJREJTZXJ2ZXI6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSW5kZXhJbmYKICAgICB0cmFuc2FjdGlvbi0+Y3Jl
YXRlSW5kZXgocmVxdWVzdERhdGEsIGluZm8pOwogfQogCit2b2lkIElEQlNlcnZlcjo6ZGVsZXRl
SW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQoreworICAgIExPRyhJbmRl
eGVkREIsICJJREJTZXJ2ZXI6OmRlbGV0ZUluZGV4Iik7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9u
ID0gbV90cmFuc2FjdGlvbnMuZ2V0KHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigp
KTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
dHJhbnNhY3Rpb24tPmlzVmVyc2lvbkNoYW5nZSgpKTsKKyAgICB0cmFuc2FjdGlvbi0+ZGVsZXRl
SW5kZXgocmVxdWVzdERhdGEsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhOYW1lKTsKK30K
Kwogdm9pZCBJREJTZXJ2ZXI6OnB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0
RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZm
ZXImIHZhbHVlRGF0YSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3Zlcndy
aXRlTW9kZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCU2VydmVyOjpwdXRPckFkZCIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5oCmluZGV4IGZhNTg2YzAuLjk0MGZiOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTY0LDYgKzY0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVzdERhdGEmLCBj
b25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSk7CiAgICAgdm9pZCBjbGVhck9iamVjdFN0b3Jl
KGNvbnN0IElEQlJlcXVlc3REYXRhJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsK
ICAgICB2b2lkIGNyZWF0ZUluZGV4KGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCSW5k
ZXhJbmZvJik7CisgICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOwog
ICAgIHZvaWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRh
JiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwgSW5kZXhlZERCOjpPYmpl
Y3RTdG9yZU92ZXJ3cml0ZU1vZGUpOwogICAgIHZvaWQgZ2V0UmVjb3JkKGNvbnN0IElEQlJlcXVl
c3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CiAgICAgdm9pZCBnZXRDb3VudChjb25z
dCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5jcHAKaW5kZXggNDhhOTI3Mi4uYmUzODA3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01l
bW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwCkBA
IC04Niw2ICs4NiwxNiBAQCB2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjphZGRF
eGlzdGluZ0luZGV4KE1lbW9yeUluZGV4JiBpbmRleCkKICAgICBtX2luZGV4ZXMuYWRkKCZpbmRl
eCk7CiB9CiAKK3ZvaWQgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmluZGV4RGVsZXRl
ZChzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5SW5kZXg+IGluZGV4KQoreworICAgIEFTU0VSVChpbmRl
eCk7CisgICAgbV9pbmRleGVzLnJlbW92ZShpbmRleC5nZXQoKSk7CisKKyAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fZGVsZXRlZEluZGV4ZXMuYWRkKGluZGV4LT5pbmZvKCkubmFtZSgpLCBudWxscHRy
KTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBXVEY6Om1vdmUoaW5kZXgpOworfQorCiB2b2lkIE1lbW9yeUJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uOjphZGRFeGlzdGluZ09iamVjdFN0b3JlKE1lbW9yeU9iamVjdFN0b3Jl
JiBvYmplY3RTdG9yZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5QmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb246OmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUiKTsKQEAgLTE3MCw3ICsxODAsNyBA
QCB2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjphYm9ydCgpCiAKICAgICBUZW1w
b3JhcnlDaGFuZ2U8Ym9vbD4gY2hhbmdlKG1faXNBYm9ydGluZywgdHJ1ZSk7CiAKLSAgICAvLyBU
aGlzIGxvb3AgbW92ZXMgdGhlIHVuZGVybHlpbmcgdW5pcXVlX3B0cnMgZnJvbSBvdXQgb2YgdGhl
IG1fZGVsZXRlT2JqZWN0U3RvcmVzIG1hcCwKKyAgICAvLyBUaGlzIGxvb3AgbW92ZXMgdGhlIHVu
ZGVybHlpbmcgdW5pcXVlX3B0cnMgZnJvbSBvdXQgb2YgdGhlIG1fZGVsZXRlZE9iamVjdFN0b3Jl
cyBtYXAsCiAgICAgLy8gYnV0IHRoZSBlbnRyaWVzIGluIHRoZSBtYXAgc3RpbGwgcmVtYWluLgog
ICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX2RlbGV0ZWRPYmplY3RTdG9yZXMudmFsdWVz
KCkpIHsKICAgICAgICAgTWVtb3J5T2JqZWN0U3RvcmUqIHJhd09iamVjdFN0b3JlID0gb2JqZWN0
U3RvcmUuZ2V0KCk7CkBAIC0yMTQsNiArMjI0LDE2IEBAIHZvaWQgTWVtb3J5QmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb246OmFib3J0KCkKICAgICAgICAgfQogICAgIH0KIAorICAgIC8vIFRoaXMgbG9v
cCBtb3ZlcyB0aGUgdW5kZXJseWluZyB1bmlxdWVfcHRycyBmcm9tIG91dCBvZiB0aGUgbV9kZWxl
dGVkSW5kZXhlcyBtYXAsCisgICAgLy8gYnV0IHRoZSBlbnRyaWVzIGluIHRoZSBtYXAgc3RpbGwg
cmVtYWluLgorICAgIGZvciAoYXV0byYgaW5kZXggOiBtX2RlbGV0ZWRJbmRleGVzLnZhbHVlcygp
KSB7CisgICAgICAgIE1lbW9yeU9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSA9IGluZGV4LT5vYmpl
Y3RTdG9yZSgpOworICAgICAgICBvYmplY3RTdG9yZS5tYXliZVJlc3RvcmVEZWxldGVkSW5kZXgo
V1RGOjptb3ZlKGluZGV4KSk7CisgICAgfQorCisgICAgLy8gVGhpcyBjbGVhcnMgdGhlIGVudHJp
ZXMgZnJvbSB0aGUgbWFwLgorICAgIG1fZGVsZXRlZEluZGV4ZXMuY2xlYXIoKTsKKwogICAgIGZp
bmlzaCgpOwogCiAgICAgZm9yIChhdXRvIG9iamVjdFN0b3JlIDogbV92ZXJzaW9uQ2hhbmdlQWRk
ZWRPYmplY3RTdG9yZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bi5oCmluZGV4IGEyOGMzNjIuLjRjMmNmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbi5oCkBAIC02OCw2ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
YWRkTmV3SW5kZXgoTWVtb3J5SW5kZXgmKTsKICAgICB2b2lkIGFkZEV4aXN0aW5nSW5kZXgoTWVt
b3J5SW5kZXgmKTsKKyAgICB2b2lkIGluZGV4RGVsZXRlZChzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5
SW5kZXg+KTsKIAogICAgIHZvaWQgYWJvcnQoKTsKICAgICB2b2lkIGNvbW1pdCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJh
Y2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcAppbmRleCA5Y2I5OGM2Li5kODYzMmIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFj
a2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcApAQCAtMjAxLDYgKzIwMSwyMSBAQCBJREJFcnJv
ciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhYwogICAgIHJldHVybiBvYmplY3RTdG9yZS0+Y3JlYXRlSW5kZXgoKnJh
d1RyYW5zYWN0aW9uLCBpbmZvKTsKIH0KIAorSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3Jl
OjpkZWxldGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGlu
ZGV4TmFtZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpk
ZWxldGVJbmRleCIpOworCisgICAgYXV0byByYXdUcmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25z
LmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOworICAgIEFTU0VSVChyYXdUcmFuc2FjdGlvbik7
CisgICAgQVNTRVJUKHJhd1RyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSk7CisKKyAgICBh
dXRvKiBvYmplY3RTdG9yZSA9IG1fb2JqZWN0U3RvcmVzQnlJZGVudGlmaWVyLmdldChvYmplY3RT
dG9yZUlkZW50aWZpZXIpOworICAgIGlmICghb2JqZWN0U3RvcmUpCisgICAgICAgIHJldHVybiBJ
REJFcnJvcihJREJFeGNlcHRpb25Db2RlOjpDb25zdHJhaW50RXJyb3IpOworCisgICAgcmV0dXJu
IG9iamVjdFN0b3JlLT5kZWxldGVJbmRleCgqcmF3VHJhbnNhY3Rpb24sIGluZGV4TmFtZSk7Cit9
CisKIHZvaWQgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZW1vdmVPYmplY3RTdG9yZUZvclZlcnNp
b25DaGFuZ2VBYm9ydChNZW1vcnlPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUpCiB7CiAgICAgTE9H
KEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cmVtb3ZlT2JqZWN0U3RvcmVGb3JW
ZXJzaW9uQ2hhbmdlQWJvcnQiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaAppbmRleCBk
MTdjN2MzLi4wZWM1NzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCkBAIC01Niw2
ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIElEQkVycm9yIGRlbGV0ZU9iamVjdFN0b3Jl
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCBJ
REJFcnJvciBjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpIG92ZXJy
aWRlIGZpbmFsOwogICAgIHZpcnR1YWwgSURCRXJyb3IgY3JlYXRlSW5kZXgoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5m
byYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgSURCRXJyb3IgZGVsZXRlSW5kZXgoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpIG92ZXJyaWRl
IGZpbmFsOwogICAgIHZpcnR1YWwgSURCRXJyb3Iga2V5RXhpc3RzSW5PYmplY3RTdG9yZShjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiwgYm9vbCYga2V5RXhpc3Rz
KSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGRlbGV0ZVJhbmdlKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpIG92ZXJyaWRlIGZp
bmFsOwogICAgIHZpcnR1YWwgSURCRXJyb3IgYWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFs
dWUpIG92ZXJyaWRlIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5jcHAKaW5kZXggNTE2NjUxYS4uZjgwZDkxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9y
eUluZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5SW5kZXguY3BwCkBAIC05Myw2ICs5MywxNCBAQCB2b2lkIE1lbW9yeUluZGV4Ojpub3Rp
ZnlDdXJzb3JzT2ZBbGxSZWNvcmRzQ2hhbmdlZCgpCiAgICAgQVNTRVJUKG1fY2xlYW5DdXJzb3Jz
LmlzRW1wdHkoKSk7CiB9CiAKK3ZvaWQgTWVtb3J5SW5kZXg6OmNsZWFySW5kZXhWYWx1ZVN0b3Jl
KCkKK3sKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZS53cml0ZVRyYW5zYWN0aW9uKCkpOworICAg
IEFTU0VSVChtX29iamVjdFN0b3JlLndyaXRlVHJhbnNhY3Rpb24oKS0+aXNBYm9ydGluZygpKTsK
KworICAgIG1fcmVjb3JkcyA9IG51bGxwdHI7Cit9CisKIHZvaWQgTWVtb3J5SW5kZXg6OnJlcGxh
Y2VJbmRleFZhbHVlU3RvcmUoc3RkOjp1bmlxdWVfcHRyPEluZGV4VmFsdWVTdG9yZT4mJiB2YWx1
ZVN0b3JlKQogewogICAgIEFTU0VSVChtX29iamVjdFN0b3JlLndyaXRlVHJhbnNhY3Rpb24oKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVt
b3J5SW5kZXguaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1v
cnlJbmRleC5oCmluZGV4IGE4OTI0YjEuLmYwNDViY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5oCkBAIC03MSw2ICs3
MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZVJlY29yZChjb25zdCBJREJLZXlEYXRhJiwg
Y29uc3QgSW5kZXhLZXkmKTsKIAogICAgIHZvaWQgb2JqZWN0U3RvcmVDbGVhcmVkKCk7CisgICAg
dm9pZCBjbGVhckluZGV4VmFsdWVTdG9yZSgpOwogICAgIHZvaWQgcmVwbGFjZUluZGV4VmFsdWVT
dG9yZShzdGQ6OnVuaXF1ZV9wdHI8SW5kZXhWYWx1ZVN0b3JlPiYmKTsKIAogICAgIE1lbW9yeUlu
ZGV4Q3Vyc29yKiBtYXliZU9wZW5DdXJzb3IoY29uc3QgSURCQ3Vyc29ySW5mbyYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVj
dFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1v
cnlPYmplY3RTdG9yZS5jcHAKaW5kZXggZDVkYTUzZC4uNWRmMTIyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2Jq
ZWN0U3RvcmUuY3BwCkBAIC0xMDIsNiArMTAyLDU3IEBAIElEQkVycm9yIE1lbW9yeU9iamVjdFN0
b3JlOjpjcmVhdGVJbmRleChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAordm9pZCBNZW1vcnlPYmplY3RTdG9yZTo6bWF5YmVSZXN0
b3JlRGVsZXRlZEluZGV4KHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlJbmRleD4gaW5kZXgpCit7Cisg
ICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeU9iamVjdFN0b3JlOjptYXliZVJlc3RvcmVEZWxldGVk
SW5kZXgiKTsKKworICAgIGlmIChtX2luZm8uaGFzSW5kZXgoaW5kZXgtPmluZm8oKS5uYW1lKCkp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luZm8uYWRkRXhpc3RpbmdJbmRleChpbmRleC0+
aW5mbygpKTsKKworICAgIEFTU0VSVCghbV9pbmRleGVzQnlJZGVudGlmaWVyLmNvbnRhaW5zKGlu
ZGV4LT5pbmZvKCkuaWRlbnRpZmllcigpKSk7CisgICAgaW5kZXgtPmNsZWFySW5kZXhWYWx1ZVN0
b3JlKCk7CisgICAgYXV0byBlcnJvciA9IHBvcHVsYXRlSW5kZXhXaXRoRXhpc3RpbmdSZWNvcmRz
KCppbmRleCk7CisKKyAgICAvLyBTaW5jZSB0aGlzIGluZGV4IHdhcyBpbnN0YWxsZWQgaW4gdGhl
IG9iamVjdCBzdG9yZSBiZWZvcmUgdGhpcyB0cmFuc2FjdGlvbiBzdGFydGVkLAorICAgIC8vIGFz
c3VtaW5nIHRoaW5ncyB3ZXJlIGluIGEgdmFsaWQgc3RhdGUgdGhlbiwgd2Ugc2hvdWxkIGRlZmlu
aXRlbHkgYmUgYWJsZSB0byBzdWNjZXNzZnVsbHkKKyAgICAvLyByZXBvcHVsYXRlIHRoZSBpbmRl
eCB3aXRoIHRoZSBvYmplY3Qgc3RvcmUncyBwcmUtdHJhbnNhY3Rpb24gcmVjb3Jkcy4KKyAgICBB
U1NFUlRfVU5VU0VEKGVycm9yLCBlcnJvci5pc051bGwoKSk7CisKKyAgICByZWdpc3RlckluZGV4
KFdURjo6bW92ZShpbmRleCkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5SW5kZXg+IE1l
bW9yeU9iamVjdFN0b3JlOjp0YWtlSW5kZXhCeU5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIGF1dG8gcmF3SW5kZXggPSBtX2luZGV4ZXNCeU5hbWUudGFrZShuYW1lKTsKKyAgICBpZiAo
IXJhd0luZGV4KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gaW5kZXggPSBt
X2luZGV4ZXNCeUlkZW50aWZpZXIudGFrZShyYXdJbmRleC0+aW5mbygpLmlkZW50aWZpZXIoKSk7
CisgICAgQVNTRVJUKGluZGV4KTsKKworICAgIHJldHVybiBpbmRleDsKK30KKworSURCRXJyb3Ig
TWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpCit7CisgICAgTE9HKElu
ZGV4ZWREQiwgIk1lbW9yeU9iamVjdFN0b3JlOjpkZWxldGVJbmRleCIpOworCisgICAgaWYgKCFt
X3dyaXRlVHJhbnNhY3Rpb24gfHwgIW1fd3JpdGVUcmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdl
KCkgfHwgbV93cml0ZVRyYW5zYWN0aW9uICE9ICZ0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJu
IElEQkVycm9yKElEQkV4Y2VwdGlvbkNvZGU6OkNvbnN0cmFpbnRFcnJvcik7CisgICAgCisgICAg
YXV0byBpbmRleCA9IHRha2VJbmRleEJ5TmFtZShpbmRleE5hbWUpOworICAgIEFTU0VSVChpbmRl
eCk7CisgICAgaWYgKCFpbmRleCkKKyAgICAgICAgcmV0dXJuIElEQkVycm9yKElEQkV4Y2VwdGlv
bkNvZGU6OkNvbnN0cmFpbnRFcnJvcik7CisKKyAgICBtX2luZm8uZGVsZXRlSW5kZXgoaW5kZXhO
YW1lKTsKKyAgICB0cmFuc2FjdGlvbi5pbmRleERlbGV0ZWQoV1RGOjptb3ZlKGluZGV4KSk7CisK
KyAgICByZXR1cm4geyB9OworfQorCiBib29sIE1lbW9yeU9iamVjdFN0b3JlOjpjb250YWluc1Jl
Y29yZChjb25zdCBJREJLZXlEYXRhJiBrZXkpCiB7CiAgICAgaWYgKCFtX2tleVZhbHVlU3RvcmUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVt
b3J5T2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9NZW1vcnlPYmplY3RTdG9yZS5oCmluZGV4IGQ1OGI3NzIuLmI5OTQ2NjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9y
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlP
YmplY3RTdG9yZS5oCkBAIC02Niw2ICs2Niw4IEBAIHB1YmxpYzoKICAgICBNZW1vcnlCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbiogd3JpdGVUcmFuc2FjdGlvbigpIHsgcmV0dXJuIG1fd3JpdGVUcmFu
c2FjdGlvbjsgfQogCiAgICAgSURCRXJyb3IgY3JlYXRlSW5kZXgoTWVtb3J5QmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24mLCBjb25zdCBJREJJbmRleEluZm8mKTsKKyAgICBJREJFcnJvciBkZWxldGVJ
bmRleChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYsIGNvbnN0IFN0cmluZyYgaW5kZXhO
YW1lKTsKKyAgICB2b2lkIHJlZ2lzdGVySW5kZXgoc3RkOjp1bmlxdWVfcHRyPE1lbW9yeUluZGV4
PiYmKTsKIAogICAgIGJvb2wgY29udGFpbnNSZWNvcmQoY29uc3QgSURCS2V5RGF0YSYpOwogICAg
IHZvaWQgZGVsZXRlUmVjb3JkKGNvbnN0IElEQktleURhdGEmKTsKQEAgLTkxLDYgKzkzLDggQEAg
cHVibGljOgogCiAgICAgTWVtb3J5SW5kZXgqIGluZGV4Rm9ySWRlbnRpZmllcih1aW50NjRfdCk7
CiAKKyAgICB2b2lkIG1heWJlUmVzdG9yZURlbGV0ZWRJbmRleChzdGQ6OnVuaXF1ZV9wdHI8TWVt
b3J5SW5kZXg+KTsKKwogcHJpdmF0ZToKICAgICBNZW1vcnlPYmplY3RTdG9yZShjb25zdCBJREJP
YmplY3RTdG9yZUluZm8mKTsKIApAQCAtMTAzLDYgKzEwNyw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCB1cGRhdGVDdXJzb3JzRm9yUHV0UmVjb3JkKHN0ZDo6c2V0PElEQktleURhdGE+OjppdGVyYXRv
cik7CiAgICAgdm9pZCB1cGRhdGVDdXJzb3JzRm9yRGVsZXRlUmVjb3JkKGNvbnN0IElEQktleURh
dGEmKTsKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlJbmRleD4gdGFrZUluZGV4QnlOYW1l
KGNvbnN0IFN0cmluZyYgbmFtZSk7CisKICAgICBJREJPYmplY3RTdG9yZUluZm8gbV9pbmZvOwog
CiAgICAgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24qIG1fd3JpdGVUcmFuc2FjdGlvbiB7
IG51bGxwdHIgfTsKQEAgLTExMSw3ICsxMTcsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVl
X3B0cjxLZXlWYWx1ZU1hcD4gbV9rZXlWYWx1ZVN0b3JlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxz
dGQ6OnNldDxJREJLZXlEYXRhPj4gbV9vcmRlcmVkS2V5czsKIAotICAgIHZvaWQgcmVnaXN0ZXJJ
bmRleChzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5SW5kZXg+JiYpOwogICAgIHZvaWQgdW5yZWdpc3Rl
ckluZGV4KE1lbW9yeUluZGV4Jik7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjp1bmlxdWVf
cHRyPE1lbW9yeUluZGV4Pj4gbV9pbmRleGVzQnlJZGVudGlmaWVyOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBNZW1vcnlJbmRleCo+IG1faW5kZXhlc0J5TmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwCmluZGV4IDc5MzE4ZDIuLmIwNmRjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApA
QCAtMzczLDYgKzM3Myw0MSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3Jl
YXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIHBlcmZvcm1F
cnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQogCit2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IGluZGV4TmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6
OmRlbGV0ZUluZGV4Iik7CisKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFj
ayhjYWxsYmFjayk7CisgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZUluZGV4LCBj
YWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGluZGV4TmFtZSkpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtRGVsZXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICBBU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybURlbGV0ZUluZGV4Iik7CisKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwor
ICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhOYW1lKTsKKworICAgIElEQkVycm9yIGVycm9yOwor
ICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZUluZGV4LCBjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSkpOwor
fQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlSW5kZXgodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlSW5kZXgiKTsKKworICAgIGlmIChlcnJvci5pc051
bGwoKSkgeworICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+
aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICAg
ICAgaWYgKG9iamVjdFN0b3JlSW5mbykKKyAgICAgICAgICAgIG9iamVjdFN0b3JlSW5mby0+ZGVs
ZXRlSW5kZXgoaW5kZXhOYW1lKTsKKyAgICB9CisKKyAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhj
YWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKK30KKwogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlE
YXRhJiBrZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhLCBJbmRl
eGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2Fs
bGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRh
YmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmgKaW5kZXggYWNiNDcxZi4uNTkxYmE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
LmgKQEAgLTc5LDYgKzc5LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUo
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVO
YW1lLCBFcnJvckNhbGxiYWNrKTsKICAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgRXJy
b3JDYWxsYmFjayk7CiAgICAgdm9pZCBjcmVhdGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgRXJyb3JDYWxsYmFjayk7CisgICAgdm9pZCBk
ZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgRXJyb3JDYWxsYmFjayk7
CiAgICAgdm9pZCBwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURh
dGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhLCBJbmRleGVkREI6Ok9i
amVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrKTsKICAgICB2b2lkIGdldFJl
Y29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEdldFJl
c3VsdENhbGxiYWNrKTsKICAgICB2b2lkIGdldENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgQ291bnRDYWxsYmFjayk7CkBAIC0xMTQsNiArMTE1LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSk7CiAgICAgdm9pZCBw
ZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIHZvaWQgcGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYpOworICAgIHZvaWQgcGVyZm9y
bURlbGV0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOwogICAgIHZvaWQgcGVyZm9ybVB1
dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1
ZURhdGEsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsKICAgICB2b2lkIHBl
cmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKICAgICB2b2lkIHBlcmZvcm1H
ZXRJbmRleFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJl
Y29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwpAQCAtMTI5LDYgKzEzMSw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3Rv
cmVOYW1lKTsKICAgICB2b2lkIGRpZFBlcmZvcm1DbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIGRpZFBlcmZvcm1D
cmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwg
Y29uc3QgSURCSW5kZXhJbmZvJik7CisgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlSW5kZXgodWlu
dDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOwogICAgIHZvaWQgZGlk
UGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJy
b3ImLCBjb25zdCBJREJLZXlEYXRhJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtR2V0UmVjb3JkKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJHZXRS
ZXN1bHQmKTsKICAgICB2b2lkIGRpZFBlcmZvcm1HZXRDb3VudCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3QpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcAppbmRleCBkZmU4YTAwLi5jYzhhMTViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2VDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcApAQCAtMTYwLDYgKzE2MCwx
MyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkQ3JlYXRlSW5kZXgoY29u
c3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YQogICAgIG1fY29ubmVjdGlvblRvQ2xpZW50LmRp
ZENyZWF0ZUluZGV4KHJlc3VsdERhdGEpOwogfQogCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29u
bmVjdGlvbjo6ZGlkRGVsZXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkK
K3sKKyAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpkaWRE
ZWxldGVJbmRleCIpOworCisgICAgbV9jb25uZWN0aW9uVG9DbGllbnQuZGlkRGVsZXRlSW5kZXgo
cmVzdWx0RGF0YSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmgKaW5k
ZXggNzMxNDA4ZC4uYzU0NTJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb24uaApAQCAtNzAsNiArNzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWREZWxldGVPYmpl
Y3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJik7CiAgICAgdm9pZCBkaWRDbGVhck9iamVjdFN0
b3JlKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKICAgICB2b2lkIGRpZENyZWF0ZUluZGV4KGNvbnN0
IElEQlJlc3VsdERhdGEmKTsKKyAgICB2b2lkIGRpZERlbGV0ZUluZGV4KGNvbnN0IElEQlJlc3Vs
dERhdGEmKTsKIAogcHJpdmF0ZToKICAgICBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24oVW5p
cXVlSURCRGF0YWJhc2UmLCBJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAppbmRleCBlZmZiMzhjLi5iMGI1MWUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCkBAIC0xNjMs
NiArMTYzLDIzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRlSW5k
ZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhCiAgICAgfSk7CiB9CiAKK3ZvaWQg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXgoY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgaW5kZXhOYW1lKQoreworICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uOjpkZWxldGVJbmRleCIpOworCisgICAgQVNTRVJUKGlzVmVyc2lvbkNo
YW5nZSgpKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJl
cXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKKworICAgIFJlZlB0cjxVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uPiBzZWxmKHRoaXMpOworICAgIG1fZGF0YWJhc2VDb25uZWN0
aW9uLT5kYXRhYmFzZSgpLmRlbGV0ZUluZGV4KCp0aGlzLCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGluZGV4TmFtZSwgW3RoaXMsIHNlbGYsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJy
b3IpIHsKKyAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b246OmNyZWF0ZUluZGV4IChjYWxsYmFjaykiKTsKKyAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgp
KQorICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZERlbGV0ZUluZGV4KElEQlJl
c3VsdERhdGE6OmRlbGV0ZUluZGV4U3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmll
cigpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
aWREZWxldGVJbmRleChJREJSZXN1bHREYXRhOjplcnJvcihyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRl
bnRpZmllcigpLCBlcnJvcikpOworICAgIH0pOworfQorCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OnB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwg
Y29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZh
bHVlRGF0YSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9k
ZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
cHV0T3JBZGQiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5oCmlu
ZGV4IGUxNzM2ZDYuLjgwMzkyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24uaApAQCAtNzAsNiArNzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVO
YW1lKTsKICAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVzdERhdGEmLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY3JlYXRlSW5kZXgoY29u
c3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJbmRleEluZm8mKTsKKyAgICB2b2lkIGRlbGV0
ZUluZGV4KGNvbnN0IElEQlJlcXVlc3REYXRhJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7CiAgICAgdm9pZCBwdXRPckFkZChjb25zdCBJ
REJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1
ZmZlciYgdmFsdWVEYXRhLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSk7CiAg
ICAgdm9pZCBnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmKTsKICAgICB2b2lkIGdldENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3Qg
SURCS2V5UmFuZ2VEYXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCmluZGV4IGNiMTY5ZjAuLmFl
NDAyMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JREJEYXRhYmFzZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCkBAIC0xMzUsNiArMTM1LDE3IEBAIHZvaWQg
SURCRGF0YWJhc2VJbmZvOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVjdFN0
b3JlTmFtZSkKICAgICBtX29iamVjdFN0b3JlTWFwLnJlbW92ZShpbmZvLT5pZGVudGlmaWVyKCkp
OwogfQogCisjaWZuZGVmIE5ERUJVRworU3RyaW5nIElEQkRhdGFiYXNlSW5mbzo6bG9nZ2luZ1N0
cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nIHRvcCA9IG1ha2VTdHJpbmcoIkRhdGFiYXNlOiAi
LCBtX25hbWUsICIgdmVyc2lvbiAiLCBTdHJpbmc6Om51bWJlcihtX3ZlcnNpb24pLCAiXG4iKTsK
KyAgICBmb3IgKGF1dG8gb2JqZWN0U3RvcmUgOiBtX29iamVjdFN0b3JlTWFwLnZhbHVlcygpKQor
ICAgICAgICB0b3AuYXBwZW5kKG1ha2VTdHJpbmcob2JqZWN0U3RvcmUubG9nZ2luZ1N0cmluZygx
KSwgIlxuIikpOworCisgICAgcmV0dXJuIHRvcDsgCit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJ
bmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJh
c2VJbmZvLmgKaW5kZXggMjAzYTY5My4uYjMzMDM0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaApAQCAt
NTgsNiArNTgsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSk7CiAKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5n
IGxvZ2dpbmdTdHJpbmcoKSBjb25zdDsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIElEQkRhdGFi
YXNlSW5mbygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCSW5kZXhJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCmluZGV4IDQxY2Y5YTkuLmUxOWE4ZjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleElu
Zm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJ
bmRleEluZm8uY3BwCkBAIC00OSw2ICs0OSwxNyBAQCBJREJJbmRleEluZm8gSURCSW5kZXhJbmZv
Ojppc29sYXRlZENvcHkoKSBjb25zdAogICAgIHJldHVybiB7IG1faWRlbnRpZmllciwgbV9vYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIG1fbmFtZS5pc29sYXRlZENvcHkoKSwgbV9rZXlQYXRoLmlzb2xh
dGVkQ29weSgpLCBtX3VuaXF1ZSwgbV9tdWx0aUVudHJ5IH07CiB9CiAKKyNpZm5kZWYgTkRFQlVH
CitTdHJpbmcgSURCSW5kZXhJbmZvOjpsb2dnaW5nU3RyaW5nKGludCBpbmRlbnQpIGNvbnN0Cit7
CisgICAgU3RyaW5nIGluZGVudFN0cmluZzsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZGVu
dDsgKytpKQorICAgICAgICBpbmRlbnRTdHJpbmcuYXBwZW5kKCIgIik7CisKKyAgICByZXR1cm4g
bWFrZVN0cmluZyhpbmRlbnRTdHJpbmcsICJJbmRleDogIiwgbV9uYW1lLCBTdHJpbmc6OmZvcm1h
dCgiICglIiBQUkl1NjQgIikgXG4iLCBtX2lkZW50aWZpZXIpKTsKK30KKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJ
bmRleEluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJ
bmRleEluZm8uaAppbmRleCBlZDNmMWE0Li43ZmM1NmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5oCkBAIC00Nyw2
ICs0NywxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCB1bmlxdWUoKSBjb25zdCB7IHJldHVybiBtX3Vu
aXF1ZTsgfQogICAgIGJvb2wgbXVsdGlFbnRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fbXVsdGlFbnRy
eTsgfQogCisjaWZuZGVmIE5ERUJVRworICAgIFN0cmluZyBsb2dnaW5nU3RyaW5nKGludCBpbmRl
bnQgPSAwKSBjb25zdDsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1faWRlbnRp
ZmllciB7IDAgfTsKICAgICB1aW50NjRfdCBtX29iamVjdFN0b3JlSWRlbnRpZmllciB7IDAgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJP
YmplY3RTdG9yZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAKaW5kZXggNzgxYTk1Mi4uZmYxMjBkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0
b3JlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQk9iamVjdFN0b3JlSW5mby5jcHAKQEAgLTY5LDYgKzY5LDExIEBAIGJvb2wgSURCT2JqZWN0
U3RvcmVJbmZvOjpoYXNJbmRleChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCitib29sIElEQk9iamVjdFN0b3JlSW5mbzo6aGFzSW5kZXgodWludDY0X3Qg
aW5kZXhJZGVudGlmaWVyKSBjb25zdAoreworICAgIHJldHVybiBtX2luZGV4TWFwLmNvbnRhaW5z
KGluZGV4SWRlbnRpZmllcik7Cit9CisKIElEQkluZGV4SW5mbyogSURCT2JqZWN0U3RvcmVJbmZv
OjppbmZvRm9yRXhpc3RpbmdJbmRleChjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgZm9yIChh
dXRvJiBpbmRleCA6IG1faW5kZXhNYXAudmFsdWVzKCkpIHsKQEAgLTk5LDYgKzEwNCwzMCBAQCBW
ZWN0b3I8U3RyaW5nPiBJREJPYmplY3RTdG9yZUluZm86OmluZGV4TmFtZXMoKSBjb25zdAogICAg
IHJldHVybiBuYW1lczsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUluZm86OmRlbGV0ZUluZGV4
KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQoreworICAgIGF1dG8qIGluZm8gPSBpbmZvRm9yRXhp
c3RpbmdJbmRleChpbmRleE5hbWUpOworICAgIGlmICghaW5mbykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9pbmRleE1hcC5yZW1vdmUoaW5mby0+aWRlbnRpZmllcigpKTsKK30KKworI2lmbmRl
ZiBOREVCVUcKK1N0cmluZyBJREJPYmplY3RTdG9yZUluZm86OmxvZ2dpbmdTdHJpbmcoaW50IGlu
ZGVudCkgY29uc3QKK3sKKyAgICBTdHJpbmcgaW5kZW50U3RyaW5nOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgaW5kZW50OyArK2kpCisgICAgICAgIGluZGVudFN0cmluZy5hcHBlbmQoIiAiKTsK
KworICAgIFN0cmluZyB0b3AgPSBtYWtlU3RyaW5nKGluZGVudFN0cmluZywgIk9iamVjdCBzdG9y
ZTogIiwgbV9uYW1lLCBTdHJpbmc6OmZvcm1hdCgiICglIiBQUkl1NjQgIikgXG4iLCBtX2lkZW50
aWZpZXIpKTsKKyAgICBmb3IgKGF1dG8gaW5kZXggOiBtX2luZGV4TWFwLnZhbHVlcygpKQorICAg
ICAgICB0b3AuYXBwZW5kKG1ha2VTdHJpbmcoaW5kZXgubG9nZ2luZ1N0cmluZyhpbmRlbnQgKyAx
KSwgIlxuIikpOworCisgICAgcmV0dXJuIHRvcDsgCit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3Rv
cmVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2Jq
ZWN0U3RvcmVJbmZvLmgKaW5kZXggOTQwNDUwNS4uZmZiZDAzZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9y
ZUluZm8uaApAQCAtNTIsMTAgKzUyLDE3IEBAIHB1YmxpYzoKICAgICBJREJJbmRleEluZm8gY3Jl
YXRlTmV3SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1
bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7CiAgICAgdm9pZCBhZGRFeGlzdGluZ0luZGV4KGNvbnN0
IElEQkluZGV4SW5mbyYpOwogICAgIGJvb2wgaGFzSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKSBj
b25zdDsKKyAgICBib29sIGhhc0luZGV4KHVpbnQ2NF90IGluZGV4SWRlbnRpZmllcikgY29uc3Q7
CiAgICAgSURCSW5kZXhJbmZvKiBpbmZvRm9yRXhpc3RpbmdJbmRleChjb25zdCBTdHJpbmcmIG5h
bWUpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lcygpIGNvbnN0OwogCisgICAgdm9p
ZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7CisKKyNpZm5kZWYgTkRFQlVH
CisgICAgU3RyaW5nIGxvZ2dpbmdTdHJpbmcoaW50IGluZGVudCA9IDApIGNvbnN0OworI2VuZGlm
CisKIHByaXZhdGU6CiAgICAgdWludDY0X3QgbV9pZGVudGlmaWVyIHsgMCB9OwogICAgIFN0cmlu
ZyBtX25hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCUmVzdWx0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCUmVzdWx0RGF0YS5jcHAKaW5kZXggYzNkMDcxNi4uMmUzZDZhMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJS
ZXN1bHREYXRhLmNwcApAQCAtMTEwLDYgKzExMCwxMSBAQCBJREJSZXN1bHREYXRhIElEQlJlc3Vs
dERhdGE6OmNyZWF0ZUluZGV4U3VjY2Vzcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJl
cQogICAgIHJldHVybiB7IElEQlJlc3VsdFR5cGU6OkNyZWF0ZUluZGV4U3VjY2VzcywgcmVxdWVz
dElkZW50aWZpZXIgfTsKIH0KIAorSURCUmVzdWx0RGF0YSBJREJSZXN1bHREYXRhOjpkZWxldGVJ
bmRleFN1Y2Nlc3MoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmll
cikKK3sKKyAgICByZXR1cm4geyBJREJSZXN1bHRUeXBlOjpEZWxldGVJbmRleFN1Y2Nlc3MsIHJl
cXVlc3RJZGVudGlmaWVyIH07Cit9CisKIElEQlJlc3VsdERhdGEgSURCUmVzdWx0RGF0YTo6cHV0
T3JBZGRTdWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZp
ZXIsIGNvbnN0IElEQktleURhdGEmIHJlc3VsdEtleSkKIHsKICAgICBJREJSZXN1bHREYXRhIHJl
c3VsdChJREJSZXN1bHRUeXBlOjpQdXRPckFkZFN1Y2Nlc3MsIHJlcXVlc3RJZGVudGlmaWVyKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJS
ZXN1bHREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURC
UmVzdWx0RGF0YS5oCmluZGV4IDJlZGU3YmMuLjE0MWQzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERhdGEuaApAQCAt
NTMsNiArNTMsNyBAQCBlbnVtIGNsYXNzIElEQlJlc3VsdFR5cGUgewogICAgIEdldENvdW50U3Vj
Y2VzcywKICAgICBEZWxldGVSZWNvcmRTdWNjZXNzLAogICAgIENyZWF0ZUluZGV4U3VjY2VzcywK
KyAgICBEZWxldGVJbmRleFN1Y2Nlc3MsCiAgICAgT3BlbkN1cnNvclN1Y2Nlc3MsCiAgICAgSXRl
cmF0ZUN1cnNvclN1Y2Nlc3MsCiB9OwpAQCAtNzEsNiArNzIsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIElEQlJlc3VsdERhdGEgZGVsZXRlT2JqZWN0U3RvcmVTdWNjZXNzKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYpOwogICAgIHN0YXRpYyBJREJSZXN1bHREYXRhIGNsZWFyT2JqZWN0U3Rv
cmVTdWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYpOwogICAgIHN0YXRpYyBJREJS
ZXN1bHREYXRhIGNyZWF0ZUluZGV4U3VjY2Vzcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
KTsKKyAgICBzdGF0aWMgSURCUmVzdWx0RGF0YSBkZWxldGVJbmRleFN1Y2Nlc3MoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJik7CiAgICAgc3RhdGljIElEQlJlc3VsdERhdGEgcHV0T3JBZGRT
dWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYsIGNvbnN0IElEQktleURhdGEmKTsK
ICAgICBzdGF0aWMgSURCUmVzdWx0RGF0YSBnZXRSZWNvcmRTdWNjZXNzKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYsIGNvbnN0IElEQkdldFJlc3VsdCYpOwogICAgIHN0YXRpYyBJREJSZXN1
bHREYXRhIGdldENvdW50U3VjY2Vzcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImLCB1aW50
NjRfdCBjb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCmluZGV4IGRiYmMxMjUuLmFi
ZTNmMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC0xNTIsNiArMTUyLDE0IEBA
IHZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjpkaWRDcmVhdGVJbmRleChjb25zdCBJREJSZXN1bHRE
YXRhJiByZXN1bHREYXRhKQogICAgIH0pOwogfQogCit2b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6
ZGlkRGVsZXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBS
ZWZQdHI8SW5Qcm9jZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOworICAgIFJ1bkxvb3A6OmN1cnJl
bnQoKS5kaXNwYXRjaChbdGhpcywgc2VsZiwgcmVzdWx0RGF0YV0geworICAgICAgICBtX2Nvbm5l
Y3Rpb25Ub1NlcnZlci0+ZGlkRGVsZXRlSW5kZXgocmVzdWx0RGF0YSk7CisgICAgfSk7Cit9CisK
IHZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjpkaWRQdXRPckFkZChjb25zdCBJREJSZXN1bHREYXRh
JiByZXN1bHREYXRhKQogewogICAgIFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2ZXI+IHNlbGYodGhp
cyk7CkBAIC0yNDAsMTEgKzI0OCwxOSBAQCB2b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6Y2xlYXJP
YmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIHVpbgogICAgIH0p
OwogfQogCi12b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVx
dWVzdERhdGEmIHJlc3VsdERhdGEsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKK3ZvaWQgSW5Q
cm9jZXNzSURCU2VydmVyOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKIHsKICAgICBSZWZQdHI8SW5Qcm9jZXNz
SURCU2VydmVyPiBzZWxmKHRoaXMpOwotICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS5kaXNwYXRjaChb
dGhpcywgc2VsZiwgcmVzdWx0RGF0YSwgaW5mb10gewotICAgICAgICBtX3NlcnZlci0+Y3JlYXRl
SW5kZXgocmVzdWx0RGF0YSwgaW5mbyk7CisgICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNo
KFt0aGlzLCBzZWxmLCByZXF1ZXN0RGF0YSwgaW5mb10geworICAgICAgICBtX3NlcnZlci0+Y3Jl
YXRlSW5kZXgocmVxdWVzdERhdGEsIGluZm8pOworICAgIH0pOworfQorCit2b2lkIEluUHJvY2Vz
c0lEQlNlcnZlcjo6ZGVsZXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1l
KQoreworICAgIFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2ZXI+IHNlbGYodGhpcyk7CisgICAgUnVu
TG9vcDo6Y3VycmVudCgpLmRpc3BhdGNoKFt0aGlzLCBzZWxmLCByZXF1ZXN0RGF0YSwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWVdIHsKKyAgICAgICAgbV9zZXJ2ZXItPmRlbGV0ZUlu
ZGV4KHJlcXVlc3REYXRhLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSk7CiAgICAg
fSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAppbmRleCA3NTUzZTE3Li40N2QwOTA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9j
ZXNzSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCkBAIC02Miw2ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25z
dCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2
b2lkIGNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVzdERhdGEmLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVJbmRleChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkluZGV4SW5mbyYpIG92ZXJy
aWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChjb25zdCBJREJSZXF1ZXN0
RGF0YSYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRl
eE5hbWUpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBwdXRPckFkZChjb25zdCBJ
REJSZXF1ZXN0RGF0YSYsIElEQktleSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IElu
ZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKSBvdmVycmlkZSBmaW5hbDsKICAgICB2
aXJ0dWFsIHZvaWQgZ2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGdldENvdW50KGNv
bnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJikgb3ZlcnJpZGUgZmlu
YWw7CkBAIC04MSw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRGVsZXRl
T2JqZWN0U3RvcmUoY29uc3QgSURCUmVzdWx0RGF0YSYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRDbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc3VsdERhdGEmKSBvdmVy
cmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlSW5kZXgoY29uc3QgSURCUmVz
dWx0RGF0YSYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBkaWREZWxldGVJbmRl
eChjb25zdCBJREJSZXN1bHREYXRhJikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lk
IGRpZFB1dE9yQWRkKGNvbnN0IElEQlJlc3VsdERhdGEmKSBvdmVycmlkZSBmaW5hbDsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkR2V0UmVjb3JkKGNvbnN0IElEQlJlc3VsdERhdGEmKSBvdmVycmlkZSBm
aW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0Q291bnQoY29uc3QgSURCUmVzdWx0RGF0YSYp
IG92ZXJyaWRlIGZpbmFsOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265874</attachid>
            <date>2015-11-19 10:30:54 -0800</date>
            <delta_ts>2015-11-19 11:01:43 -0800</delta_ts>
            <desc>Patch v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>62709</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlMzQwZmJmLi4yYzhlNmRjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMTEt
MTkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IElEQk9iamVjdFN0b3JlLmRlbGV0ZUluZGV4KCkgc3VwcG9ydC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDkxMQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2RlbGV0ZWluZGV4LTEtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtMS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBz
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtMi1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9kZWxldGVpbmRleC0yLmh0bWw6
IEFkZGVkLgorCiAyMDE1LTExLTE5ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+
CiAKICAgICAgICAgU2tpcCBtb3JlIG1lZGlhc3RyZWFtIHRlc3RzIHRoYXQgY3Jhc2ggd2hlbiBw
YWludGluZyBhIG1vY2sgdmlkZW8gc291cmNlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTEtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWFjODYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgt
MS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGhpcyB0ZXN0cyBkZWxldGluZyBhbiBp
bmRleCBhbmQgdGhlbiBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbi4KK0luaXRpYWwgdXBncmFk
ZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gMCBOZXcgdmVyc2lvbiAtIDEKK0NvdW50IGlzOiAyCitD
dXJzb3IgYXQgcmVjb3JkOiBBIC8gMQorQ3Vyc29yIGF0IHJlY29yZDogQSAvIDIKK0N1cnNvciBh
dCByZWNvcmQ6IHVuZGVmaW5lZCAvIHVuZGVmaW5lZAorRGVsZXRlZCB0aGUgaW5kZXgKK0luaXRp
YWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlCitPYmplY3Qgc3Rv
cmUgaGFzIGluZGV4ZXM6CitVbmFibGUgdG8gZ2V0IGluZGV4IGZyb20gb2JqZWN0IHN0b3JlIChp
dCBzaG91bGRuJ3QgZXhpc3QpCitUcmFuc2FjdGlvbiBjb21wbGV0ZQorRG9uZQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtMS5o
dG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTEu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmY3OGZkCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWlu
ZGV4LTEuaHRtbApAQCAtMCwwICsxLDExMyBAQAorVGhpcyB0ZXN0cyBkZWxldGluZyBhbiBpbmRl
eCBhbmQgdGhlbiBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbi48YnI+Cis8ZGl2IGlkPSJsb2dn
ZXIiPjwvZGl2PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit9
CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGxvZygiRG9uZSIpOworICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dnZXIi
KS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKwordmFyIGluZGV4OwordmFyIG9i
amVjdFN0b3JlOwordmFyIGRhdGFiYXNlOworCitmdW5jdGlvbiBjaGVja0luZGV4VmFsdWVzKCkK
K3sKKyAgICB2YXIgY291bnRSZXF1ZXN0ID0gaW5kZXguY291bnQoKTsKKyAgICBjb3VudFJlcXVl
c3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygiQ291bnQgaXM6ICIgKyBj
b3VudFJlcXVlc3QucmVzdWx0KTsKKyAgICB9CisKKyAgICB2YXIgY3Vyc29yUmVxdWVzdCA9IGlu
ZGV4Lm9wZW5DdXJzb3IoKTsKKyAgICBjdXJzb3JSZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgY3Vyc29yID0gY3Vyc29yUmVxdWVzdC5yZXN1bHQ7CisgICAgICAg
IGxvZygiQ3Vyc29yIGF0IHJlY29yZDogIiArIGN1cnNvci5rZXkgKyAiIC8gIiArIGN1cnNvci5w
cmltYXJ5S2V5KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjdXJzb3Iua2V5ICE9IHVuZGVmaW5l
ZCkKKyAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIG9iamVjdFN0b3JlLmRlbGV0ZUluZGV4KCJUZXN0SW5kZXgxIik7CisgICAgICAgICAg
ICBsb2coIkRlbGV0ZWQgdGhlIGluZGV4Iik7CisgICAgICAgIH0KKyAgICB9CisgICAgY3Vyc29y
UmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZSkgeworICAgICAgICBsb2coIlVuZXhwZWN0ZWQg
ZXJyb3Igb3BlbmluZyBvciBpdGVyYXRpbmcgY3Vyc29yIik7CisgICAgICAgIGxvZ0N1cnNvcihj
dXJzb3JSZXF1ZXN0LnJlc3VsdCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9IAorfQorCit2YXIg
Y3JlYXRlUmVxdWVzdCA9IHdpbmRvdy5pbmRleGVkREIub3BlbigiRGVsZXRlSW5kZXgxRGF0YWJh
c2UiLCAxKTsKK2NyZWF0ZVJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICBsb2coIkluaXRpYWwgdXBncmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gIiArIGV2
ZW50Lm9sZFZlcnNpb24gKyAiIE5ldyB2ZXJzaW9uIC0gIiArIGV2ZW50Lm5ld1ZlcnNpb24pOwor
CisgICAgdmFyIHZlcnNpb25UcmFuc2FjdGlvbiA9IGNyZWF0ZVJlcXVlc3QudHJhbnNhY3Rpb247
CisgICAgZGF0YWJhc2UgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgIG9iamVjdFN0b3JlID0g
ZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUoIlRlc3RPYmplY3RTdG9yZSIpOworICAgIG9iamVj
dFN0b3JlLnB1dCh7IGJhcjogIkEiIH0sIDEpOworICAgIG9iamVjdFN0b3JlLnB1dCh7IGJhcjog
IkEiIH0sIDIpOworCisgICAgaW5kZXggPSBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgiVGVzdElu
ZGV4MSIsICJiYXIiKTsKKyAgICAKKyAgICBjaGVja0luZGV4VmFsdWVzKCk7CisgICAgCisgICAg
dmVyc2lvblRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBs
b2coIkluaXRpYWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIHVuZXhwZWN0ZWQg
YWJvcnQiKTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KKworICAgIHZlcnNpb25UcmFuc2FjdGlv
bi5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgbG9nKCJJbml0aWFsIHVw
Z3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBjb21wbGV0ZSIpOworICAgICAgICBjb250
aW51ZVRlc3QoKTsKKyAgICB9CisKKyAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFu
Z2UgdHJhbnNhY3Rpb24gdW5leHBlY3RlZCBlcnJvciIgKyBldmVudCk7CisgICAgICAgIGRvbmUo
KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNvbnRpbnVlVGVzdCgpIHsKKyAgICB2YXIgdHJhbnNh
Y3Rpb24gPSBkYXRhYmFzZS50cmFuc2FjdGlvbigiVGVzdE9iamVjdFN0b3JlIik7CisgICAgb2Jq
ZWN0U3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3JlIik7CisK
KyAgICB2YXIgbmFtZXMgPSBvYmplY3RTdG9yZS5pbmRleE5hbWVzOworICAgIGxvZygiT2JqZWN0
IHN0b3JlIGhhcyBpbmRleGVzOiIpCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgbG9nKG5hbWVzW2ldKTsKKyAgICAKKyAgICB0cnkgeworICAgICAg
ICBvYmplY3RTdG9yZS5pbmRleCgiVGVzdEluZGV4MSIpOworICAgIH0gY2F0Y2goZSkgeworICAg
ICAgICBsb2coIlVuYWJsZSB0byBnZXQgaW5kZXggZnJvbSBvYmplY3Qgc3RvcmUgKGl0IHNob3Vs
ZG4ndCBleGlzdCkiKTsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiB1bmV4cGVjdGVkIGFib3J0Iik7
CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0g
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiBjb21wbGV0ZSIpOwor
ICAgICAgICBkb25lKCk7CisgICAgfQorCisgICAgdHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygiVHJhbnNhY3Rpb24gdW5leHBlY3RlZCBlcnJvciIg
KyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CisKKzwvc2NyaXB0PgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTIt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0
ZWluZGV4LTItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNiYzU4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vZGVsZXRlaW5kZXgtMi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGhp
cyB0ZXN0cyBkZWxldGluZyBhbiBpbmRleCBhbmQgdGhlbiBhYm9ydGluZyB0aGUgdHJhbnNhY3Rp
b24uCitJbml0aWFsIHVwZ3JhZGUgbmVlZGVkOiBPbGQgdmVyc2lvbiAtIDAgTmV3IHZlcnNpb24g
LSAxCitDb3VudCBpczogMgorQ3Vyc29yIGF0IHJlY29yZDogQSAvIDEKK0N1cnNvciBhdCByZWNv
cmQ6IEEgLyAyCitDdXJzb3IgYXQgcmVjb3JkOiB1bmRlZmluZWQgLyB1bmRlZmluZWQKK0luaXRp
YWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlCitTZWNvbmQgdXBn
cmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gMSBOZXcgdmVyc2lvbiAtIDIKK0RlbGV0ZWQgdGhl
IGluZGV4CitBYm9ydGVkIHRoZSB0cmFuc2FjdGlvbgorU2Vjb25kIHVwZ3JhZGUgdmVyc2lvbmNo
YW5nZSB0cmFuc2FjdGlvbiBhYm9ydAorVGhpcmQgdXBncmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9u
IC0gMSBOZXcgdmVyc2lvbiAtIDMKK0NvdW50IGlzOiAyCitDdXJzb3IgYXQgcmVjb3JkOiBBIC8g
MQorQ3Vyc29yIGF0IHJlY29yZDogQSAvIDIKK0N1cnNvciBhdCByZWNvcmQ6IHVuZGVmaW5lZCAv
IHVuZGVmaW5lZAorVGhpcmQgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBs
ZXRlCitEb25lCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9kZWxldGVpbmRleC0yLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vZGVsZXRlaW5kZXgtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM4MDE1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtMi5odG1sCkBAIC0wLDAgKzEsMTM4IEBACitUaGlzIHRl
c3RzIGRlbGV0aW5nIGFuIGluZGV4IGFuZCB0aGVuIGFib3J0aW5nIHRoZSB0cmFuc2FjdGlvbi48
YnI+Cis8ZGl2IGlkPSJsb2dnZXIiPjwvZGl2PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0
UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7Cit9CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGxvZygiRG9uZSIp
OworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJsb2dnZXIiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKwor
dmFyIGluZGV4OwordmFyIG9iamVjdFN0b3JlOwordmFyIGRhdGFiYXNlOworCitmdW5jdGlvbiBj
aGVja0luZGV4VmFsdWVzKCkKK3sKKyAgICB2YXIgY291bnRSZXF1ZXN0ID0gaW5kZXguY291bnQo
KTsKKyAgICBjb3VudFJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGxv
ZygiQ291bnQgaXM6ICIgKyBjb3VudFJlcXVlc3QucmVzdWx0KTsKKyAgICB9CisKKyAgICB2YXIg
Y3Vyc29yUmVxdWVzdCA9IGluZGV4Lm9wZW5DdXJzb3IoKTsKKyAgICBjdXJzb3JSZXF1ZXN0Lm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgY3Vyc29yID0gY3Vyc29yUmVxdWVz
dC5yZXN1bHQ7CisgICAgICAgIGxvZygiQ3Vyc29yIGF0IHJlY29yZDogIiArIGN1cnNvci5rZXkg
KyAiIC8gIiArIGN1cnNvci5wcmltYXJ5S2V5KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjdXJz
b3Iua2V5ICE9IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOworICAg
IH0KKyAgICBjdXJzb3JSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGxv
ZygiVW5leHBlY3RlZCBlcnJvciBvcGVuaW5nIG9yIGl0ZXJhdGluZyBjdXJzb3IiKTsKKyAgICAg
ICAgbG9nQ3Vyc29yKGN1cnNvclJlcXVlc3QucmVzdWx0KTsKKyAgICAgICAgZG9uZSgpOworICAg
IH0gCit9CisKK3ZhciBjcmVhdGVSZXF1ZXN0ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKCJEZWxl
dGVJbmRleDJEYXRhYmFzZSIsIDEpOworY3JlYXRlUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBm
dW5jdGlvbihldmVudCkgeworICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZl
cnNpb24gLSAiICsgZXZlbnQub2xkVmVyc2lvbiArICIgTmV3IHZlcnNpb24gLSAiICsgZXZlbnQu
bmV3VmVyc2lvbik7CisKKyAgICB2YXIgdmVyc2lvblRyYW5zYWN0aW9uID0gY3JlYXRlUmVxdWVz
dC50cmFuc2FjdGlvbjsKKyAgICBkYXRhYmFzZSA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAg
b2JqZWN0U3RvcmUgPSBkYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3Jl
Iik7CisgICAgb2JqZWN0U3RvcmUucHV0KHsgYmFyOiAiQSIgfSwgMSk7CisgICAgb2JqZWN0U3Rv
cmUucHV0KHsgYmFyOiAiQSIgfSwgMik7CisKKyAgICBpbmRleCA9IG9iamVjdFN0b3JlLmNyZWF0
ZUluZGV4KCJUZXN0SW5kZXgxIiwgImJhciIpOworICAgIAorICAgIGNoZWNrSW5kZXhWYWx1ZXMo
KTsKKyAgICAKKyAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rp
b24gdW5leHBlY3RlZCBhYm9ydCIpOworICAgICAgICBkb25lKCk7CisgICAgfQorCisgICAgdmVy
c2lvblRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBs
b2coIkluaXRpYWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlIik7
CisgICAgICAgIGRhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIGNvbnRpbnVlVGVzdDEoKTsKKyAg
ICB9CisKKyAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7
CisgICAgICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24g
dW5leHBlY3RlZCBlcnJvciIgKyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIGNvbnRpbnVlVGVzdDEoKSB7CisgICAgdmFyIGNyZWF0ZVJlcXVlc3QgPSB3aW5k
b3cuaW5kZXhlZERCLm9wZW4oIkRlbGV0ZUluZGV4MkRhdGFiYXNlIiwgMik7CisgICAgY3JlYXRl
UmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBsb2co
IlNlY29uZCB1cGdyYWRlIG5lZWRlZDogT2xkIHZlcnNpb24gLSAiICsgZXZlbnQub2xkVmVyc2lv
biArICIgTmV3IHZlcnNpb24gLSAiICsgZXZlbnQubmV3VmVyc2lvbik7CisKKyAgICAgICAgZGF0
YWJhc2UgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB2YXIgdmVyc2lvblRyYW5zYWN0
aW9uID0gY3JlYXRlUmVxdWVzdC50cmFuc2FjdGlvbjsKKyAgICAgICAgb2JqZWN0U3RvcmUgPSB2
ZXJzaW9uVHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoIlRlc3RPYmplY3RTdG9yZSIpOworICAgICAg
ICBvYmplY3RTdG9yZS5kZWxldGVJbmRleCgiVGVzdEluZGV4MSIpOworICAgICAgICBsb2coIkRl
bGV0ZWQgdGhlIGluZGV4Iik7CisgICAgICAgIHZlcnNpb25UcmFuc2FjdGlvbi5hYm9ydCgpOwor
ICAgICAgICBsb2coIkFib3J0ZWQgdGhlIHRyYW5zYWN0aW9uIik7CisKKyAgICAgICAgdmVyc2lv
blRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgbG9n
KCJTZWNvbmQgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGFib3J0Iik7CisgICAg
ICAgICAgICBkYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAgY29udGludWVUZXN0MigpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmVyc2lvblRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5j
dGlvbihldmVudCkgeworICAgICAgICAgICAgbG9nKCJTZWNvbmQgdXBncmFkZSB2ZXJzaW9uY2hh
bmdlIHRyYW5zYWN0aW9uIHVuZXhwZWN0ZWQgY29tcGxldGUiKTsKKyAgICAgICAgICAgIGRvbmUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnNpb25UcmFuc2FjdGlvbi5vbmVycm9yID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGxvZygiU2Vjb25kIHVwZ3JhZGUgdmVyc2lvbmNo
YW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGVycm9yIiArIGV2ZW50KTsKKyAgICAgICAgICAg
IGRvbmUoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gY29udGludWVUZXN0Migp
IHsKKyAgICB2YXIgY3JlYXRlUmVxdWVzdCA9IHdpbmRvdy5pbmRleGVkREIub3BlbigiRGVsZXRl
SW5kZXgyRGF0YWJhc2UiLCAzKTsKKyAgICBjcmVhdGVSZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygiVGhpcmQgdXBncmFkZSBuZWVkZWQ6IE9s
ZCB2ZXJzaW9uIC0gIiArIGV2ZW50Lm9sZFZlcnNpb24gKyAiIE5ldyB2ZXJzaW9uIC0gIiArIGV2
ZW50Lm5ld1ZlcnNpb24pOworCisgICAgICAgIHZhciB2ZXJzaW9uVHJhbnNhY3Rpb24gPSBjcmVh
dGVSZXF1ZXN0LnRyYW5zYWN0aW9uOworICAgICAgICBvYmplY3RTdG9yZSA9IHZlcnNpb25UcmFu
c2FjdGlvbi5vYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3JlIik7CisgICAgICAgIGluZGV4ID0g
b2JqZWN0U3RvcmUuaW5kZXgoIlRlc3RJbmRleDEiKTsKKyAgICAKKyAgICAgICAgY2hlY2tJbmRl
eFZhbHVlcygpOyAgICAKKyAgICAgICAgCisgICAgICAgIHZlcnNpb25UcmFuc2FjdGlvbi5vbmFi
b3J0ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGxvZygiVGhpcmQgdXBncmFkZSB2
ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIHVuZXhwZWN0ZWQgYWJvcnQiKTsKKyAgICAgICAgICAg
IGRvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnNpb25UcmFuc2FjdGlvbi5vbmNvbXBs
ZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGxvZygiVGhpcmQgdXBncmFkZSB2
ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlIik7CisgICAgICAgICAgICBkb25lKCk7
CisgICAgICAgIH0KKworICAgICAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgICAgICBsb2coIlRoaXJkIHVwZ3JhZGUgdmVyc2lvbmNoYW5n
ZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGVycm9yIiArIGV2ZW50KTsKKyAgICAgICAgICAgIGRv
bmUoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDUx
ZTZmMS4uNzEyNGNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAxNS0xMS0xOSAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuIElEQjog
SURCT2JqZWN0U3RvcmUuZGVsZXRlSW5kZXgoKSBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTExCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9kZWxldGVpbmRleC0xLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9kZWxldGVpbmRleC0yLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpkaWREZWxldGVJbmRleCk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZl
ci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9T
ZXJ2ZXJEZWxlZ2F0ZS5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QkRhdGFiYXNlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkRhdGFi
YXNlOjpkaWREZWxldGVJbmRleEluZm8pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJEYXRhYmFzZUltcGwuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJJbmRleEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJJ
bmRleDo6bWFya0FzRGVsZXRlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkluZGV4SW1wbC5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
Qk9iamVjdFN0b3JlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9i
amVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9iamVj
dFN0b3JlOjpkZWxldGVJbmRleCk6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6
SURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVu
dDo6SURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4T25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlSW5kZXhPblNlcnZlcik6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oOgor
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9u
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0
aW9uKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3Rv
cmUuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9u
VG9DbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJDb25uZWN0aW9u
VG9DbGllbnQ6OmRpZERlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLmg6CisKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmluZGV4RGVs
ZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uOjphYm9ydCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01l
bW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oOgorCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SW5kZXg6OmNsZWFySW5kZXhWYWx1ZVN0b3Jl
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SW5kZXguaDoKKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjptYXliZVJl
c3RvcmVEZWxldGVkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlP
YmplY3RTdG9yZTo6dGFrZUluZGV4QnlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6TWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaDoKKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybURlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2UuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZERlbGV0ZUluZGV4KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9u
Lmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5oOgorCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZUluZm86OmxvZ2dpbmdTdHJpbmcpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaDoKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCSW5kZXhJbmZvOjpsb2dnaW5nU3RyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlSW5mbzo6aGFzSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVJbmZvOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUlu
Zm86OmxvZ2dpbmdTdHJpbmcpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJPYmplY3RTdG9yZUluZm8uaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JREJSZXN1bHREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc3VsdERhdGE6OmRl
bGV0ZUluZGV4U3VjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lE
QlJlc3VsdERhdGEuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblBy
b2Nlc3NJREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVy
OjpkaWREZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6
OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6ZGVs
ZXRlSW5kZXgpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJ
REJTZXJ2ZXIuaDoKKwogMjAxNS0xMS0xOSAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIGEgdGVzdCBmb3IgbWVkaWEgY29udHJvbCBkcm9wb2ZmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRv
U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJD
b25uZWN0aW9uVG9TZXJ2ZXIuY3BwCmluZGV4IDI3NGZiYTcuLjZlM2I1NDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9T
ZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCkBAIC0xNTUsNiArMTU1LDIxIEBAIHZvaWQgSURCQ29u
bmVjdGlvblRvU2VydmVyOjpkaWRDcmVhdGVJbmRleChjb25zdCBJREJSZXN1bHREYXRhJiByZXN1
bHREYXRhKQogICAgIGNvbXBsZXRlT3BlcmF0aW9uKHJlc3VsdERhdGEpOwogfQogCit2b2lkIElE
QkNvbm5lY3Rpb25Ub1NlcnZlcjo6ZGVsZXRlSW5kZXgoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9w
ZXJhdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGlu
ZGV4TmFtZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCQ29ubmVjdGlvblRvU2VydmVyOjpk
ZWxldGVJbmRleCIpOworCisgICAgc2F2ZU9wZXJhdGlvbihvcGVyYXRpb24pOworCisgICAgbV9k
ZWxlZ2F0ZS0+ZGVsZXRlSW5kZXgoSURCUmVxdWVzdERhdGEob3BlcmF0aW9uKSwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBpbmRleE5hbWUpOworfQorCit2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZl
cjo6ZGlkRGVsZXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCQ29ubmVjdGlvblRvU2VydmVyOjpkaWREZWxldGVJbmRleCIp
OworICAgIGNvbXBsZXRlT3BlcmF0aW9uKHJlc3VsdERhdGEpOworfQorCiB2b2lkIElEQkNvbm5l
Y3Rpb25Ub1NlcnZlcjo6cHV0T3JBZGQoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwg
UmVmUHRyPElEQktleT4mIGtleSwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mIHZhbHVl
LCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2Rl
KQogewogICAgIExPRyhJbmRleGVkREIsICJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OnB1dE9yQWRk
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCQ29ubmVjdGlvblRvU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmgKaW5kZXggMWNkY2U3My4uMjA2MWQxMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNv
bm5lY3Rpb25Ub1NlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaApAQCAtNzQsNiArNzQsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjcmVhdGVJbmRleChUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQklu
ZGV4SW5mbyYpOwogICAgIHZvaWQgZGlkQ3JlYXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYp
OwogCisgICAgdm9pZCBkZWxldGVJbmRleChUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOworICAgIHZv
aWQgZGlkRGVsZXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYpOworCiAgICAgdm9pZCBwdXRP
ckFkZChUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIFJlZlB0cjxJREJLZXk+JiwgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4mLCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRl
TW9kZSk7CiAgICAgdm9pZCBkaWRQdXRPckFkZChjb25zdCBJREJSZXN1bHREYXRhJik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25u
ZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKaW5kZXggZjliOGM5Yy4u
MGI5MDkwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgK
QEAgLTYzLDYgKzYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1l
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVz
dERhdGEmLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJbmRleElu
Zm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IElEQlJlcXVlc3RE
YXRhJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0
YSYsIElEQktleSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IEluZGV4ZWREQjo6T2Jq
ZWN0U3RvcmVPdmVyd3JpdGVNb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGdldFJlY29yZChj
b25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZ2V0Q291bnQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCmluZGV4IDYxYjE3N2MuLmFlNmMw
ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJEYXRhYmFzZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCkBAIC0zNDEsNiArMzQxLDEzIEBAIHZvaWQgSURC
RGF0YWJhc2U6OmRpZENyZWF0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRleEluZm8mIGluZm8pCiAg
ICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7CiB9CiAKK3ZvaWQgSURCRGF0
YWJhc2U6OmRpZERlbGV0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRleEluZm8mIGluZm8pCit7Cisg
ICAgYXV0byogb2JqZWN0U3RvcmUgPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUo
aW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKG9iamVjdFN0b3JlKTsK
KyAgICBvYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgoaW5mby5uYW1lKCkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBJREJDbGllbnQKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1w
bC5oCmluZGV4IDJhMzA2ODAuLjZhOTE3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmgKQEAgLTg1LDYg
Kzg1LDcgQEAgcHVibGljOgogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgc2VydmVyQ29ubmVj
dGlvbigpIHsgcmV0dXJuIG1fc2VydmVyQ29ubmVjdGlvbi5nZXQoKTsgfQogCiAgICAgdm9pZCBk
aWRDcmVhdGVJbmRleEluZm8oY29uc3QgSURCSW5kZXhJbmZvJik7CisgICAgdm9pZCBkaWREZWxl
dGVJbmRleEluZm8oY29uc3QgSURCSW5kZXhJbmZvJik7CiAKIHByaXZhdGU6CiAgICAgSURCRGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIGNv
bnN0IElEQlJlc3VsdERhdGEmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJJbmRleEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1wbC5jcHAKaW5kZXggMjRjZWQ4Mi4uNWNiOTk4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QkluZGV4SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkluZGV4SW1wbC5jcHAKQEAgLTMyNyw2ICszMjcsMTEgQEAgUmVmUHRyPFdlYkNvcmU6
OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LAogICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZXF1ZXN0R2V0S2V5KGNvbnRleHQsICp0
aGlzLCByYW5nZSk7CiB9CiAKK3ZvaWQgSURCSW5kZXg6Om1hcmtBc0RlbGV0ZWQoKQoreworICAg
IG1fZGVsZXRlZCA9IHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmgKaW5kZXggMTcwNGRkYi4uNDdmOGY4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJJ
bmRleEltcGwuaApAQCAtNzgsNiArNzgsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgSURCSW5kZXhJ
bmZvJiBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CiAKICAgICBJREJPYmplY3RTdG9y
ZSYgbW9kZXJuT2JqZWN0U3RvcmUoKSB7IHJldHVybiBtX29iamVjdFN0b3JlLmdldCgpOyB9CisK
KyAgICB2b2lkIG1hcmtBc0RlbGV0ZWQoKTsKICAgICBib29sIGlzRGVsZXRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVsZXRlZDsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNw
cAppbmRleCBiZGY2YTQyLi5iZTNkMjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcApA
QCAtNDQxLDYgKzQ0MSwxMSBAQCBSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXg+IElEQk9iamVjdFN0
b3JlOjppbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgRXhjZXB0aQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkp
IHsKKyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25D
b2RlOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZWZlcmVuY2VkSW5kZXhlcy5maW5kKGlu
ZGV4TmFtZSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fcmVmZXJlbmNlZEluZGV4ZXMuZW5kKCkp
CiAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7CkBAIC00NTcsOSArNDYyLDQwIEBAIFJl
ZlB0cjxXZWJDb3JlOjpJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmlu
ZyYgaW5kZXhOYW1lLCBFeGNlcHRpCiAgICAgcmV0dXJuIFdURjo6bW92ZShpbmRleCk7CiB9CiAK
LXZvaWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlv
bkNvZGUmKQordm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXggJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBl
YyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNvZGU6OkludmFsaWRT
dGF0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV90cmFuc2Fj
dGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkpIHsKKyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNl
cHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpJbnZhbGlkU3RhdGVFcnJvcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsK
KyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2Rl
OjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFtX2luZm8uaGFzSW5kZXgobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGF1dG8qIGluZm8gPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nSW5kZXgobmFtZSk7CisgICAgQVNT
RVJUKGluZm8pOworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuZGlkRGVsZXRlSW5kZXhJ
bmZvKCppbmZvKTsKKworICAgIG1faW5mby5kZWxldGVJbmRleChuYW1lKTsKKworICAgIGlmIChh
dXRvIGluZGV4ID0gbV9yZWZlcmVuY2VkSW5kZXhlcy50YWtlKG5hbWUpKQorICAgICAgICBpbmRl
eC0+bWFya0FzRGVsZXRlZCgpOworCisgICAgbV90cmFuc2FjdGlvbi0+ZGVsZXRlSW5kZXgobV9p
bmZvLmlkZW50aWZpZXIoKSwgbmFtZSk7CiB9CiAKIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
RXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCmluZGV4IDcyZmQy
ZjEuLjliY2I1MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCkBAIC03NTEsNiArNzUx
LDMwIEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIo
Y29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHRE
YXRhLCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpEZWxldGVPYmplY3RTdG9y
ZVN1Y2Nlc3MpOwogfQogCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkZWxldGVJbmRleCh1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQoreworICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXgiKTsKKworICAgIEFT
U0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CisKKyAgICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRy
YW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCAmSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZUluZGV4
T25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXhPblNlcnZlciwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBpbmRleE5hbWUpOworICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURjo6bW92
ZShvcGVyYXRpb24pKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXhPblNl
cnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCB1aW50NjRfdCYgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICBMT0co
SW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4T25TZXJ2ZXIiKTsKKyAgICBB
U1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOworCisgICAgc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0
ZUluZGV4KG9wZXJhdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUpOworfQor
Cit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVJbmRleE9uU2VydmVyKGNvbnN0IElEQlJl
c3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0
aW9uOjpkaWREZWxldGVJbmRleE9uU2VydmVyIik7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHRE
YXRhLCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpEZWxldGVJbmRleFN1Y2Nl
c3MpOworfQorCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25EaWRDb21wbGV0ZShUcmFu
c2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uKQogewogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9u
T3BlcmF0aW9uTWFwLmdldChvcGVyYXRpb24uaWRlbnRpZmllcigpKSA9PSAmb3BlcmF0aW9uKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJU
cmFuc2FjdGlvbkltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJUcmFuc2FjdGlvbkltcGwuaAppbmRleCA1YzNmNjZlLi4zNzlhMzliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25J
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRy
YW5zYWN0aW9uSW1wbC5oCkBAIC0xMDksNiArMTA5LDcgQEAgcHVibGljOgogICAgIHZvaWQgaXRl
cmF0ZUN1cnNvcihJREJDdXJzb3ImLCBjb25zdCBJREJLZXlEYXRhJiwgdW5zaWduZWQgbG9uZyBj
b3VudCk7CiAKICAgICB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgb2JqZWN0
U3RvcmVOYW1lKTsKKyAgICB2b2lkIGRlbGV0ZUluZGV4KHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOwogCiAgICAgdm9pZCBhZGRSZXF1ZXN0
KElEQlJlcXVlc3QmKTsKICAgICB2b2lkIHJlbW92ZVJlcXVlc3QoSURCUmVxdWVzdCYpOwpAQCAt
MTY1LDYgKzE2Niw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZU9uU2Vy
dmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUp
OwogICAgIHZvaWQgZGlkRGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25zdCBJREJSZXN1bHRE
YXRhJik7CiAKKyAgICB2b2lkIGRlbGV0ZUluZGV4T25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRp
b24mLCBjb25zdCB1aW50NjRfdCYgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IGluZGV4TmFtZSk7CisgICAgdm9pZCBkaWREZWxldGVJbmRleE9uU2VydmVyKGNvbnN0IElEQlJl
c3VsdERhdGEmKTsKKwogICAgIFJlZjxJREJSZXF1ZXN0PiBkb1JlcXVlc3RPcGVuQ3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBSZWY8SURCQ3Vyc29yPiYmKTsKICAgICB2b2lkIG9wZW5D
dXJzb3JPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQkN1cnNvckluZm8m
KTsKICAgICB2b2lkIGRpZE9wZW5DdXJzb3JPblNlcnZlcihJREJSZXF1ZXN0JiwgY29uc3QgSURC
UmVzdWx0RGF0YSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaAppbmRleCA1OTUxZjdmLi5l
YTlkY2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaApAQCAtMTM4LDYgKzEzOCwxOCBA
QCBSZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9u
KAogICAgIHJldHVybiBhZG9wdFJlZihvcGVyYXRpb24pOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBNUDEsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAyPgorUmVmUHRyPFRy
YW5zYWN0aW9uT3BlcmF0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigKKyAgICBJREJU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sCisgICAgdm9pZCAoSURCVHJhbnNhY3Rpb246Oipjb21w
bGV0ZSkoY29uc3QgSURCUmVzdWx0RGF0YSYpLAorICAgIHZvaWQgKElEQlRyYW5zYWN0aW9uOjoq
cGVyZm9ybSkoVHJhbnNhY3Rpb25PcGVyYXRpb24mLCBNUDEsIE1QMiksCisgICAgY29uc3QgUDEm
IHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIpCit7CisgICAgYXV0byBvcGVy
YXRpb24gPSBuZXcgVHJhbnNhY3Rpb25PcGVyYXRpb25JbXBsPE1QMSwgTVAyPih0cmFuc2FjdGlv
biwgY29tcGxldGUsIHBlcmZvcm0sIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIpOworICAgIHJldHVy
biBhZG9wdFJlZihvcGVyYXRpb24pOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNUDEsIHR5cGVu
YW1lIFAxPgogUmVmUHRyPFRyYW5zYWN0aW9uT3BlcmF0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbk9w
ZXJhdGlvbigKICAgICBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3Jl
LmgKaW5kZXggZWZkYzZlMi4uZmY2ZWFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaApAQCAtNjQsNiAr
NjQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJREJFcnJvciBkZWxldGVPYmplY3RTdG9yZShj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpID0gMDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGNsZWFy
T2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgPSAwOwogICAgIHZpcnR1YWwg
SURCRXJyb3IgY3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIElE
QkVycm9yIGRlbGV0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgaW5kZXhOYW1lKSA9IDA7CiAgICAgdmlydHVhbCBJREJFcnJvciBrZXlFeGlzdHNJbk9iamVj
dFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBib29s
JiBrZXlFeGlzdHMpID0gMDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGRlbGV0ZVJhbmdlKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpID0gMDsKICAgICB2
aXJ0dWFsIElEQkVycm9yIGFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25z
dCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlKSA9IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29u
bmVjdGlvblRvQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuY3BwCmluZGV4IDAyZTFkMWIuLmRhM2JkMGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25u
ZWN0aW9uVG9DbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuY3BwCkBAIC04Myw2ICs4MywxMSBAQCB2b2lk
IElEQkNvbm5lY3Rpb25Ub0NsaWVudDo6ZGlkQ3JlYXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0
YSYgcmVzdWx0KQogICAgIG1fZGVsZWdhdGUtPmRpZENyZWF0ZUluZGV4KHJlc3VsdCk7CiB9CiAK
K3ZvaWQgSURCQ29ubmVjdGlvblRvQ2xpZW50OjpkaWREZWxldGVJbmRleChjb25zdCBJREJSZXN1
bHREYXRhJiByZXN1bHQpCit7CisgICAgbV9kZWxlZ2F0ZS0+ZGlkRGVsZXRlSW5kZXgocmVzdWx0
KTsKK30KKwogdm9pZCBJREJDb25uZWN0aW9uVG9DbGllbnQ6OmRpZFB1dE9yQWRkKGNvbnN0IElE
QlJlc3VsdERhdGEmIHJlc3VsdCkKIHsKICAgICBtX2RlbGVnYXRlLT5kaWRQdXRPckFkZChyZXN1
bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5oCmluZGV4IGVmODgwYzYuLjVlZTJiMzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJD
b25uZWN0aW9uVG9DbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmgKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZGlkRGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzdWx0RGF0YSYpOwog
ICAgIHZvaWQgZGlkQ2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJik7CiAgICAg
dm9pZCBkaWRDcmVhdGVJbmRleChjb25zdCBJREJSZXN1bHREYXRhJik7CisgICAgdm9pZCBkaWRE
ZWxldGVJbmRleChjb25zdCBJREJSZXN1bHREYXRhJik7CiAgICAgdm9pZCBkaWRQdXRPckFkZChj
b25zdCBJREJSZXN1bHREYXRhJik7CiAgICAgdm9pZCBkaWRHZXRSZWNvcmQoY29uc3QgSURCUmVz
dWx0RGF0YSYpOwogICAgIHZvaWQgZGlkR2V0Q291bnQoY29uc3QgSURCUmVzdWx0RGF0YSYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNv
bm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaAppbmRleCAzYThmMTZl
Li5jNzA2MjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUu
aApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZERlbGV0ZU9i
amVjdFN0b3JlKGNvbnN0IElEQlJlc3VsdERhdGEmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZENsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzdWx0RGF0YSYpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ3JlYXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkRGVsZXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkUHV0T3JBZGQoY29uc3QgSURCUmVzdWx0RGF0YSYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkR2V0UmVjb3JkKGNvbnN0IElEQlJlc3VsdERhdGEmKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGRpZEdldENvdW50KGNvbnN0IElEQlJlc3VsdERhdGEmKSA9IDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
Y3BwCmluZGV4IGM2Mzc4ZWUuLmRiZGJkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC0yMDMsNiArMjAzLDE4
IEBAIHZvaWQgSURCU2VydmVyOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVx
dWVzdERhdGEsIGNvbnN0IElEQkluZGV4SW5mCiAgICAgdHJhbnNhY3Rpb24tPmNyZWF0ZUluZGV4
KHJlcXVlc3REYXRhLCBpbmZvKTsKIH0KIAordm9pZCBJREJTZXJ2ZXI6OmRlbGV0ZUluZGV4KGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAi
SURCU2VydmVyOjpkZWxldGVJbmRleCIpOworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9IG1fdHJh
bnNhY3Rpb25zLmdldChyZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CisgICAg
aWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHRyYW5zYWN0
aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSk7CisgICAgdHJhbnNhY3Rpb24tPmRlbGV0ZUluZGV4KHJl
cXVlc3REYXRhLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSk7Cit9CisKIHZvaWQg
SURCU2VydmVyOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNv
bnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1
ZURhdGEsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUp
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlNlcnZlcjo6cHV0T3JBZGQiKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRl
eCBmYTU4NmMwLi45NDBmYjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC02NCw2ICs2NCw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgU3Ry
aW5nJiBvYmplY3RTdG9yZU5hbWUpOwogICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZShjb25zdCBJ
REJSZXF1ZXN0RGF0YSYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9p
ZCBjcmVhdGVJbmRleChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkluZGV4SW5mbyYp
OworICAgIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKTsKICAgICB2b2lk
IHB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0
IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVP
dmVyd3JpdGVNb2RlKTsKICAgICB2b2lkIGdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwogICAgIHZvaWQgZ2V0Q291bnQoY29uc3QgSURCUmVx
dWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwCmluZGV4IDQ4YTkyNzIuLmJlMzgwNzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcApAQCAtODYsNiAr
ODYsMTYgQEAgdm9pZCBNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6YWRkRXhpc3RpbmdJ
bmRleChNZW1vcnlJbmRleCYgaW5kZXgpCiAgICAgbV9pbmRleGVzLmFkZCgmaW5kZXgpOwogfQog
Cit2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjppbmRleERlbGV0ZWQoc3RkOjp1
bmlxdWVfcHRyPE1lbW9yeUluZGV4PiBpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXgpOworICAg
IG1faW5kZXhlcy5yZW1vdmUoaW5kZXguZ2V0KCkpOworCisgICAgYXV0byBhZGRSZXN1bHQgPSBt
X2RlbGV0ZWRJbmRleGVzLmFkZChpbmRleC0+aW5mbygpLm5hbWUoKSwgbnVsbHB0cik7CisgICAg
aWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gV1RGOjptb3ZlKGluZGV4KTsKK30KKwogdm9pZCBNZW1vcnlCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbjo6YWRkRXhpc3RpbmdPYmplY3RTdG9yZShNZW1vcnlPYmplY3RTdG9yZSYgb2JqZWN0
U3RvcmUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uOjphZGRFeGlzdGluZ09iamVjdFN0b3JlIik7CkBAIC0xNzAsNyArMTgwLDcgQEAgdm9pZCBN
ZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6YWJvcnQoKQogCiAgICAgVGVtcG9yYXJ5Q2hh
bmdlPGJvb2w+IGNoYW5nZShtX2lzQWJvcnRpbmcsIHRydWUpOwogCi0gICAgLy8gVGhpcyBsb29w
IG1vdmVzIHRoZSB1bmRlcmx5aW5nIHVuaXF1ZV9wdHJzIGZyb20gb3V0IG9mIHRoZSBtX2RlbGV0
ZU9iamVjdFN0b3JlcyBtYXAsCisgICAgLy8gVGhpcyBsb29wIG1vdmVzIHRoZSB1bmRlcmx5aW5n
IHVuaXF1ZV9wdHJzIGZyb20gb3V0IG9mIHRoZSBtX2RlbGV0ZWRPYmplY3RTdG9yZXMgbWFwLAog
ICAgIC8vIGJ1dCB0aGUgZW50cmllcyBpbiB0aGUgbWFwIHN0aWxsIHJlbWFpbi4KICAgICBmb3Ig
KGF1dG8mIG9iamVjdFN0b3JlIDogbV9kZWxldGVkT2JqZWN0U3RvcmVzLnZhbHVlcygpKSB7CiAg
ICAgICAgIE1lbW9yeU9iamVjdFN0b3JlKiByYXdPYmplY3RTdG9yZSA9IG9iamVjdFN0b3JlLmdl
dCgpOwpAQCAtMjE0LDYgKzIyNCwxNiBAQCB2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uOjphYm9ydCgpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBUaGlzIGxvb3AgbW92ZXMg
dGhlIHVuZGVybHlpbmcgdW5pcXVlX3B0cnMgZnJvbSBvdXQgb2YgdGhlIG1fZGVsZXRlZEluZGV4
ZXMgbWFwLAorICAgIC8vIGJ1dCB0aGUgZW50cmllcyBpbiB0aGUgbWFwIHN0aWxsIHJlbWFpbi4K
KyAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9kZWxldGVkSW5kZXhlcy52YWx1ZXMoKSkgeworICAg
ICAgICBNZW1vcnlPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUgPSBpbmRleC0+b2JqZWN0U3RvcmUo
KTsKKyAgICAgICAgb2JqZWN0U3RvcmUubWF5YmVSZXN0b3JlRGVsZXRlZEluZGV4KFdURjo6bW92
ZShpbmRleCkpOworICAgIH0KKworICAgIC8vIFRoaXMgY2xlYXJzIHRoZSBlbnRyaWVzIGZyb20g
dGhlIG1hcC4KKyAgICBtX2RlbGV0ZWRJbmRleGVzLmNsZWFyKCk7CisKICAgICBmaW5pc2goKTsK
IAogICAgIGZvciAoYXV0byBvYmplY3RTdG9yZSA6IG1fdmVyc2lvbkNoYW5nZUFkZGVkT2JqZWN0
U3RvcmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaAppbmRl
eCBhMjhjMzYyLi40YzJjZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24uaApAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZE5ld0lu
ZGV4KE1lbW9yeUluZGV4Jik7CiAgICAgdm9pZCBhZGRFeGlzdGluZ0luZGV4KE1lbW9yeUluZGV4
Jik7CisgICAgdm9pZCBpbmRleERlbGV0ZWQoc3RkOjp1bmlxdWVfcHRyPE1lbW9yeUluZGV4Pik7
CiAKICAgICB2b2lkIGFib3J0KCk7CiAgICAgdm9pZCBjb21taXQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3Rv
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlE
QkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggOWNiOThjNi4uZDg2MzJiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9y
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9y
eUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTIwMSw2ICsyMDEsMjEgQEAgSURCRXJyb3IgTWVtb3J5
SURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWMKICAgICByZXR1cm4gb2JqZWN0U3RvcmUtPmNyZWF0ZUluZGV4KCpyYXdUcmFuc2Fj
dGlvbiwgaW5mbyk7CiB9CiAKK0lEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
SW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUp
Cit7CisgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5k
ZXgiKTsKKworICAgIGF1dG8gcmF3VHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICBBU1NFUlQocmF3VHJhbnNhY3Rpb24pOworICAgIEFT
U0VSVChyYXdUcmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkpOworCisgICAgYXV0byogb2Jq
ZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlc0J5SWRlbnRpZmllci5nZXQob2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIW9iamVjdFN0b3JlKQorICAgICAgICByZXR1cm4gSURCRXJyb3Io
SURCRXhjZXB0aW9uQ29kZTo6Q29uc3RyYWludEVycm9yKTsKKworICAgIHJldHVybiBvYmplY3RT
dG9yZS0+ZGVsZXRlSW5kZXgoKnJhd1RyYW5zYWN0aW9uLCBpbmRleE5hbWUpOworfQorCiB2b2lk
IE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cmVtb3ZlT2JqZWN0U3RvcmVGb3JWZXJzaW9uQ2hhbmdl
QWJvcnQoTWVtb3J5T2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlKQogewogICAgIExPRyhJbmRleGVk
REIsICJNZW1vcnlJREJCYWNraW5nU3RvcmU6OnJlbW92ZU9iamVjdFN0b3JlRm9yVmVyc2lvbkNo
YW5nZUFib3J0Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKaW5kZXggZDE3YzdjMy4u
MGVjNTc0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaApAQCAtNTYsNiArNTYsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBJREJFcnJvciBkZWxldGVPYmplY3RTdG9yZShjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgSURCRXJyb3Ig
Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSBvdmVycmlkZSBmaW5h
bDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mKSBvdmVy
cmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGRlbGV0ZUluZGV4KGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKSBvdmVycmlkZSBmaW5hbDsK
ICAgICB2aXJ0dWFsIElEQkVycm9yIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGJvb2wmIGtleUV4aXN0cykgb3ZlcnJp
ZGUgZmluYWw7CiAgICAgdmlydHVhbCBJREJFcnJvciBkZWxldGVSYW5nZShjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKSBvdmVycmlkZSBmaW5hbDsKICAg
ICB2aXJ0dWFsIElEQkVycm9yIGFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
b25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlKSBvdmVy
cmlkZSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlJbmRleC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvTWVtb3J5SW5kZXguY3BwCmluZGV4IDUxNjY1MWEuLmY4MGQ5MWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlu
ZGV4LmNwcApAQCAtOTMsNiArOTMsMTQgQEAgdm9pZCBNZW1vcnlJbmRleDo6bm90aWZ5Q3Vyc29y
c09mQWxsUmVjb3Jkc0NoYW5nZWQoKQogICAgIEFTU0VSVChtX2NsZWFuQ3Vyc29ycy5pc0VtcHR5
KCkpOwogfQogCit2b2lkIE1lbW9yeUluZGV4OjpjbGVhckluZGV4VmFsdWVTdG9yZSgpCit7Cisg
ICAgQVNTRVJUKG1fb2JqZWN0U3RvcmUud3JpdGVUcmFuc2FjdGlvbigpKTsKKyAgICBBU1NFUlQo
bV9vYmplY3RTdG9yZS53cml0ZVRyYW5zYWN0aW9uKCktPmlzQWJvcnRpbmcoKSk7CisKKyAgICBt
X3JlY29yZHMgPSBudWxscHRyOworfQorCiB2b2lkIE1lbW9yeUluZGV4OjpyZXBsYWNlSW5kZXhW
YWx1ZVN0b3JlKHN0ZDo6dW5pcXVlX3B0cjxJbmRleFZhbHVlU3RvcmU+JiYgdmFsdWVTdG9yZSkK
IHsKICAgICBBU1NFUlQobV9vYmplY3RTdG9yZS53cml0ZVRyYW5zYWN0aW9uKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SW5kZXgu
aAppbmRleCBhODkyNGIxLi5mMDQ1YmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SW5kZXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SW5kZXguaApAQCAtNzEsNiArNzEsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZW1vdmVSZWNvcmQoY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElu
ZGV4S2V5Jik7CiAKICAgICB2b2lkIG9iamVjdFN0b3JlQ2xlYXJlZCgpOworICAgIHZvaWQgY2xl
YXJJbmRleFZhbHVlU3RvcmUoKTsKICAgICB2b2lkIHJlcGxhY2VJbmRleFZhbHVlU3RvcmUoc3Rk
Ojp1bmlxdWVfcHRyPEluZGV4VmFsdWVTdG9yZT4mJik7CiAKICAgICBNZW1vcnlJbmRleEN1cnNv
ciogbWF5YmVPcGVuQ3Vyc29yKGNvbnN0IElEQkN1cnNvckluZm8mKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0
U3RvcmUuY3BwCmluZGV4IGQ1ZGE1M2QuLjVkZjEyMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3Jl
LmNwcApAQCAtMTAyLDYgKzEwMiw1NyBAQCBJREJFcnJvciBNZW1vcnlPYmplY3RTdG9yZTo6Y3Jl
YXRlSW5kZXgoTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aQogICAgIHJl
dHVybiB7IH07CiB9CiAKK3ZvaWQgTWVtb3J5T2JqZWN0U3RvcmU6Om1heWJlUmVzdG9yZURlbGV0
ZWRJbmRleChzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5SW5kZXg+IGluZGV4KQoreworICAgIExPRyhJ
bmRleGVkREIsICJNZW1vcnlPYmplY3RTdG9yZTo6bWF5YmVSZXN0b3JlRGVsZXRlZEluZGV4Iik7
CisKKyAgICBpZiAobV9pbmZvLmhhc0luZGV4KGluZGV4LT5pbmZvKCkubmFtZSgpKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9pbmZvLmFkZEV4aXN0aW5nSW5kZXgoaW5kZXgtPmluZm8oKSk7
CisKKyAgICBBU1NFUlQoIW1faW5kZXhlc0J5SWRlbnRpZmllci5jb250YWlucyhpbmRleC0+aW5m
bygpLmlkZW50aWZpZXIoKSkpOworICAgIGluZGV4LT5jbGVhckluZGV4VmFsdWVTdG9yZSgpOwor
ICAgIGF1dG8gZXJyb3IgPSBwb3B1bGF0ZUluZGV4V2l0aEV4aXN0aW5nUmVjb3JkcygqaW5kZXgp
OworCisgICAgLy8gU2luY2UgdGhpcyBpbmRleCB3YXMgaW5zdGFsbGVkIGluIHRoZSBvYmplY3Qg
c3RvcmUgYmVmb3JlIHRoaXMgdHJhbnNhY3Rpb24gc3RhcnRlZCwKKyAgICAvLyBhc3N1bWluZyB0
aGluZ3Mgd2VyZSBpbiBhIHZhbGlkIHN0YXRlIHRoZW4sIHdlIHNob3VsZCBkZWZpbml0ZWx5IGJl
IGFibGUgdG8gc3VjY2Vzc2Z1bGx5CisgICAgLy8gcmVwb3B1bGF0ZSB0aGUgaW5kZXggd2l0aCB0
aGUgb2JqZWN0IHN0b3JlJ3MgcHJlLXRyYW5zYWN0aW9uIHJlY29yZHMuCisgICAgQVNTRVJUX1VO
VVNFRChlcnJvciwgZXJyb3IuaXNOdWxsKCkpOworCisgICAgcmVnaXN0ZXJJbmRleChXVEY6Om1v
dmUoaW5kZXgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE1lbW9yeUluZGV4PiBNZW1vcnlPYmpl
Y3RTdG9yZTo6dGFrZUluZGV4QnlOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRv
IHJhd0luZGV4ID0gbV9pbmRleGVzQnlOYW1lLnRha2UobmFtZSk7CisgICAgaWYgKCFyYXdJbmRl
eCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGluZGV4ID0gbV9pbmRleGVz
QnlJZGVudGlmaWVyLnRha2UocmF3SW5kZXgtPmluZm8oKS5pZGVudGlmaWVyKCkpOworICAgIEFT
U0VSVChpbmRleCk7CisKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK0lEQkVycm9yIE1lbW9yeU9i
amVjdFN0b3JlOjpkZWxldGVJbmRleChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQoreworICAgIExPRyhJbmRleGVkREIs
ICJNZW1vcnlPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgiKTsKKworICAgIGlmICghbV93cml0ZVRy
YW5zYWN0aW9uIHx8ICFtX3dyaXRlVHJhbnNhY3Rpb24tPmlzVmVyc2lvbkNoYW5nZSgpIHx8IG1f
d3JpdGVUcmFuc2FjdGlvbiAhPSAmdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybiBJREJFcnJv
cihJREJFeGNlcHRpb25Db2RlOjpDb25zdHJhaW50RXJyb3IpOworICAgIAorICAgIGF1dG8gaW5k
ZXggPSB0YWtlSW5kZXhCeU5hbWUoaW5kZXhOYW1lKTsKKyAgICBBU1NFUlQoaW5kZXgpOworICAg
IGlmICghaW5kZXgpCisgICAgICAgIHJldHVybiBJREJFcnJvcihJREJFeGNlcHRpb25Db2RlOjpD
b25zdHJhaW50RXJyb3IpOworCisgICAgbV9pbmZvLmRlbGV0ZUluZGV4KGluZGV4TmFtZSk7Cisg
ICAgdHJhbnNhY3Rpb24uaW5kZXhEZWxldGVkKFdURjo6bW92ZShpbmRleCkpOworCisgICAgcmV0
dXJuIHsgfTsKK30KKwogYm9vbCBNZW1vcnlPYmplY3RTdG9yZTo6Y29udGFpbnNSZWNvcmQoY29u
c3QgSURCS2V5RGF0YSYga2V5KQogewogICAgIGlmICghbV9rZXlWYWx1ZVN0b3JlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVj
dFN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5
T2JqZWN0U3RvcmUuaAppbmRleCBkNThiNzcyLi5iOTk0NjYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3Rv
cmUuaApAQCAtNjYsNiArNjYsOCBAQCBwdWJsaWM6CiAgICAgTWVtb3J5QmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24qIHdyaXRlVHJhbnNhY3Rpb24oKSB7IHJldHVybiBtX3dyaXRlVHJhbnNhY3Rpb247
IH0KIAogICAgIElEQkVycm9yIGNyZWF0ZUluZGV4KE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uJiwgY29uc3QgSURCSW5kZXhJbmZvJik7CisgICAgSURCRXJyb3IgZGVsZXRlSW5kZXgoTWVt
b3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24mLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7Cisg
ICAgdm9pZCByZWdpc3RlckluZGV4KHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlJbmRleD4mJik7CiAK
ICAgICBib29sIGNvbnRhaW5zUmVjb3JkKGNvbnN0IElEQktleURhdGEmKTsKICAgICB2b2lkIGRl
bGV0ZVJlY29yZChjb25zdCBJREJLZXlEYXRhJik7CkBAIC05MSw2ICs5Myw4IEBAIHB1YmxpYzoK
IAogICAgIE1lbW9yeUluZGV4KiBpbmRleEZvcklkZW50aWZpZXIodWludDY0X3QpOwogCisgICAg
dm9pZCBtYXliZVJlc3RvcmVEZWxldGVkSW5kZXgoc3RkOjp1bmlxdWVfcHRyPE1lbW9yeUluZGV4
Pik7CisKIHByaXZhdGU6CiAgICAgTWVtb3J5T2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3Rv
cmVJbmZvJik7CiAKQEAgLTEwMyw2ICsxMDcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRl
Q3Vyc29yc0ZvclB1dFJlY29yZChzdGQ6OnNldDxJREJLZXlEYXRhPjo6aXRlcmF0b3IpOwogICAg
IHZvaWQgdXBkYXRlQ3Vyc29yc0ZvckRlbGV0ZVJlY29yZChjb25zdCBJREJLZXlEYXRhJik7CiAK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5SW5kZXg+IHRha2VJbmRleEJ5TmFtZShjb25zdCBT
dHJpbmcmIG5hbWUpOworCiAgICAgSURCT2JqZWN0U3RvcmVJbmZvIG1faW5mbzsKIAogICAgIE1l
bW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKiBtX3dyaXRlVHJhbnNhY3Rpb24geyBudWxscHRy
IH07CkBAIC0xMTEsNyArMTE3LDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5
VmFsdWVNYXA+IG1fa2V5VmFsdWVTdG9yZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpzZXQ8
SURCS2V5RGF0YT4+IG1fb3JkZXJlZEtleXM7CiAKLSAgICB2b2lkIHJlZ2lzdGVySW5kZXgoc3Rk
Ojp1bmlxdWVfcHRyPE1lbW9yeUluZGV4PiYmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJJbmRleChN
ZW1vcnlJbmRleCYpOwogICAgIEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxNZW1v
cnlJbmRleD4+IG1faW5kZXhlc0J5SWRlbnRpZmllcjsKICAgICBIYXNoTWFwPFN0cmluZywgTWVt
b3J5SW5kZXgqPiBtX2luZGV4ZXNCeU5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRl
eCA3OTMxOGQyLi5iMDZkYzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTM3Myw2
ICszNzMsNDEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBwZXJmb3JtRXJyb3JDYWxs
YmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIAordm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGVsZXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5h
bWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJ
bmRleCIpOworCisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2soY2FsbGJh
Y2spOworICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVJbmRleCwgY2FsbGJhY2tJ
RCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleE5hbWUpKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0
ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CisgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1EZWxldGVJbmRleCIpOworCisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKKyAgICBtX2Jh
Y2tpbmdTdG9yZS0+ZGVsZXRlSW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGluZGV4TmFtZSk7CisKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICBtX3Nl
cnZlci5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVJbmRleCwgY2FsbGJhY2tJZGVudGlm
aWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUpKTsKK30KKwordm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZUluZGV4KHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybURlbGV0ZUluZGV4Iik7CisKKyAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsK
KyAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JF
eGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgICAgIGlmIChv
YmplY3RTdG9yZUluZm8pCisgICAgICAgICAgICBvYmplY3RTdG9yZUluZm8tPmRlbGV0ZUluZGV4
KGluZGV4TmFtZSk7CisgICAgfQorCisgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvcik7Cit9CisKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRk
KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5
RGF0YSwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwgSW5kZXhlZERCOjpP
YmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNh
bGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5oCmluZGV4IGFjYjQ3MWYuLjU5MWJhNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC03
OSw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgRXJy
b3JDYWxsYmFjayk7CiAgICAgdm9pZCBjbGVhck9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIEVycm9yQ2FsbGJh
Y2spOwogICAgIHZvaWQgY3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYs
IGNvbnN0IElEQkluZGV4SW5mbyYsIEVycm9yQ2FsbGJhY2spOworICAgIHZvaWQgZGVsZXRlSW5k
ZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEVycm9yQ2FsbGJhY2spOwogICAgIHZv
aWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29u
c3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwgSW5kZXhlZERCOjpPYmplY3RTdG9y
ZU92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayk7CiAgICAgdm9pZCBnZXRSZWNvcmQoY29u
c3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBHZXRSZXN1bHRDYWxs
YmFjayk7CiAgICAgdm9pZCBnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYsIENvdW50Q2FsbGJhY2spOwpAQCAtMTE0LDYgKzExNSw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpOwogICAgIHZvaWQgcGVyZm9ybUNs
ZWFyT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyKTsKICAgICB2b2lkIHBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mKTsKKyAgICB2b2lkIHBlcmZvcm1EZWxldGVJ
bmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKTsKICAgICB2b2lkIHBlcmZvcm1QdXRPckFkZCh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNv
bnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhLCBJ
bmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSk7CiAgICAgdm9pZCBwZXJmb3JtR2V0
UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CiAgICAgdm9pZCBwZXJmb3JtR2V0SW5kZXhS
ZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBl
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKQEAgLTEyOSw2ICsxMzEsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZGlkUGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSk7
CiAgICAgdm9pZCBkaWRQZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtQ3JlYXRlSW5k
ZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIGNvbnN0IElE
QkluZGV4SW5mbyYpOworICAgIHZvaWQgZGlkUGVyZm9ybURlbGV0ZUluZGV4KHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKTsKICAgICB2b2lkIGRpZFBlcmZvcm1Q
dXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgY29u
c3QgSURCS2V5RGF0YSYpOwogICAgIHZvaWQgZGlkUGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURCR2V0UmVzdWx0Jik7
CiAgICAgdm9pZCBkaWRQZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlQ29ubmVjdGlvbi5jcHAKaW5kZXggZGZlOGEwMC4uY2M4YTE1YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29u
bmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKQEAgLTE2MCw2ICsxNjAsMTMgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZENyZWF0ZUluZGV4KGNvbnN0IElEQlJl
c3VsdERhdGEmIHJlc3VsdERhdGEKICAgICBtX2Nvbm5lY3Rpb25Ub0NsaWVudC5kaWRDcmVhdGVJ
bmRleChyZXN1bHREYXRhKTsKIH0KIAordm9pZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246
OmRpZERlbGV0ZUluZGV4KGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAg
TE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkRGVsZXRlSW5k
ZXgiKTsKKworICAgIG1fY29ubmVjdGlvblRvQ2xpZW50LmRpZERlbGV0ZUluZGV4KHJlc3VsdERh
dGEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oCmluZGV4IDczMTQw
OGQuLmM1NDUyZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmgK
QEAgLTcwLDYgKzcwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRGVsZXRlT2JqZWN0U3RvcmUo
Y29uc3QgSURCUmVzdWx0RGF0YSYpOwogICAgIHZvaWQgZGlkQ2xlYXJPYmplY3RTdG9yZShjb25z
dCBJREJSZXN1bHREYXRhJik7CiAgICAgdm9pZCBkaWRDcmVhdGVJbmRleChjb25zdCBJREJSZXN1
bHREYXRhJik7CisgICAgdm9pZCBkaWREZWxldGVJbmRleChjb25zdCBJREJSZXN1bHREYXRhJik7
CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uKFVuaXF1ZUlEQkRh
dGFiYXNlJiwgSURCQ29ubmVjdGlvblRvQ2xpZW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKaW5kZXggZWZmYjM4Yy4uYjBiNTFlMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcApAQCAtMTYzLDYgKzE2Mywy
MyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4KGNvbnN0
IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YQogICAgIH0pOwogfQogCit2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4KGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IGluZGV4TmFtZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbjo6ZGVsZXRlSW5kZXgiKTsKKworICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7
CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0
YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CisKKyAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbj4gc2VsZih0aGlzKTsKKyAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0
YWJhc2UoKS5kZWxldGVJbmRleCgqdGhpcywgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5h
bWUsIFt0aGlzLCBzZWxmLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yKSB7Cisg
ICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjcmVh
dGVJbmRleCAoY2FsbGJhY2spIik7CisgICAgICAgIGlmIChlcnJvci5pc051bGwoKSkKKyAgICAg
ICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kaWREZWxldGVJbmRleChJREJSZXN1bHREYXRh
OjpkZWxldGVJbmRleFN1Y2Nlc3MocmVxdWVzdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkRGVsZXRl
SW5kZXgoSURCUmVzdWx0RGF0YTo6ZXJyb3IocmVxdWVzdERhdGEucmVxdWVzdElkZW50aWZpZXIo
KSwgZXJyb3IpKTsKKyAgICB9KTsKK30KKwogdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElE
QktleURhdGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEs
IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUpCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRk
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaAppbmRleCBlMTcz
NmQ2Li44MDM5MjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
LmgKQEAgLTcwLDYgKzcwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUo
Y29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSk7CiAg
ICAgdm9pZCBjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICB2b2lkIGNyZWF0ZUluZGV4KGNvbnN0IElEQlJl
cXVlc3REYXRhJiwgY29uc3QgSURCSW5kZXhJbmZvJik7CisgICAgdm9pZCBkZWxldGVJbmRleChj
b25zdCBJREJSZXF1ZXN0RGF0YSYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBpbmRleE5hbWUpOwogICAgIHZvaWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVz
dERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZh
bHVlRGF0YSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOwogICAgIHZvaWQg
Z2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7
CiAgICAgdm9pZCBnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJh
bmdlRGF0YSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQkRhdGFiYXNlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcAppbmRleCBjYjE2OWYwLi5hZTQwMjJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0
YWJhc2VJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSURCRGF0YWJhc2VJbmZvLmNwcApAQCAtMTM1LDYgKzEzNSwxNyBAQCB2b2lkIElEQkRhdGFi
YXNlSW5mbzo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUp
CiAgICAgbV9vYmplY3RTdG9yZU1hcC5yZW1vdmUoaW5mby0+aWRlbnRpZmllcigpKTsKIH0KIAor
I2lmbmRlZiBOREVCVUcKK1N0cmluZyBJREJEYXRhYmFzZUluZm86OmxvZ2dpbmdTdHJpbmcoKSBj
b25zdAoreworICAgIFN0cmluZyB0b3AgPSBtYWtlU3RyaW5nKCJEYXRhYmFzZTogIiwgbV9uYW1l
LCAiIHZlcnNpb24gIiwgU3RyaW5nOjpudW1iZXIobV92ZXJzaW9uKSwgIlxuIik7CisgICAgZm9y
IChhdXRvIG9iamVjdFN0b3JlIDogbV9vYmplY3RTdG9yZU1hcC52YWx1ZXMoKSkKKyAgICAgICAg
dG9wLmFwcGVuZChtYWtlU3RyaW5nKG9iamVjdFN0b3JlLmxvZ2dpbmdTdHJpbmcoMSksICJcbiIp
KTsKKworICAgIHJldHVybiB0b3A7IAorfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5o
CmluZGV4IDIwM2E2OTMuLmIzMzAzNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmgKQEAgLTU4LDYgKzU4
LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUpOwogCisjaWZuZGVmIE5ERUJVRworICAgIFN0cmluZyBsb2dnaW5n
U3RyaW5nKCkgY29uc3Q7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBJREJEYXRhYmFzZUluZm8o
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQkluZGV4SW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSURCSW5kZXhJbmZvLmNwcAppbmRleCA0MWNmOWE5Li5lMTlhOGYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZv
LmNwcApAQCAtNDksNiArNDksMTcgQEAgSURCSW5kZXhJbmZvIElEQkluZGV4SW5mbzo6aXNvbGF0
ZWRDb3B5KCkgY29uc3QKICAgICByZXR1cm4geyBtX2lkZW50aWZpZXIsIG1fb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBtX25hbWUuaXNvbGF0ZWRDb3B5KCksIG1fa2V5UGF0aC5pc29sYXRlZENvcHko
KSwgbV91bmlxdWUsIG1fbXVsdGlFbnRyeSB9OwogfQogCisjaWZuZGVmIE5ERUJVRworU3RyaW5n
IElEQkluZGV4SW5mbzo6bG9nZ2luZ1N0cmluZyhpbnQgaW5kZW50KSBjb25zdAoreworICAgIFN0
cmluZyBpbmRlbnRTdHJpbmc7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkK
KyAgICAgICAgaW5kZW50U3RyaW5nLmFwcGVuZCgiICIpOworCisgICAgcmV0dXJuIG1ha2VTdHJp
bmcoaW5kZW50U3RyaW5nLCAiSW5kZXg6ICIsIG1fbmFtZSwgU3RyaW5nOjpmb3JtYXQoIiAoJSIg
UFJJdTY0ICIpIFxuIiwgbV9pZGVudGlmaWVyKSk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZv
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZv
LmgKaW5kZXggZWQzZjFhNC4uN2ZjNTZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uaApAQCAtNDcsNiArNDcsMTAg
QEAgcHVibGljOgogICAgIGJvb2wgdW5pcXVlKCkgY29uc3QgeyByZXR1cm4gbV91bmlxdWU7IH0K
ICAgICBib29sIG11bHRpRW50cnkoKSBjb25zdCB7IHJldHVybiBtX211bHRpRW50cnk7IH0KIAor
I2lmbmRlZiBOREVCVUcKKyAgICBTdHJpbmcgbG9nZ2luZ1N0cmluZyhpbnQgaW5kZW50ID0gMCkg
Y29uc3Q7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB1aW50NjRfdCBtX2lkZW50aWZpZXIgeyAw
IH07CiAgICAgdWludDY0X3QgbV9vYmplY3RTdG9yZUlkZW50aWZpZXIgeyAwIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3Rv
cmVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJP
YmplY3RTdG9yZUluZm8uY3BwCmluZGV4IDc4MWE5NTIuLmZmMTIwZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmpl
Y3RTdG9yZUluZm8uY3BwCkBAIC02OSw2ICs2OSwxMSBAQCBib29sIElEQk9iamVjdFN0b3JlSW5m
bzo6aGFzSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAorYm9vbCBJREJPYmplY3RTdG9yZUluZm86Omhhc0luZGV4KHVpbnQ2NF90IGluZGV4SWRl
bnRpZmllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbmRleE1hcC5jb250YWlucyhpbmRleElk
ZW50aWZpZXIpOworfQorCiBJREJJbmRleEluZm8qIElEQk9iamVjdFN0b3JlSW5mbzo6aW5mb0Zv
ckV4aXN0aW5nSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGZvciAoYXV0byYgaW5k
ZXggOiBtX2luZGV4TWFwLnZhbHVlcygpKSB7CkBAIC05OSw2ICsxMDQsMzAgQEAgVmVjdG9yPFN0
cmluZz4gSURCT2JqZWN0U3RvcmVJbmZvOjppbmRleE5hbWVzKCkgY29uc3QKICAgICByZXR1cm4g
bmFtZXM7CiB9CiAKK3ZvaWQgSURCT2JqZWN0U3RvcmVJbmZvOjpkZWxldGVJbmRleChjb25zdCBT
dHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICBhdXRvKiBpbmZvID0gaW5mb0ZvckV4aXN0aW5nSW5k
ZXgoaW5kZXhOYW1lKTsKKyAgICBpZiAoIWluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIG1f
aW5kZXhNYXAucmVtb3ZlKGluZm8tPmlkZW50aWZpZXIoKSk7Cit9CisKKyNpZm5kZWYgTkRFQlVH
CitTdHJpbmcgSURCT2JqZWN0U3RvcmVJbmZvOjpsb2dnaW5nU3RyaW5nKGludCBpbmRlbnQpIGNv
bnN0Cit7CisgICAgU3RyaW5nIGluZGVudFN0cmluZzsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IGluZGVudDsgKytpKQorICAgICAgICBpbmRlbnRTdHJpbmcuYXBwZW5kKCIgIik7CisKKyAgICBT
dHJpbmcgdG9wID0gbWFrZVN0cmluZyhpbmRlbnRTdHJpbmcsICJPYmplY3Qgc3RvcmU6ICIsIG1f
bmFtZSwgU3RyaW5nOjpmb3JtYXQoIiAoJSIgUFJJdTY0ICIpIFxuIiwgbV9pZGVudGlmaWVyKSk7
CisgICAgZm9yIChhdXRvIGluZGV4IDogbV9pbmRleE1hcC52YWx1ZXMoKSkKKyAgICAgICAgdG9w
LmFwcGVuZChtYWtlU3RyaW5nKGluZGV4LmxvZ2dpbmdTdHJpbmcoaW5kZW50ICsgMSksICJcbiIp
KTsKKworICAgIHJldHVybiB0b3A7IAorfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3Jl
SW5mby5oCmluZGV4IDk0MDQ1MDUuLmZmYmQwM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmgK
QEAgLTUyLDEwICs1MiwxNyBAQCBwdWJsaWM6CiAgICAgSURCSW5kZXhJbmZvIGNyZWF0ZU5ld0lu
ZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBi
b29sIG11bHRpRW50cnkpOwogICAgIHZvaWQgYWRkRXhpc3RpbmdJbmRleChjb25zdCBJREJJbmRl
eEluZm8mKTsKICAgICBib29sIGhhc0luZGV4KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7Cisg
ICAgYm9vbCBoYXNJbmRleCh1aW50NjRfdCBpbmRleElkZW50aWZpZXIpIGNvbnN0OwogICAgIElE
QkluZGV4SW5mbyogaW5mb0ZvckV4aXN0aW5nSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAog
ICAgIFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXMoKSBjb25zdDsKIAorICAgIHZvaWQgZGVsZXRl
SW5kZXgoY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOworCisjaWZuZGVmIE5ERUJVRworICAgIFN0
cmluZyBsb2dnaW5nU3RyaW5nKGludCBpbmRlbnQgPSAwKSBjb25zdDsKKyNlbmRpZgorCiBwcml2
YXRlOgogICAgIHVpbnQ2NF90IG1faWRlbnRpZmllciB7IDAgfTsKICAgICBTdHJpbmcgbV9uYW1l
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lE
QlJlc3VsdERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQlJlc3VsdERhdGEuY3BwCmluZGV4IGMzZDA3MTYuLjJlM2Q2YTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0RGF0
YS5jcHAKQEAgLTExMCw2ICsxMTAsMTEgQEAgSURCUmVzdWx0RGF0YSBJREJSZXN1bHREYXRhOjpj
cmVhdGVJbmRleFN1Y2Nlc3MoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXEKICAgICBy
ZXR1cm4geyBJREJSZXN1bHRUeXBlOjpDcmVhdGVJbmRleFN1Y2Nlc3MsIHJlcXVlc3RJZGVudGlm
aWVyIH07CiB9CiAKK0lEQlJlc3VsdERhdGEgSURCUmVzdWx0RGF0YTo6ZGVsZXRlSW5kZXhTdWNj
ZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIpCit7Cisg
ICAgcmV0dXJuIHsgSURCUmVzdWx0VHlwZTo6RGVsZXRlSW5kZXhTdWNjZXNzLCByZXF1ZXN0SWRl
bnRpZmllciB9OworfQorCiBJREJSZXN1bHREYXRhIElEQlJlc3VsdERhdGE6OnB1dE9yQWRkU3Vj
Y2Vzcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCBjb25z
dCBJREJLZXlEYXRhJiByZXN1bHRLZXkpCiB7CiAgICAgSURCUmVzdWx0RGF0YSByZXN1bHQoSURC
UmVzdWx0VHlwZTo6UHV0T3JBZGRTdWNjZXNzLCByZXF1ZXN0SWRlbnRpZmllcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0RGF0
YS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERh
dGEuaAppbmRleCAyZWRlN2JjLi4xNDFkM2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmgKQEAgLTUzLDYgKzUz
LDcgQEAgZW51bSBjbGFzcyBJREJSZXN1bHRUeXBlIHsKICAgICBHZXRDb3VudFN1Y2Nlc3MsCiAg
ICAgRGVsZXRlUmVjb3JkU3VjY2VzcywKICAgICBDcmVhdGVJbmRleFN1Y2Nlc3MsCisgICAgRGVs
ZXRlSW5kZXhTdWNjZXNzLAogICAgIE9wZW5DdXJzb3JTdWNjZXNzLAogICAgIEl0ZXJhdGVDdXJz
b3JTdWNjZXNzLAogfTsKQEAgLTcxLDYgKzcyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBJREJS
ZXN1bHREYXRhIGRlbGV0ZU9iamVjdFN0b3JlU3VjY2Vzcyhjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImKTsKICAgICBzdGF0aWMgSURCUmVzdWx0RGF0YSBjbGVhck9iamVjdFN0b3JlU3VjY2Vz
cyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImKTsKICAgICBzdGF0aWMgSURCUmVzdWx0RGF0
YSBjcmVhdGVJbmRleFN1Y2Nlc3MoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJik7CisgICAg
c3RhdGljIElEQlJlc3VsdERhdGEgZGVsZXRlSW5kZXhTdWNjZXNzKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYpOwogICAgIHN0YXRpYyBJREJSZXN1bHREYXRhIHB1dE9yQWRkU3VjY2Vzcyhj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImLCBjb25zdCBJREJLZXlEYXRhJik7CiAgICAgc3Rh
dGljIElEQlJlc3VsdERhdGEgZ2V0UmVjb3JkU3VjY2Vzcyhjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImLCBjb25zdCBJREJHZXRSZXN1bHQmKTsKICAgICBzdGF0aWMgSURCUmVzdWx0RGF0YSBn
ZXRDb3VudFN1Y2Nlc3MoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiwgdWludDY0X3QgY291
bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0luUHJvY2Vzc0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAppbmRleCBkYmJjMTI1Li5hYmUzZjA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9j
ZXNzSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcApAQCAtMTUyLDYgKzE1MiwxNCBAQCB2b2lkIElu
UHJvY2Vzc0lEQlNlcnZlcjo6ZGlkQ3JlYXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVz
dWx0RGF0YSkKICAgICB9KTsKIH0KIAordm9pZCBJblByb2Nlc3NJREJTZXJ2ZXI6OmRpZERlbGV0
ZUluZGV4KGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgUmVmUHRyPElu
UHJvY2Vzc0lEQlNlcnZlcj4gc2VsZih0aGlzKTsKKyAgICBSdW5Mb29wOjpjdXJyZW50KCkuZGlz
cGF0Y2goW3RoaXMsIHNlbGYsIHJlc3VsdERhdGFdIHsKKyAgICAgICAgbV9jb25uZWN0aW9uVG9T
ZXJ2ZXItPmRpZERlbGV0ZUluZGV4KHJlc3VsdERhdGEpOworICAgIH0pOworfQorCiB2b2lkIElu
UHJvY2Vzc0lEQlNlcnZlcjo6ZGlkUHV0T3JBZGQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0
RGF0YSkKIHsKICAgICBSZWZQdHI8SW5Qcm9jZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOwpAQCAt
MjQwLDExICsyNDgsMTkgQEAgdm9pZCBJblByb2Nlc3NJREJTZXJ2ZXI6OmNsZWFyT2JqZWN0U3Rv
cmUoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCB1aW4KICAgICB9KTsKIH0KIAot
dm9pZCBJblByb2Nlc3NJREJTZXJ2ZXI6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlcXVlc3REYXRh
JiByZXN1bHREYXRhLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8pCit2b2lkIEluUHJvY2Vzc0lE
QlNlcnZlcjo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBj
b25zdCBJREJJbmRleEluZm8mIGluZm8pCiB7CiAgICAgUmVmUHRyPEluUHJvY2Vzc0lEQlNlcnZl
cj4gc2VsZih0aGlzKTsKLSAgICBSdW5Mb29wOjpjdXJyZW50KCkuZGlzcGF0Y2goW3RoaXMsIHNl
bGYsIHJlc3VsdERhdGEsIGluZm9dIHsKLSAgICAgICAgbV9zZXJ2ZXItPmNyZWF0ZUluZGV4KHJl
c3VsdERhdGEsIGluZm8pOworICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS5kaXNwYXRjaChbdGhpcywg
c2VsZiwgcmVxdWVzdERhdGEsIGluZm9dIHsKKyAgICAgICAgbV9zZXJ2ZXItPmNyZWF0ZUluZGV4
KHJlcXVlc3REYXRhLCBpbmZvKTsKKyAgICB9KTsKK30KKwordm9pZCBJblByb2Nlc3NJREJTZXJ2
ZXI6OmRlbGV0ZUluZGV4KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAg
ICBSZWZQdHI8SW5Qcm9jZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOworICAgIFJ1bkxvb3A6OmN1
cnJlbnQoKS5kaXNwYXRjaChbdGhpcywgc2VsZiwgcmVxdWVzdERhdGEsIG9iamVjdFN0b3JlSWRl
bnRpZmllciwgaW5kZXhOYW1lXSB7CisgICAgICAgIG1fc2VydmVyLT5kZWxldGVJbmRleChyZXF1
ZXN0RGF0YSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUpOwogICAgIH0pOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Q
cm9jZXNzSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKaW5kZXggNzU1M2UxNy4uNDdkMDkwNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNl
cnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblBy
b2Nlc3NJREJTZXJ2ZXIuaApAQCAtNjIsNiArNjIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBjbGVh
ck9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW5kZXgo
Y29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJbmRleEluZm8mKSBvdmVycmlkZSBmaW5h
bDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKSBv
dmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVz
dERhdGEmLCBJREJLZXkqLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBJbmRleGVkREI6
Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSkgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2
b2lkIGdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBnZXRDb3VudChjb25zdCBJREJS
ZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpIG92ZXJyaWRlIGZpbmFsOwpAQCAt
ODEsNiArODIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZERlbGV0ZU9iamVjdFN0
b3JlKGNvbnN0IElEQlJlc3VsdERhdGEmKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkQ2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJikgb3ZlcnJpZGUgZmlu
YWw7CiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZUluZGV4KGNvbnN0IElEQlJlc3VsdERhdGEm
KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGVsZXRlSW5kZXgoY29uc3Qg
SURCUmVzdWx0RGF0YSYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBkaWRQdXRP
ckFkZChjb25zdCBJREJSZXN1bHREYXRhJikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2
b2lkIGRpZEdldFJlY29yZChjb25zdCBJREJSZXN1bHREYXRhJikgb3ZlcnJpZGUgZmluYWw7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZEdldENvdW50KGNvbnN0IElEQlJlc3VsdERhdGEmKSBvdmVycmlk
ZSBmaW5hbDsK
</data>
<flag name="review"
          id="290900"
          type_id="1"
          status="+"
          setter="achristensen"
    />
    <flag name="commit-queue"
          id="290901"
          type_id="3"
          status="-"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>