<?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>118835</bug_id>
          
          <creation_ts>2013-07-17 23:18:03 -0700</creation_ts>
          <short_desc>fourthTier: Decouple the way that CFA stores its state from the way it does abstract interpretation</short_desc>
          <delta_ts>2013-07-18 19:18:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>118749</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>909593</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-17 23:18:03 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909594</commentid>
    <comment_count>1</comment_count>
      <attachid>206952</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-17 23:18:45 -0700</bug_when>
    <thetext>Created attachment 206952
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909888</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-18 15:13:36 -0700</bug_when>
    <thetext>I&apos;m pretty sure this is a stupid idea, and it&apos;s not necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909906</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-18 16:25:15 -0700</bug_when>
    <thetext>Actually, this *is* the right way to go.  We need this because:

- We want to hoist things out of loops.

- We don&apos;t know what things rely on what type checks.

- We only want to hoist type checks out of loops if they aren&apos;t clobbered.

- We may want to still hoist things that depended on those type checks, if it&apos;s safe to do those things based on the CFA state at the tail of the loop pre-header.

- We don&apos;t want things to rely on their type checks by way of a token, because that&apos;s just weird.

So, we want to be able to have a special form of the CFA that can incrementally update a basic block&apos;s state-at-tail, and we want to be able to do this for multiple blocks simultaneously.  This requires *not* storing the per-node state in the nodes themselves, but instead using the at-tail HashMap directly.

Hence we need to have a way of making the abstract interpreter (i.e. AbstractState::execute) polymorphic with respect to state representation.  Put another way, we need to separate the way that abstract state is represented from the way DFG IR is abstractly interpreted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909907</commentid>
    <comment_count>4</comment_count>
      <attachid>207031</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-18 16:29:14 -0700</bug_when>
    <thetext>Created attachment 207031
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909962</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-18 19:18:48 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/152879</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206952</attachid>
            <date>2013-07-17 23:18:45 -0700</date>
            <delta_ts>2013-07-18 16:29:14 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>91817</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdB
YnN0cmFjdEludGVycHJldGVyX2gKKyNkZWZpbmUgREZHQWJzdHJhY3RJbnRlcnByZXRlcl9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5o
IgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3Rh
dGVUeXBlPgorY2xhc3MgQWJzdHJhY3RJbnRlcnByZXRlciB7CitwdWJsaWM6CisgICAgQWJzdHJh
Y3RJbnRlcnByZXRlcihHcmFwaCYsIEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSk7CisgICAgfkFi
c3RyYWN0SW50ZXJwcmV0ZXIoKTsKKyAgICAKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5v
ZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpOwor
ICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmb3JOb2RlKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAg
T3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpCisgICAgeworICAgICAgICByZXR1
cm4gbV9zdGF0ZS52YXJpYWJsZXMoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBuZWVkc1R5cGVD
aGVjayhOb2RlKiBub2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gpCisgICAg
eworICAgICAgICByZXR1cm4gZm9yTm9kZShub2RlKS5tX3R5cGUgJiB+dHlwZXNQYXNzZWRUaHJv
dWdoOworICAgIH0KKyAgICAKKyAgICBib29sIG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRnZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5l
ZWRzVHlwZUNoZWNrKGVkZ2Uubm9kZSgpLCB0eXBlc1Bhc3NlZFRocm91Z2gpOworICAgIH0KKyAg
ICAKKyAgICBib29sIG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZWVkc1R5cGVDaGVjayhlZGdlLCB0eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSk7
CisgICAgfQorICAgIAorICAgIC8vIEFic3RyYWN0bHkgZXhlY3V0ZXMgdGhlIGdpdmVuIG5vZGUu
IFRoZSBuZXcgYWJzdHJhY3Qgc3RhdGUgaXMgc3RvcmVkIGludG8gYW4KKyAgICAvLyBhYnN0cmFj
dCBzdGFjayBzdG9yZWQgaW4gKnRoaXMuIExvYWRzIG9mIGxvY2FsIHZhcmlhYmxlcyAodGhhdCBz
cGFuCisgICAgLy8gYmFzaWMgYmxvY2tzKSBpbnRlcnJvZ2F0ZSB0aGUgYmFzaWMgYmxvY2sncyBu
b3Rpb24gb2YgdGhlIHN0YXRlIGF0IHRoZSBoZWFkLgorICAgIC8vIFN0b3JlcyB0byBsb2NhbCB2
YXJpYWJsZXMgYXJlIGhhbmRsZWQgaW4gZW5kQmFzaWNCbG9jaygpLiBUaGlzIHJldHVybnMgdHJ1
ZQorICAgIC8vIGlmIGV4ZWN1dGlvbiBzaG91bGQgY29udGludWUgcGFzdCB0aGlzIG5vZGUuIE5v
dGFibHksIGl0IHdpbGwgcmV0dXJuIHRydWUKKyAgICAvLyBmb3IgYmxvY2sgdGVybWluYWxzLCBz
byBsb25nIGFzIHRob3NlIHRlcm1pbmFscyBhcmUgbm90IFJldHVybiBvciB2YXJpYW50cworICAg
IC8vIG9mIFRocm93LgorICAgIC8vCisgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVx
dWl2YWxlbnQgdG8gZG9pbmc6CisgICAgLy8KKyAgICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRp
bmcoaW5kZXgpKSB7CisgICAgLy8gICAgIHN0YXRlLmV4ZWN1dGVFZGdlcyhpbmRleCk7CisgICAg
Ly8gICAgIHJlc3VsdCA9IHN0YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsKKyAgICAvLyB9IGVs
c2UKKyAgICAvLyAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICBib29sIGV4ZWN1dGUodW5zaWduZWQg
aW5kZXhJbkJsb2NrKTsKKyAgICAKKyAgICAvLyBJbmRpY2F0ZSB0aGUgc3RhcnQgb2YgZXhlY3V0
aW9uIG9mIHRoZSBub2RlLiBJdCByZXNldHMgYW55IHN0YXRlIGluIHRoZSBub2RlLAorICAgIC8v
IHRoYXQgaXMgcHJvZ3Jlc3NpdmVseSBidWlsdCB1cCBieSBleGVjdXRlRWRnZXMoKSBhbmQgZXhl
Y3V0ZUVmZmVjdHMoKS4gSW4KKyAgICAvLyBwYXJ0aWN1bGFyLCB0aGlzIHJlc2V0cyBjYW5FeGl0
KCksIHNvIGlmIHlvdSB3YW50IHRvICJrbm93IiBiZXR3ZWVuIGNhbGxzIG9mCisgICAgLy8gc3Rh
cnRFeGVjdXRpbmcoKSBhbmQgZXhlY3V0ZUVkZ2VzKCkvRWZmZWN0cygpIHdoZXRoZXIgdGhlIGxh
c3QgcnVuIG9mIHRoZQorICAgIC8vIGFuYWx5c2lzIGNvbmNsdWRlZCB0aGF0IHRoZSBub2RlIGNh
biBleGl0LCB5b3Ugc2hvdWxkIHByb2JhYmx5IHNldCB0aGF0CisgICAgLy8gaW5mb3JtYXRpb24g
YXNpZGUgcHJpb3IgdG8gY2FsbGluZyBzdGFydEV4ZWN1dGluZygpLgorICAgIGJvb2wgc3RhcnRF
eGVjdXRpbmcoTm9kZSopOworICAgIGJvb2wgc3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJ
bkJsb2NrKTsKKyAgICAKKyAgICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRo
ZSBnaXZlbiBub2RlLiBUaGlzIHJ1bnMgZmlsdGVyRWRnZUJ5VXNlKCkKKyAgICAvLyBvbiBhbGwg
ZWRnZXMgb2YgdGhlIG5vZGUuIFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFs
cmVhZHkgdXNlZAorICAgIC8vIGZpbHRlckVkZ2VCeVVzZSgpIChvciBzb21lIGVxdWl2YWxlbnQp
IG9uIGVhY2ggZWRnZS4KKyAgICB2b2lkIGV4ZWN1dGVFZGdlcyhOb2RlKik7CisgICAgdm9pZCBl
eGVjdXRlRWRnZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgZmlsdGVyRWRnZUJ5VXNlKE5vZGUqIG5vZGUsIEVkZ2UmIGVkZ2UpCisgICAgewor
ICAgICAgICBBU1NFUlQobWF5SGF2ZVR5cGVDaGVjayhlZGdlLnVzZUtpbmQoKSkgfHwgIW5lZWRz
VHlwZUNoZWNrKGVkZ2UpKTsKKyAgICAgICAgZmlsdGVyQnlUeXBlKG5vZGUsIGVkZ2UsIHR5cGVG
aWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKTsKKyAgICB9CisgICAgCisgICAgLy8gQWJzdHJhY3Rs
eSBleGVjdXRlIHRoZSBlZmZlY3RzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlzIGNoYW5nZXMgdGhl
IGFic3RyYWN0CisgICAgLy8gc3RhdGUgYXNzdW1pbmcgdGhhdCBlZGdlcyBoYXZlIGFscmVhZHkg
YmVlbiBmaWx0ZXJlZC4KKyAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5C
bG9jayk7CisgICAgYm9vbCBleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5v
ZGUqKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUs
IGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbHRlcihm
b3JOb2RlKG5vZGUpLCBzZXQpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2RlcyhUIG5vZGUsIEFycmF5TW9k
ZXMgYXJyYXlNb2RlcykKKyAgICB7CisgICAgICAgIHJldHVybiBmaWx0ZXJBcnJheU1vZGVzKGZv
ck5vZGUobm9kZSksIGFycmF5TW9kZXMpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwgdHlw
ZSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgRmlsdHJhdGlv
blJlc3VsdCBmaWx0ZXJCeVZhbHVlKFQgbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmaWx0ZXJCeVZhbHVlKGZvck5vZGUobm9kZSksIHZhbHVlKTsKKyAgICB9Cisg
ICAgCisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0
cnVjdHVyZVNldCYpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2RlcyhBYnN0
cmFjdFZhbHVlJiwgQXJyYXlNb2Rlcyk7CisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJz
dHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRl
ckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEpTVmFsdWUpOworICAgIAorcHJpdmF0ZToKKyAgICB2
b2lkIGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJsb2Nr
KTsKKyAgICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3QgQ29kZU9yaWdpbiYpOworICAg
IHZvaWQgY2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAg
ICBlbnVtIEJvb2xlYW5SZXN1bHQgeworICAgICAgICBVbmtub3duQm9vbGVhblJlc3VsdCwKKyAg
ICAgICAgRGVmaW5pdGVseUZhbHNlLAorICAgICAgICBEZWZpbml0ZWx5VHJ1ZQorICAgIH07Cisg
ICAgQm9vbGVhblJlc3VsdCBib29sZWFuUmVzdWx0KE5vZGUqLCBBYnN0cmFjdFZhbHVlJik7Cisg
ICAgCisgICAgYm9vbCB0cnlTZXRDb25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGNvbnN0YW50IGZvbGQgc29tZXRo
aW5nIHRoYXQgd2lsbCBwcm9kdWNlIHZhbHVlcyB0aGF0IGNvbnRyYXZlbmUKKyAgICAgICAgLy8g
cHJlZGljdGlvbnMuIElmIHRoYXQgaGFwcGVucyB0aGVuIHdlIGtub3cgdGhhdCB0aGUgY29kZSB3
aWxsIE9TUiBleGl0LCBmb3JjaW5nCisgICAgICAgIC8vIHJlY29tcGlsYXRpb24uIEJ1dCBpZiB3
ZSB0cmllZCB0byBjb25zdGFudCBmb2xkIHRoZW4gd2UnbGwgaGF2ZSBhIHZlcnkgZGVnZW5lcmF0
ZQorICAgICAgICAvLyBJUjogbmFtZWx5IHdlJ2xsIGhhdmUgYSBKU0NvbnN0YW50IHRoYXQgY29u
dHJhdmVuZXMgaXRzIG93biBwcmVkaWN0aW9uLiBUaGVyZSdzIGEKKyAgICAgICAgLy8gbG90IG9m
IHN1YnRsZSBjb2RlIHRoYXQgYXNzdW1lcyB0aGF0CisgICAgICAgIC8vIHNwZWN1bGF0aW9uRnJv
bVZhbHVlKGpzQ29uc3RhbnQpID09IGpzQ29uc3RhbnQucHJlZGljdGlvbigpLiAiSGFyZGVuaW5n
IiB0aGF0IGNvZGUKKyAgICAgICAgLy8gaXMgcHJvYmFibHkgbGVzcyBzYW5lIHRoYW4ganVzdCBw
dWxsaW5nIGJhY2sgb24gY29uc3RhbnQgZm9sZGluZy4KKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
b2xkVHlwZSA9IG5vZGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKG1lcmdlU3BlY3VsYXRp
b25zKHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlKSwgb2xkVHlwZSkgIT0gb2xkVHlwZSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KG1fZ3JhcGgsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmaWx0ZXJCeVR5cGUoTm9kZSogbm9kZSwgRWRnZSYgZWRn
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShlZGdlKTsKKyAgICAgICAgaWYgKHZhbHVlLm1fdHlwZSAmIH50eXBlKSB7
CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZWRnZS5z
ZXRQcm9vZlN0YXR1cyhOZWVkc0NoZWNrKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBl
ZGdlLnNldFByb29mU3RhdHVzKElzUHJvdmVkKTsKKyAgICAgICAgCisgICAgICAgIGZpbHRlcih2
YWx1ZSwgdHlwZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdmVyaWZ5RWRnZShOb2RlKiwgRWRn
ZSk7CisgICAgdm9pZCB2ZXJpZnlFZGdlcyhOb2RlKik7CisgICAgCisgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBBYnN0cmFjdFN0YXRlVHlwZSYg
bV9zdGF0ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWJzdHJhY3RJbnRlcnByZXRlcl9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXNfaAorI2RlZmluZSBE
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lc19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnBy
ZXRlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgorQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OkFic3RyYWN0SW50ZXJwcmV0ZXIoR3JhcGgmIGdyYXBoLCBBYnN0cmFjdFN0YXRl
VHlwZSYgc3RhdGUpCisgICAgOiBtX2NvZGVCbG9jayhncmFwaC5tX2NvZGVCbG9jaykKKyAgICAs
IG1fZ3JhcGgoZ3JhcGgpCisgICAgLCBtX3N0YXRlKHN0YXRlKQoreworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK0Fic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+Ojp+QWJzdHJhY3RJbnRlcnByZXRlcigpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFic3RyYWN0U3RhdGVUeXBlPgorQWJzdHJhY3RTdGF0ZTxBYnN0cmFjdFN0YXRlVHlwZT46
OkJvb2xlYW5SZXN1bHQgQWJzdHJhY3RTdGF0ZTxBYnN0cmFjdFN0YXRlVHlwZT46OmJvb2xlYW5S
ZXN1bHQoCisgICAgTm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUpCit7CisgICAgSlNW
YWx1ZSBjaGlsZENvbnN0ID0gdmFsdWUudmFsdWUoKTsKKyAgICBpZiAoY2hpbGRDb25zdCkgewor
ICAgICAgICBpZiAoY2hpbGRDb25zdC50b0Jvb2xlYW4obV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2xvYmFsRXhlYygpKSkKKyAgICAgICAgICAgIHJldHVy
biBEZWZpbml0ZWx5VHJ1ZTsKKyAgICAgICAgcmV0dXJuIERlZmluaXRlbHlGYWxzZTsKKyAgICB9
CisKKyAgICAvLyBOZXh0IGNoZWNrIGlmIHdlIGNhbiBmb2xkIGJlY2F1c2Ugd2Uga25vdyB0aGF0
IHRoZSBzb3VyY2UgaXMgYW4gb2JqZWN0IG9yIHN0cmluZyBhbmQgZG9lcyBub3QgZXF1YWwgdW5k
ZWZpbmVkLgorICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpCisgICAgICAg
ICYmIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKSB7CisgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
c2luZ2xldG9uKCk7CisgICAgICAgIGlmICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpCisgICAg
ICAgICAgICAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IFN0cmluZ1R5cGUpCisg
ICAgICAgICAgICByZXR1cm4gRGVmaW5pdGVseVRydWU7CisgICAgfQorICAgIAorICAgIHJldHVy
biBVbmtub3duQm9vbGVhblJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RT
dGF0ZVR5cGU+Citib29sIEFic3RyYWN0U3RhdGU8QWJzdHJhY3RTdGF0ZVR5cGU+OjpzdGFydEV4
ZWN1dGluZyhOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChtX3N0YXRlLmJsb2NrKCkpOworICAg
IEFTU0VSVChtX3N0YXRlLmlzVmFsaWQoKSk7CisgICAgCisgICAgbV9zdGF0ZS5zZXREaWRDbG9i
YmVyKGZhbHNlKTsKKyAgICAKKyAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAKKyAg
ICByZXR1cm4gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QWJzdHJhY3RTdGF0ZVR5cGU+Citib29sIEFic3RyYWN0U3RhdGU8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpzdGFydEV4ZWN1dGluZyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgcmV0dXJuIHN0
YXJ0RXhlY3V0aW5nKG1fc3RhdGUuYmxvY2soKS0+YXQoaW5kZXhJbkJsb2NrKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgordm9pZCBBYnN0cmFjdFN0YXRlPEFi
c3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVkZ2VzKE5vZGUqIG5vZGUpCit7CisgICAgREZHX05P
REVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgZmlsdGVyRWRnZUJ5VXNlKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Cit2b2lkIEFic3RyYWN0U3RhdGU8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWRnZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKQor
eworICAgIGV4ZWN1dGVFZGdlcyhtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jaykpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJhY3RT
dGF0ZTxBYnN0cmFjdFN0YXRlVHlwZT46OnZlcmlmeUVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJG
b3IoZWRnZS51c2VLaW5kKCkpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3Rh
dGVUeXBlPgordm9pZCBBYnN0cmFjdFN0YXRlPEFic3RyYWN0U3RhdGVUeXBlPjo6dmVyaWZ5RWRn
ZXMoTm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBu
b2RlLCB2ZXJpZnlFZGdlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5
cGU+Citib29sIEFic3RyYWN0U3RhdGU8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFBU1NFUlRf
RElTQUJMRUQpCisgICAgICAgIHZlcmlmeUVkZ2VzKG5vZGUpOworICAgIAorICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICBjYXNlIFdlYWtKU0NvbnN0
YW50OgorICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czogeworICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChtX2dyYXBoLCBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIElkZW50aXR5OiB7CisgICAgICAgIGZv
ck5vZGUobm9kZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldEFyZ3VtZW50OiB7CisgICAgICAgIEFTU0VSVCht
X2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gbV92YXJpYWJsZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAg
IEFTU0VSVCh2YWx1ZS5pc1RvcCgpKTsKKyAgICAgICAgRmlsdHJhdGlvblJlc3VsdCByZXN1bHQg
PQorICAgICAgICAgICAgdmFsdWUuZmlsdGVyKHR5cGVGaWx0ZXJGb3IodXNlS2luZEZvcih2YXJp
YWJsZS0+Zmx1c2hGb3JtYXQoKSkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJl
c3VsdCA9PSBGaWx0cmF0aW9uT0spOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0TG9jYWw6IHsK
KyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJl
ZGljdGlvbigpID09IFNwZWNOb25lKSB7CisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQo
ZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQWJzdHJhY3RW
YWx1ZSB2YWx1ZSA9IG1fdmFyaWFibGVzLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpKTsKKyAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewor
ICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQor
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgR2V0TG9jYWxVbmxpbmtlZDogeworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0g
bV92YXJpYWJsZXMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgICAgICBpZiAo
dmFsdWUudmFsdWUoKSkKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1
ZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgIG1fdmFyaWFibGVzLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBNb3ZI
aW50QW5kQ2hlY2s6IHsKKyAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4gQSBN
b3ZIaW50IGlzIGVmZmVjdGl2ZWx5IGEgcHJvbWlzZSB0aGF0IHRoZSBTZXRMb2NhbAorICAgICAg
ICAvLyB3YXMgZGVhZC4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNl
IFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBTZXRBcmd1bWVudDoK
KyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBz
ZXQuCisgICAgICAgIEFTU0VSVCghbV9zdGF0ZS5ibG9jaygpLT52YWx1ZXNBdEhlYWQub3BlcmFu
ZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6Cisg
ICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgY2FzZSBCaXRVUlNo
aWZ0OiB7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52
YWx1ZSgpOworICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzSW50MzIoKSAmJiBy
aWdodC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgIGludDMyX3QgYSA9IGxlZnQuYXNJbnQzMigp
OworICAgICAgICAgICAgaW50MzJfdCBiID0gcmlnaHQuYXNJbnQzMigpOworICAgICAgICAgICAg
Ym9vbCBjb25zdGFudFdhc1NldDsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgICAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQg
PSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEgJiBiKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICAgICAgICAgIGNvbnN0YW50
V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIHwgYikpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCaXRYb3I6CisgICAgICAgICAgICAgICAg
Y29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEgXiBiKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICAg
ICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUo
YSA+PiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYikpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIDw8IHN0YXRpY19jYXN0PHVpbnQz
Ml90PihiKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCaXRV
UlNoaWZ0OgorICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZSwgSlNWYWx1ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oYSkgPj4gc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGIpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChjb25zdGFudFdhc1NldCkgeworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBVSW50MzJUb051bWJlcjog
eworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUo
KTsKKyAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAg
IEFTU0VSVChjaGlsZC5pc0ludDMyKCkpOworICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50
KG5vZGUsIEpTVmFsdWUoY2hpbGQuYXNVSW50MzIoKSkpKSB7CisgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIW5vZGUtPmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0lu
dDMyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBEb3VibGVBc0ludDMy
OiB7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1
ZSgpOworICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKSkgeworICAgICAgICAg
ICAgZG91YmxlIGFzRG91YmxlID0gY2hpbGQuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgIGludDMy
X3QgYXNJbnQgPSBKU0M6OnRvSW50MzIoYXNEb3VibGUpOworICAgICAgICAgICAgaWYgKGJpdHdp
c2VfY2FzdDxpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KGFzSW50KSkgPT0gYml0d2lzZV9j
YXN0PGludDY0X3Q+KGFzRG91YmxlKQorICAgICAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50
KG5vZGUsIEpTVmFsdWUoYXNJbnQpKSkgeworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7CisgICAgICAgIEpTVmFsdWUgY2hp
bGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAoY2hpbGQg
JiYgY2hpbGQuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsK
KyAgICAgICAgICAgIGlmIChjaGlsZC5pc0ludDMyKCkpCisgICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBjaGlsZCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBK
U1ZhbHVlKEpTQzo6dG9JbnQzMihjaGlsZC5hc0RvdWJsZSgpKSkpOworICAgICAgICAgICAgaWYg
KGNvbnN0YW50V2FzU2V0KSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0
YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBJbnQzMlRvRG91Ymxl
OgorICAgIGNhc2UgRm9yd2FyZEludDMyVG9Eb3VibGU6IHsKKyAgICAgICAgSlNWYWx1ZSBjaGls
ZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIGlmIChjaGlsZCAm
JiBjaGlsZC5pc051bWJlcigpCisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBK
U1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBjaGlsZC5hc051bWJlcigpKSkpIHsKKyAg
ICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0RvdWJsZVJlYWwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0RvdWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOiB7CisgICAgICAgIEpTVmFs
dWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFs
dWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBpZiAo
bGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKQorICAg
ICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkg
KyByaWdodC5hc051bWJlcigpKSkpIHsKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25z
dGFudHModHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzd2l0
Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgorICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgICAgICBp
ZiAoIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAgICAg
JiYgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBl
KSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZVJlYWwp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCk7CisgICAgICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjU3RyaW5nIHwgU3BlY0ludDMyIHwgU3Bl
Y051bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgICAgIAorICAgIGNhc2UgTWFrZVJvcGU6IHsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWI6IHsK
KyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsK
KyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7
CisgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5p
c051bWJlcigpCisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxl
ZnQuYXNOdW1iZXIoKSAtIHJpZ2h0LmFzTnVtYmVyKCkpKSkgeworICAgICAgICAgICAgbV9zdGF0
ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
SW50MzJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsK
KyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVG
bGFncygpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKKyAgICBjYXNlIEFyaXRoTmVnYXRlOiB7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQu
aXNOdW1iZXIoKQorICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZSgt
Y2hpbGQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNo
IChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICAgICAg
aWYgKCFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAg
ICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
QXJpdGhNdWw6IHsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpLnZhbHVlKCk7CisgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIo
KSAmJiByaWdodC5pc051bWJlcigpCisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAqIHJpZ2h0LmFzTnVtYmVyKCkpKSkgeworICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2Rl
LT5hcml0aE5vZGVGbGFncygpKQorICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVn
YXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1i
ZXJVc2U6CisgICAgICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlKQorICAgICAgICAgICAgICAgIHx8IGlzUmVhbE51bWJlclNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJpdGhEaXY6CisgICAgY2Fz
ZSBBcml0aE1pbjoKKyAgICBjYXNlIEFyaXRoTWF4OgorICAgIGNhc2UgQXJpdGhNb2Q6IHsKKyAg
ICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAg
ICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7Cisg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IEFyaXRoTW9kICYmIHJpZ2h0ICYmIHJpZ2h0LmlzTnVt
YmVyKCkgJiYgcmlnaHQuYXNOdW1iZXIoKSA9PSAxCisgICAgICAgICAgICAmJiB0cnlTZXRDb25z
dGFudChub2RlLCBKU1ZhbHVlKDApKSkgeworICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENv
bnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlm
IChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7
CisgICAgICAgICAgICBkb3VibGUgYSA9IGxlZnQuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgIGRv
dWJsZSBiID0gcmlnaHQuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNT
ZXQ7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
QXJpdGhEaXY6CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKGEgLyBiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5
U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIDwgYiA/IGEgOiAoYiA8PSBhID8gYiA6IGEgKyBi
KSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcml0aE1heDoK
KyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpT
VmFsdWUoYSA+IGIgPyBhIDogKGIgPj0gYSA/IGIgOiBhICsgYikpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGZtb2QoYSwgYikpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CisgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtp
bmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAgICAgCisgICAgY2FzZSBBcml0aEFiczogeworICAgICAgICBKU1ZhbHVlIGNo
aWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgaWYgKGNoaWxk
ICYmIGNoaWxkLmlzTnVtYmVyKCkKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUs
IEpTVmFsdWUoZmFicyhjaGlsZC5hc051bWJlcigpKSkpKSB7CisgICAgICAgICAgICBtX3N0YXRl
LnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBJbnQzMlVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIp
OworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAg
IGNhc2UgQXJpdGhTcXJ0OiB7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIo
KQorICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShzcXJ0KGNoaWxk
LmFzTnVtYmVyKCkpKSkpIHsKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHMo
dHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0RvdWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
ICAgIAorICAgIGNhc2UgTG9naWNhbE5vdDogeworICAgICAgICBib29sIGRpZFNldENvbnN0YW50
ID0gZmFsc2U7CisgICAgICAgIHN3aXRjaCAoYm9vbGVhblJlc3VsdChub2RlLCBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKSkpIHsKKyAgICAgICAgY2FzZSBEZWZpbml0ZWx5VHJ1ZToKKyAgICAgICAg
ICAgIGRpZFNldENvbnN0YW50ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNl
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEZWZpbml0ZWx5RmFsc2U6Cisg
ICAgICAgICAgICBkaWRTZXRDb25zdGFudCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVh
bih0cnVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChkaWRTZXRDb25zdGFudCkgeworICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7CisgICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAg
ICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CisgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIElzVW5k
ZWZpbmVkOgorICAgIGNhc2UgSXNCb29sZWFuOgorICAgIGNhc2UgSXNOdW1iZXI6CisgICAgY2Fz
ZSBJc1N0cmluZzoKKyAgICBjYXNlIElzT2JqZWN0OgorICAgIGNhc2UgSXNGdW5jdGlvbjogewor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAorICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBJc1Vu
ZGVmaW5lZAorICAgICAgICAgICAgJiYgbV9ncmFwaC5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludElzU3RpbGxWYWxpZChub2RlLT5jb2RlT3JpZ2luKSk7CisgICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAoY2hp
bGQpIHsKKyAgICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7CisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6CisgICAgICAg
ICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4o
CisgICAgICAgICAgICAgICAgICAgIGNoaWxkLmlzQ2VsbCgpCisgICAgICAgICAgICAgICAgICAg
ID8gY2hpbGQuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpCisgICAgICAgICAg
ICAgICAgICAgIDogY2hpbGQuaXNVbmRlZmluZWQoKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBJc0Jvb2xlYW46CisgICAgICAgICAgICAgICAgY29uc3RhbnRX
YXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oY2hpbGQuaXNCb29sZWFuKCkp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSXNOdW1iZXI6Cisg
ICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jv
b2xlYW4oY2hpbGQuaXNOdW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBJc1N0cmluZzoKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRy
eVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihpc0pTU3RyaW5nKGNoaWxkKSkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJc09iamVjdDoKKyAgICAgICAgICAg
ICAgICBpZiAoY2hpbGQuaXNOdWxsKCkgfHwgIWNoaWxkLmlzT2JqZWN0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oY2hpbGQuaXNOdWxsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBjb25zdGFu
dFdhc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CisgICAgICAgICAgICAgICAgbV9zdGF0
ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgVHlwZU9mOiB7Cisg
ICAgICAgIFZNKiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxk
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgYWJzdHJhY3RDaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBpZiAo
Y2hpbGQpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdHlwZVN0cmluZyA9IGpzVHlwZVN0cmluZ0Zv
clZhbHVlKCp2bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2lu
KSwgY2hpbGQpOworICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHR5cGVTdHJp
bmcpKSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
IChpc051bWJlclNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgeworICAgICAgICAg
ICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5n
KCkpKSB7CisgICAgICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjTnVtYmVy
KTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlz
U3RyaW5nU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7CisgICAgICAgICAgICBp
ZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSkp
IHsKKyAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcpOwor
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXNGaW5h
bE9iamVjdFNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSB8fCBpc0FycmF5U3BlY3Vs
YXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJndW1lbnRzU3BlY3VsYXRpb24oYWJz
dHJhY3RDaGlsZC5tX3R5cGUpKSB7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9k
ZSwgdm0tPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBm
aWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNGaW5hbE9iamVjdCB8IFNwZWNBcnJheSB8IFNwZWNB
cmd1bWVudHMpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoaXNGdW5jdGlvblNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgeworICAg
ICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3MuZnVuY3Rp
b25TdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNw
ZWNGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0
cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkpIHsKKyAg
ICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLmJvb2xl
YW5TdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBTdHJpbmdVc2U6CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVbnR5cGVk
VXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3ZtLnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAor
ICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgIGNhc2Ug
Q29tcGFyZUdyZWF0ZXI6CisgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgorICAgIGNhc2UgQ29t
cGFyZUVxOgorICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6IHsKKyAgICAgICAgYm9vbCBjb25z
dGFudFdhc1NldCA9IGZhbHNlOworCisgICAgICAgIEpTVmFsdWUgbGVmdENvbnN0ID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodENvbnN0ID0g
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKKyAgICAgICAgaWYgKGxlZnRDb25zdCAm
JiByaWdodENvbnN0KSB7CisgICAgICAgICAgICBpZiAobGVmdENvbnN0LmlzTnVtYmVyKCkgJiYg
cmlnaHRDb25zdC5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIGEgPSBsZWZ0
Q29uc3QuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBkb3VibGUgYiA9IHJpZ2h0Q29uc3Qu
YXNOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICAgICAgICAgICAgICBjb25zdGFu
dFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihhIDwgYikpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9k
ZSwganNCb29sZWFuKGEgPD0gYikpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgICAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihhID4gYikpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVHcmVh
dGVyRXE6CisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGEgPj0gYikpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA9PSBiKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCFjb25zdGFudFdhc1NldCAmJiBub2RlLT5vcCgpID09IENvbXBhcmVFcQor
ICAgICAgICAgICAgICAgICYmIGxlZnRDb25zdC5pc1N0cmluZygpICYmIHJpZ2h0Q29uc3QuaXNT
dHJpbmcoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZ0ltcGwqIGEgPSBhc1N0cmlu
ZyhsZWZ0Q29uc3QpLT50cnlHZXRWYWx1ZUltcGwoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmdJbXBsKiBiID0gYXNTdHJpbmcocmlnaHRDb25zdCktPnRyeUdldFZhbHVlSW1wbCgpOwor
ICAgICAgICAgICAgICAgIGlmIChhICYmIGIpCisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKFdURjo6ZXF1YWwoYSwgYikp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFjb25z
dGFudFdhc1NldCAmJiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXFDb25zdGFudCB8fCBub2RlLT5v
cCgpID09IENvbXBhcmVFcSkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRUeXBl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlOworICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlOworICAgICAg
ICAgICAgaWYgKChpc0ludDMyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzT3RoZXJTcGVjdWxh
dGlvbihyaWdodFR5cGUpKQorICAgICAgICAgICAgICAgIHx8IChpc090aGVyU3BlY3VsYXRpb24o
bGVmdFR5cGUpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodFR5cGUpKSkKKyAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihmYWxz
ZSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsK
KyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMgb3Zlcmx5IGNv
bnNlcnZhdGl2ZS4gQnV0IHRoZSBvbmx5IHRoaW5nIHRoaXMgcHJldmVudHMgaXMgc3RvcmUgZWxp
bWluYXRpb24sCisgICAgICAgIC8vIGFuZCBob3cgbGlrZWx5IGlzIGl0LCByZWFsbHksIHRoYXQg
eW91J2xsIGhhdmUgcmVkdW5kYW50IHN0b3JlcyBhY3Jvc3MgYSBjb21wYXJpc29uCisgICAgICAg
IC8vIG9wZXJhdGlvbj8gQ29tcGFyaXNvbiBvcGVyYXRpb25zIGFyZSB0eXBpY2FsbHkgYXQgdGhl
IGVuZCBvZiBiYXNpYyBibG9ja3MsIHNvCisgICAgICAgIC8vIHVubGVzcyB3ZSBoYXZlIGdsb2Jh
bCBzdG9yZSBlbGltaW5hdGlvbiAoc3VwZXIgdW5saWtlbHkgZ2l2ZW4gaG93IHVucHJvZml0YWJs
ZSB0aGF0CisgICAgICAgIC8vIG9wdGltaXphdGlvbiBpcyB0byBiZWdpbiB3aXRoKSwgeW91IGFy
ZW4ndCBnb2luZyB0byBiZSB3YW50aW5nIHRvIHN0b3JlIGVsaW1pbmF0ZQorICAgICAgICAvLyBh
Y3Jvc3MgYW4gZXF1YWxpdHkgb3AuCisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQ29tcGFyZVN0cmlj
dEVxOgorICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQ6IHsKKyAgICAgICAgTm9kZSog
bGVmdE5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIHJpZ2h0Tm9k
ZSA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9k
ZShsZWZ0Tm9kZSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUocmln
aHROb2RlKS52YWx1ZSgpOworICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgeworICAgICAgICAg
ICAgaWYgKGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpCisgICAgICAgICAgICAg
ICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGxlZnQuYXNOdW1iZXIoKSA9PSBy
aWdodC5hc051bWJlcigpKSkpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29u
c3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGxlZnQuaXNTdHJpbmcoKSAmJiByaWdodC5pc1N0cmluZygpKSB7CisgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogYSA9IGFzU3RyaW5nKGxlZnQpLT50cnlHZXRW
YWx1ZUltcGwoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBiID0gYXNTdHJp
bmcocmlnaHQpLT50cnlHZXRWYWx1ZUltcGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoYSAmJiBi
ICYmIHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihXVEY6OmVxdWFsKGEsIGIpKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7
CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIFRoaXMgaXMgb3Zlcmx5IGNvbnNl
cnZhdGl2ZS4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFN0cmlu
Z0NoYXJDb2RlQXQ6CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2Ug
R2V0QnlWYWw6IHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgc3dp
dGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6U2Vs
ZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAg
ICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpG
b3JjZUV4aXQ6CisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZSkubWFrZVRvcCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgd2F0Y2hwb2ludCB3YXMg
c3RpbGwgdmFsaWQgd2UgY291bGQgdG90YWxseSBzZXQgdGhpcyB0byBiZQorICAgICAgICAgICAg
ICAgIC8vIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIuIEV4Y2VwdCB0aGF0IHdlJ2QgaGF2ZSB0byBi
ZSBjYXJlZnVsLiBJZiB3ZQorICAgICAgICAgICAgICAgIC8vIHRlc3RlZCB0aGUgd2F0Y2hwb2lu
dCBzdGF0ZSBoZXJlIHRoZW4gaXQgY291bGQgY2hhbmdlIGJ5IHRoZSB0aW1lCisgICAgICAgICAg
ICAgICAgLy8gd2UgZ290IHRvIHRoZSBiYWNrZW5kLiBTbyB0byBkbyB0aGlzIHJpZ2h0LCB3ZSdk
IGhhdmUgdG8gZ2V0IHRoZQorICAgICAgICAgICAgICAgIC8vIGZpeHVwIHBoYXNlIHRvIGNoZWNr
IHRoZSB3YXRjaHBvaW50IHN0YXRlIGFuZCB0aGVuIGJha2UgaW50byB0aGUKKyAgICAgICAgICAg
ICAgICAvLyBHZXRCeVZhbCBvcGVyYXRpb24gdGhlIGZhY3QgdGhhdCB3ZSdyZSB1c2luZyBhIHdh
dGNocG9pbnQsIHVzaW5nCisgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIGxpa2UgQXJyYXk6
OlNhbmVDaGFpbiAoZXhjZXB0IG5vdCBxdWl0ZSwgYmVjYXVzZSB0aGF0CisgICAgICAgICAgICAg
ICAgLy8gaW1wbGllcyBhbiBpbi1ib3VuZHMgYWNjZXNzKS4gTm9uZSBvZiB0aGlzIGZlZWxzIGxp
a2UgaXQncyB3b3J0aCBpdCwKKyAgICAgICAgICAgICAgICAvLyBzbyB3ZSdyZSBnb2luZyB3aXRo
IFRPUCBmb3Igbm93LgorICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9n
cmFwaCwgbV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJh
eTo6SW50MzI6CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5k
cygpKSB7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7
CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpCisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlUmVh
bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5OjpT
bG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlz
T3V0T2ZCb3VuZHMoKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9y
aWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6
VWludDhBcnJheToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFy
cmF5OgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgICAgIGlmIChub2Rl
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0VHlwZShTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDY0QXJyYXk6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNl
IFB1dEJ5VmFsOgorICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQ
dXQoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRP
ZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6
OkRvdWJsZToKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRz
KCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4
SW5CbG9jayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGln
dW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKKyAgICAgICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCisgICAgICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJyYXlQ
dXNoOgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBjbG9iYmVyV29y
bGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKFNwZWNOdW1iZXIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
IGNhc2UgQXJyYXlQb3A6CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBm
b3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICBjYXNlIFJlZ0V4cEV4ZWM6CisgICAgY2FzZSBSZWdFeHBUZXN0OgorICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IEp1bXA6CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBCcmFuY2g6IHsK
KyAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIEJv
b2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3VsdChub2RlLCBmb3JOb2RlKGNoaWxkKSk7
CisgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseVRydWUpIHsKKyAgICAgICAgICAgIG1f
c3RhdGUuc2V0QnJhbmNoRGlyZWN0aW9uKFRha2VUcnVlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseUZhbHNlKSB7CisgICAg
ICAgICAgICBtX3N0YXRlLnNldEJyYW5jaERpcmVjdGlvbihUYWtlRmFsc2UpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IFRoZSBhYm92ZSBoYW5kbGVz
IHRoZSB0cml2aWFsIGNhc2VzIG9mIHNwYXJzZSBjb25kaXRpb25hbAorICAgICAgICAvLyBjb25z
dGFudCBwcm9wYWdhdGlvbiwgYnV0IHdlIGNhbiBkbyBiZXR0ZXI6CisgICAgICAgIC8vIFdlIGNh
biBzcGVjaWFsaXplIHRoZSBzb3VyY2UgdmFyaWFibGUncyB2YWx1ZSBvbiBlYWNoIGRpcmVjdGlv
biBvZgorICAgICAgICAvLyB0aGUgYnJhbmNoLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOyAvLyBUaGlzIGlzIG92ZXJseSBjb25zZXJ2YXRpdmUuCisgICAgICAgIG1fc3RhdGUuc2V0
QnJhbmNoRGlyZWN0aW9uKFRha2VCb3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKKyAgICBjYXNlIFN3aXRjaDogeworICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGZvciBub3cu
CisgICAgICAgIC8vIEZJWE1FOiBEbyBzcGFyc2UgY29uZGl0aW9uYWwgdGhpbmdzLgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFJldHVybjoKKyAgICAgICAg
bV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAg
IGNhc2UgVGhyb3c6CisgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgorICAgICAgICBtX3N0
YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKKyAg
ICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUo
KTsKKyAgICAgICAgaWYgKGNoaWxkQ29uc3QgJiYgY2hpbGRDb25zdC5pc051bWJlcigpICYmIHRy
eVNldENvbnN0YW50KG5vZGUsIGNoaWxkQ29uc3QpKSB7CisgICAgICAgICAgICBtX3N0YXRlLnNl
dEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSk7CisgICAgICAgIAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBm
b3JOb2RlKG5vZGUpOworICAgICAgICAKKyAgICAgICAgLy8gTkIuIFRoZSBtb3JlIGNhbm9uaWNh
bCB3YXkgb2Ygd3JpdGluZyB0aGlzIHdvdWxkIGhhdmUgYmVlbjoKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgIC8vIGlmIChkZXN0aW5hdGlvbi5t
X3R5cGUgJiAhKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pKSB7CisgICAg
ICAgIC8vICAgICBkZXN0aW5hdGlvbi5maWx0ZXIoU3BlY051bWJlciB8IFNwZWNTdHJpbmcgfCBT
cGVjQm9vbGVhbik7CisgICAgICAgIC8vICAgICBBYnN0cmFjdFZhbHVlIHN0cmluZzsKKyAgICAg
ICAgLy8gICAgIHN0cmluZy5zZXQodm0tPnN0cmluZ1N0cnVjdHVyZSk7CisgICAgICAgIC8vICAg
ICBkZXN0aW5hdGlvbi5tZXJnZShzdHJpbmcpOworICAgICAgICAvLyB9CisgICAgICAgIC8vCisg
ICAgICAgIC8vIFRoZSByZWFzb24gd2h5IHRoaXMgd291bGQsIGluIG1vc3Qgb3RoZXIgY2FzZXMs
IGhhdmUgYmVlbiBiZXR0ZXIgaXMgdGhhdAorICAgICAgICAvLyB0aGVuIGRlc3RpbmF0aW9uIHdv
dWxkIHByZXNlcnZlIGFueSBub24tU3BlY3VsYXRlZFR5cGUga25vd2xlZGdlIG9mIHNvdXJjZS4K
KyAgICAgICAgLy8gQXMgaXQgc3RhbmRzLCB0aGUgY29kZSBiZWxvdyBmb3JnZXRzIGFueSBub24t
U3BlY3VsYXRlZFR5cGUga25vd2xlZGdlIHRoYXQKKyAgICAgICAgLy8gc291cmNlIHdvdWxkIGhh
dmUgaGFkLiBGb3J0dW5hdGVseSwgdGhvdWdoLCBmb3IgdGhpbmdzIGxpa2Ugc3RyaW5ncyBhbmQK
KyAgICAgICAgLy8gbnVtYmVycyBhbmQgYm9vbGVhbnMsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhl
IG5vbi1TcGVjdWxhdGVkVHlwZSBrbm93ZWRnZToKKyAgICAgICAgLy8gdGhlIHN0cnVjdHVyZSB3
b24ndCB0ZWxsIHVzIGFueXRoaW5nIHdlIGRvbid0IGFscmVhZHkga25vdywgYW5kIG5laXRoZXIK
KyAgICAgICAgLy8gd2lsbCBBcnJheU1vZGVzLiBBbmQgaWYgdGhlIHNvdXJjZSB3YXMgYSBtZWFu
aW5nZnVsIGNvbnN0YW50IHRoZW4gd2UKKyAgICAgICAgLy8gd291bGQgaGF2ZSBoYW5kbGVkIHRo
YXQgYWJvdmUuIFVuZm9ydHVuYXRlbHksIHRoaXMgZG9lcyBtZWFuIHRoYXQKKyAgICAgICAgLy8g
VG9QcmltaXRpdmUgd2lsbCBjdXJyZW50bHkgZm9yZ2V0IHN0cmluZyBjb25zdGFudHMuIEJ1dCB0
aGF0J3Mgbm90IGEgYmlnCisgICAgICAgIC8vIGRlYWwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG9w
dGltaXphdGlvbiBvbiB0aG9zZSBjdXJyZW50bHkuCisgICAgICAgIAorICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgCisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBzb3VyY2UubV90eXBlOworICAgICAgICBpZiAodHlwZSAm
IH4oU3BlY051bWJlciB8IFNwZWNTdHJpbmcgfCBTcGVjQm9vbGVhbikpIHsKKyAgICAgICAgICAg
IHR5cGUgJj0gKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICAgICAgdHlwZSB8PSBTcGVjU3RyaW5nOworICAgICAgICB9CisgICAgICAgIGRlc3RpbmF0aW9u
LnNldFR5cGUodHlwZSk7CisgICAgICAgIGlmIChkZXN0aW5hdGlvbi5pc0NsZWFyKCkpCisgICAg
ICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgIAorICAgIGNhc2UgVG9TdHJpbmc6IHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CisgICAg
ICAgICAgICAvLyBUaGlzIGFsc28gZmlsdGVycyB0aGF0IHRoZSBTdHJpbmdPYmplY3QgaGFzIHRo
ZSBwcmltb3JkaWFsIFN0cmluZ09iamVjdAorICAgICAgICAgICAgLy8gc3RydWN0dXJlLgorICAg
ICAgICAgICAgZmlsdGVyKAorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLAorICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5zdHJp
bmdPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUp
OyAvLyBXZSBjb3VsZCBiZSBtb3JlIHByZWNpc2UgYnV0IGl0J3MgbGlrZWx5IG5vdCB3b3J0aCBp
dC4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0
VXNlOgorICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gV2UgY291bGQgYmUg
bW9yZSBwcmVjaXNlIGJ1dCBpdCdzIGxpa2VseSBub3Qgd29ydGggaXQuCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBjYXNlIFVudHlwZWRVc2U6Cisg
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
TmV3U3RyaW5nT2JqZWN0OiB7CisgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gJlN0cmluZ09iamVjdDo6c19pbmZvKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgICAgICAKKyAgICBjYXNlIE5ld0FycmF5OgorICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKKyAgICAgICAgICAgIG1fZ3Jh
cGgsCisgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2lu
KS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmlu
ZGV4aW5nVHlwZSgpKSk7CisgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgK
KyAgICAgICAgICAgIG1fZ3JhcGgsCisgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgIG1fc3RhdGUuc2V0SGF2
ZVN0cnVjdHVyZXModHJ1ZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOZXdBcnJheVdp
dGhTaXplOgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUoU3BlY0FycmF5KTsKKyAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0
dXJlcyh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIE5ld1Jl
Z2V4cDoKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKKyAgICAgICAg
bV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBjYXNlIFRvVGhpczogeworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2Ug
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGlu
YXRpb24gPSBmb3JOb2RlKG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgIGRlc3RpbmF0aW9u
ID0gc291cmNlOworICAgICAgICBkZXN0aW5hdGlvbi5tZXJnZShTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIENyZWF0ZVRoaXM6IHsKKyAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBOZXdPYmplY3Q6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0
cnVjdHVyZSgpKTsKKyAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoCisgICAgICAgICAgICBtX2dyYXBoLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkp
OworICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOworICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6CisgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KAorICAgICAgICAgICAgbV9ncmFwaCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpOworICAgICAgICBt
X3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOworICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKKyAgICBjYXNlIFRlYXJPZmZBcmd1bWVudHM6
CisgICAgICAgIC8vIERvZXMgbm90aGluZyB0aGF0IGlzIHVzZXItdmlzaWJsZS4KKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoKKyAgICAgICAgaWYg
KGlzRW1wdHlTcGVjdWxhdGlvbigKKyAgICAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5k
KAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUt
PmNvZGVPcmlnaW4pKS5tX3R5cGUpKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0
YW50cyh0cnVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgR2V0TXlBcmd1bWVudHNM
ZW5ndGg6CisgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9lcyBub3Qg
ZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQorICAgICAgICAvLyB0aGUg
YXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBpcyBub3Qgc3VmZmljaWVudCB0byBmb3Jj
ZSBjb25zdGFudCBmb2xkaW5nCisgICAgICAgIC8vIG9mIEdldE15QXJndW1lbnRzTGVuZ3RoLCBi
ZWNhdXNlIEdldE15QXJndW1lbnRzTGVuZ3RoIGlzIGEgY2xvYmJlcmluZyBvcGVyYXRpb24uCisg
ICAgICAgIC8vIFdlIHBlcmZvcm0gZnVydGhlciBvcHRpbWl6YXRpb25zIG9uIHRoaXMgbGF0ZXIg
b24uCisgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgeworICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwganNO
dW1iZXIobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkg
LSAxKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNJbnQzMik7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoCisgICAgICAgICAgICAhaXNF
bXB0eVNwZWN1bGF0aW9uKAorICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQoCisg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29k
ZU9yaWdpbikpLm1fdHlwZSkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CisgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xv
YmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIGFyZ3VtZW50cyBvYmplY3QgaGFkIGEgZ2V0dGVy
CisgICAgICAgIC8vIGluc3RhbGxlZCBvbiB0aGUgbGVuZ3RoIHByb3BlcnR5LgorICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgLy8g
V2UgY3VycmVudGx5IG1ha2Ugbm8gZ3VhcmFudGVlIGFib3V0IHdoYXQgdGhpcyByZXR1cm5zIGJl
Y2F1c2UgaXQgZG9lcyBub3QKKyAgICAgICAgLy8gc3BlY3VsYXRlIHRoYXQgdGhlIGxlbmd0aCBw
cm9wZXJ0eSBpcyBhY3R1YWxseSBhIGxlbmd0aC4KKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtl
VG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEdldE15QXJndW1lbnRC
eVZhbDoKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgLy8gV2Uga25v
dyB0aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28g
d2UgY2FuIG9wdGltaXplCisgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhh
dCB0aGlzIGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhlCisgICAgICAgIC8v
IEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCisgICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBHZXRNeUFyZ3VtZW50
QnlWYWxTYWZlOgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAvLyBU
aGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBwcm9wZXJ0eSB3
ZSdyZSBhY2Nlc3NpbmcgaGFzCisgICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBkb24ndCBzcGVjdWxh
dGUgYWdhaW5zdCB0aGlzLgorICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKKyAgICAgICAgLy8gQW5kIHRoZSByZXN1bHQgaXMgdW5rbm93bi4KKyAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICBjYXNlIE5ld0Z1bmN0aW9uOgorICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgor
ICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgK
KyAgICAgICAgICAgIG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPmZ1bmN0aW9uU3RydWN0dXJlKCkpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgY2FzZSBHZXRDYWxsZWU6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBTZXRDYWxs
ZWU6CisgICAgY2FzZSBTZXRNeVNjb3BlOgorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgR2V0U2NvcGU6IC8vIEZJWE1FOiBXZSBjb3VsZCBnZXQgcmlkIG9mIHRoZXNlIGlm
IHdlIGtub3cgdGhhdCB0aGUgSlNGdW5jdGlvbiBpcyBhIGNvbnN0YW50LiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MjAyCisgICAgY2FzZSBHZXRNeVNjb3BlOgor
ICAgIGNhc2UgU2tpcFRvcFNjb3BlOgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3Bl
Y0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTa2lwU2NvcGU6IHsKKyAg
ICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7Cisg
ICAgICAgIGlmIChjaGlsZCAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGpzQ2FzdDxK
U1Njb3BlKj4oY2hpbGQuYXNDZWxsKCkpLT5uZXh0KCkpKSkgeworICAgICAgICAgICAgbV9zdGF0
ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOgorICAgICAgICBm
b3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgorICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFB1dENsb3N1cmVWYXI6CisgICAgICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMobm9kZS0+Y29kZU9y
aWdpbik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRCeUlkOgor
ICAgIGNhc2UgR2V0QnlJZEZsdXNoOgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBpZiAoIW5vZGUtPnByZWRpY3Rpb24oKSkgeworICAgICAgICAgICAgbV9zdGF0ZS5z
ZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgewor
ICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAgICAgR2V0QnlJZFN0
YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLm1fdm0sIHN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pOworICAgICAgICAgICAg
ICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBc3Nl
cnQgdGhpbmdzIHRoYXQgd2UgY2FuJ3QgaGFuZGxlIGFuZCB0aGF0IHRoZSBjb21wdXRlRm9yKCkg
bWV0aG9kCisgICAgICAgICAgICAgICAgICAgIC8vIGFib3ZlIHdvbid0IGJlIGFibGUgdG8gcmV0
dXJuLgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLnN0cnVjdHVyZVNldCgpLnNp
emUoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFzdGF0dXMuY2hhaW4oKSk7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnNw
ZWNpZmljVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KG1fZ3JhcGgsIHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBzdGF0dXMuc3RydWN0dXJl
U2V0KCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0
ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IEdldEFycmF5TGVuZ3RoOgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVz
LCBidXQgaXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNBcnJheSwgc28gaXQncyBn
b29kIGVub3VnaC4KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIENoZWNrRXhlY3V0YWJsZTogeworICAg
ICAgICAvLyBGSVhNRTogV2UgY291bGQgdHJhY2sgZXhlY3V0YWJsZXMgaW4gQWJzdHJhY3RWYWx1
ZSwgd2hpY2ggd291bGQgYWxsb3cgdXMgdG8gZ2V0IHJpZCBvZiB0aGVzZSBjaGVja3MKKyAgICAg
ICAgLy8gbW9yZSB0aG9yb3VnaGx5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA2MjAwCisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBlbGltaW5hdGUgdGhlc2Ug
ZW50aXJlbHkgaWYgd2Uga25vdyB0aGUgZXhhY3QgdmFsdWUgdGhhdCBmbG93cyBpbnRvIHRoaXMu
CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYy
MDEKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVj
dHVyZTogeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRl
IHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCisgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmlu
ZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KKworICAgICAgICBTdHJ1Y3R1cmVT
ZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOworCisgICAgICAgIGlmICh2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKKyAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisKKyAgICAgICAgLy8gSWYgdGhp
cyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFk
eSBoZWxkIGluCisgICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhl
biB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKKyAgICAgICAgLy8gdHVybiB0aGlz
IGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQuCisgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQorICAgICAgICAgICAgJiYgdmFsdWUubV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgeworICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGZpbHRlcih2YWx1ZSwg
dmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5zaW5nbGV0b24oKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKKyAgICAg
ICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAg
IGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAg
Ly8gSXQncyBvbmx5IHZhbGlkIHRvIGlzc3VlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hw
b2ludCBpZiB3ZSBhbHJlYWR5CisgICAgICAgIC8vIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBj
b3ZlcnMgYSBzdXBlcnNldCBvZiB0aGUgc3RydWN0dXJlcyBrbm93biB0bworICAgICAgICAvLyBi
ZWxvbmcgdG8gdGhlIHNldCBvZiBmdXR1cmUgc3RydWN0dXJlcyB0aGF0IHRoaXMgdmFsdWUgbWF5
IGhhdmUuCisgICAgICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSBpc3N1ZSBzaW5nbGV0b24gd2F0
Y2hwb2ludHMgKHRoYXQgY2hlY2sgb25lIHN0cnVjdHVyZSkKKyAgICAgICAgLy8gYW5kIG91ciBm
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgY2FuIG9ubHkgY29udGFpbiB6ZXJvLCBvbmUsIG9y
IGFuCisgICAgICAgIC8vIGluZmluaXR5IG9mIHN0cnVjdHVyZXMuCisgICAgICAgIEFTU0VSVCgK
KyAgICAgICAgICAgIHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihT
dHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKQorICAgICAgICAgICAgfHwgbV9ncmFwaC53
YXRjaHBvaW50cygpLnNob3VsZEFzc3VtZU1peGVkU3RhdGUobm9kZS0+c3RydWN0dXJlKCktPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKTsKKyAgICAgICAgCisgICAgICAgIGZpbHRlcih2YWx1
ZSwgbm9kZS0+c3RydWN0dXJlKCkpOworICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVz
KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICBjYXNlIFBo
YW50b21QdXRTdHJ1Y3R1cmU6CisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKSB7CisgICAgICAgICAgICBjbG9iYmVy
U3RydWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3Ry
dWN0dXJlKTsKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgY2Fz
ZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBu
b3QgYSBKUyB2YWx1ZS4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb3J3YXJkQ2hlY2tBcnJh
eToKKyAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgp
LmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkg
eworICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8v
IExpZXMsIGJ1dCB0aGlzIGlzIGZvbGxvd2VkIGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwp
IHRoYXQgYWx3YXlzIGV4aXQsIHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBi
ZSBjbGV2ZXIgaGVyZS4KKyAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkp
IHsKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICAgICAgZmlsdGVyKG5vZGUt
PmNoaWxkMSgpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAgICAgICBjYXNl
IEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgZmlsdGVyKG5v
ZGUtPmNoaWxkMSgpLCBTcGVjQXJndW1lbnRzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQx
KCksIFNwZWNJbnQ4QXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
YXk6OkludDE2QXJyYXk6CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNJ
bnQxNkFycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MkFycmF5OgorICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjSW50MzJBcnJh
eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToK
KyAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY1VpbnQ4QXJyYXkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5Ogor
ICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjVWludDhDbGFtcGVkQXJyYXkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5Ogor
ICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjVWludDE2QXJyYXkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAg
ICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjVWludDMyQXJyYXkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgICAg
IGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0Zsb2F0MzJBcnJheSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAgZmls
dGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjRmxvYXQ2NEFycmF5KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZpbHRlckFycmF5
TW9kZXMobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0UGFz
c0ZpbHRlcmluZygpKTsKKyAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXlpZnk6IHsKKyAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpKSkgeworICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50
cyh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChu
b2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKKyAgICAgICAg
ICAgIHx8IG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFnZUNvbnZl
cnQpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICBmaWx0ZXJBcnJheU1vZGVzKG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7
CisgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6IHsKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3RydWN0
dXJlU2V0IHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOworICAgICAgICBpZiAodmFsdWUubV9mdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKKyAgICAgICAgICAgIHx8IHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKKyAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CisgICAgICAg
IGZpbHRlcih2YWx1ZSwgc2V0KTsKKyAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0
cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZTogeworICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7CisgICAgICAgIGJyZWFr
OyAKKyAgICB9CisgICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgICAgICBmb3JOb2RlKG5vZGUp
Lm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2Fz
ZSBQdXRCeU9mZnNldDogeworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAg
ICBjYXNlIENoZWNrRnVuY3Rpb246IHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLT5mdW5j
dGlvbigpKSB7CisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwor
ICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzISBXZSBj
YW4gZG8gYmV0dGVyLgorICAgICAgICBmaWx0ZXJCeVZhbHVlKG5vZGUtPmNoaWxkMSgpLCBub2Rl
LT5mdW5jdGlvbigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNl
IFB1dEJ5SWQ6CisgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KHRydWUpOworICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIFB1dEJ5
SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLm1fdm0sCisgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+Y29kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLAorICAgICAg
ICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCld
LAorICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CisgICAgICAg
ICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpKSB7CisgICAgICAgICAgICAgICAgZmls
dGVyKG5vZGUtPmNoaWxkMSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7Cisg
ICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgc3RhdHVzLm5ld1N0
cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRy
dWUpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBjYXNlIEluOgorICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRl
dGVybWluZSB3aGVuIHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBiYXNlZCBvbiBhYnN0
cmFjdAorICAgICAgICAvLyB2YWx1ZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
Y2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOworICAg
ICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgorICAg
IGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDoKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dEdsb2JhbFZh
cjoKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIENoZWNrSGFzSW5zdGFu
Y2U6CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIC8vIFNhZGx5LCB3
ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENoZWNrSGFzSW5zdGFu
Y2UKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEluc3RhbmNlT2Y6Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIC8vIEFnYWluLCBzYWRseSwg
d2UgZG9uJ3QgcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBJbnN0YW5jZU9mCisg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgY2FzZSBQaGk6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIC8vIFRoZSBzdGF0ZSBvZiB0aGlzIG5vZGUg
d291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gZGVjaWRlZC4KKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAorICAgIGNhc2UgVXBzaWxvbjogeworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7Cisg
ICAgICAgIGZvck5vZGUobm9kZS0+cGhpKCkpID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBGbHVzaDoKKyAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAg
ICBjYXNlIEJyZWFrcG9pbnQ6CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2Fz
ZSBDYWxsOgorICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBGb3JjZU9TUkV4aXQ6CisgICAgY2FzZSBGb3J3YXJkRm9yY2VPU1JFeGl0OgorICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQo
ZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ2hlY2tXYXRj
aGRvZ1RpbWVyOgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUGhhbnRvbToKKyAgICBjYXNlIElubGluZVN0YXJ0
OgorICAgIGNhc2UgQ291bnRFeGVjdXRpb246CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAg
ICBjYXNlIExhc3ROb2RlVHlwZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBtX3N0YXRlLmlzVmFs
aWQoKTsKK30KKworYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBp
bmRleEluQmxvY2spCit7CisgICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywg
bV9zdGF0ZS5ibG9jaygpLT5hdChpbmRleEluQmxvY2spKTsKK30KKworYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3sKKyAgICBOb2RlKiBub2RlID0g
bV9zdGF0ZS5ibG9jaygpLT5hdChpbmRleEluQmxvY2spOworICAgIGlmICghc3RhcnRFeGVjdXRp
bmcobm9kZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGV4ZWN1dGVFZGdlcyhu
b2RlKTsKKyAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBub2RlKTsKK30K
KworaW5saW5lIHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmln
aW4mIGNvZGVPcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3sKKyAgICBjbG9iYmVyQ2Fw
dHVyZWRWYXJzKGNvZGVPcmlnaW4pOworICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9j
ayk7Cit9CisKK2lubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJDYXB0dXJlZFZhcnMo
Y29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKK3sKKyAgICBpZiAoY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpIHsKKyAgICAgICAgY29uc3QgQml0VmVjdG9yJiBjYXB0dXJlZFZhcnMgPSBj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gY2FwdHVyZWRWYXJzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFj
YXB0dXJlZFZhcnMucXVpY2tHZXQoaSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBtX3ZhcmlhYmxlcy5sb2NhbChpKS5tYWtlVG9wKCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9jb2RlQmxvY2stPm1fbnVtVmFyczsg
aS0tOykgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKGkpKQorICAg
ICAgICAgICAgICAgIG1fdmFyaWFibGVzLmxvY2FsKGkpLm1ha2VUb3AoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBtX3ZhcmlhYmxlcy5udW1iZXJPZkFyZ3VtZW50
cygpOyBpLS07KSB7CisgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChhcmd1bWVu
dFRvT3BlcmFuZChpKSkpCisgICAgICAgICAgICBtX3ZhcmlhYmxlcy5hcmd1bWVudChpKS5tYWtl
VG9wKCk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3Ry
dWN0dXJlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgaWYgKCFtX3N0YXRlLmhhdmVT
dHJ1Y3R1cmVzKCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHNpemVfdCBpID0gaW5kZXhJ
bkJsb2NrICsgMTsgaS0tOykKKyAgICAgICAgZm9yTm9kZShtX3N0YXRlLmJsb2NrKCktPmF0KGkp
KS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsK
KyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0YXRlLmJsb2NrKCkt
PnNzYS0+bGl2ZUF0SGVhZC5iZWdpbigpOworICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0
b3IgZW5kID0gbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhlYWQuZW5kKCk7CisgICAgICAg
IGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgZm9yTm9kZSgqaXRlciku
Y2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmFyaWFi
bGVzLm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspCisgICAgICAgIG1fdmFyaWFibGVzLmFyZ3Vt
ZW50KGkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmFyaWFi
bGVzLm51bWJlck9mTG9jYWxzKCk7IGktLTspCisgICAgICAgIG1fdmFyaWFibGVzLmxvY2FsKGkp
LmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVl
KTsKKyAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RT
dGF0ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQoreworICAgIGJvb2wgZmlyc3QgPSB0cnVlOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdGF0ZS5ibG9jaygpLT5zaXplKCk7ICsraSkg
eworICAgICAgICBOb2RlKiBub2RlID0gbV9zdGF0ZS5ibG9jaygpLT5hdChpKTsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUpOworICAgICAgICBpZiAodmFsdWUu
aXNDbGVhcigpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChmaXJzdCkKKyAg
ICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5w
cmludGYoIiAiKTsKKyAgICAgICAgb3V0LnByaW50ZigiQCVsdToiLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nPihub2RlLT5pbmRleCgpKSk7CisgICAgICAgIHZhbHVlLmR1bXAob3V0KTsKKyAg
ICB9Cit9CisKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RTdGF0ZTo6ZmlsdGVyKEFic3RyYWN0
VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICBpZiAodmFsdWUu
ZmlsdGVyKG1fZ3JhcGgsIHNldCkgPT0gRmlsdHJhdGlvbk9LKQorICAgICAgICByZXR1cm4gRmls
dHJhdGlvbk9LOworICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisgICAgcmV0dXJuIENv
bnRyYWRpY3Rpb247Cit9CisgICAgCitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0U3RhdGU6OmZp
bHRlckFycmF5TW9kZXMoQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEFycmF5TW9kZXMgYXJyYXlNb2Rl
cykKK3sKKyAgICBpZiAodmFsdWUuZmlsdGVyQXJyYXlNb2RlcyhhcnJheU1vZGVzKSA9PSBGaWx0
cmF0aW9uT0spCisgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CisgICAgbV9zdGF0ZS5zZXRJ
c1ZhbGlkKGZhbHNlKTsKKyAgICByZXR1cm4gQ29udHJhZGljdGlvbjsKK30KKyAgICAKK0ZpbHRy
YXRpb25SZXN1bHQgQWJzdHJhY3RTdGF0ZTo6ZmlsdGVyKEFic3RyYWN0VmFsdWUmIHZhbHVlLCBT
cGVjdWxhdGVkVHlwZSB0eXBlKQoreworICAgIGlmICh2YWx1ZS5maWx0ZXIodHlwZSkgPT0gRmls
dHJhdGlvbk9LKQorICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOworICAgIG1fc3RhdGUuc2V0
SXNWYWxpZChmYWxzZSk7CisgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247Cit9CisgICAgCitGaWx0
cmF0aW9uUmVzdWx0IEFic3RyYWN0U3RhdGU6OmZpbHRlckJ5VmFsdWUoCisgICAgQWJzdHJhY3RW
YWx1ZSYgYWJzdHJhY3RWYWx1ZSwgSlNWYWx1ZSBjb25jcmV0ZVZhbHVlKQoreworICAgIGlmIChh
YnN0cmFjdFZhbHVlLmZpbHRlckJ5VmFsdWUoY29uY3JldGVWYWx1ZSkgPT0gRmlsdHJhdGlvbk9L
KQorICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOworICAgIG1fc3RhdGUuc2V0SXNWYWxpZChm
YWxzZSk7CisgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTUyODI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDYgQEAKICNpbmNsdWRlICJERkdCcmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJE
RkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiR2V0QnlJ
ZFN0YXR1cy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJQdXRCeUlkU3Rh
dHVzLmgiCisjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworSW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRl
KEdyYXBoJiBncmFwaCkKKyAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgLCBtX3ZhcmlhYmxlcyht
X2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGdyYXBoLm1fbG9jYWxWYXJzKQor
ICAgICwgbV9ibG9jaygwKQorICAgICwgbV9jdXJyZW50Tm9kZSgwKQoreworfQorCitJblBsYWNl
QWJzdHJhY3RTdGF0ZTo6fkluUGxhY2VBYnN0cmFjdFN0YXRlKCkgeyB9CisKK3ZvaWQgSW5QbGFj
ZUFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQor
eworICAgIEFTU0VSVCghbV9ibG9jayk7CisgICAgCisgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpID09IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpKTsKKyAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mTG9jYWxzKCkgPT0gYmFzaWNCbG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9m
TG9jYWxzKCkpOworICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVy
T2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMo
KSk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLT5zaXplKCk7
IGkrKykKKyAgICAgICAgZm9yTm9kZShiYXNpY0Jsb2NrLT5hdChpKSkuY2xlYXIoKTsKKworICAg
IG1fdmFyaWFibGVzID0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOworICAgIG1faGF2ZVN0cnVj
dHVyZXMgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLm51
bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICBpZiAobV92YXJpYWJsZXMuYXJndW1l
bnQoaSkuaGFzQ2xvYmJlcmFibGVTdGF0ZSgpKSB7CisgICAgICAgICAgICBtX2hhdmVTdHJ1Y3R1
cmVzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7
CisgICAgICAgIGlmIChtX3ZhcmlhYmxlcy5sb2NhbChpKS5oYXNDbG9iYmVyYWJsZVN0YXRlKCkp
IHsKKyAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNT
QSkgeworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3IgaXRl
ciA9IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLmJlZ2luKCk7CisgICAgICAgIEhhc2hN
YXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+OjppdGVyYXRvciBlbmQgPSBiYXNpY0Jsb2NrLT5zc2Et
PnZhbHVlc0F0SGVhZC5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKKyAgICAgICAgICAgIGZvck5vZGUoaXRlci0+a2V5KSA9IGl0ZXItPnZhbHVlOworICAgICAg
ICAgICAgaWYgKGl0ZXItPnZhbHVlLmhhc0Nsb2JiZXJhYmxlU3RhdGUoKSkKKyAgICAgICAgICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBiYXNpY0Jsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gZmFsc2U7CisgICAgYmFzaWNCbG9jay0+
Y2ZhSGFzVmlzaXRlZCA9IHRydWU7CisgICAgbV9ibG9jayA9IGJhc2ljQmxvY2s7CisgICAgbV9p
c1ZhbGlkID0gdHJ1ZTsKKyAgICBtX2ZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CisgICAgbV9icmFu
Y2hEaXJlY3Rpb24gPSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uOworICAgIG1fY3VycmVudE5vZGUg
PSAwOworfQorCitzdGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVzKEhhc2hNYXA8Tm9kZSosIEFic3Ry
YWN0VmFsdWU+JiB2YWx1ZXMsIEhhc2hTZXQ8Tm9kZSo+JiBsaXZlKQoreworICAgIHZhbHVlcy5j
bGVhcigpOworICAgIAorICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbGl2ZS5i
ZWdpbigpOworICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBsaXZlLmVuZCgpOwor
ICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICB2YWx1ZXMuYWRkKCppdGVy
LCBBYnN0cmFjdFZhbHVlKCkpOworfQorCit2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0
aWFsaXplKCkKK3sKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKKyAg
ICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICByb290LT5jZmFIYXNWaXNpdGVk
ID0gZmFsc2U7CisgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAg
ICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VUb3AoKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2RlKiBub2RlID0gcm9v
dC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOworICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7CisgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPQorICAg
ICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50QXdhcmVQcmVkaWN0
aW9uKCk7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAg
ICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShTcGVjSW50MzIp
OworICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAg
ICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXRUeXBlKFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgZWxzZSBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisg
ICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShTcGVjQ2Vs
bCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVu
dChpKS5tYWtlVG9wKCk7CisgICAgICAgIAorICAgICAgICByb290LT52YWx1ZXNBdFRhaWwuYXJn
dW1lbnQoaSkuY2xlYXIoKTsKKyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290
LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7CisgICAgICAgIE5vZGUqIG5v
ZGUgPSByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7CisgICAgICAgIGlmIChub2RlICYm
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICBy
b290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgcm9v
dC0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CisgICAgfQorICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyAr
K2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICBibG9jay0+Y2Zh
U2hvdWxkUmV2aXNpdCA9IGZhbHNlOworICAgICAgICBibG9jay0+Y2ZhSGFzVmlzaXRlZCA9IGZh
bHNlOworICAgICAgICBibG9jay0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1l
bnRzKCk7ICsraSkgeworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5hcmd1bWVudChp
KS5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5j
bGVhcigpOworICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2st
PnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAgICAgIGJsb2Nr
LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1
ZXNBdFRhaWwubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWJsb2Nr
LT5pc09TUlRhcmdldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYmxvY2st
PmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9n
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
QWJzdHJhY3RWYWx1ZSB2YWx1ZTsKKyAgICAgICAgICAgIHZhbHVlLnNldE1vc3RTcGVjaWZpYyht
X2dyYXBoLCBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ldKTsKKyAgICAgICAgICAg
IGludCBvcGVyYW5kID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9y
SW5kZXgoaSk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3BlcmFu
ZCkubWVyZ2UodmFsdWUpOworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgSW5pdGlhbGl6aW5nIEJsb2NrICMldSwgb3Bl
cmFuZCByJWQsIHRvICIsIGJsb2NrSW5kZXgsIG9wZXJhbmQpOworICAgICAgICAgICAgYmxvY2st
PnZhbHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAg
ICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgYmxv
Y2stPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOworICAgIH0KKyAgICBpZiAobV9ncmFwaC5tX2Zv
cm0gPT0gU1NBKSB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IHNldExpdmVWYWx1ZXMoYmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLCBibG9jay0+c3NhLT5saXZl
QXRIZWFkKTsKKyAgICAgICAgICAgIHNldExpdmVWYWx1ZXMoYmxvY2stPnNzYS0+dmFsdWVzQXRU
YWlsLCBibG9jay0+c3NhLT5saXZlQXRUYWlsKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9v
bCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayhNZXJnZU1vZGUgbWVyZ2VNb2Rl
KQoreworICAgIEFTU0VSVChtX2Jsb2NrKTsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fYmxvY2s7IC8vIFNhdmUgdGhlIGJsb2NrIGZvciBzdWNjZXNzb3IgbWVyZ2luZy4KKyAgICAK
KyAgICBibG9jay0+Y2ZhRm91bmRDb25zdGFudHMgPSBtX2ZvdW5kQ29uc3RhbnRzOworICAgIGJs
b2NrLT5jZmFEaWRGaW5pc2ggPSBtX2lzVmFsaWQ7CisgICAgYmxvY2stPmNmYUJyYW5jaERpcmVj
dGlvbiA9IG1fYnJhbmNoRGlyZWN0aW9uOworICAgIAorICAgIGlmICghbV9pc1ZhbGlkKSB7Cisg
ICAgICAgIHJlc2V0KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgCisgICAgaWYgKG1lcmdlTW9kZSAhPSBEb250TWVy
Z2UgfHwgIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3Jt
KSB7CisgICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6IHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9m
QXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBz
dGF0ZSBmb3IgYXJndW1lbnQgJXp1LlxuIiwgYXJndW1lbnQpOworI2VuZGlmCisgICAgICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmFy
Z3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVB
dFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKKyNl
bmRpZgorICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2st
PnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5sb2NhbChsb2NhbCksIGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTU0E6
IHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0VGFp
bC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IGJsb2NrLT52YWx1ZXNB
dFRhaWxbaV0ubWVyZ2UobV92YXJpYWJsZXNbaV0pOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwu
YmVnaW4oKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBibG9j
ay0+c3NhLT5saXZlQXRUYWlsLmVuZCgpOworICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuZmluZChub2RlKS0+
dmFsdWUubWVyZ2UoZm9yTm9kZShub2RlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIEFTU0VSVChtZXJnZU1vZGUgIT0gRG9udE1lcmdlIHx8ICFjaGFuZ2VkKTsKKyAgICAK
KyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgZGF0YUxvZ0Yo
IiAgICAgICAgQnJhbmNoIGRpcmVjdGlvbiA9ICVzXG4iLCBicmFuY2hEaXJlY3Rpb25Ub1N0cmlu
ZyhtX2JyYW5jaERpcmVjdGlvbikpOworI2VuZGlmCisgICAgCisgICAgcmVzZXQoKTsKKyAgICAK
KyAgICBpZiAobWVyZ2VNb2RlICE9IE1lcmdlVG9TdWNjZXNzb3JzKQorICAgICAgICByZXR1cm4g
Y2hhbmdlZDsKKyAgICAKKyAgICByZXR1cm4gbWVyZ2VUb1N1Y2Nlc3NvcnMoYmxvY2spOworfQor
Cit2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpyZXNldCgpCit7CisgICAgbV9ibG9jayA9IDA7
CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBJbnZhbGlk
QnJhbmNoRGlyZWN0aW9uOworICAgIG1fY3VycmVudE5vZGUgPSAwOworfQorCitib29sIEluUGxh
Y2VBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0
aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQoreworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBBYnN0cmFjdFZhbHVl
IHNvdXJjZTsKKyAgICAKKyAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKSkgeworICAgICAgICAvLyBJZiBpdCdzIGNhcHR1cmVkIHRoZW4gd2Uga25vdyB0aGF0
IHdoYXRldmVyIHZhbHVlIHdhcyBzdG9yZWQgaW50byB0aGUgdmFyaWFibGUgbGFzdCBpcyB0aGUK
KyAgICAgICAgLy8gb25lIHdlIGNhcmUgYWJvdXQuIFRoaXMgaXMgdHJ1ZSBldmVuIGlmIHRoZSB2
YXJpYWJsZSBhdCB0YWlsIGlzIGRlYWQsIHdoaWNoIG1pZ2h0IGhhcHBlbiBpZgorICAgICAgICAv
LyB0aGUgbGFzdCB0aGluZyB3ZSBkaWQgdG8gdGhlIHZhcmlhYmxlIHdhcyBhIEdldExvY2FsIGFu
ZCB0aGVuIGVuZGVkIHVwIG5vdyB1c2luZyB0aGUKKyAgICAgICAgLy8gR2V0TG9jYWwncyByZXN1
bHQuCisgICAgICAgIAorICAgICAgICBzb3VyY2UgPSBpblZhcmlhYmxlOworI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAg
ICBUcmFuc2ZlcmluZyAiKTsKKyAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsK
KyAgICAgICAgZGF0YUxvZ0YoIiBmcm9tIGxhc3QgYWNjZXNzIGR1ZSB0byBjYXB0dXJlZCB2YXJp
YWJsZS5cbiIpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgSXQncyBsaXZl
LCBub2RlIEAldS5cbiIsIG5vZGUtPmluZGV4KCkpOworI2VuZGlmCisgICAgCisgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgY2FzZSBTZXRB
cmd1bWVudDoKKyAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgIGNhc2UgRmx1c2g6
CisgICAgICAgICAgICAvLyBUaGUgYmxvY2sgdHJhbnNmZXJzIHRoZSB2YWx1ZSBmcm9tIGhlYWQg
dG8gdGFpbC4KKyAgICAgICAgICAgIHNvdXJjZSA9IGluVmFyaWFibGU7CisjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAg
ICAgICBUcmFuc2ZlcmluZyAiKTsKKyAgICAgICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZp
bGUoKSk7CisgICAgICAgICAgICBkYXRhTG9nRigiIGZyb20gaGVhZCB0byB0YWlsLlxuIik7Cisj
ZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0
TG9jYWw6CisgICAgICAgICAgICAvLyBUaGUgYmxvY2sgcmVmaW5lcyB0aGUgdmFsdWUgd2l0aCBh
ZGRpdGlvbmFsIHNwZWN1bGF0aW9ucy4KKyAgICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9k
ZSk7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgICAgICBSZWZpbmluZyB0byAiKTsKKyAgICAgICAgICAgIHNvdXJj
ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKKyNl
bmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTZXRM
b2NhbDoKKyAgICAgICAgICAgIC8vIFRoZSBibG9jayBzZXRzIHRoZSB2YXJpYWJsZSwgYW5kIHBv
dGVudGlhbGx5IHJlZmluZXMgaXQsIGJvdGgKKyAgICAgICAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0
ZXIgc2V0dGluZyBpdC4KKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyB1bm5lY2Vzc2FyaWx5IGxvc2VzIHByZWNpc2lvbi4KKyAgICAgICAgICAgICAgICBzb3Vy
Y2Uuc2V0VHlwZShTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAg
U2V0dGluZyB0byAiKTsKKyAgICAgICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7
CisgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGlmIChkZXN0aW5hdGlvbiA9PSBzb3VyY2UpIHsKKyAgICAgICAgLy8gQWJzdHJhY3Qg
ZXhlY3V0aW9uIGRpZCBub3QgY2hhbmdlIHRoZSBvdXRwdXQgdmFsdWUgb2YgdGhlIHZhcmlhYmxl
LCBmb3IgdGhpcworICAgICAgICAvLyBiYXNpYyBibG9jaywgb24gdGhpcyBpdGVyYXRpb24uCisj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9n
RigiICAgICAgICAgIE5vdCBjaGFuZ2VkIVxuIik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICAKKyAgICAvLyBBYnN0cmFjdCBleGVjdXRpb24gcmVhY2hlZCBhIG5l
dyBjb25jbHVzaW9uIGFib3V0IHRoZSBzcGVjdWxhdGlvbnMgcmVhY2hlZCBhYm91dAorICAgIC8v
IHRoaXMgdmFyaWFibGUgYWZ0ZXIgZXhlY3V0aW9uIG9mIHRoaXMgYmFzaWMgYmxvY2suIFVwZGF0
ZSB0aGUgc3RhdGUsIGFuZCByZXR1cm4KKyAgICAvLyB0cnVlIHRvIGluZGljYXRlIHRoYXQgdGhl
IGZpeHBvaW50IG11c3QgZ28gb24hCisgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgIGRhdGFMb2dGKCIgICAgICAg
ICAgQ2hhbmdlZCFcbiIpOworI2VuZGlmCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5Q
bGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRv
KQoreworICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMo
KSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgIEFTU0VS
VChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSA9PSB0by0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNl
OworICAgIAorICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICBjYXNlIFRocmVhZGVk
Q1BTOiB7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9t
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgeworICAg
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmFy
Z3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJpYWJsZUJl
dHdlZW5CbG9ja3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1
bWVudCksIHRvLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpLCBmcm9tLT52YXJp
YWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20tPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVl
JiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9jYWwpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJv
bS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChs
b2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBTU0E6IHsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IGZyb20tPnZhbHVlc0F0VGFpbC5zaXplKCk7IGktLTspCisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IHRvLT52YWx1ZXNBdEhlYWRbaV0ubWVyZ2UoZnJvbS0+dmFsdWVzQXRU
YWlsW2ldKTsKKyAgICAgICAgCisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVy
ID0gdG8tPnNzYS0+bGl2ZUF0SGVhZC5iZWdpbigpOworICAgICAgICBIYXNoU2V0PE5vZGUqPjo6
aXRlcmF0b3IgZW5kID0gdG8tPnNzYS0+bGl2ZUF0SGVhZC5lbmQoKTsKKyAgICAgICAgZm9yICg7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSAqaXRlcjsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gdG8tPnNzYS0+dmFsdWVzQXRIZWFkLmZpbmQobm9kZSkt
PnZhbHVlLm1lcmdlKAorICAgICAgICAgICAgICAgIGZyb20tPnNzYS0+dmFsdWVzQXRUYWlsLmZp
bmQobm9kZSktPnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghdG8tPmNmYUhhc1Zpc2l0ZWQpCisg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgIAorICAgIHRvLT5jZmFTaG91bGRSZXZpc2l0IHw9
IGNoYW5nZWQ7CisgICAgCisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2lubGluZSBib29sIElu
UGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycyhCYXNpY0Jsb2NrKiBiYXNpY0Js
b2NrKQoreworICAgIE5vZGUqIHRlcm1pbmFsID0gYmFzaWNCbG9jay0+bGFzdCgpOworICAgIAor
ICAgIEFTU0VSVCh0ZXJtaW5hbC0+aXNUZXJtaW5hbCgpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRl
cm1pbmFsLT5vcCgpKSB7CisgICAgY2FzZSBKdW1wOiB7CisgICAgICAgIEFTU0VSVChiYXNpY0Js
b2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gPT0gSW52YWxpZEJyYW5jaERpcmVjdGlvbik7CisjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIg
ICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIiwgKnRlcm1pbmFsLT50YWtlbkJsb2NrKCksICIuXG4i
KTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgdGVybWluYWwtPnRh
a2VuQmxvY2soKSk7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEJyYW5jaDogeworICAgICAg
ICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9IEludmFsaWRCcmFuY2hE
aXJlY3Rpb24pOworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVy
Z2luZyB0byBibG9jayAiLCAqdGVybWluYWwtPnRha2VuQmxvY2soKSwgIi5cbiIpOworI2VuZGlm
CisgICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gIT0gVGFrZUZhbHNl
KQorICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCB0ZXJtaW5hbC0+dGFr
ZW5CbG9jaygpKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAiLCAqdGVybWluYWwtPm5v
dFRha2VuQmxvY2soKSwgIi5cbiIpOworI2VuZGlmCisgICAgICAgIGlmIChiYXNpY0Jsb2NrLT5j
ZmFCcmFuY2hEaXJlY3Rpb24gIT0gVGFrZVRydWUpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT5ub3RUYWtlbkJsb2NrKCkpOworICAgICAgICByZXR1
cm4gY2hhbmdlZDsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgU3dpdGNoOiB7CisgICAgICAg
IC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBjb29sIHRvIGJlIHNwYXJzZSBjb25kaXRpb25hbCBmb3Ig
U3dpdGNoJ3MuIEN1cnJlbnRseQorICAgICAgICAvLyB3ZSdyZSBub3QuIEhvd2V2ZXIgSSBzb21l
aG93IGRvdWJ0IHRoYXQgdGhpcyB3aWxsIGV2ZXIgYmUgYSBiaWcgZGVhbC4KKyAgICAgICAgQVNT
RVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0
aW9uKTsKKyAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IHRlcm1pbmFsLT5zd2l0Y2hEYXRhKCk7
CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEtPmZhbGxUaHJv
dWdoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBpLS07
KQorICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRhLT5jYXNlc1tp
XS50YXJnZXQpOworICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgUmV0dXJuOgorICAgIGNhc2UgVGhyb3c6CisgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVy
cm9yOgorICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uID09IElu
dmFsaWRCcmFuY2hEaXJlY3Rpb24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIEluUGxhY2VBYnN0cmFj
dFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlKiBkZXN0aW5hdGlvbk5vZGUsIE5vZGUq
IHNvdXJjZU5vZGUpCit7CisgICAgaWYgKCFkZXN0aW5hdGlvbk5vZGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBBU1NFUlRfVU5VU0VEKHNvdXJjZU5vZGUsIHNvdXJjZU5vZGUp
OworICAgIAorICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBkbyBzb21lIHNwYXJzZSBjb25kaXRpb25h
bCBwcm9wYWdhdGlvbiBoZXJlIQorICAgIAorICAgIHJldHVybiBkZXN0aW5hdGlvbi5tZXJnZShz
b3VyY2UpOworfQorCitGaWx0cmF0aW9uUmVzdWx0IEluUGxhY2VBYnN0cmFjdFN0YXRlOjpmaWx0
ZXIoQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQoreworICAg
IGlmICh2YWx1ZS5maWx0ZXIobV9ncmFwaCwgc2V0KSA9PSBGaWx0cmF0aW9uT0spCisgICAgICAg
IHJldHVybiBGaWx0cmF0aW9uT0s7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgcmV0dXJu
IENvbnRyYWRpY3Rpb247Cit9CisgICAgCitGaWx0cmF0aW9uUmVzdWx0IEluUGxhY2VBYnN0cmFj
dFN0YXRlOjpmaWx0ZXJBcnJheU1vZGVzKEFic3RyYWN0VmFsdWUmIHZhbHVlLCBBcnJheU1vZGVz
IGFycmF5TW9kZXMpCit7CisgICAgaWYgKHZhbHVlLmZpbHRlckFycmF5TW9kZXMoYXJyYXlNb2Rl
cykgPT0gRmlsdHJhdGlvbk9LKQorICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOworICAgIG1f
aXNWYWxpZCA9IGZhbHNlOworICAgIHJldHVybiBDb250cmFkaWN0aW9uOworfQorICAgIAorRmls
dHJhdGlvblJlc3VsdCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZmlsdGVyKEFic3RyYWN0VmFsdWUm
IHZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKQoreworICAgIGlmICh2YWx1ZS5maWx0ZXIodHlw
ZSkgPT0gRmlsdHJhdGlvbk9LKQorICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOworICAgIG1f
aXNWYWxpZCA9IGZhbHNlOworICAgIHJldHVybiBDb250cmFkaWN0aW9uOworfQorICAgIAorRmls
dHJhdGlvblJlc3VsdCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZmlsdGVyQnlWYWx1ZSgKKyAgICBB
YnN0cmFjdFZhbHVlJiBhYnN0cmFjdFZhbHVlLCBKU1ZhbHVlIGNvbmNyZXRlVmFsdWUpCit7Cisg
ICAgaWYgKGFic3RyYWN0VmFsdWUuZmlsdGVyQnlWYWx1ZShjb25jcmV0ZVZhbHVlKSA9PSBGaWx0
cmF0aW9uT0spCisgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CisgICAgbV9pc1ZhbGlkID0g
ZmFsc2U7CisgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHSW5QbGFjZUFic3RyYWN0
U3RhdGVfaAorI2RlZmluZSBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZV9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJz
dHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgorI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEluUGxhY2VBYnN0cmFjdFN0YXRlIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIE1lcmdlTW9kZSB7CisgICAgICAgIC8vIERvbid0IG1lcmdlIHRoZSBzdGF0ZSBpbiBB
YnN0cmFjdFN0YXRlIHdpdGggYmFzaWMgYmxvY2tzLgorICAgICAgICBEb250TWVyZ2UsCisgICAg
ICAgIAorICAgICAgICAvLyBNZXJnZSB0aGUgc3RhdGUgaW4gQWJzdHJhY3RTdGF0ZSB3aXRoIHRo
ZSB0YWlsIG9mIHRoZSBiYXNpYworICAgICAgICAvLyBibG9jayBiZWluZyBhbmFseXplZC4KKyAg
ICAgICAgTWVyZ2VUb1RhaWwsCisgICAgICAgIAorICAgICAgICAvLyBNZXJnZSB0aGUgc3RhdGUg
aW4gQWJzdHJhY3RTdGF0ZSB3aXRoIHRoZSB0YWlsIG9mIHRoZSBiYXNpYworICAgICAgICAvLyBi
bG9jaywgYW5kIHdpdGggdGhlIGhlYWRzIG9mIHN1Y2Nlc3NvciBibG9ja3MuCisgICAgICAgIE1l
cmdlVG9TdWNjZXNzb3JzCisgICAgfTsKKworICAgIEluUGxhY2VBYnN0cmFjdFN0YXRlKEdyYXBo
JiBncmFwaCk7CisgICAgCisgICAgfkluUGxhY2VBYnN0cmFjdFN0YXRlKCk7CisgICAgCisgICAg
QWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5vZGUtPnZhbHVlOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVk
Z2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmb3JOb2RlKGVkZ2Uubm9kZSgpKTsKKyAg
ICB9CisgICAgCisgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpCisgICAg
eworICAgICAgICByZXR1cm4gbV92YXJpYWJsZXM7CisgICAgfQorICAgIAorICAgIC8vIENhbGwg
dGhpcyBiZWZvcmUgYmVnaW5uaW5nIENGQSB0byBpbml0aWFsaXplIHRoZSBhYnN0cmFjdCB2YWx1
ZXMgb2YKKyAgICAvLyBhcmd1bWVudHMsIGFuZCB0byBpbmRpY2F0ZSB3aGljaCBibG9ja3Mgc2hv
dWxkIGJlIGxpc3RlZCBmb3IgQ0ZBCisgICAgLy8gZXhlY3V0aW9uLgorICAgIHZvaWQgaW5pdGlh
bGl6ZSgpOworCisgICAgLy8gU3RhcnQgYWJzdHJhY3RseSBleGVjdXRpbmcgdGhlIGdpdmVuIGJh
c2ljIGJsb2NrLiBJbml0aWFsaXplcyB0aGUKKyAgICAvLyBub3Rpb24gb2YgYWJzdHJhY3Qgc3Rh
dGUgdG8gd2hhdCB3ZSBiZWxpZXZlIGl0IHRvIGJlIGF0IHRoZSBoZWFkCisgICAgLy8gb2YgdGhl
IGJhc2ljIGJsb2NrLCBhY2NvcmRpbmcgdG8gdGhlIGJhc2ljIGJsb2NrJ3MgZGF0YSBzdHJ1Y3R1
cmVzLgorICAgIC8vIFRoaXMgbWV0aG9kIGFsc28gc2V0cyBjZmFTaG91bGRSZXZpc2l0IHRvIGZh
bHNlLgorICAgIHZvaWQgYmVnaW5CYXNpY0Jsb2NrKEJhc2ljQmxvY2sqKTsKKyAgICAKKyAgICBC
YXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICAKKyAgICAv
LyBGaW5pc2ggYWJzdHJhY3RseSBleGVjdXRpbmcgYSBiYXNpYyBibG9jay4gSWYgTWVyZ2VUb1Rh
aWwgb3IKKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29ycyBpcyBwYXNzZWQsIHRoZW4gdGhpcyBtZXJn
ZXMgZXZlcnl0aGluZyB3ZSBoYXZlCisgICAgLy8gbGVhcm5lZCBhYm91dCBob3cgdGhlIHN0YXRl
IGNoYW5nZXMgZHVyaW5nIHRoaXMgYmxvY2sncyBleGVjdXRpb24gaW50bworICAgIC8vIHRoZSBi
bG9jaydzIGRhdGEgc3RydWN0dXJlcy4gVGhlcmUgYXJlIHRocmVlIHJldHVybiBtb2RlcywgZGVw
ZW5kaW5nCisgICAgLy8gb24gdGhlIHZhbHVlIG9mIG1lcmdlTW9kZToKKyAgICAvLworICAgIC8v
IERvbnRNZXJnZToKKyAgICAvLyAgICBBbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICAvLworICAg
IC8vIE1lcmdlVG9UYWlsOgorICAgIC8vICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RhdGUgb2Yg
dGhlIGJsb2NrIGF0IHRoZSB0YWlsIHdhcyBjaGFuZ2VkLgorICAgIC8vICAgIFRoaXMgbWVhbnMg
dGhhdCB5b3UgbXVzdCBjYWxsIG1lcmdlVG9TdWNjZXNzb3JzKCksIGFuZCBpZiB0aGF0CisgICAg
Ly8gICAgcmV0dXJucyB0cnVlLCB0aGVuIHlvdSBtdXN0IHJldmlzaXQgKGF0IGxlYXN0KSB0aGUg
c3VjY2Vzc29yCisgICAgLy8gICAgYmxvY2tzLiBGYWxzZSB3aWxsIGFsd2F5cyBiZSByZXR1cm5l
ZCBpZiB0aGUgYmxvY2sgaXMgdGVybWluYWwKKyAgICAvLyAgICAoaS5lLiBlbmRzIGluIFRocm93
IG9yIFJldHVybiwgb3IgaGFzIGEgRm9yY2VPU1JFeGl0IGluc2lkZSBpdCkuCisgICAgLy8KKyAg
ICAvLyBNZXJnZVRvU3VjY2Vzc29yczoKKyAgICAvLyAgICBSZXR1cm5zIHRydWUgaWYgdGhlIHN0
YXRlIG9mIHRoZSBibG9jayBhdCB0aGUgdGFpbCB3YXMgY2hhbmdlZCwKKyAgICAvLyAgICBhbmQs
IGlmIHRoZSBzdGF0ZSBhdCB0aGUgaGVhZHMgb2Ygc3VjY2Vzc29ycyB3YXMgY2hhbmdlZC4KKyAg
ICAvLyAgICBBIHRydWUgcmV0dXJuIG1lYW5zIHRoYXQgeW91IG11c3QgcmV2aXNpdCAoYXQgbGVh
c3QpIHRoZSBzdWNjZXNzb3IKKyAgICAvLyAgICBibG9ja3MuIFRoaXMgYWxzbyBzZXRzIGNmYVNo
b3VsZFJldmlzaXQgdG8gdHJ1ZSBmb3IgYmFzaWMgYmxvY2tzCisgICAgLy8gICAgdGhhdCBtdXN0
IGJlIHZpc2l0ZWQgbmV4dC4KKyAgICBib29sIGVuZEJhc2ljQmxvY2soTWVyZ2VNb2RlKTsKKyAg
ICAKKyAgICAvLyBSZXNldCB0aGUgQWJzdHJhY3RTdGF0ZS4gVGhpcyB0aHJvd3MgYXdheSBhbnkg
cmVzdWx0cywgYW5kIGF0IHRoaXMgcG9pbnQKKyAgICAvLyB5b3UgY2FuIHNhZmVseSBjYWxsIGJl
Z2luQmFzaWNCbG9jaygpIG9uIGFueSBiYXNpYyBibG9jay4KKyAgICB2b2lkIHJlc2V0KCk7Cisg
ICAgCisgICAgLy8gRGlkIHRoZSBsYXN0IGV4ZWN1dGVkIG5vZGUgY2xvYmJlciB0aGUgd29ybGQ/
CisgICAgYm9vbCBkaWRDbG9iYmVyKCkgY29uc3QgeyByZXR1cm4gbV9kaWRDbG9iYmVyOyB9Cisg
ICAgCisgICAgLy8gSXMgdGhlIGV4ZWN1dGlvbiBzdGF0ZSBzdGlsbCB2YWxpZD8gVGhpcyB3aWxs
IGJlIGZhbHNlIGlmIGV4ZWN1dGUoKSBoYXMKKyAgICAvLyByZXR1cm5lZCBmYWxzZSBwcmV2aW91
c2x5LgorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQorICAg
IAorICAgIC8vIE1lcmdlIHRoZSBhYnN0cmFjdCBzdGF0ZSBzdG9yZWQgYXQgdGhlIGZpcnN0IGJs
b2NrJ3MgdGFpbCBpbnRvIHRoZSBzZWNvbmQKKyAgICAvLyBibG9jaydzIGhlYWQuIFJldHVybnMg
dHJ1ZSBpZiB0aGUgc2Vjb25kIGJsb2NrJ3Mgc3RhdGUgY2hhbmdlZC4gSWYgc28sCisgICAgLy8g
dGhhdCBibG9jayBtdXN0IGJlIGFic3RyYWN0bHkgaW50ZXJwcmV0ZWQgYWdhaW4uIFRoaXMgYWxz
byBzZXRzCisgICAgLy8gdG8tPmNmYVNob3VsZFJldmlzaXQgdG8gdHJ1ZSwgaWYgaXQgcmV0dXJu
cyB0cnVlLCBvciBpZiB0byBoYXMgbm90IGJlZW4KKyAgICAvLyB2aXNpdGVkIHlldC4KKyAgICBi
b29sIG1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKyAgICAKKyAgICAv
LyBNZXJnZSB0aGUgYWJzdHJhY3Qgc3RhdGUgc3RvcmVkIGF0IHRoZSBibG9jaydzIHRhaWwgaW50
byBhbGwgb2YgaXRzCisgICAgLy8gc3VjY2Vzc29ycy4gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0
aGUgc3VjY2Vzc29ycycgc3RhdGVzIGNoYW5nZWQuIE5vdGUKKyAgICAvLyB0aGF0IHRoaXMgaXMg
YXV0b21hdGljYWxseSBjYWxsZWQgaW4gZW5kQmFzaWNCbG9jaygpIGlmIE1lcmdlTW9kZSBpcwor
ICAgIC8vIE1lcmdlVG9TdWNjZXNzb3JzLgorICAgIGJvb2wgbWVyZ2VUb1N1Y2Nlc3NvcnMoQmFz
aWNCbG9jayopOworICAgIAorICAgIC8vIE1ldGhvZHMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZy
b20gQWJzdHJhY3RJbnRlcnByZXRlci4KKyAgICB2b2lkIHNldERpZENsb2JiZXIoYm9vbCBkaWRD
bG9iYmVyKSB7IG1fZGlkQ2xvYmJlciA9IGRpZENsb2JiZXI7IH0KKyAgICB2b2lkIHNldElzVmFs
aWQoYm9vbCBpc1ZhbGlkKSB7IG1faXNWYWxpZCA9IGlzVmFsaWQ7IH0KKyAgICB2b2lkIHNldEJy
YW5jaERpcmVjdGlvbihCcmFuY2hEaXJlY3Rpb24gYnJhbmNoRGlyZWN0aW9uKSB7IG1fYnJhbmNo
RGlyZWN0aW9uID0gYnJhbmNoRGlyZWN0aW9uOyB9CisgICAgdm9pZCBzZXRGb3VuZENvbnN0YW50
cyhib29sIGZvdW5kQ29uc3RhbnRzKSB7IG1fZm91bmRDb25zdGFudHMgPSBmb3VuZENvbnN0YW50
czsgfQorICAgIGJvb2wgaGF2ZVN0cnVjdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2hhdmVTdHJ1
Y3R1cmVzOyB9IC8vIEl0J3MgYWx3YXlzIHNhZmUgdG8gcmV0dXJuIHRydWUuCisgICAgdm9pZCBz
ZXRIYXZlU3RydWN0dXJlcyhib29sIGhhdmVTdHJ1Y3R1cmVzKSB7IG1faGF2ZVN0cnVjdHVyZXMg
PSBoYXZlU3RydWN0dXJlczsgfQorCitwcml2YXRlOgorICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFp
bChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwg
Tm9kZSopOworCisgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoQWJz
dHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9kZSogZGVz
dGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKKyAgICAKKyAgICBHcmFwaCYgbV9ncmFw
aDsKKyAgICAKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX3ZhcmlhYmxlczsKKyAgICBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIAorICAgIGJvb2wgbV9oYXZlU3RydWN0dXJlczsKKyAg
ICBib29sIG1fZm91bmRDb25zdGFudHM7CisgICAgCisgICAgYm9vbCBtX2lzVmFsaWQ7CisgICAg
Ym9vbCBtX2RpZENsb2JiZXI7CisgICAgCisgICAgQnJhbmNoRGlyZWN0aW9uIG1fYnJhbmNoRGly
ZWN0aW9uOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGZvciBibG9ja3MgdGhhdCBlbmQgaW4gQnJhbmNo
IGFuZCB0aGF0IGV4ZWN1dGUgdG8gY29tcGxldGlvbiAoaS5lLiBtX2lzVmFsaWQgPT0gdHJ1ZSku
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207031</attachid>
            <date>2013-07-18 16:29:14 -0700</date>
            <delta_ts>2013-07-18 16:34:54 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>219179</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyODcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MCBA
QAorMjAxMy0wNy0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERlY291cGxlIHRoZSB3YXkgdGhhdCBDRkEgc3RvcmVzIGl0cyBzdGF0ZSBm
cm9tIHRoZSB3YXkgaXQgZG9lcyBhYnN0cmFjdCBpbnRlcnByZXRhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4ODM1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIHNlcGFyYXRl
cyBBYnN0cmFjdFN0YXRlIGludG8gdHdvIHRoaW5nczoKKyAgICAgICAgCisgICAgICAgIC0gSW5Q
bGFjZUFic3RyYWN0U3RhdGUsIHdoaWNoIGNhbiB0ZWxsIHlvdSB0aGUgYWJzdHJhY3Qgc3RhdGUg
b2YgYW55dGhpbmcgeW91CisgICAgICAgICAgbWlnaHQgY2FyZSBhYm91dCwgYW5kIHVzZXMgdGhl
IG9sZCBBYnN0cmFjdFN0YXRlJ3MgYWxnb3JpdGhtcyBhbmQgZGF0YQorICAgICAgICAgIHN0cnVj
dHVyZXMgZm9yIGRvaW5nIHNvLgorICAgICAgICAKKyAgICAgICAgLSBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPiwgd2hpY2ggY2FuIGV4ZWN1dGUgYSBERkc6Ok5vZGUqIHdp
dGgKKyAgICAgICAgICByZXNwZWN0IHRvIGFuIEFic3RyYWN0U3RhdGVUeXBlLiBDdXJyZW50bHkg
d2UgYWx3YXlzIHVzZQorICAgICAgICAgIEFic3RyYWN0U3RhdGVUeXBlID0gSW5QbGFjZUFic3Ry
YWN0U3RhdGUuIEJ1dCB3ZSBjb3VsZCBkcm9wIGluIGFuIG90aGVyCisgICAgICAgICAgY2xhc3Mg
dGhhdCBzdXBwb3J0cyBiYXNpYyBwcmltaXRpdmVzIGxpa2UgZm9yTm9kZSgpIGFuZCB2YXJpYWJs
ZXMoKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2U6CisgICAg
ICAgIAorICAgICAgICAtIFdlIHdhbnQgdG8gaG9pc3QgdGhpbmdzIG91dCBvZiBsb29wcy4KKwor
ICAgICAgICAtIFdlIGRvbid0IGtub3cgd2hhdCB0aGluZ3MgcmVseSBvbiB3aGF0IHR5cGUgY2hl
Y2tzLgorCisgICAgICAgIC0gV2Ugb25seSB3YW50IHRvIGhvaXN0IHR5cGUgY2hlY2tzIG91dCBv
ZiBsb29wcyBpZiB0aGV5IGFyZW4ndCBjbG9iYmVyZWQuCisKKyAgICAgICAgLSBXZSBtYXkgd2Fu
dCB0byBzdGlsbCBob2lzdCB0aGluZ3MgdGhhdCBkZXBlbmRlZCBvbiB0aG9zZSB0eXBlIGNoZWNr
cywgaWYgaXQncworICAgICAgICAgIHNhZmUgdG8gZG8gdGhvc2UgdGhpbmdzIGJhc2VkIG9uIHRo
ZSBDRkEgc3RhdGUgYXQgdGhlIHRhaWwgb2YgdGhlIGxvb3AKKyAgICAgICAgICBwcmUtaGVhZGVy
LgorCisgICAgICAgIC0gV2UgZG9uJ3Qgd2FudCB0aGluZ3MgdG8gcmVseSBvbiB0aGVpciB0eXBl
IGNoZWNrcyBieSB3YXkgb2YgYSB0b2tlbiwgYmVjYXVzZQorICAgICAgICAgIHRoYXQncyBqdXN0
IHdlaXJkLgorCisgICAgICAgIFNvLCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gaGF2ZSBhIHNwZWNp
YWwgZm9ybSBvZiB0aGUgQ0ZBIHRoYXQgY2FuCisgICAgICAgIGluY3JlbWVudGFsbHkgdXBkYXRl
IGEgYmFzaWMgYmxvY2sncyBzdGF0ZS1hdC10YWlsLCBhbmQgd2Ugd2FudCB0byBiZSBhYmxlIHRv
CisgICAgICAgIGRvIHRoaXMgZm9yIG11bHRpcGxlIGJsb2NrcyBzaW11bHRhbmVvdXNseS4gVGhp
cyByZXF1aXJlcyAqbm90KiBzdG9yaW5nIHRoZQorICAgICAgICBwZXItbm9kZSBzdGF0ZSBpbiB0
aGUgbm9kZXMgdGhlbXNlbHZlcywgYnV0IGluc3RlYWQgdXNpbmcgdGhlIGF0LXRhaWwgSGFzaE1h
cAorICAgICAgICBkaXJlY3RseS4KKworICAgICAgICBIZW5jZSB3ZSBuZWVkIHRvIGhhdmUgYSB3
YXkgb2YgbWFraW5nIHRoZSBhYnN0cmFjdCBpbnRlcnByZXRlciAoaS5lLgorICAgICAgICBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKSBwb2x5bW9ycGhpYyB3aXRoIHJlc3BlY3QgdG8gc3RhdGUgcmVw
cmVzZW50YXRpb24uIFB1dAorICAgICAgICBhbm90aGVyIHdheSwgd2UgbmVlZCB0byBzZXBhcmF0
ZSB0aGUgd2F5IHRoYXQgYWJzdHJhY3Qgc3RhdGUgaXMgcmVwcmVzZW50ZWQKKyAgICAgICAgZnJv
bSB0aGUgd2F5IERGRyBJUiBpcyBhYnN0cmFjdGx5IGludGVycHJldGVkLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlci5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
IChBYnN0cmFjdEludGVycHJldGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVy
cHJldGVyOjpmb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVy
Ojp2YXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6Om5l
ZWRzVHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyOjpm
aWx0ZXJFZGdlQnlVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6
OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6ZmlsdGVy
QXJyYXlNb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6Zmls
dGVyQnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6dHJ5
U2V0Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmZp
bHRlckJ5VHlwZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
Lmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjo6OkFic3RyYWN0
SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlNDOjpERkc6Ojo6fkFic3RyYWN0SW50ZXJwcmV0ZXIp
OgorICAgICAgICAoSlNDOjpERkc6Ojo6Ym9vbGVhblJlc3VsdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6OjpzdGFydEV4ZWN1dGluZyk6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWRnZXMp
OgorICAgICAgICAoSlNDOjpERkc6Ojo6dmVyaWZ5RWRnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Ojp2ZXJpZnlFZGdlcyk6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZmZWN0cyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmNsb2Ji
ZXJXb3JsZCk6CisgICAgICAgIChKU0M6OkRGRzo6OjpjbG9iYmVyQ2FwdHVyZWRWYXJzKToKKyAg
ICAgICAgKEpTQzo6REZHOjo6OmNsb2JiZXJTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZH
Ojo6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ojo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6
REZHOjo6OmZpbHRlckFycmF5TW9kZXMpOgorICAgICAgICAoSlNDOjpERkc6Ojo6ZmlsdGVyQnlW
YWx1ZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RG
R0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdDRkFQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OkNGQVBoYXNlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAgICAgICAgKENGQVBo
YXNlKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Q29uc3RhbnRGb2xkaW5nUGhhc2UpOgorICAgICAgICAo
SlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAg
KENvbnN0YW50Rm9sZGluZ1BoYXNlKToKKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6SW5Q
bGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6
REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6fkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpzZXRMaXZlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFj
ZUFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkluUGxh
Y2VBYnN0cmFjdFN0YXRlOjpyZXNldCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3Ry
YWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VB
YnN0cmFjdFN0YXRlOjptZXJnZSk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0
U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJz
dHJhY3RTdGF0ZTo6bWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MpOgorICAgICAgICAqIGRmZy9E
RkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
IChJblBsYWNlQWJzdHJhY3RTdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3Ry
YWN0U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0
YXRlOjp2YXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRl
OjpibG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmRpZENs
b2JiZXIpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjppc1ZhbGlk
KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6c2V0RGlkQ2xvYmJl
cik6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OnNldElzVmFsaWQp
OgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpzZXRCcmFuY2hEaXJl
Y3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpzZXRGb3Vu
ZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Omhh
dmVTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6
c2V0SGF2ZVN0cnVjdHVyZXMpOgorICAgICAgICAqIGRmZy9ERkdNZXJnZU1vZGUuaDogQWRkZWQu
CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRUeXBlQ2hlY2spOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvU3RyaW5nT25DZWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nSWRlbnRBbmRM
b2FkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
ZVN0cmluZ09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0ZVN0cmluZ09yU3RyaW5nT2JqZWN0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bmVlZHNUeXBlQ2hlY2sp
OgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUludEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2xlYW4pOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAg
ICAgIChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpMb3dlckRGR1Rv
TExWTSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kVHlwZUNoZWNrKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlUmVhbE51bWJlcik6CisgICAgICAgIChMb3dl
ckRGR1RvTExWTSk6CisKIDIwMTMtMDctMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBmb3VydGhUaWVyOiBDRkEgc2hvdWxkIGNvbnNpZGVyIGxpdmUtYXQtaGVh
ZCBmb3IgY2xvYmJlcmluZyBhbmQgZHVtcGluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE1MjgyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgs
OCArMTk4LDYgQEAKIAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjIwMTc2MTQz
RkNEM0IwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3MDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQmFz
aWNCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2RjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNjIwMTc4MTQzRkNENDQwMDY4Qjc3QyAvKiBERkdB
YnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjYyMDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNjIwMTc5MTQz
RkNENDgwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBE
RkdBYnN0cmFjdFN0YXRlLmNwcCAqLzsgfTsKIAkJMEY2Mzk0M0YxNUM3NUYxOTAwNkE1OTdDIC8q
IERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY2Mzk0NTQxNUQwNzA1NTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ1MTE1
RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY2Mzk0NTUxNUQw
NzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0NTIxNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJv
ZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0zNjgsNiArMzY2LDExIEBACiAJCTBGRTUwNTdCMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2RTE3OEY1QjUzMDBCMzVGOEMgLyogREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTUwNTdDMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJz
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFNTA1NkYxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAg
Ki87IH07CiAJCTBGRTUwNTdEMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUw
NTcwMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU4QTE3OThBQkY1
MDBCMzVGOEMgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1ODYxNzk4QUJGNTAwQjM1RjhDIC8qIERG
R0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkU1MDU4QjE3OThBQkY1MDBCMzVGOEMgLyogREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTUwNTg3MTc5OEFCRjUwMEIzNUY4QyAvKiBERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGRTUwNThDMTc5OEFCRjUwMEIzNUY4QyAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1
MDU4ODE3OThBQkY1MDBCMzVGOEMgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwICovOyB9
OworCQkwRkU1MDU4RDE3OThBQkY1MDBCMzVGOEMgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTg5
MTc5OEFCRjUwMEIzNUY4QyAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNThGMTc5OEFFNzEw
MEIzNUY4QyAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRTUwNThFMTc5OEFFNkYwMEIzNUY4QyAvKiBERkdNZXJnZU1vZGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU4
NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NEQTUw
MEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4NTM0QzE3
MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUg
LyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQTBBMDgxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyMjYsOCArMTIyOSw2
IEBACiAJCTBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUVGh1bmtzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUMxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRUaHVua3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5jb25k
aXRpb25hbEZpbmFsaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjYyMDE2
RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdFN0YXRlLmNwcDsgcGF0aCA9IGRmZy9E
RkdBYnN0cmFjdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY2MjAx
NkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNkYxNDNGQ0Qy
RjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdD
IC8qIERGR0Jhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
QmFzaWNCbG9jay5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MTQsNiArMTQxNSwxMSBAQAogCQkwRkU1MDU2RTE3OEY1
QjUzMDBCMzVGOEMgLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
Lmg7IHBhdGggPSBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU1MDU2RjE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNTA1NzAxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdTU0FDb252ZXJzaW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTU0FDb252
ZXJzaW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1ODYxNzk4
QUJGNTAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOyBwYXRoID0gZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
NTA1ODcxNzk4QUJGNTAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1ODgxNzk4QUJGNTAwQjM1RjhDIC8qIERG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTg5
MTc5OEFCRjUwMEIzNUY4QyAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oOyBwYXRoID0g
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRTUwNThFMTc5OEFFNkYwMEIzNUY4QyAvKiBERkdNZXJnZU1vZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHTWVyZ2VNb2RlLmg7IHBhdGggPSBkZmcvREZHTWVyZ2VNb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0QTE3MjNDREE1MDBC
NjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMDlGRDE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExBYmJyZXZpYXRpb25zLmg7IHBhdGggPSBmdGwvRlRMQWJicmV2aWF0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk3NSw4ICsyOTgxLDkgQEAKIAkJ
ODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMEY2MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fi
c3RyYWN0U3RhdGUuY3BwICovLAotCQkJCTBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdB
YnN0cmFjdFN0YXRlLmggKi8sCisJCQkJMEZFNTA1OEUxNzk4QUU2RjAwQjM1RjhDIC8qIERGR01l
cmdlTW9kZS5oICovLAorCQkJCTBGRTUwNTg2MTc5OEFCRjUwMEIzNUY4QyAvKiBERkdBYnN0cmFj
dEludGVycHJldGVyLmggKi8sCisJCQkJMEZFNTA1ODcxNzk4QUJGNTAwQjM1RjhDIC8qIERGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggKi8sCiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VB
QkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovLAogCQkJCTBGNjIwMTZGMTQzRkNEMkYwMDY4
Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCiAJCQkJMEY2NkUxNjgxNERGM0YxMzAwQjdC
MkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLywKQEAgLTMwNTUsNiArMzA2Miw4IEBACiAJCQkJ
ODZBRTZDNEMxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQUkluZm8uaCAqLywKIAkJCQk4NkVDOURC
NzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguY3BwICovLAogCQkJCTg2RUM5REI4MTMyOERG
ODIwMDJCMkFENyAvKiBERkdHcmFwaC5oICovLAorCQkJCTBGRTUwNTg4MTc5OEFCRjUwMEIzNUY4
QyAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCisJCQkJMEZFNTA1ODkxNzk4QUJG
NTAwQjM1RjhDIC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggKi8sCiAJCQkJMEYyQkRDMUYx
NTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovLAogCQkJCTBGRUEwQTJGMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLywKIAkJCQkwRkVBMEEzMDE3MEQ0MEJG
MDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovLApAQCAtMzM1Niw2ICszMzY1LDcgQEAKIAkJCQlC
QzE4QzNFNzBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFNjdEQjk1MTc1MTlCNEEwMDZBODE0RiAvKiBTdGFja0l0ZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRTUyNkJENTE3NjYzQTg0MDBCMTIwREMgLyogU3RhY2tJdGVyYXRvclBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNThGMTc5OEFFNzEwMEIzNUY4QyAvKiBE
RkdNZXJnZU1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRjY4MzVGMTc0MzQzQ0MwMEEzMkUy
NSAvKiBKSVRTdHVic0FSTXY3LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTI0NTk2MjE3NjAxRDU4
MDA3NEZDRTAgLyogQ2FsbEZyYW1lSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVGNjgz
NjAxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2XzY0LmggaW4gSGVhZGVycyAqLywKQEAg
LTM0MTksNiArMzQyOSw3IEBACiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFG
b3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBE
YXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIw
NjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1OEIxNzk4
QUJGNTAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzExNjYwMjBFMTk5N0I0MDA4MDY2REQgLyogRGF0ZUluc3RhbmNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNEExNTYzMjEwOTY2MzY1MDA2RkEyNjAgLyogRGF0ZUluc3RhbmNl
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTEyMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDI3LDcgKzM0MzgsNiBAQAogCQkJCUJDMThD
M0ZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZWJ1Z2dlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMz
MTM1NjQwRjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEMzRkIwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkwRjYyMDE3ODE0M0ZDRDQ0MDA2OEI3N0MgLyogREZHQWJzdHJh
Y3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8q
IERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZCMTRERjNGMTYw
MEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0
NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zNTcxLDYgKzM1ODEsNyBAQAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBK
SVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE2MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU0FjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0VBMTc0ODk2
QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
NTA1OEExNzk4QUJGNTAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUExRDkwMDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRTQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZh
bHVlRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNzBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODMzLDYgKzM4NDQsNyBAQAogCQkJCTBG
NDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRTRBMzMyMDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRTUwNThEMTc5OEFCRjUwMEIzNUY4QyAvKiBERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDRDAxNzQyRDdEQTAwN0Iz
QzFCIC8qIEZUTEpJVEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDODE1MTUxNDA1
MTE5QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkx
OUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC00
MjcxLDcgKzQyODMsNiBAQAogCQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVi
dWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcw
MDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjYy
MDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjE2MDE1RDE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ4NDE1RTQ4MTE4MDA2QTU5
N0MgLyogREZHQXJyYXlNb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkQ1MTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNDQzOCw2ICs0NDQ5LDcgQEAKIAkJCQkwRjc2NkQzNDE1QUUyNTM4MDA4RjM2M0UgLyog
SnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ZEOEM5
MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkU1MDU4QzE3OThBQkY1MDBCMzVGOEMgLyogREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVBQjgzNDIwREE0MzIyNTAwQkM4
M0YzIC8qIExlZ2FjeVByb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTUwNTdDMTc4
RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ4RjIxQjAxMDdFQzU0MTAwNDJFQzJDIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJfaAorI2RlZmluZSBERkdBYnN0cmFjdEludGVycHJldGVyX2gK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9u
LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RT
dGF0ZVR5cGU+CitjbGFzcyBBYnN0cmFjdEludGVycHJldGVyIHsKK3B1YmxpYzoKKyAgICBBYnN0
cmFjdEludGVycHJldGVyKEdyYXBoJiwgQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlKTsKKyAgICB+
QWJzdHJhY3RJbnRlcnByZXRlcigpOworICAgIAorICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUo
Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YXRlLmZvck5vZGUobm9kZSk7
CisgICAgfQorICAgIAorICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAg
ICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVzKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3N0YXRlLnZhcmlhYmxlcygpOworICAgIH0KKyAgICAKKyAgICBib29sIG5lZWRzVHlw
ZUNoZWNrKE5vZGUqIG5vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmb3JOb2RlKG5vZGUpLm1fdHlwZSAmIH50eXBlc1Bhc3NlZFRo
cm91Z2g7CisgICAgfQorICAgIAorICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2soRWRnZSBlZGdlLCBT
cGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gpCisgICAgeworICAgICAgICByZXR1cm4g
bmVlZHNUeXBlQ2hlY2soZWRnZS5ub2RlKCksIHR5cGVzUGFzc2VkVGhyb3VnaCk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2soRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkp
KTsKKyAgICB9CisgICAgCisgICAgLy8gQWJzdHJhY3RseSBleGVjdXRlcyB0aGUgZ2l2ZW4gbm9k
ZS4gVGhlIG5ldyBhYnN0cmFjdCBzdGF0ZSBpcyBzdG9yZWQgaW50byBhbgorICAgIC8vIGFic3Ry
YWN0IHN0YWNrIHN0b3JlZCBpbiAqdGhpcy4gTG9hZHMgb2YgbG9jYWwgdmFyaWFibGVzICh0aGF0
IHNwYW4KKyAgICAvLyBiYXNpYyBibG9ja3MpIGludGVycm9nYXRlIHRoZSBiYXNpYyBibG9jaydz
IG5vdGlvbiBvZiB0aGUgc3RhdGUgYXQgdGhlIGhlYWQuCisgICAgLy8gU3RvcmVzIHRvIGxvY2Fs
IHZhcmlhYmxlcyBhcmUgaGFuZGxlZCBpbiBlbmRCYXNpY0Jsb2NrKCkuIFRoaXMgcmV0dXJucyB0
cnVlCisgICAgLy8gaWYgZXhlY3V0aW9uIHNob3VsZCBjb250aW51ZSBwYXN0IHRoaXMgbm9kZS4g
Tm90YWJseSwgaXQgd2lsbCByZXR1cm4gdHJ1ZQorICAgIC8vIGZvciBibG9jayB0ZXJtaW5hbHMs
IHNvIGxvbmcgYXMgdGhvc2UgdGVybWluYWxzIGFyZSBub3QgUmV0dXJuIG9yIHZhcmlhbnRzCisg
ICAgLy8gb2YgVGhyb3cuCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8gYmUg
ZXF1aXZhbGVudCB0byBkb2luZzoKKyAgICAvLworICAgIC8vIGlmIChzdGF0ZS5zdGFydEV4ZWN1
dGluZyhpbmRleCkpIHsKKyAgICAvLyAgICAgc3RhdGUuZXhlY3V0ZUVkZ2VzKGluZGV4KTsKKyAg
ICAvLyAgICAgcmVzdWx0ID0gc3RhdGUuZXhlY3V0ZUVmZmVjdHMoaW5kZXgpOworICAgIC8vIH0g
ZWxzZQorICAgIC8vICAgICByZXN1bHQgPSB0cnVlOworICAgIGJvb2wgZXhlY3V0ZSh1bnNpZ25l
ZCBpbmRleEluQmxvY2spOworICAgIAorICAgIC8vIEluZGljYXRlIHRoZSBzdGFydCBvZiBleGVj
dXRpb24gb2YgdGhlIG5vZGUuIEl0IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUsCisgICAg
Ly8gdGhhdCBpcyBwcm9ncmVzc2l2ZWx5IGJ1aWx0IHVwIGJ5IGV4ZWN1dGVFZGdlcygpIGFuZCBl
eGVjdXRlRWZmZWN0cygpLiBJbgorICAgIC8vIHBhcnRpY3VsYXIsIHRoaXMgcmVzZXRzIGNhbkV4
aXQoKSwgc28gaWYgeW91IHdhbnQgdG8gImtub3ciIGJldHdlZW4gY2FsbHMgb2YKKyAgICAvLyBz
dGFydEV4ZWN1dGluZygpIGFuZCBleGVjdXRlRWRnZXMoKS9FZmZlY3RzKCkgd2hldGhlciB0aGUg
bGFzdCBydW4gb2YgdGhlCisgICAgLy8gYW5hbHlzaXMgY29uY2x1ZGVkIHRoYXQgdGhlIG5vZGUg
Y2FuIGV4aXQsIHlvdSBzaG91bGQgcHJvYmFibHkgc2V0IHRoYXQKKyAgICAvLyBpbmZvcm1hdGlv
biBhc2lkZSBwcmlvciB0byBjYWxsaW5nIHN0YXJ0RXhlY3V0aW5nKCkuCisgICAgYm9vbCBzdGFy
dEV4ZWN1dGluZyhOb2RlKik7CisgICAgYm9vbCBzdGFydEV4ZWN1dGluZyh1bnNpZ25lZCBpbmRl
eEluQmxvY2spOworICAgIAorICAgIC8vIEFic3RyYWN0bHkgZXhlY3V0ZSB0aGUgZWRnZXMgb2Yg
dGhlIGdpdmVuIG5vZGUuIFRoaXMgcnVucyBmaWx0ZXJFZGdlQnlVc2UoKQorICAgIC8vIG9uIGFs
bCBlZGdlcyBvZiB0aGUgbm9kZS4gWW91IGNhbiBza2lwIHRoaXMgc3RlcCwgaWYgeW91IGhhdmUg
YWxyZWFkeSB1c2VkCisgICAgLy8gZmlsdGVyRWRnZUJ5VXNlKCkgKG9yIHNvbWUgZXF1aXZhbGVu
dCkgb24gZWFjaCBlZGdlLgorICAgIHZvaWQgZXhlY3V0ZUVkZ2VzKE5vZGUqKTsKKyAgICB2b2lk
IGV4ZWN1dGVFZGdlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIAorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBmaWx0ZXJFZGdlQnlVc2UoTm9kZSogbm9kZSwgRWRnZSYgZWRnZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtYXlIYXZlVHlwZUNoZWNrKGVkZ2UudXNlS2luZCgpKSB8fCAhbmVl
ZHNUeXBlQ2hlY2soZWRnZSkpOworICAgICAgICBmaWx0ZXJCeVR5cGUobm9kZSwgZWRnZSwgdHlw
ZUZpbHRlckZvcihlZGdlLnVzZUtpbmQoKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBBYnN0cmFj
dGx5IGV4ZWN1dGUgdGhlIGVmZmVjdHMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgY2hhbmdlcyB0
aGUgYWJzdHJhY3QKKyAgICAvLyBzdGF0ZSBhc3N1bWluZyB0aGF0IGVkZ2VzIGhhdmUgYWxyZWFk
eSBiZWVuIGZpbHRlcmVkLgorICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJ
bkJsb2NrKTsKKyAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywg
Tm9kZSopOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KTsKKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9k
ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgeworICAgICAgICByZXR1cm4gZmlsdGVy
KGZvck5vZGUobm9kZSksIHNldCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJBcnJheU1vZGVzKFQgbm9kZSwgQXJyYXlN
b2RlcyBhcnJheU1vZGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbHRlckFycmF5TW9kZXMo
Zm9yTm9kZShub2RlKSwgYXJyYXlNb2Rlcyk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBTcGVjdWxhdGVk
VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCB0
eXBlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBGaWx0cmF0
aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoVCBub2RlLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZpbHRlckJ5VmFsdWUoZm9yTm9kZShub2RlKSwgdmFsdWUpOworICAgIH0K
KyAgICAKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgY29uc3Qg
U3RydWN0dXJlU2V0Jik7CisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJBcnJheU1vZGVzKEFi
c3RyYWN0VmFsdWUmLCBBcnJheU1vZGVzKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihB
YnN0cmFjdFZhbHVlJiwgU3BlY3VsYXRlZFR5cGUpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmls
dGVyQnlWYWx1ZShBYnN0cmFjdFZhbHVlJiwgSlNWYWx1ZSk7CisgICAgCitwcml2YXRlOgorICAg
IHZvaWQgY2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mLCB1bnNpZ25lZCBpbmRleEluQmxv
Y2spOworICAgIHZvaWQgY2xvYmJlckNhcHR1cmVkVmFycyhjb25zdCBDb2RlT3JpZ2luJik7Cisg
ICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIAor
ICAgIGVudW0gQm9vbGVhblJlc3VsdCB7CisgICAgICAgIFVua25vd25Cb29sZWFuUmVzdWx0LAor
ICAgICAgICBEZWZpbml0ZWx5RmFsc2UsCisgICAgICAgIERlZmluaXRlbHlUcnVlCisgICAgfTsK
KyAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSosIEFic3RyYWN0VmFsdWUmKTsK
KyAgICAKKyAgICBib29sIHRyeVNldENvbnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgY29uc3RhbnQgZm9sZCBzb21l
dGhpbmcgdGhhdCB3aWxsIHByb2R1Y2UgdmFsdWVzIHRoYXQgY29udHJhdmVuZQorICAgICAgICAv
LyBwcmVkaWN0aW9ucy4gSWYgdGhhdCBoYXBwZW5zIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBjb2Rl
IHdpbGwgT1NSIGV4aXQsIGZvcmNpbmcKKyAgICAgICAgLy8gcmVjb21waWxhdGlvbi4gQnV0IGlm
IHdlIHRyaWVkIHRvIGNvbnN0YW50IGZvbGQgdGhlbiB3ZSdsbCBoYXZlIGEgdmVyeSBkZWdlbmVy
YXRlCisgICAgICAgIC8vIElSOiBuYW1lbHkgd2UnbGwgaGF2ZSBhIEpTQ29uc3RhbnQgdGhhdCBj
b250cmF2ZW5lcyBpdHMgb3duIHByZWRpY3Rpb24uIFRoZXJlJ3MgYQorICAgICAgICAvLyBsb3Qg
b2Ygc3VidGxlIGNvZGUgdGhhdCBhc3N1bWVzIHRoYXQKKyAgICAgICAgLy8gc3BlY3VsYXRpb25G
cm9tVmFsdWUoanNDb25zdGFudCkgPT0ganNDb25zdGFudC5wcmVkaWN0aW9uKCkuICJIYXJkZW5p
bmciIHRoYXQgY29kZQorICAgICAgICAvLyBpcyBwcm9iYWJseSBsZXNzIHNhbmUgdGhhbiBqdXN0
IHB1bGxpbmcgYmFjayBvbiBjb25zdGFudCBmb2xkaW5nLgorICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBvbGRUeXBlID0gbm9kZS0+cHJlZGljdGlvbigpOworICAgICAgICBpZiAobWVyZ2VTcGVjdWxh
dGlvbnMoc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpLCBvbGRUeXBlKSAhPSBvbGRUeXBlKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQobV9ncmFwaCwgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBub2RlLCBFZGdlJiBl
ZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUgPSBmb3JOb2RlKGVkZ2UpOworICAgICAgICBpZiAodmFsdWUubV90eXBlICYgfnR5cGUp
IHsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBlZGdl
LnNldFByb29mU3RhdHVzKE5lZWRzQ2hlY2spOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGVkZ2Uuc2V0UHJvb2ZTdGF0dXMoSXNQcm92ZWQpOworICAgICAgICAKKyAgICAgICAgZmlsdGVy
KHZhbHVlLCB0eXBlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2ZXJpZnlFZGdlKE5vZGUqLCBF
ZGdlKTsKKyAgICB2b2lkIHZlcmlmeUVkZ2VzKE5vZGUqKTsKKyAgICAKKyAgICBDb2RlQmxvY2sq
IG1fY29kZUJsb2NrOworICAgIEdyYXBoJiBtX2dyYXBoOworICAgIEFic3RyYWN0U3RhdGVUeXBl
JiBtX3N0YXRlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBYnN0cmFjdEludGVycHJldGVyX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lc19oCisjZGVmaW5l
IERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdEludGVy
cHJldGVyLmgiCisjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKKyNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiU3RyaW5nT2JqZWN0
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgQWJzdHJhY3RTdGF0ZVR5cGU+CitBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6QWJzdHJhY3RJbnRlcnByZXRlcihHcmFwaCYgZ3JhcGgsIEFic3RyYWN0U3RhdGVUeXBl
JiBzdGF0ZSkKKyAgICA6IG1fY29kZUJsb2NrKGdyYXBoLm1fY29kZUJsb2NrKQorICAgICwgbV9n
cmFwaChncmFwaCkKKyAgICAsIG1fc3RhdGUoc3RhdGUpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFic3RyYWN0U3RhdGVUeXBlPgorQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46On5BYnN0cmFjdEludGVycHJldGVyKCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QWJzdHJhY3RTdGF0ZVR5cGU+Cit0eXBlbmFtZSBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6Qm9vbGVhblJlc3VsdAorQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmJvb2xlYW5SZXN1bHQoCisgICAgTm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUpCit7CisgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0gdmFsdWUudmFsdWUoKTsKKyAgICBp
ZiAoY2hpbGRDb25zdCkgeworICAgICAgICBpZiAoY2hpbGRDb25zdC50b0Jvb2xlYW4obV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2xvYmFsRXhlYygpKSkK
KyAgICAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5VHJ1ZTsKKyAgICAgICAgcmV0dXJuIERlZmlu
aXRlbHlGYWxzZTsKKyAgICB9CisKKyAgICAvLyBOZXh0IGNoZWNrIGlmIHdlIGNhbiBmb2xkIGJl
Y2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMgYW4gb2JqZWN0IG9yIHN0cmluZyBhbmQg
ZG9lcyBub3QgZXF1YWwgdW5kZWZpbmVkLgorICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbih2YWx1
ZS5tX3R5cGUpCisgICAgICAgICYmIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1Np
bmdsZXRvbigpKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCk7CisgICAgICAgIGlmICghc3RydWN0dXJlLT5t
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbikpCisgICAgICAgICAgICAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgp
ICE9IFN0cmluZ1R5cGUpCisgICAgICAgICAgICByZXR1cm4gRGVmaW5pdGVseVRydWU7CisgICAg
fQorICAgIAorICAgIHJldHVybiBVbmtub3duQm9vbGVhblJlc3VsdDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Citib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpzdGFydEV4ZWN1dGluZyhOb2RlKiBub2RlKQoreworICAgIEFTU0VS
VChtX3N0YXRlLmJsb2NrKCkpOworICAgIEFTU0VSVChtX3N0YXRlLmlzVmFsaWQoKSk7CisgICAg
CisgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKGZhbHNlKTsKKyAgICAKKyAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKKyAgICAKKyAgICByZXR1cm4gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Citib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpzdGFydEV4ZWN1dGluZyh1bnNpZ25lZCBp
bmRleEluQmxvY2spCit7CisgICAgcmV0dXJuIHN0YXJ0RXhlY3V0aW5nKG1fc3RhdGUuYmxvY2so
KS0+YXQoaW5kZXhJbkJsb2NrKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3Rh
dGVUeXBlPgordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhl
Y3V0ZUVkZ2VzKE5vZGUqIG5vZGUpCit7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9n
cmFwaCwgbm9kZSwgZmlsdGVyRWRnZUJ5VXNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJz
dHJhY3RTdGF0ZVR5cGU+Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpleGVjdXRlRWRnZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKQoreworICAgIGV4ZWN1dGVF
ZGdlcyhtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jaykpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OnZlcmlmeUVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51
c2VLaW5kKCkpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgor
dm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6dmVyaWZ5RWRnZXMo
Tm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2Rl
LCB2ZXJpZnlFZGdlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+
Citib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpCisgICAgICAgIHZlcmlmeUVkZ2VzKG5vZGUpOworICAgIAorICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICBjYXNlIFdlYWtKU0Nv
bnN0YW50OgorICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czogeworICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLCBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIElkZW50aXR5OiB7CisgICAgICAg
IGZvck5vZGUobm9kZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldEFyZ3VtZW50OiB7CisgICAgICAgIEFTU0VS
VChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KTsKKyAgICAgICAgQVNTRVJUKHZhbHVlLmlzVG9wKCkpOworICAgICAgICBGaWx0cmF0aW9uUmVz
dWx0IHJlc3VsdCA9CisgICAgICAgICAgICB2YWx1ZS5maWx0ZXIodHlwZUZpbHRlckZvcih1c2VL
aW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KHJlc3VsdCwgcmVzdWx0ID09IEZpbHRyYXRpb25PSyk7CisgICAgICAgIGZvck5vZGUobm9kZSkg
PSB2YWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBH
ZXRMb2NhbDogeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBpZiAodmFyaWFibGVBY2Nl
c3NEYXRhLT5wcmVkaWN0aW9uKCkgPT0gU3BlY05vbmUpIHsKKyAgICAgICAgICAgIG1fc3RhdGUu
c2V0SXNWYWxpZChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlh
YmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRh
LT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCisgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodmFsdWUudmFsdWUoKSkKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHMo
dHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2RlLT51bmxp
bmtlZExvY2FsKCkpOworICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKKyAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkgPSB2
YWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFNldExvY2Fs
OiB7CisgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogeworICAgICAg
ICAvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQgaXMgZWZmZWN0aXZlbHkg
YSBwcm9taXNlIHRoYXQgdGhlIFNldExvY2FsCisgICAgICAgIC8vIHdhcyBkZWFkLgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAvLyBBc3NlcnQgdGhh
dCB0aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4KKyAgICAgICAgQVNTRVJUKCFt
X3N0YXRlLmJsb2NrKCktPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xl
YXIoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBCaXRBbmQ6Cisg
ICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIEJpdFJTaGlmdDoKKyAg
ICBjYXNlIEJpdExTaGlmdDoKKyAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKKyAgICAgICAgSlNWYWx1
ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1
ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIGlmIChs
ZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNJbnQzMigpICYmIHJpZ2h0LmlzSW50MzIoKSkgeworICAg
ICAgICAgICAgaW50MzJfdCBhID0gbGVmdC5hc0ludDMyKCk7CisgICAgICAgICAgICBpbnQzMl90
IGIgPSByaWdodC5hc0ludDMyKCk7CisgICAgICAgICAgICBib29sIGNvbnN0YW50V2FzU2V0Owor
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEJpdEFu
ZDoKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUs
IEpTVmFsdWUoYSAmIGIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQml0T3I6CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKGEgfCBiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYSBeIGIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhID4+IHN0YXRpY19jYXN0PHVpbnQz
Ml90PihiKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCaXRM
U2hpZnQ6CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChu
b2RlLCBKU1ZhbHVlKGEgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKHN0YXRpY19j
YXN0PHVpbnQzMl90PihhKSA+PiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYikpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1Nl
dCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0
KSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7CisgICAgICAgIEpTVmFsdWUgY2hp
bGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAoY2hpbGQg
JiYgY2hpbGQuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgQVNTRVJUKGNoaWxkLmlzSW50MzIo
KSk7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShjaGlsZC5h
c1VJbnQzMigpKSkpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRz
KHRydWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmICghbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIERvdWJsZUFzSW50MzI6IHsKKyAgICAgICAgSlNWYWx1ZSBj
aGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIGlmIChjaGls
ZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CisgICAgICAgICAgICBkb3VibGUgYXNEb3VibGUgPSBj
aGlsZC5hc051bWJlcigpOworICAgICAgICAgICAgaW50MzJfdCBhc0ludCA9IEpTQzo6dG9JbnQz
Mihhc0RvdWJsZSk7CisgICAgICAgICAgICBpZiAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHN0YXRp
Y19jYXN0PGRvdWJsZT4oYXNJbnQpKSA9PSBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oYXNEb3VibGUp
CisgICAgICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhc0ludCkp
KSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3Bl
Y0ludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBW
YWx1ZVRvSW50MzI6IHsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7CisgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7
CisgICAgICAgICAgICBib29sIGNvbnN0YW50V2FzU2V0OworICAgICAgICAgICAgaWYgKGNoaWxk
LmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0
YW50KG5vZGUsIGNoaWxkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoSlNDOjp0b0ludDMyKGNo
aWxkLmFzRG91YmxlKCkpKSk7CisgICAgICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsKKyAg
ICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgY2FzZSBGb3J3YXJkSW50
MzJUb0RvdWJsZTogeworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkudmFsdWUoKTsKKyAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKKyAg
ICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2Rl
QXNEb3VibGUsIGNoaWxkLmFzTnVtYmVyKCkpKSkgeworICAgICAgICAgICAgbV9zdGF0ZS5zZXRG
b3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlUmVhbCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91Ymxl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFZhbHVlQWRkOgor
ICAgIGNhc2UgQXJpdGhBZGQ6IHsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQu
aXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpCisgICAgICAgICAgICAmJiB0cnlTZXRDb25z
dGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKSkg
eworICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2lu
ZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50
ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNl
OgorICAgICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgICAgICAmJiBpc1JlYWxOdW1iZXJTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlUmVhbCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChub2RlLT5vcCgpID09IFZhbHVlQWRkKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBNYWtlUm9wZTogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX2dy
YXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAgICAgCisgICAgY2FzZSBBcml0aFN1YjogeworICAgICAgICBKU1ZhbHVlIGxlZnQg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0
ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKKyAgICAgICAgaWYgKGxlZnQgJiYg
cmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKKyAgICAgICAgICAg
ICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVmdC5hc051bWJlcigpIC0gcmlnaHQu
YXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChub2Rl
LT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKCFub2Rl
Q2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Rv
dWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJpdGhOZWdh
dGU6IHsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CisgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpCisgICAgICAgICAg
ICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKC1jaGlsZC5hc051bWJlcigpKSkpIHsK
KyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVuY2F0ZUlu
dGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVz
ZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICBK
U1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBK
U1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKKyAgICAgICAg
aWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkK
KyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVmdC5hc051bWJl
cigpICogcmlnaHQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5k
Q29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
c3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICAg
ICAgaWYgKCFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCisg
ICAgICAgICAgICAgICAgfHwgIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhO
b2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGlm
IChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUp
CisgICAgICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0RvdWJsZVJlYWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCisgICAgY2FzZSBBcml0aERpdjoKKyAgICBjYXNlIEFyaXRoTWluOgorICAgIGNhc2Ug
QXJpdGhNYXg6CisgICAgY2FzZSBBcml0aE1vZDogeworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0g
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gQXJpdGhNb2QgJiYgcmlnaHQgJiYgcmlnaHQuaXNOdW1iZXIoKSAmJiByaWdodC5hc051bWJl
cigpID09IDEKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoMCkp
KSB7CisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGRvdWJsZSBh
ID0gbGVmdC5hc051bWJlcigpOworICAgICAgICAgICAgZG91YmxlIGIgPSByaWdodC5hc051bWJl
cigpOworICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsKKyAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBBcml0aERpdjoKKyAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYSAvIGIp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJpdGhNaW46Cisg
ICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1Zh
bHVlKGEgPCBiID8gYSA6IChiIDw9IGEgPyBiIDogYSArIGIpKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEFyaXRoTWF4OgorICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhID4gYiA/IGEgOiAoYiA+
PSBhID8gYiA6IGEgKyBiKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBBcml0aE1vZDoKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIEpTVmFsdWUoZm1vZChhLCBiKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29u
c3RhbnRXYXNTZXQpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRz
KHRydWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
SW50MzJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsK
KyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBj
YXNlIEFyaXRoQWJzOiB7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKQor
ICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShmYWJzKGNoaWxkLmFz
TnVtYmVyKCkpKSkpIHsKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVy
VXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBBcml0aFNxcnQ6IHsKKyAg
ICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7Cisg
ICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpCisgICAgICAgICAgICAmJiB0cnlT
ZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKHNxcnQoY2hpbGQuYXNOdW1iZXIoKSkpKSkgeworICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91Ymxl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBMb2dpY2Fs
Tm90OiB7CisgICAgICAgIGJvb2wgZGlkU2V0Q29uc3RhbnQgPSBmYWxzZTsKKyAgICAgICAgc3dp
dGNoIChib29sZWFuUmVzdWx0KG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgeworICAg
ICAgICBjYXNlIERlZmluaXRlbHlUcnVlOgorICAgICAgICAgICAgZGlkU2V0Q29uc3RhbnQgPSB0
cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIERlZmluaXRlbHlGYWxzZToKKyAgICAgICAgICAgIGRpZFNldENvbnN0
YW50ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKHRydWUpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGRpZFNldENvbnN0YW50KSB7CisgICAgICAgICAgICBtX3N0YXRlLnNldEZv
dW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBCb29s
ZWFuVXNlOgorICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBjYXNlIE51bWJlclVzZToK
KyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgT2JqZWN0T3JPdGhlclVzZToKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgSXNVbmRlZmluZWQ6CisgICAgY2FzZSBJc0Jv
b2xlYW46CisgICAgY2FzZSBJc051bWJlcjoKKyAgICBjYXNlIElzU3RyaW5nOgorICAgIGNhc2Ug
SXNPYmplY3Q6CisgICAgY2FzZSBJc0Z1bmN0aW9uOiB7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoCisgICAgICAgICAgICBub2RlLT5vcCgpID09IElzVW5kZWZpbmVkCisgICAgICAgICAgICAm
JiBtX2dyYXBoLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKG5v
ZGUtPmNvZGVPcmlnaW4pKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIGlmIChjaGlsZCkgeworICAgICAgICAgICAgYm9v
bCBjb25zdGFudFdhc1NldDsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICAgICAgY2FzZSBJc1VuZGVmaW5lZDoKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1Nl
dCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbigKKyAgICAgICAgICAgICAgICAgICAg
Y2hpbGQuaXNDZWxsKCkKKyAgICAgICAgICAgICAgICAgICAgPyBjaGlsZC5hc0NlbGwoKS0+c3Ry
dWN0dXJlKCktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKSkKKyAgICAgICAgICAgICAgICAgICAgOiBjaGlsZC5pc1Vu
ZGVmaW5lZCgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIElz
Qm9vbGVhbjoKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50
KG5vZGUsIGpzQm9vbGVhbihjaGlsZC5pc0Jvb2xlYW4oKSkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBJc051bWJlcjoKKyAgICAgICAgICAgICAgICBjb25zdGFu
dFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihjaGlsZC5pc051bWJlcigp
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIElzU3RyaW5nOgor
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNC
b29sZWFuKGlzSlNTdHJpbmcoY2hpbGQpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIElzT2JqZWN0OgorICAgICAgICAgICAgICAgIGlmIChjaGlsZC5pc051bGwo
KSB8fCAhY2hpbGQuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdGFudFdh
c1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihjaGlsZC5pc051bGwoKSkpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29uc3Rh
bnRXYXNTZXQpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBUeXBlT2Y6IHsKKyAgICAgICAgVk0qIHZtID0gbV9jb2Rl
QmxvY2stPnZtKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS52YWx1ZSgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdENoaWxkID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGlmIChjaGlsZCkgeworICAgICAgICAgICAg
SlNWYWx1ZSB0eXBlU3RyaW5nID0ganNUeXBlU3RyaW5nRm9yVmFsdWUoKnZtLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLCBjaGlsZCk7CisgICAgICAgICAg
ICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgdHlwZVN0cmluZykpIHsKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24o
YWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQo
bm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAg
ICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNOdW1iZXIpOworICAgICAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihhYnN0
cmFjdENoaWxkLm1fdHlwZSkpIHsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2Rl
LCB2bS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGZp
bHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmluZyk7CisgICAgICAgICAgICAgICAgbV9zdGF0
ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0ZpbmFsT2JqZWN0U3BlY3VsYXRpb24oYWJz
dHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJyYXlTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1f
dHlwZSkgfHwgaXNBcmd1bWVudHNTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkpIHsK
KyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLm9i
amVjdFN0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwg
U3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0FyZ3VtZW50cyk7CisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uU3BlY3Vs
YXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29u
c3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgeworICAgICAg
ICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
ICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1
bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgeworICAgICAgICAgICAgaWYgKHRyeVNldENv
bnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSkgeworICAgICAg
ICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICAg
ICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIFN0cmluZ1VzZToKKyAgICAgICAg
Y2FzZSBDZWxsVXNlOgorICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLCBtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBDb21wYXJlTGVzczoK
KyAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICBj
YXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgY2FzZSBDb21wYXJlRXE6CisgICAgY2FzZSBDb21w
YXJlRXFDb25zdGFudDogeworICAgICAgICBib29sIGNvbnN0YW50V2FzU2V0ID0gZmFsc2U7CisK
KyAgICAgICAgSlNWYWx1ZSBsZWZ0Q29uc3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1
ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0Q29uc3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS52YWx1ZSgpOworICAgICAgICBpZiAobGVmdENvbnN0ICYmIHJpZ2h0Q29uc3QpIHsKKyAgICAg
ICAgICAgIGlmIChsZWZ0Q29uc3QuaXNOdW1iZXIoKSAmJiByaWdodENvbnN0LmlzTnVtYmVyKCkp
IHsKKyAgICAgICAgICAgICAgICBkb3VibGUgYSA9IGxlZnRDb25zdC5hc051bWJlcigpOworICAg
ICAgICAgICAgICAgIGRvdWJsZSBiID0gcmlnaHRDb25zdC5hc051bWJlcigpOworICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFy
ZUxlc3M6CisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGEgPCBiKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA8PSBiKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFy
ZUdyZWF0ZXI6CisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29u
c3RhbnQobm9kZSwganNCb29sZWFuKGEgPiBiKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA+
PSBiKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
Q29tcGFyZUVxOgorICAgICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIGpzQm9vbGVhbihhID09IGIpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNT
ZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWNvbnN0YW50
V2FzU2V0ICYmIG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxCisgICAgICAgICAgICAgICAgJiYgbGVm
dENvbnN0LmlzU3RyaW5nKCkgJiYgcmlnaHRDb25zdC5pc1N0cmluZygpKSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nSW1wbCogYSA9IGFzU3RyaW5nKGxlZnRDb25zdCktPnRyeUdldFZh
bHVlSW1wbCgpOworICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZ0ltcGwqIGIgPSBhc1N0cmlu
ZyhyaWdodENvbnN0KS0+dHJ5R2V0VmFsdWVJbXBsKCk7CisgICAgICAgICAgICAgICAgaWYgKGEg
JiYgYikKKyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFu
dChub2RlLCBqc0Jvb2xlYW4oV1RGOjplcXVhbChhLCBiKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWNvbnN0YW50V2FzU2V0ICYmIChub2RlLT5v
cCgpID09IENvbXBhcmVFcUNvbnN0YW50IHx8IG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxKSkgewor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdFR5cGUgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGU7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodFR5cGUgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGU7CisgICAgICAgICAgICBpZiAoKGlzSW50MzJTcGVj
dWxhdGlvbihsZWZ0VHlwZSkgJiYgaXNPdGhlclNwZWN1bGF0aW9uKHJpZ2h0VHlwZSkpCisgICAg
ICAgICAgICAgICAgfHwgKGlzT3RoZXJTcGVjdWxhdGlvbihsZWZ0VHlwZSkgJiYgaXNJbnQzMlNw
ZWN1bGF0aW9uKHJpZ2h0VHlwZSkpKQorICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0g
dHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChjb25zdGFudFdhc1NldCkgeworICAgICAgICAgICAgbV9zdGF0ZS5z
ZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAg
ICAgICAKKyAgICAgICAgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLiBCdXQgdGhlIG9u
bHkgdGhpbmcgdGhpcyBwcmV2ZW50cyBpcyBzdG9yZSBlbGltaW5hdGlvbiwKKyAgICAgICAgLy8g
YW5kIGhvdyBsaWtlbHkgaXMgaXQsIHJlYWxseSwgdGhhdCB5b3UnbGwgaGF2ZSByZWR1bmRhbnQg
c3RvcmVzIGFjcm9zcyBhIGNvbXBhcmlzb24KKyAgICAgICAgLy8gb3BlcmF0aW9uPyBDb21wYXJp
c29uIG9wZXJhdGlvbnMgYXJlIHR5cGljYWxseSBhdCB0aGUgZW5kIG9mIGJhc2ljIGJsb2Nrcywg
c28KKyAgICAgICAgLy8gdW5sZXNzIHdlIGhhdmUgZ2xvYmFsIHN0b3JlIGVsaW1pbmF0aW9uIChz
dXBlciB1bmxpa2VseSBnaXZlbiBob3cgdW5wcm9maXRhYmxlIHRoYXQKKyAgICAgICAgLy8gb3B0
aW1pemF0aW9uIGlzIHRvIGJlZ2luIHdpdGgpLCB5b3UgYXJlbid0IGdvaW5nIHRvIGJlIHdhbnRp
bmcgdG8gc3RvcmUgZWxpbWluYXRlCisgICAgICAgIC8vIGFjcm9zcyBhbiBlcXVhbGl0eSBvcC4K
KyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAgICAgCisgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CisgICAgY2FzZSBDb21wYXJl
U3RyaWN0RXFDb25zdGFudDogeworICAgICAgICBOb2RlKiBsZWZ0Tm9kZSA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHROb2RlID0gbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKGxlZnROb2RlKS52YWx1ZSgpOwor
ICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShyaWdodE5vZGUpLnZhbHVlKCk7CisgICAg
ICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7CisgICAgICAgICAgICBpZiAobGVmdC5pc051bWJlcigp
ICYmIHJpZ2h0LmlzTnVtYmVyKCkKKyAgICAgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChu
b2RlLCBqc0Jvb2xlYW4obGVmdC5hc051bWJlcigpID09IHJpZ2h0LmFzTnVtYmVyKCkpKSkgewor
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVmdC5pc1N0
cmluZygpICYmIHJpZ2h0LmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmdJbXBsKiBhID0gYXNTdHJpbmcobGVmdCktPnRyeUdldFZhbHVlSW1wbCgpOworICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZ0ltcGwqIGIgPSBhc1N0cmluZyhyaWdodCktPnRyeUdldFZhbHVl
SW1wbCgpOworICAgICAgICAgICAgICAgIGlmIChhICYmIGIgJiYgdHJ5U2V0Q29uc3RhbnQobm9k
ZSwganNCb29sZWFuKFdURjo6ZXF1YWwoYSwgYikpKSkgeworICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFN0cmluZ0NoYXJB
dDoKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRCeVZhbDogeworICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgp
LnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgor
ICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICBjYXNlIEFycmF5OjpVbmRl
Y2lkZWQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAg
IG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9w
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgeworICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSB3YXRjaHBvaW50IHdhcyBzdGlsbCB2YWxpZCB3ZSBjb3VsZCB0
b3RhbGx5IHNldCB0aGlzIHRvIGJlCisgICAgICAgICAgICAgICAgLy8gU3BlY1N0cmluZyB8IFNw
ZWNPdGhlci4gRXhjZXB0IHRoYXQgd2UnZCBoYXZlIHRvIGJlIGNhcmVmdWwuIElmIHdlCisgICAg
ICAgICAgICAgICAgLy8gdGVzdGVkIHRoZSB3YXRjaHBvaW50IHN0YXRlIGhlcmUgdGhlbiBpdCBj
b3VsZCBjaGFuZ2UgYnkgdGhlIHRpbWUKKyAgICAgICAgICAgICAgICAvLyB3ZSBnb3QgdG8gdGhl
IGJhY2tlbmQuIFNvIHRvIGRvIHRoaXMgcmlnaHQsIHdlJ2QgaGF2ZSB0byBnZXQgdGhlCisgICAg
ICAgICAgICAgICAgLy8gZml4dXAgcGhhc2UgdG8gY2hlY2sgdGhlIHdhdGNocG9pbnQgc3RhdGUg
YW5kIHRoZW4gYmFrZSBpbnRvIHRoZQorICAgICAgICAgICAgICAgIC8vIEdldEJ5VmFsIG9wZXJh
dGlvbiB0aGUgZmFjdCB0aGF0IHdlJ3JlIHVzaW5nIGEgd2F0Y2hwb2ludCwgdXNpbmcKKyAgICAg
ICAgICAgICAgICAvLyBzb21ldGhpbmcgbGlrZSBBcnJheTo6U2FuZUNoYWluIChleGNlcHQgbm90
IHF1aXRlLCBiZWNhdXNlIHRoYXQKKyAgICAgICAgICAgICAgICAvLyBpbXBsaWVzIGFuIGluLWJv
dW5kcyBhY2Nlc3MpLiBOb25lIG9mIHRoaXMgZmVlbHMgbGlrZSBpdCdzIHdvcnRoIGl0LAorICAg
ICAgICAgICAgICAgIC8vIHNvIHdlJ3JlIGdvaW5nIHdpdGggVE9QIGZvciBub3cuCisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX2dyYXBoLm1fdm0uc3Ry
aW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+
YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Cisg
ICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAg
ICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwor
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
SW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJy
YXk6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQzMkFycmF5OgorICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6Rmxv
YXQzMkFycmF5OgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlWYWw6CisgICAgY2FzZSBQ
dXRCeVZhbEFsaWFzOiB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAg
ICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQo
ZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKKyAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNP
dXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
YXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkubWF5U3RvcmVUb0hvbGUoKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY051bWJlcik7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBBcnJheVBvcDoKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUmVnRXhwRXhlYzoKKyAg
ICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOworICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgSnVtcDoKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIEJyYW5jaDogeworICAgICAgICBOb2RlKiBjaGlsZCA9
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgQm9vbGVhblJlc3VsdCByZXN1bHQgPSBi
b29sZWFuUmVzdWx0KG5vZGUsIGZvck5vZGUoY2hpbGQpKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9
PSBEZWZpbml0ZWx5VHJ1ZSkgeworICAgICAgICAgICAgbV9zdGF0ZS5zZXRCcmFuY2hEaXJlY3Rp
b24oVGFrZVRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHJlc3VsdCA9PSBEZWZpbml0ZWx5RmFsc2UpIHsKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0QnJh
bmNoRGlyZWN0aW9uKFRha2VGYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAvLyBGSVhNRTogVGhlIGFib3ZlIGhhbmRsZXMgdGhlIHRyaXZpYWwgY2FzZXMgb2Yg
c3BhcnNlIGNvbmRpdGlvbmFsCisgICAgICAgIC8vIGNvbnN0YW50IHByb3BhZ2F0aW9uLCBidXQg
d2UgY2FuIGRvIGJldHRlcjoKKyAgICAgICAgLy8gV2UgY2FuIHNwZWNpYWxpemUgdGhlIHNvdXJj
ZSB2YXJpYWJsZSdzIHZhbHVlIG9uIGVhY2ggZGlyZWN0aW9uIG9mCisgICAgICAgIC8vIHRoZSBi
cmFuY2guCisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIFRoaXMgaXMgb3Zlcmx5
IGNvbnNlcnZhdGl2ZS4KKyAgICAgICAgbV9zdGF0ZS5zZXRCcmFuY2hEaXJlY3Rpb24oVGFrZUJv
dGgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgU3dpdGNoOiB7
CisgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gZm9yIG5vdy4KKyAgICAgICAgLy8gRklYTUU6IERv
IHNwYXJzZSBjb25kaXRpb25hbCB0aGluZ3MuCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAg
ICAgICAgIAorICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFs
c2UpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBUaHJvdzoKKyAgICBjYXNl
IFRocm93UmVmZXJlbmNlRXJyb3I6CisgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7
CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAgICAgICBKU1ZhbHVlIGNoaWxkQ29u
c3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAoY2hpbGRD
b25zdCAmJiBjaGlsZENvbnN0LmlzTnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgY2hp
bGRDb25zdCkpIHsKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJU
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgCisgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZSk7CisgICAgICAg
IAorICAgICAgICAvLyBOQi4gVGhlIG1vcmUgY2Fub25pY2FsIHdheSBvZiB3cml0aW5nIHRoaXMg
d291bGQgaGF2ZSBiZWVuOgorICAgICAgICAvLworICAgICAgICAvLyBkZXN0aW5hdGlvbiA9IHNv
dXJjZTsKKyAgICAgICAgLy8gaWYgKGRlc3RpbmF0aW9uLm1fdHlwZSAmICEoU3BlY051bWJlciB8
IFNwZWNTdHJpbmcgfCBTcGVjQm9vbGVhbikpIHsKKyAgICAgICAgLy8gICAgIGRlc3RpbmF0aW9u
LmZpbHRlcihTcGVjTnVtYmVyIHwgU3BlY1N0cmluZyB8IFNwZWNCb29sZWFuKTsKKyAgICAgICAg
Ly8gICAgIEFic3RyYWN0VmFsdWUgc3RyaW5nOworICAgICAgICAvLyAgICAgc3RyaW5nLnNldCh2
bS0+c3RyaW5nU3RydWN0dXJlKTsKKyAgICAgICAgLy8gICAgIGRlc3RpbmF0aW9uLm1lcmdlKHN0
cmluZyk7CisgICAgICAgIC8vIH0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHJlYXNvbiB3
aHkgdGhpcyB3b3VsZCwgaW4gbW9zdCBvdGhlciBjYXNlcywgaGF2ZSBiZWVuIGJldHRlciBpcyB0
aGF0CisgICAgICAgIC8vIHRoZW4gZGVzdGluYXRpb24gd291bGQgcHJlc2VydmUgYW55IG5vbi1T
cGVjdWxhdGVkVHlwZSBrbm93bGVkZ2Ugb2Ygc291cmNlLgorICAgICAgICAvLyBBcyBpdCBzdGFu
ZHMsIHRoZSBjb2RlIGJlbG93IGZvcmdldHMgYW55IG5vbi1TcGVjdWxhdGVkVHlwZSBrbm93bGVk
Z2UgdGhhdAorICAgICAgICAvLyBzb3VyY2Ugd291bGQgaGF2ZSBoYWQuIEZvcnR1bmF0ZWx5LCB0
aG91Z2gsIGZvciB0aGluZ3MgbGlrZSBzdHJpbmdzIGFuZAorICAgICAgICAvLyBudW1iZXJzIGFu
ZCBib29sZWFucywgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgbm9uLVNwZWN1bGF0ZWRUeXBlIGtu
b3dlZGdlOgorICAgICAgICAvLyB0aGUgc3RydWN0dXJlIHdvbid0IHRlbGwgdXMgYW55dGhpbmcg
d2UgZG9uJ3QgYWxyZWFkeSBrbm93LCBhbmQgbmVpdGhlcgorICAgICAgICAvLyB3aWxsIEFycmF5
TW9kZXMuIEFuZCBpZiB0aGUgc291cmNlIHdhcyBhIG1lYW5pbmdmdWwgY29uc3RhbnQgdGhlbiB3
ZQorICAgICAgICAvLyB3b3VsZCBoYXZlIGhhbmRsZWQgdGhhdCBhYm92ZS4gVW5mb3J0dW5hdGVs
eSwgdGhpcyBkb2VzIG1lYW4gdGhhdAorICAgICAgICAvLyBUb1ByaW1pdGl2ZSB3aWxsIGN1cnJl
bnRseSBmb3JnZXQgc3RyaW5nIGNvbnN0YW50cy4gQnV0IHRoYXQncyBub3QgYSBiaWcKKyAgICAg
ICAgLy8gZGVhbCBzaW5jZSB3ZSBkb24ndCBkbyBhbnkgb3B0aW1pemF0aW9uIG9uIHRob3NlIGN1
cnJlbnRseS4KKyAgICAgICAgCisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOworICAgICAgICAKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9
IHNvdXJjZS5tX3R5cGU7CisgICAgICAgIGlmICh0eXBlICYgfihTcGVjTnVtYmVyIHwgU3BlY1N0
cmluZyB8IFNwZWNCb29sZWFuKSkgeworICAgICAgICAgICAgdHlwZSAmPSAoU3BlY051bWJlciB8
IFNwZWNTdHJpbmcgfCBTcGVjQm9vbGVhbik7CisgICAgICAgICAgICB0eXBlIHw9IFNwZWNTdHJp
bmc7CisgICAgICAgIH0KKyAgICAgICAgZGVzdGluYXRpb24uc2V0VHlwZSh0eXBlKTsKKyAgICAg
ICAgaWYgKGRlc3RpbmF0aW9uLmlzQ2xlYXIoKSkKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNW
YWxpZChmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBU
b1N0cmluZzogeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewor
ICAgICAgICBjYXNlIFN0cmluZ09iamVjdFVzZToKKyAgICAgICAgICAgIC8vIFRoaXMgYWxzbyBm
aWx0ZXJzIHRoYXQgdGhlIFN0cmluZ09iamVjdCBoYXMgdGhlIHByaW1vcmRpYWwgU3RyaW5nT2Jq
ZWN0CisgICAgICAgICAgICAvLyBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBmaWx0ZXIoCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCksCisgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsK
KyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIFdlIGNvdWxkIGJlIG1vcmUg
cHJlY2lzZSBidXQgaXQncyBsaWtlbHkgbm90IHdvcnRoIGl0LgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CisgICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOyAvLyBXZSBjb3VsZCBiZSBtb3JlIHByZWNpc2UgYnV0IGl0J3Mg
bGlrZWx5IG5vdCB3b3J0aCBpdC4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENl
bGxVc2U6CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQobV9ncmFwaCwgbV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6IHsKKyAg
ICAgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmU3RyaW5nT2Jq
ZWN0OjpzX2luZm8pOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBub2RlLT5z
dHJ1Y3R1cmUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNh
c2UgTmV3QXJyYXk6CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KAorICAgICAgICAgICAgbV9ncmFwaCwKKyAgICAgICAgICAgIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvcklu
ZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAg
ICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KAorICAgICAgICAgICAgbV9ncmFwaCwK
KyAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5h
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhp
bmdUeXBlKCkpKTsKKyAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQXJy
YXkpOworICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgTmV3UmVnZXhwOgorICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3Jp
Z2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOworICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1
cmVzKHRydWUpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVG9UaGlz
OiB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgIGRl
c3RpbmF0aW9uLm1lcmdlKFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2UgQ3JlYXRlVGhpczogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOworICAgICAgICBt
X3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOworICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgK
KyAgICAgICAgICAgIG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIG1fc3RhdGUuc2V0
SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNl
IENyZWF0ZUFyZ3VtZW50czoKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCisgICAgICAgICAg
ICBtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4p
LT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVy
ZXModHJ1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFRlYXJPZmZBY3Rp
dmF0aW9uOgorICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKKyAgICAgICAgLy8gRG9lcyBub3Ro
aW5nIHRoYXQgaXMgdXNlci12aXNpYmxlLgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkOgorICAgICAgICBpZiAoaXNFbXB0eVNwZWN1bGF0aW9uKAor
ICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgKKyAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSku
bV90eXBlKSkKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgorICAgICAg
ICAvLyBXZSBrbm93IHRoYXQgdGhpcyBleGVjdXRhYmxlIGRvZXMgbm90IGVzY2FwZSBpdHMgYXJn
dW1lbnRzLCBzbyB3ZSBjYW4gb3B0aW1pemUKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJp
dC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9s
ZGluZworICAgICAgICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFy
Z3VtZW50c0xlbmd0aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgorICAgICAgICAvLyBXZSBw
ZXJmb3JtIGZ1cnRoZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgorICAgICAgICBp
ZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGpzTnVtYmVyKG5vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAorICAgICAgICAgICAgIWlzRW1wdHlTcGVjdWxhdGlv
bigKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoCisgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdp
bikpLm1fdHlwZSkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBHZXRNeUFy
Z3VtZW50c0xlbmd0aFNhZmU6CisgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMg
YWxsIHN0cnVjdHVyZXMgaWYgdGhlIGFyZ3VtZW50cyBvYmplY3QgaGFkIGEgZ2V0dGVyCisgICAg
ICAgIC8vIGluc3RhbGxlZCBvbiB0aGUgbGVuZ3RoIHByb3BlcnR5LgorICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgLy8gV2UgY3Vy
cmVudGx5IG1ha2Ugbm8gZ3VhcmFudGVlIGFib3V0IHdoYXQgdGhpcyByZXR1cm5zIGJlY2F1c2Ug
aXQgZG9lcyBub3QKKyAgICAgICAgLy8gc3BlY3VsYXRlIHRoYXQgdGhlIGxlbmd0aCBwcm9wZXJ0
eSBpcyBhY3R1YWxseSBhIGxlbmd0aC4KKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoK
KyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgLy8gV2Uga25vdyB0aGF0
IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28gd2UgY2Fu
IG9wdGltaXplCisgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlz
IGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhlCisgICAgICAgIC8vIEFyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxT
YWZlOgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAvLyBUaGlzIHBv
dGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBh
Y2Nlc3NpbmcgaGFzCisgICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBkb24ndCBzcGVjdWxhdGUgYWdh
aW5zdCB0aGlzLgorICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgLy8gQW5kIHRoZSByZXN1bHQgaXMgdW5rbm93bi4KKyAgICAgICAg
Zm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBj
YXNlIE5ld0Z1bmN0aW9uOgorICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgorICAgIGNh
c2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKKyAgICAg
ICAgICAgIG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9y
aWdpbiktPmZ1bmN0aW9uU3RydWN0dXJlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgY2FzZSBHZXRDYWxsZWU6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBTZXRDYWxsZWU6Cisg
ICAgY2FzZSBTZXRNeVNjb3BlOgorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgR2V0U2NvcGU6IC8vIEZJWE1FOiBXZSBjb3VsZCBnZXQgcmlkIG9mIHRoZXNlIGlmIHdlIGtu
b3cgdGhhdCB0aGUgSlNGdW5jdGlvbiBpcyBhIGNvbnN0YW50LiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MjAyCisgICAgY2FzZSBHZXRNeVNjb3BlOgorICAgIGNh
c2UgU2tpcFRvcFNjb3BlOgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0NlbGxP
dGhlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTa2lwU2NvcGU6IHsKKyAgICAgICAg
SlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAg
IGlmIChjaGlsZCAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGpzQ2FzdDxKU1Njb3Bl
Kj4oY2hpbGQuYXNDZWxsKCkpLT5uZXh0KCkpKSkgeworICAgICAgICAgICAgbV9zdGF0ZS5zZXRG
b3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOgorICAgICAgICBmb3JOb2Rl
KG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgorICAgICAgICBmb3JOb2RlKG5vZGUp
Lm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dENs
b3N1cmVWYXI6CisgICAgICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMobm9kZS0+Y29kZU9yaWdpbik7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRCeUlkOgorICAgIGNh
c2UgR2V0QnlJZEZsdXNoOgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAg
ICBpZiAoIW5vZGUtPnByZWRpY3Rpb24oKSkgeworICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1Zh
bGlkKGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChp
c0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgeworICAgICAg
ICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
YmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBz
dGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLm1fdm0sIHN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVu
dGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pOworICAgICAgICAgICAgICAgIGlm
IChzdGF0dXMuaXNTaW1wbGUoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnQgdGhp
bmdzIHRoYXQgd2UgY2FuJ3QgaGFuZGxlIGFuZCB0aGF0IHRoZSBjb21wdXRlRm9yKCkgbWV0aG9k
CisgICAgICAgICAgICAgICAgICAgIC8vIGFib3ZlIHdvbid0IGJlIGFibGUgdG8gcmV0dXJuLgor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLnN0cnVjdHVyZVNldCgpLnNpemUoKSA9
PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFzdGF0dXMuY2hhaW4oKSk7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnNwZWNpZmlj
VmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3Jh
cGgsIHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBzdGF0dXMuc3RydWN0dXJlU2V0KCkp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRG
b3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUp
Lm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEFy
cmF5TGVuZ3RoOgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQg
aXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNBcnJheSwgc28gaXQncyBnb29kIGVu
b3VnaC4KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIENoZWNrRXhlY3V0YWJsZTogeworICAgICAgICAv
LyBGSVhNRTogV2UgY291bGQgdHJhY2sgZXhlY3V0YWJsZXMgaW4gQWJzdHJhY3RWYWx1ZSwgd2hp
Y2ggd291bGQgYWxsb3cgdXMgdG8gZ2V0IHJpZCBvZiB0aGVzZSBjaGVja3MKKyAgICAgICAgLy8g
bW9yZSB0aG9yb3VnaGx5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2MjAwCisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBlbGltaW5hdGUgdGhlc2UgZW50aXJl
bHkgaWYgd2Uga25vdyB0aGUgZXhhY3QgdmFsdWUgdGhhdCBmbG93cyBpbnRvIHRoaXMuCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDEKKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTog
eworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBz
dHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEFT
U0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91
bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KKworICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNl
dCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOworCisgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0
Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisKKyAgICAgICAgLy8gSWYgdGhpcyBzdHJ1
Y3R1cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxk
IGluCisgICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUg
Y29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKKyAgICAgICAgLy8gdHVybiB0aGlzIGludG8g
YSB3YXRjaHBvaW50IGluc3RlYWQuCisgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxl
U3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQorICAgICAgICAgICAgJiYgdmFsdWUubV9mdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgeworICAgICAgICAgICAgbV9zdGF0ZS5z
ZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGZpbHRlcih2YWx1ZSwgdmFsdWUu
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5zaW5nbGV0b24oKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKKyAgICAgICAgbV9z
dGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAgIGNhc2Ug
Rm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7CisgICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgLy8gSXQn
cyBvbmx5IHZhbGlkIHRvIGlzc3VlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCBp
ZiB3ZSBhbHJlYWR5CisgICAgICAgIC8vIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBjb3ZlcnMg
YSBzdXBlcnNldCBvZiB0aGUgc3RydWN0dXJlcyBrbm93biB0bworICAgICAgICAvLyBiZWxvbmcg
dG8gdGhlIHNldCBvZiBmdXR1cmUgc3RydWN0dXJlcyB0aGF0IHRoaXMgdmFsdWUgbWF5IGhhdmUu
CisgICAgICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSBpc3N1ZSBzaW5nbGV0b24gd2F0Y2hwb2lu
dHMgKHRoYXQgY2hlY2sgb25lIHN0cnVjdHVyZSkKKyAgICAgICAgLy8gYW5kIG91ciBmdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZSBzZXQgY2FuIG9ubHkgY29udGFpbiB6ZXJvLCBvbmUsIG9yIGFuCisg
ICAgICAgIC8vIGluZmluaXR5IG9mIHN0cnVjdHVyZXMuCisgICAgICAgIEFTU0VSVCgKKyAgICAg
ICAgICAgIHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1
cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKQorICAgICAgICAgICAgfHwgbV9ncmFwaC53YXRjaHBv
aW50cygpLnNob3VsZEFzc3VtZU1peGVkU3RhdGUobm9kZS0+c3RydWN0dXJlKCktPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0KCkpKTsKKyAgICAgICAgCisgICAgICAgIGZpbHRlcih2YWx1ZSwgbm9k
ZS0+c3RydWN0dXJlKCkpOworICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUp
OworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICBjYXNlIFBoYW50b21Q
dXRTdHJ1Y3R1cmU6CisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKSB7CisgICAgICAgICAgICBjbG9iYmVyU3RydWN0
dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
c2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJl
KTsKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgY2FzZSBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6
CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBK
UyB2YWx1ZS4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb3J3YXJkQ2hlY2tBcnJheToKKyAg
ICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVh
ZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgeworICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMs
IGJ1dCB0aGlzIGlzIGZvbGxvd2VkIGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQg
YWx3YXlzIGV4aXQsIHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2
ZXIgaGVyZS4KKyAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxk
MSgpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAg
IGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNo
aWxkMSgpLCBTcGVjQXJndW1lbnRzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNw
ZWNJbnQ4QXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDE2QXJyYXk6CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNJbnQxNkFy
cmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5
OgorICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjSW50MzJBcnJheSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICAg
ICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY1VpbnQ4QXJyYXkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAg
ICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjVWludDhDbGFtcGVkQXJyYXkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAg
ICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjVWludDE2QXJyYXkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAgICAgICAg
ZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjVWludDMyQXJyYXkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgICAgIGZpbHRl
cihub2RlLT5jaGlsZDEoKSwgU3BlY0Zsb2F0MzJBcnJheSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAgZmlsdGVyKG5v
ZGUtPmNoaWxkMSgpLCBTcGVjRmxvYXQ2NEFycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZpbHRlckFycmF5TW9kZXMo
bm9kZS0+Y2hpbGQxKCksIG5vZGUtPmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRl
cmluZygpKTsKKyAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXlpZnk6IHsKKyAgICAgICAgaWYgKG5vZGUt
PmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpKSkgeworICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChub2RlLT5h
cnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKKyAgICAgICAgICAgIHx8
IG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFnZUNvbnZlcnQpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBjbG9iYmVyU3RydWN0dXJl
cyhpbmRleEluQmxvY2spOworICAgICAgICBmaWx0ZXJBcnJheU1vZGVzKG5vZGUtPmNoaWxkMSgp
LCBub2RlLT5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CisgICAg
ICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6IHsKKyAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3RydWN0dXJlU2V0
IHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOworICAgICAgICBpZiAodmFsdWUubV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKKyAgICAgICAgICAgIHx8IHZhbHVlLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKKyAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CisgICAgICAgIGZpbHRl
cih2YWx1ZSwgc2V0KTsKKyAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZTogeworICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7CisgICAgICAgIGJyZWFrOyAKKyAg
ICB9CisgICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VU
b3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBQdXRC
eU9mZnNldDogeworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNl
IENoZWNrRnVuY3Rpb246IHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigp
KSB7CisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAg
ICAgICAgQVNTRVJUKHZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzISBXZSBjYW4gZG8g
YmV0dGVyLgorICAgICAgICBmaWx0ZXJCeVZhbHVlKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5mdW5j
dGlvbigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFB1dEJ5
SWQ6CisgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIFB1dEJ5SWRTdGF0
dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICBt
X2dyYXBoLm1fdm0sCisgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+Y29kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLAorICAgICAgICAgICAg
ICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldLAorICAg
ICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CisgICAgICAgICAgICBp
ZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpKSB7CisgICAgICAgICAgICAgICAgZmlsdGVyKG5v
ZGUtPmNoaWxkMSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CisgICAgICAg
ICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgc3RhdHVzLm5ld1N0cnVjdHVy
ZSgpKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwor
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICBjYXNlIEluOgorICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRldGVybWlu
ZSB3aGVuIHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBiYXNlZCBvbiBhYnN0cmFjdAor
ICAgICAgICAvLyB2YWx1ZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
PmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBH
ZXRHbG9iYWxWYXI6CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgorICAgIGNhc2Ug
VmFySW5qZWN0aW9uV2F0Y2hwb2ludDoKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dEdsb2JhbFZhcjoKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIC8vIFNhZGx5LCB3ZSBkb24n
dCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENoZWNrSGFzSW5zdGFuY2UKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEluc3RhbmNlT2Y6CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIC8vIEFnYWluLCBzYWRseSwgd2UgZG9u
J3QgcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBJbnN0YW5jZU9mCisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBQaGk6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgu
bV9mb3JtID09IFNTQSk7CisgICAgICAgIC8vIFRoZSBzdGF0ZSBvZiB0aGlzIG5vZGUgd291bGQg
aGF2ZSBhbHJlYWR5IGJlZW4gZGVjaWRlZC4KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAg
IGNhc2UgVXBzaWxvbjogeworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAg
IGZvck5vZGUobm9kZS0+cGhpKCkpID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCisgICAgY2FzZSBGbHVzaDoKKyAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICBjYXNl
IEJyZWFrcG9pbnQ6CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBDYWxs
OgorICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBGb3JjZU9TUkV4aXQ6CisgICAgY2FzZSBGb3J3YXJkRm9yY2VPU1JFeGl0OgorICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2Up
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1Rp
bWVyOgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgUGhhbnRvbToKKyAgICBjYXNlIElubGluZVN0YXJ0OgorICAg
IGNhc2UgQ291bnRFeGVjdXRpb246CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNl
IExhc3ROb2RlVHlwZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBtX3N0YXRlLmlzVmFsaWQoKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Citib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBp
bmRleEluQmxvY2spCit7CisgICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywg
bV9zdGF0ZS5ibG9jaygpLT5hdChpbmRleEluQmxvY2spKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWJzdHJhY3RTdGF0ZVR5cGU+Citib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3sKKyAgICBOb2RlKiBu
b2RlID0gbV9zdGF0ZS5ibG9jaygpLT5hdChpbmRleEluQmxvY2spOworICAgIGlmICghc3RhcnRF
eGVjdXRpbmcobm9kZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGV4ZWN1dGVF
ZGdlcyhub2RlKTsKKyAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBub2Rl
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Cit2b2lkIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyV29ybGQoCisgICAgY29u
c3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKQoreworICAg
IGNsb2JiZXJDYXB0dXJlZFZhcnMoY29kZU9yaWdpbik7CisgICAgY2xvYmJlclN0cnVjdHVyZXMo
aW5kZXhJbkJsb2NrKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+
Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyQ2Fw
dHVyZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCit7CisgICAgaWYgKGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGNvbnN0IEJpdFZlY3RvciYgY2FwdHVy
ZWRWYXJzID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IGNhcHR1cmVkVmFycy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgIGlmICghY2FwdHVyZWRWYXJzLnF1aWNrR2V0KGkpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5sb2NhbChpKS5tYWtlVG9wKCk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9jb2Rl
QmxvY2stPm1fbnVtVmFyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5p
c0NhcHR1cmVkKGkpKQorICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkubG9jYWwo
aSkubWFrZVRvcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IG1f
c3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykgeworICAgICAgICBp
ZiAobV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQoYXJndW1lbnRUb09wZXJhbmQoaSkpKQorICAgICAg
ICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChpKS5tYWtlVG9wKCk7CisgICAgfQor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVk
IGluZGV4SW5CbG9jaykKK3sKKyAgICBpZiAoIW1fc3RhdGUuaGF2ZVN0cnVjdHVyZXMoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleEluQmxvY2sgKyAxOyBpLS07
KQorICAgICAgICBmb3JOb2RlKG1fc3RhdGUuYmxvY2soKS0+YXQoaSkpLmNsb2JiZXJTdHJ1Y3R1
cmVzKCk7CisgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICBIYXNoU2V0
PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFk
LmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBtX3N0YXRl
LmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZC5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpCisgICAgICAgICAgICBmb3JOb2RlKCppdGVyKS5jbG9iYmVyU3RydWN0dXJl
cygpOworICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1i
ZXJPZkFyZ3VtZW50cygpOyBpLS07KQorICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3Vt
ZW50KGkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IG1fc3RhdGUu
dmFyaWFibGVzKCkubnVtYmVyT2ZMb2NhbHMoKTsgaS0tOykKKyAgICAgICAgbV9zdGF0ZS52YXJp
YWJsZXMoKS5sb2NhbChpKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIG1fc3RhdGUuc2V0SGF2
ZVN0cnVjdHVyZXModHJ1ZSk7CisgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKK3sKKyAg
ICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKKyAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NB
KSB7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbV9zdGF0ZS5ibG9j
aygpLT5zc2EtPmxpdmVBdEhlYWQuYmVnaW4oKTsKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0
ZXJhdG9yIGVuZCA9IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkLmVuZCgpOworICAg
ICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgTm9kZSogbm9k
ZSA9ICppdGVyOworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5v
ZGUpOworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZSwgIjoiLCB2YWx1ZSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0YXRlLmJs
b2NrKCktPnNpemUoKTsgKytpKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX3N0YXRlLmJsb2Nr
KCktPmF0KGkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZSk7
CisgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLCAiOiIsIHZhbHVlKTsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgorRmlsdHJhdGlvblJlc3VsdCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVyKAorICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICBpZiAodmFsdWUu
ZmlsdGVyKG1fZ3JhcGgsIHNldCkgPT0gRmlsdHJhdGlvbk9LKQorICAgICAgICByZXR1cm4gRmls
dHJhdGlvbk9LOworICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisgICAgcmV0dXJuIENv
bnRyYWRpY3Rpb247Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgor
RmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZmlsdGVyQXJyYXlNb2RlcygKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgQXJyYXlNb2RlcyBh
cnJheU1vZGVzKQoreworICAgIGlmICh2YWx1ZS5maWx0ZXJBcnJheU1vZGVzKGFycmF5TW9kZXMp
ID09IEZpbHRyYXRpb25PSykKKyAgICAgICAgcmV0dXJuIEZpbHRyYXRpb25PSzsKKyAgICBtX3N0
YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgIHJldHVybiBDb250cmFkaWN0aW9uOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK0ZpbHRyYXRpb25SZXN1bHQgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZpbHRlcigKKyAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkKK3sKKyAgICBpZiAodmFsdWUuZmls
dGVyKHR5cGUpID09IEZpbHRyYXRpb25PSykKKyAgICAgICAgcmV0dXJuIEZpbHRyYXRpb25PSzsK
KyAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgIHJldHVybiBDb250cmFkaWN0aW9u
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK0ZpbHRyYXRpb25S
ZXN1bHQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZpbHRlckJ5VmFs
dWUoCisgICAgQWJzdHJhY3RWYWx1ZSYgYWJzdHJhY3RWYWx1ZSwgSlNWYWx1ZSBjb25jcmV0ZVZh
bHVlKQoreworICAgIGlmIChhYnN0cmFjdFZhbHVlLmZpbHRlckJ5VmFsdWUoY29uY3JldGVWYWx1
ZSkgPT0gRmlsdHJhdGlvbk9LKQorICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOworICAgIG1f
c3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9u
IDE1MjgyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjAxMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkK
LQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKLSNp
bmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCi0jaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgotI2luY2x1
ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKLSNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIKLQotbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1BYnN0cmFjdFN0YXRlOjpBYnN0cmFjdFN0YXRl
KEdyYXBoJiBncmFwaCkKLSAgICA6IG1fY29kZUJsb2NrKGdyYXBoLm1fY29kZUJsb2NrKQotICAg
ICwgbV9ncmFwaChncmFwaCkKLSAgICAsIG1fdmFyaWFibGVzKG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIGdyYXBoLm1fbG9jYWxWYXJzKQotICAgICwgbV9ibG9jaygwKQotICAgICwgbV9j
dXJyZW50Tm9kZSgwKQotewotfQotCi1BYnN0cmFjdFN0YXRlOjp+QWJzdHJhY3RTdGF0ZSgpIHsg
fQotCi12b2lkIEFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpY0Jsb2NrKiBiYXNp
Y0Jsb2NrKQotewotICAgIEFTU0VSVCghbV9ibG9jayk7Ci0gICAgCi0gICAgQVNTRVJUKGJhc2lj
QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpID09IGJhc2ljQmxvY2stPnZh
bHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gYmFzaWNCbG9jay0+dmFsdWVzQXRUYWls
Lm51bWJlck9mTG9jYWxzKCkpOwotICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhl
YWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVy
T2ZMb2NhbHMoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBiYXNpY0Jsb2Nr
LT5zaXplKCk7IGkrKykKLSAgICAgICAgZm9yTm9kZShiYXNpY0Jsb2NrLT5hdChpKSkuY2xlYXIo
KTsKLQotICAgIG1fdmFyaWFibGVzID0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOwotICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFy
aWFibGVzLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICBpZiAobV92YXJpYWJs
ZXMuYXJndW1lbnQoaSkuaGFzQ2xvYmJlcmFibGVTdGF0ZSgpKSB7Ci0gICAgICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMubnVtYmVyT2ZMb2NhbHMo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3ZhcmlhYmxlcy5sb2NhbChpKS5oYXNDbG9iYmVyYWJs
ZVN0YXRlKCkpIHsKLSAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fZ3JhcGgubV9m
b3JtID09IFNTQSkgewotICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRl
cmF0b3IgaXRlciA9IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLmJlZ2luKCk7Ci0gICAg
ICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+OjppdGVyYXRvciBlbmQgPSBiYXNpY0Js
b2NrLT5zc2EtPnZhbHVlc0F0SGVhZC5lbmQoKTsKLSAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGZvck5vZGUoaXRlci0+a2V5KSA9IGl0ZXItPnZhbHVl
OwotICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLmhhc0Nsb2JiZXJhYmxlU3RhdGUoKSkKLSAg
ICAgICAgICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICBiYXNpY0Jsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gZmFsc2U7Ci0gICAgYmFz
aWNCbG9jay0+Y2ZhSGFzVmlzaXRlZCA9IHRydWU7Ci0gICAgbV9ibG9jayA9IGJhc2ljQmxvY2s7
Ci0gICAgbV9pc1ZhbGlkID0gdHJ1ZTsKLSAgICBtX2ZvdW5kQ29uc3RhbnRzID0gZmFsc2U7Ci0g
ICAgbV9icmFuY2hEaXJlY3Rpb24gPSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uOwotICAgIG1fY3Vy
cmVudE5vZGUgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVzKEhhc2hNYXA8Tm9k
ZSosIEFic3RyYWN0VmFsdWU+JiB2YWx1ZXMsIEhhc2hTZXQ8Tm9kZSo+JiBsaXZlKQotewotICAg
IHZhbHVlcy5jbGVhcigpOwotICAgIAotICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVy
ID0gbGl2ZS5iZWdpbigpOwotICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBsaXZl
LmVuZCgpOwotICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICB2YWx1ZXMu
YWRkKCppdGVyLCBBYnN0cmFjdFZhbHVlKCkpOwotfQotCi12b2lkIEFic3RyYWN0U3RhdGU6Omlu
aXRpYWxpemUoKQotewotICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJsb2NrKDApOwot
ICAgIHJvb3QtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOwotICAgIHJvb3QtPmNmYUhhc1Zpc2l0
ZWQgPSBmYWxzZTsKLSAgICByb290LT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCk7ICsraSkgewotICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAg
ICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGUgPSBy
b290LT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSk7Ci0gICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IFNldEFyZ3VtZW50KTsKLSAgICAgICAgaWYgKCFub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKLSAgICAgICAgICAgIHJvb3QtPnZhbHVl
c0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9Ci0g
ICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRp
Y3Rpb24oKTsKLSAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAg
ICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXRUeXBlKFNwZWNJbnQz
Mik7Ci0gICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQot
ICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0Jv
b2xlYW4pOwotICAgICAgICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkK
LSAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXRUeXBlKFNwZWND
ZWxsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGkpLm1ha2VUb3AoKTsKLSAgICAgICAgCi0gICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5h
cmd1bWVudChpKS5jbGVhcigpOwotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJv
b3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKLSAgICAgICAgTm9kZSog
bm9kZSA9IHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKTsKLSAgICAgICAgaWYgKG5vZGUg
JiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKLSAgICAgICAgICAg
IHJvb3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5tYWtlVG9wKCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOwotICAgICAgICBy
b290LT52YWx1ZXNBdFRhaWwubG9jYWwoaSkuY2xlYXIoKTsKLSAgICB9Ci0gICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAxIDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7
ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAgIGJsb2NrLT5j
ZmFTaG91bGRSZXZpc2l0ID0gZmFsc2U7Ci0gICAgICAgIGJsb2NrLT5jZmFIYXNWaXNpdGVkID0g
ZmFsc2U7Ci0gICAgICAgIGJsb2NrLT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1
bWVudHMoKTsgKytpKSB7Ci0gICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGkpLmNsZWFyKCk7Ci0gICAgICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkp
LmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9j
ay0+dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewotICAgICAgICAgICAgYmxv
Y2stPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOwotICAgICAgICAgICAgYmxvY2stPnZh
bHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghYmxv
Y2stPmlzT1NSVGFyZ2V0KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChibG9j
ay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlIHZhbHVlOwotICAgICAgICAgICAgdmFsdWUuc2V0TW9zdFNwZWNpZmlj
KG1fZ3JhcGgsIG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV0pOwotICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKLSAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChvcGVy
YW5kKS5tZXJnZSh2YWx1ZSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBJbml0aWFsaXppbmcgQmxvY2sgIyV1LCBv
cGVyYW5kIHIlZCwgdG8gIiwgYmxvY2tJbmRleCwgb3BlcmFuZCk7Ci0gICAgICAgICAgICBibG9j
ay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCkuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwot
ICAgICAgICAgICAgZGF0YUxvZ0YoIlxuIik7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBi
bG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChtX2dyYXBoLm1f
Zm9ybSA9PSBTU0EpIHsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAg
ICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3NhLT52YWx1ZXNBdEhlYWQsIGJsb2NrLT5zc2EtPmxp
dmVBdEhlYWQpOwotICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3NhLT52YWx1ZXNB
dFRhaWwsIGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1i
b29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNb2RlIG1lcmdlTW9kZSkKLXsK
LSAgICBBU1NFUlQobV9ibG9jayk7Ci0gICAgCi0gICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Js
b2NrOyAvLyBTYXZlIHRoZSBibG9jayBmb3Igc3VjY2Vzc29yIG1lcmdpbmcuCi0gICAgCi0gICAg
YmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0gbV9mb3VuZENvbnN0YW50czsKLSAgICBibG9jay0+
Y2ZhRGlkRmluaXNoID0gbV9pc1ZhbGlkOwotICAgIGJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24g
PSBtX2JyYW5jaERpcmVjdGlvbjsKLSAgICAKLSAgICBpZiAoIW1faXNWYWxpZCkgewotICAgICAg
ICByZXNldCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
Y2hhbmdlZCA9IGZhbHNlOwotICAgIAotICAgIGlmIChtZXJnZU1vZGUgIT0gRG9udE1lcmdlIHx8
ICFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgc3dpdGNoIChtX2dyYXBoLm1fZm9ybSkgewot
ICAgICAgICBjYXNlIFRocmVhZGVkQ1BTOiB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBhcmd1
bWVudCA9IDA7IGFyZ3VtZW50IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3Vt
ZW50cygpOyArK2FyZ3VtZW50KSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUg
Zm9yIGFyZ3VtZW50ICV6dS5cbiIsIGFyZ3VtZW50KTsKLSNlbmRpZgotICAgICAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWls
KGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVudCksIGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewotI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigi
ICAgICAgICBNZXJnaW5nIHN0YXRlIGZvciBsb2NhbCAlenUuXG4iLCBsb2NhbCk7Ci0jZW5kaWYK
LSAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJsb2NrLT52YWx1
ZXNBdFRhaWwubG9jYWwobG9jYWwpOwotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VT
dGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+
dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU1NBOiB7Ci0g
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdFRhaWwuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBibG9jay0+dmFsdWVzQXRUYWls
W2ldLm1lcmdlKG1fdmFyaWFibGVzW2ldKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgSGFz
aFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBibG9jay0+c3NhLT5saXZlQXRUYWlsLmJlZ2lu
KCk7Ci0gICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gYmxvY2stPnNz
YS0+bGl2ZUF0VGFpbC5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOwotICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsLmZpbmQobm9kZSktPnZhbHVl
Lm1lcmdlKGZvck5vZGUobm9kZSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICBBU1NFUlQobWVyZ2VNb2RlICE9IERvbnRNZXJnZSB8fCAhY2hhbmdlZCk7Ci0gICAgCi0jaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgIGRhdGFMb2dGKCIgICAg
ICAgIEJyYW5jaCBkaXJlY3Rpb24gPSAlc1xuIiwgYnJhbmNoRGlyZWN0aW9uVG9TdHJpbmcobV9i
cmFuY2hEaXJlY3Rpb24pKTsKLSNlbmRpZgotICAgIAotICAgIHJlc2V0KCk7Ci0gICAgCi0gICAg
aWYgKG1lcmdlTW9kZSAhPSBNZXJnZVRvU3VjY2Vzc29ycykKLSAgICAgICAgcmV0dXJuIGNoYW5n
ZWQ7Ci0gICAgCi0gICAgcmV0dXJuIG1lcmdlVG9TdWNjZXNzb3JzKGJsb2NrKTsKLX0KLQotdm9p
ZCBBYnN0cmFjdFN0YXRlOjpyZXNldCgpCi17Ci0gICAgbV9ibG9jayA9IDA7Ci0gICAgbV9pc1Zh
bGlkID0gZmFsc2U7Ci0gICAgbV9icmFuY2hEaXJlY3Rpb24gPSBJbnZhbGlkQnJhbmNoRGlyZWN0
aW9uOwotICAgIG1fY3VycmVudE5vZGUgPSAwOwotfQotCi1BYnN0cmFjdFN0YXRlOjpCb29sZWFu
UmVzdWx0IEFic3RyYWN0U3RhdGU6OmJvb2xlYW5SZXN1bHQoTm9kZSogbm9kZSwgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUpCi17Ci0gICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0gdmFsdWUudmFsdWUoKTsK
LSAgICBpZiAoY2hpbGRDb25zdCkgewotICAgICAgICBpZiAoY2hpbGRDb25zdC50b0Jvb2xlYW4o
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2xvYmFsRXhl
YygpKSkKLSAgICAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5VHJ1ZTsKLSAgICAgICAgcmV0dXJu
IERlZmluaXRlbHlGYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBOZXh0IGNoZWNrIGlmIHdlIGNhbiBm
b2xkIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMgYW4gb2JqZWN0IG9yIHN0cmlu
ZyBhbmQgZG9lcyBub3QgZXF1YWwgdW5kZWZpbmVkLgotICAgIGlmIChpc0NlbGxTcGVjdWxhdGlv
bih2YWx1ZS5tX3R5cGUpCi0gICAgICAgICYmIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
Lmhhc1NpbmdsZXRvbigpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUu
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0gICAgICAgIGlmICghc3RydWN0
dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+Y29kZU9yaWdpbikpCi0gICAgICAgICAgICAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpICE9IFN0cmluZ1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gRGVmaW5pdGVseVRydWU7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBVbmtub3duQm9vbGVhblJlc3VsdDsKLX0KLQotYm9v
bCBBYnN0cmFjdFN0YXRlOjpzdGFydEV4ZWN1dGluZyhOb2RlKiBub2RlKQotewotICAgIEFTU0VS
VChtX2Jsb2NrKTsKLSAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICAKLSAgICBtX2RpZENsb2Ji
ZXIgPSBmYWxzZTsKLSAgICAKLSAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAKLSAg
ICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgbV9jdXJyZW50Tm9kZSA9
IDA7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgbV9jdXJyZW50Tm9k
ZSA9IG5vZGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQWJzdHJhY3RTdGF0ZTo6c3Rh
cnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKQotewotICAgIHJldHVybiBzdGFydEV4
ZWN1dGluZyhtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spKTsKLX0KLQotdm9pZCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlRWRnZXMoTm9kZSogbm9kZSkKLXsKLSAgICBERkdfTk9ERV9ET19UT19DSElM
RFJFTihtX2dyYXBoLCBub2RlLCBmaWx0ZXJFZGdlQnlVc2UpOwotfQotCi12b2lkIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGVFZGdlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spCi17Ci0gICAgZXhlY3V0
ZUVkZ2VzKG1fYmxvY2stPmF0KGluZGV4SW5CbG9jaykpOwotfQotCi12b2lkIEFic3RyYWN0U3Rh
dGU6OnZlcmlmeUVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
KGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSk7
Ci19Ci0KLXZvaWQgQWJzdHJhY3RTdGF0ZTo6dmVyaWZ5RWRnZXMoTm9kZSogbm9kZSkKLXsKLSAg
ICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCB2ZXJpZnlFZGdlKTsKLX0K
LQotYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleEluQmxv
Y2ssIE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCi0gICAgICAgIHZl
cmlmeUVkZ2VzKG5vZGUpOwotICAgIAotICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgIGNh
c2UgSlNDb25zdGFudDoKLSAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAgIGNhc2UgUGhhbnRv
bUFyZ3VtZW50czogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX2dyYXBo
LnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAg
ICAKLSAgICBjYXNlIElkZW50aXR5OiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBj
YXNlIEdldEFyZ3VtZW50OiB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
OwotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV92YXJpYWJsZXMu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZS5pc1RvcCgp
KTsKLSAgICAgICAgRmlsdHJhdGlvblJlc3VsdCByZXN1bHQgPQotICAgICAgICAgICAgdmFsdWUu
ZmlsdGVyKHR5cGVGaWx0ZXJGb3IodXNlS2luZEZvcih2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkp
KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSBGaWx0cmF0aW9uT0sp
OwotICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICAgICAgICAgIAotICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
LSAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpID09IFNwZWNOb25l
KSB7Ci0gICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3ZhcmlhYmxlcy5vcGVy
YW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7Ci0gICAgICAgIGlmICghdmFyaWFibGVB
Y2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFy
KCkpCi0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKLSAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwotICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7Ci0gICAgICAgIEFi
c3RyYWN0VmFsdWUgdmFsdWUgPSBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9j
YWwoKSk7Ci0gICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQotICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7Ci0gICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1f
dmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIE1vdkhpbnQ6Ci0g
ICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKLSAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBkbyBh
bnl0aGluZy4gQSBNb3ZIaW50IGlzIGVmZmVjdGl2ZWx5IGEgcHJvbWlzZSB0aGF0IHRoZSBTZXRM
b2NhbAotICAgICAgICAvLyB3YXMgZGVhZC4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAg
ICAKLSAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgY2FzZSBT
ZXRBcmd1bWVudDoKLSAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50
cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICBjYXNlIEJpdEFuZDoKLSAgICBjYXNlIEJpdE9yOgotICAgIGNhc2UgQml0WG9y
OgotICAgIGNhc2UgQml0UlNoaWZ0OgotICAgIGNhc2UgQml0TFNoaWZ0OgotICAgIGNhc2UgQml0
VVJTaGlmdDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc0ludDMyKCkg
JiYgcmlnaHQuaXNJbnQzMigpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGEgPSBsZWZ0LmFzSW50
MzIoKTsKLSAgICAgICAgICAgIGludDMyX3QgYiA9IHJpZ2h0LmFzSW50MzIoKTsKLSAgICAgICAg
ICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgQml0QW5kOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhICYgYikpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYSB8IGIpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQml0WG9yOgotICAgICAgICAgICAg
ICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIF4gYikp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6Ci0g
ICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1Zh
bHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgICAgICBjb25zdGFu
dFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYSA8PCBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYikpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
Qml0VVJTaGlmdDoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0
YW50KG5vZGUsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+IHN0YXRpY19jYXN0
PHVpbnQzMl90PihiKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsKLSAgICAgICAgICAgICAgICBtX2ZvdW5kQ29u
c3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7Ci0g
ICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwot
ICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgQVNT
RVJUKGNoaWxkLmlzSW50MzIoKSk7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9k
ZSwgSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSkpIHsKLSAgICAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBpZiAoIW5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKLSAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgY2FzZSBEb3VibGVBc0ludDMyOiB7Ci0gICAgICAg
IEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAg
ICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgZG91YmxlIGFz
RG91YmxlID0gY2hpbGQuYXNOdW1iZXIoKTsKLSAgICAgICAgICAgIGludDMyX3QgYXNJbnQgPSBK
U0M6OnRvSW50MzIoYXNEb3VibGUpOwotICAgICAgICAgICAgaWYgKGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KGFzSW50KSkgPT0gYml0d2lzZV9jYXN0PGludDY0X3Q+
KGFzRG91YmxlKQotICAgICAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFs
dWUoYXNJbnQpKSkgewotICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShT
cGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgICAgICAKLSAgICBjYXNl
IFZhbHVlVG9JbnQzMjogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkp
IHsKLSAgICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7Ci0gICAgICAgICAgICBpZiAoY2hp
bGQuaXNJbnQzMigpKQotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29u
c3RhbnQobm9kZSwgY2hpbGQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNv
bnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShKU0M6OnRvSW50MzIo
Y2hpbGQuYXNEb3VibGUoKSkpKTsKLSAgICAgICAgICAgIGlmIChjb25zdGFudFdhc1NldCkgewot
ICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
ICAgICAKLSAgICBjYXNlIEludDMyVG9Eb3VibGU6Ci0gICAgY2FzZSBGb3J3YXJkSW50MzJUb0Rv
dWJsZTogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
dmFsdWUoKTsKLSAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAg
ICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3Vi
bGUsIGNoaWxkLmFzTnVtYmVyKCkpKSkgewotICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNJbnQz
MlNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZVJlYWwpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBWYWx1ZUFkZDoKLSAgICBjYXNlIEFyaXRo
QWRkOiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52
YWx1ZSgpOwotICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYg
cmlnaHQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNW
YWx1ZShsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJlcigpKSkpIHsKLSAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBJ
bnQzMlVzZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOwot
ICAgICAgICAgICAgaWYgKCFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZs
YWdzKCkpKQotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOdW1iZXJVc2U6Ci0gICAgICAgICAgICBpZiAoaXNS
ZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQotICAg
ICAgICAgICAgICAgICYmIGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNEb3VibGVSZWFsKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gVmFsdWVB
ZGQpOwotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY1N0cmluZyB8IFNw
ZWNJbnQzMiB8IFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIE1ha2VSb3BlOiB7Ci0gICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgICAgICAKLSAgICBjYXNl
IEFyaXRoU3ViOiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS52YWx1ZSgpOwotICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVy
KCkgJiYgcmlnaHQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9k
ZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgLSByaWdodC5hc051bWJlcigpKSkpIHsKLSAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKLSAgICAgICAg
Y2FzZSBJbnQzMlVzZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50
MzIpOwotICAgICAgICAgICAgaWYgKCFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRo
Tm9kZUZsYWdzKCkpKQotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOdW1iZXJVc2U6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgICAgIAotICAgIGNhc2UgQXJpdGhOZWdhdGU6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlmIChjaGlsZCAmJiBj
aGlsZC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1Zh
bHVlKC1jaGlsZC5hc051bWJlcigpKSkpIHsKLSAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMlVzZToKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYg
KCFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQotICAgICAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBOdW1iZXJVc2U6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQXJp
dGhNdWw6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
dmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
LnZhbHVlKCk7Ci0gICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAm
JiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBK
U1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAqIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewotICAgICAgICAg
ICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewotICAgICAgICBjYXNl
IEludDMyVXNlOgotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7
Ci0gICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2Rl
RmxhZ3MoKSkKLSAgICAgICAgICAgICAgICB8fCAhbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhu
b2RlLT5hcml0aE5vZGVGbGFncygpKSkKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTnVtYmVyVXNlOgotICAg
ICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSkKLSAgICAgICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0VHlwZShTcGVjRG91YmxlUmVhbCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIEFyaXRoRGl2OgotICAgIGNhc2UgQXJpdGhNaW46
Ci0gICAgY2FzZSBBcml0aE1heDoKLSAgICBjYXNlIEFyaXRoTW9kOiB7Ci0gICAgICAgIEpTVmFs
dWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFs
dWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwotICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBBcml0aE1vZCAmJiByaWdodCAmJiByaWdodC5pc051bWJlcigpICYmIHJp
Z2h0LmFzTnVtYmVyKCkgPT0gMQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwg
SlNWYWx1ZSgwKSkpIHsKLSAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYg
bGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGRvdWJs
ZSBhID0gbGVmdC5hc051bWJlcigpOwotICAgICAgICAgICAgZG91YmxlIGIgPSByaWdodC5hc051
bWJlcigpOwotICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsKLSAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBBcml0aERpdjoKLSAgICAgICAg
ICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYSAv
IGIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNaW46
Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBK
U1ZhbHVlKGEgPCBiID8gYSA6IChiIDw9IGEgPyBiIDogYSArIGIpKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICAgICAgICAgIGNv
bnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhID4gYiA/IGEgOiAo
YiA+PSBhID8gYiA6IGEgKyBiKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBBcml0aE1vZDoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGUsIEpTVmFsdWUoZm1vZChhLCBiKSkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
Y29uc3RhbnRXYXNTZXQpIHsKLSAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMy
VXNlOgotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgTnVtYmVyVXNlOgotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNEb3VibGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgY2FzZSBB
cml0aEFiczogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAg
ICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoZmFicyhjaGlsZC5hc051bWJl
cigpKSkpKSB7Ci0gICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOdW1iZXJVc2U6Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgICAgICAgICAKLSAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICBKU1ZhbHVl
IGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGNo
aWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoc3FydChjaGlsZC5hc051bWJlcigpKSkpKSB7Ci0gICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgICAgICAgICAgCi0gICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgIGJvb2wg
ZGlkU2V0Q29uc3RhbnQgPSBmYWxzZTsKLSAgICAgICAgc3dpdGNoIChib29sZWFuUmVzdWx0KG5v
ZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewotICAgICAgICBjYXNlIERlZmluaXRlbHlU
cnVlOgotICAgICAgICAgICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlTZXRDb25zdGFudChub2RlLCBq
c0Jvb2xlYW4oZmFsc2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERlZmlu
aXRlbHlGYWxzZToKLSAgICAgICAgICAgIGRpZFNldENvbnN0YW50ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZSwganNCb29sZWFuKHRydWUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRpZFNldENv
bnN0YW50KSB7Ci0gICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7Ci0gICAgICAgIGNhc2UgQm9vbGVhblVzZToKLSAgICAgICAgY2FzZSBJbnQzMlVz
ZToKLSAgICAgICAgY2FzZSBOdW1iZXJVc2U6Ci0gICAgICAgIGNhc2UgVW50eXBlZFVzZToKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6Ci0gICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNCb29sZWFuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNl
IElzVW5kZWZpbmVkOgotICAgIGNhc2UgSXNCb29sZWFuOgotICAgIGNhc2UgSXNOdW1iZXI6Ci0g
ICAgY2FzZSBJc1N0cmluZzoKLSAgICBjYXNlIElzT2JqZWN0OgotICAgIGNhc2UgSXNGdW5jdGlv
bjogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAgICAgICAgICAgbm9kZS0+b3AoKSA9
PSBJc1VuZGVmaW5lZAotICAgICAgICAgICAgJiYgbV9ncmFwaC5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChub2RlLT5jb2RlT3JpZ2luKSk7Ci0gICAgICAgIEpT
VmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBp
ZiAoY2hpbGQpIHsKLSAgICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6Ci0g
ICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jv
b2xlYW4oCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkLmlzQ2VsbCgpCi0gICAgICAgICAgICAg
ICAgICAgID8gY2hpbGQuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpCi0gICAg
ICAgICAgICAgICAgICAgIDogY2hpbGQuaXNVbmRlZmluZWQoKSkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJc0Jvb2xlYW46Ci0gICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oY2hpbGQuaXNCb29s
ZWFuKCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSXNOdW1i
ZXI6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
LCBqc0Jvb2xlYW4oY2hpbGQuaXNOdW1iZXIoKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBJc1N0cmluZzoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1Nl
dCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihpc0pTU3RyaW5nKGNoaWxkKSkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJc09iamVjdDoKLSAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQuaXNOdWxsKCkgfHwgIWNoaWxkLmlzT2JqZWN0KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBq
c0Jvb2xlYW4oY2hpbGQuaXNOdWxsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7Ci0gICAgICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jv
b2xlYW4pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFR5cGVPZjogewotICAg
ICAgICBWTSogdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IGFic3RyYWN0Q2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKGNo
aWxkKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHR5cGVTdHJpbmcgPSBqc1R5cGVTdHJpbmdGb3JW
YWx1ZSgqdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiks
IGNoaWxkKTsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB0eXBlU3RyaW5n
KSkgewotICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVy
U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5
U2V0Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSkpIHsKLSAg
ICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNOdW1iZXIpOwotICAgICAg
ICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24o
YWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQo
bm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAg
ICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcpOwotICAgICAgICAgICAgICAgIG1f
Zm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgaWYgKGlzRmluYWxPYmplY3RTcGVjdWxhdGlvbihhYnN0cmFj
dENoaWxkLm1fdHlwZSkgfHwgaXNBcnJheVNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBl
KSB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewotICAg
ICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3Mub2JqZWN0
U3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVj
RmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjQXJndW1lbnRzKTsKLSAgICAgICAgICAgICAg
ICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uU3BlY3VsYXRpb24oYWJzdHJh
Y3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwg
dm0tPnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZp
bHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0Z1bmN0aW9uKTsKLSAgICAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihhYnN0cmFjdENoaWxk
Lm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB2bS0+c21h
bGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAgICBmaWx0ZXIobm9k
ZS0+Y2hpbGQxKCksIFNwZWNCb29sZWFuKTsKLSAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAg
ICAgIGNhc2UgU3RyaW5nVXNlOgotICAgICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
VW50eXBlZFVzZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92
bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAg
ICAgICAKLSAgICBjYXNlIENvbXBhcmVMZXNzOgotICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAg
ICBjYXNlIENvbXBhcmVHcmVhdGVyOgotICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICBj
YXNlIENvbXBhcmVFcToKLSAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OiB7Ci0gICAgICAgIGJv
b2wgY29uc3RhbnRXYXNTZXQgPSBmYWxzZTsKLQotICAgICAgICBKU1ZhbHVlIGxlZnRDb25zdCA9
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHRD
b25zdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlmIChsZWZ0
Q29uc3QgJiYgcmlnaHRDb25zdCkgewotICAgICAgICAgICAgaWYgKGxlZnRDb25zdC5pc051bWJl
cigpICYmIHJpZ2h0Q29uc3QuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgICAgIGRvdWJsZSBh
ID0gbGVmdENvbnN0LmFzTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGIgPSByaWdo
dENvbnN0LmFzTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA8IGIpKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21wYXJl
TGVzc0VxOgotICAgICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0
YW50KG5vZGUsIGpzQm9vbGVhbihhIDw9IGIpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA+IGIp
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21w
YXJlR3JlYXRlckVxOgotICAgICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihhID49IGIpKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGEgPT0g
YikpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghY29uc3RhbnRXYXNTZXQgJiYgbm9kZS0+b3AoKSA9PSBDb21w
YXJlRXEKLSAgICAgICAgICAgICAgICAmJiBsZWZ0Q29uc3QuaXNTdHJpbmcoKSAmJiByaWdodENv
bnN0LmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBhID0g
YXNTdHJpbmcobGVmdENvbnN0KS0+dHJ5R2V0VmFsdWVJbXBsKCk7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nSW1wbCogYiA9IGFzU3RyaW5nKHJpZ2h0Q29uc3QpLT50cnlHZXRWYWx1ZUlt
cGwoKTsKLSAgICAgICAgICAgICAgICBpZiAoYSAmJiBiKQotICAgICAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihXVEY6OmVxdWFs
KGEsIGIpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
ICghY29uc3RhbnRXYXNTZXQgJiYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxQ29uc3RhbnQgfHwg
bm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBs
ZWZ0VHlwZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZTsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHJpZ2h0VHlwZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZTsK
LSAgICAgICAgICAgIGlmICgoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnRUeXBlKSAmJiBpc090aGVy
U3BlY3VsYXRpb24ocmlnaHRUeXBlKSkKLSAgICAgICAgICAgICAgICB8fCAoaXNPdGhlclNwZWN1
bGF0aW9uKGxlZnRUeXBlKSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHRUeXBlKSkpCi0gICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oZmFsc2UpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnN0YW50V2Fz
U2V0KSB7Ci0gICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0Jvb2xlYW4pOwotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBpcyBvdmVybHkgY29u
c2VydmF0aXZlLiBCdXQgdGhlIG9ubHkgdGhpbmcgdGhpcyBwcmV2ZW50cyBpcyBzdG9yZSBlbGlt
aW5hdGlvbiwKLSAgICAgICAgLy8gYW5kIGhvdyBsaWtlbHkgaXMgaXQsIHJlYWxseSwgdGhhdCB5
b3UnbGwgaGF2ZSByZWR1bmRhbnQgc3RvcmVzIGFjcm9zcyBhIGNvbXBhcmlzb24KLSAgICAgICAg
Ly8gb3BlcmF0aW9uPyBDb21wYXJpc29uIG9wZXJhdGlvbnMgYXJlIHR5cGljYWxseSBhdCB0aGUg
ZW5kIG9mIGJhc2ljIGJsb2Nrcywgc28KLSAgICAgICAgLy8gdW5sZXNzIHdlIGhhdmUgZ2xvYmFs
IHN0b3JlIGVsaW1pbmF0aW9uIChzdXBlciB1bmxpa2VseSBnaXZlbiBob3cgdW5wcm9maXRhYmxl
IHRoYXQKLSAgICAgICAgLy8gb3B0aW1pemF0aW9uIGlzIHRvIGJlZ2luIHdpdGgpLCB5b3UgYXJl
bid0IGdvaW5nIHRvIGJlIHdhbnRpbmcgdG8gc3RvcmUgZWxpbWluYXRlCi0gICAgICAgIC8vIGFj
cm9zcyBhbiBlcXVhbGl0eSBvcC4KLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgY2FzZSBDb21wYXJlU3RyaWN0
RXE6Ci0gICAgY2FzZSBDb21wYXJlU3RyaWN0RXFDb25zdGFudDogewotICAgICAgICBOb2RlKiBs
ZWZ0Tm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgTm9kZSogcmlnaHROb2Rl
ID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOwotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2Rl
KGxlZnROb2RlKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShyaWdo
dE5vZGUpLnZhbHVlKCk7Ci0gICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAg
ICBpZiAobGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKLSAgICAgICAgICAgICAg
ICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4obGVmdC5hc051bWJlcigpID09IHJp
Z2h0LmFzTnVtYmVyKCkpKSkgewotICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGxlZnQuaXNTdHJpbmcoKSAmJiByaWdodC5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nSW1wbCogYSA9IGFzU3RyaW5nKGxlZnQpLT50cnlHZXRWYWx1ZUltcGwo
KTsKLSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBiID0gYXNTdHJpbmcocmlnaHQp
LT50cnlHZXRWYWx1ZUltcGwoKTsKLSAgICAgICAgICAgICAgICBpZiAoYSAmJiBiICYmIHRyeVNl
dENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihXVEY6OmVxdWFsKGEsIGIpKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwotICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOyAvLyBUaGlzIGlzIG92ZXJseSBjb25zZXJ2YXRpdmUuCi0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgU3RyaW5n
Q2hhckF0OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChtX2dyYXBoLCBtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlv
bnM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6Ci0gICAgICAgIGNhc2UgQXJyYXk6
OlVuZGVjaWRlZDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAgICAg
ICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAg
ICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewotICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSB3YXRjaHBvaW50IHdhcyBzdGlsbCB2YWxpZCB3ZSBjb3VsZCB0b3Rh
bGx5IHNldCB0aGlzIHRvIGJlCi0gICAgICAgICAgICAgICAgLy8gU3BlY1N0cmluZyB8IFNwZWNP
dGhlci4gRXhjZXB0IHRoYXQgd2UnZCBoYXZlIHRvIGJlIGNhcmVmdWwuIElmIHdlCi0gICAgICAg
ICAgICAgICAgLy8gdGVzdGVkIHRoZSB3YXRjaHBvaW50IHN0YXRlIGhlcmUgdGhlbiBpdCBjb3Vs
ZCBjaGFuZ2UgYnkgdGhlIHRpbWUKLSAgICAgICAgICAgICAgICAvLyB3ZSBnb3QgdG8gdGhlIGJh
Y2tlbmQuIFNvIHRvIGRvIHRoaXMgcmlnaHQsIHdlJ2QgaGF2ZSB0byBnZXQgdGhlCi0gICAgICAg
ICAgICAgICAgLy8gZml4dXAgcGhhc2UgdG8gY2hlY2sgdGhlIHdhdGNocG9pbnQgc3RhdGUgYW5k
IHRoZW4gYmFrZSBpbnRvIHRoZQotICAgICAgICAgICAgICAgIC8vIEdldEJ5VmFsIG9wZXJhdGlv
biB0aGUgZmFjdCB0aGF0IHdlJ3JlIHVzaW5nIGEgd2F0Y2hwb2ludCwgdXNpbmcKLSAgICAgICAg
ICAgICAgICAvLyBzb21ldGhpbmcgbGlrZSBBcnJheTo6U2FuZUNoYWluIChleGNlcHQgbm90IHF1
aXRlLCBiZWNhdXNlIHRoYXQKLSAgICAgICAgICAgICAgICAvLyBpbXBsaWVzIGFuIGluLWJvdW5k
cyBhY2Nlc3MpLiBOb25lIG9mIHRoaXMgZmVlbHMgbGlrZSBpdCdzIHdvcnRoIGl0LAotICAgICAg
ICAgICAgICAgIC8vIHNvIHdlJ3JlIGdvaW5nIHdpdGggVE9QIGZvciBub3cuCi0gICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX2dyYXBoLm1fdm0uc3RyaW5n
U3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGlm
IChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGVSZWFsKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJh
eTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50
MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQzMkFycmF5OgotICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3Bl
Y0RvdWJsZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQz
MkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICAgICAgICAgIAotICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgY2FzZSBQdXRC
eVZhbEFsaWFzOiB7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIHN3
aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgewotICAgICAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOgotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMo
KSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0
QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3Jl
VG9Ib2xlKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4s
IGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAg
ICAgICAgIAotICAgIGNhc2UgQXJyYXlQdXNoOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNOdW1iZXIpOwotICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgIGNhc2UgQXJyYXlQb3A6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICBjYXNlIFJlZ0V4cEV4ZWM6Ci0gICAgY2FzZSBSZWdF
eHBUZXN0OgotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICBjYXNlIEp1bXA6Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7Ci0gICAgICAgIEJvb2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3Vs
dChub2RlLCBmb3JOb2RlKGNoaWxkKSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVs
eVRydWUpIHsKLSAgICAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZVRydWU7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzdWx0ID09IERlZmluaXRl
bHlGYWxzZSkgewotICAgICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtlRmFsc2U7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogVGhlIGFib3Zl
IGhhbmRsZXMgdGhlIHRyaXZpYWwgY2FzZXMgb2Ygc3BhcnNlIGNvbmRpdGlvbmFsCi0gICAgICAg
IC8vIGNvbnN0YW50IHByb3BhZ2F0aW9uLCBidXQgd2UgY2FuIGRvIGJldHRlcjoKLSAgICAgICAg
Ly8gV2UgY2FuIHNwZWNpYWxpemUgdGhlIHNvdXJjZSB2YXJpYWJsZSdzIHZhbHVlIG9uIGVhY2gg
ZGlyZWN0aW9uIG9mCi0gICAgICAgIC8vIHRoZSBicmFuY2guCi0gICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7IC8vIFRoaXMgaXMgb3Zlcmx5IGNvbnNlcnZhdGl2ZS4KLSAgICAgICAgbV9i
cmFuY2hEaXJlY3Rpb24gPSBUYWtlQm90aDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAg
ICAKLSAgICBjYXNlIFN3aXRjaDogewotICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGZvciBub3cu
Ci0gICAgICAgIC8vIEZJWE1FOiBEbyBzcGFyc2UgY29uZGl0aW9uYWwgdGhpbmdzLgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgICAgICAgICAKLSAgICBjYXNlIFJldHVybjoKLSAgICAgICAg
bV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIFRo
cm93OgotICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKLSAgICAgICAgbV9pc1ZhbGlkID0g
ZmFsc2U7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgY2FzZSBUb1ByaW1pdGl2ZTogewotICAgICAgICBKU1ZhbHVlIGNo
aWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBpZiAo
Y2hpbGRDb25zdCAmJiBjaGlsZENvbnN0LmlzTnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9k
ZSwgY2hpbGRDb25zdCkpIHsKLSAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7Ci0gICAgICAgIAotICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwotICAgICAgICAK
LSAgICAgICAgLy8gTkIuIFRoZSBtb3JlIGNhbm9uaWNhbCB3YXkgb2Ygd3JpdGluZyB0aGlzIHdv
dWxkIGhhdmUgYmVlbjoKLSAgICAgICAgLy8KLSAgICAgICAgLy8gZGVzdGluYXRpb24gPSBzb3Vy
Y2U7Ci0gICAgICAgIC8vIGlmIChkZXN0aW5hdGlvbi5tX3R5cGUgJiAhKFNwZWNOdW1iZXIgfCBT
cGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pKSB7Ci0gICAgICAgIC8vICAgICBkZXN0aW5hdGlvbi5m
aWx0ZXIoU3BlY051bWJlciB8IFNwZWNTdHJpbmcgfCBTcGVjQm9vbGVhbik7Ci0gICAgICAgIC8v
ICAgICBBYnN0cmFjdFZhbHVlIHN0cmluZzsKLSAgICAgICAgLy8gICAgIHN0cmluZy5zZXQodm0t
PnN0cmluZ1N0cnVjdHVyZSk7Ci0gICAgICAgIC8vICAgICBkZXN0aW5hdGlvbi5tZXJnZShzdHJp
bmcpOwotICAgICAgICAvLyB9Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSByZWFzb24gd2h5
IHRoaXMgd291bGQsIGluIG1vc3Qgb3RoZXIgY2FzZXMsIGhhdmUgYmVlbiBiZXR0ZXIgaXMgdGhh
dAotICAgICAgICAvLyB0aGVuIGRlc3RpbmF0aW9uIHdvdWxkIHByZXNlcnZlIGFueSBub24tU3Bl
Y3VsYXRlZFR5cGUga25vd2xlZGdlIG9mIHNvdXJjZS4KLSAgICAgICAgLy8gQXMgaXQgc3RhbmRz
LCB0aGUgY29kZSBiZWxvdyBmb3JnZXRzIGFueSBub24tU3BlY3VsYXRlZFR5cGUga25vd2xlZGdl
IHRoYXQKLSAgICAgICAgLy8gc291cmNlIHdvdWxkIGhhdmUgaGFkLiBGb3J0dW5hdGVseSwgdGhv
dWdoLCBmb3IgdGhpbmdzIGxpa2Ugc3RyaW5ncyBhbmQKLSAgICAgICAgLy8gbnVtYmVycyBhbmQg
Ym9vbGVhbnMsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIG5vbi1TcGVjdWxhdGVkVHlwZSBrbm93
ZWRnZToKLSAgICAgICAgLy8gdGhlIHN0cnVjdHVyZSB3b24ndCB0ZWxsIHVzIGFueXRoaW5nIHdl
IGRvbid0IGFscmVhZHkga25vdywgYW5kIG5laXRoZXIKLSAgICAgICAgLy8gd2lsbCBBcnJheU1v
ZGVzLiBBbmQgaWYgdGhlIHNvdXJjZSB3YXMgYSBtZWFuaW5nZnVsIGNvbnN0YW50IHRoZW4gd2UK
LSAgICAgICAgLy8gd291bGQgaGF2ZSBoYW5kbGVkIHRoYXQgYWJvdmUuIFVuZm9ydHVuYXRlbHks
IHRoaXMgZG9lcyBtZWFuIHRoYXQKLSAgICAgICAgLy8gVG9QcmltaXRpdmUgd2lsbCBjdXJyZW50
bHkgZm9yZ2V0IHN0cmluZyBjb25zdGFudHMuIEJ1dCB0aGF0J3Mgbm90IGEgYmlnCi0gICAgICAg
IC8vIGRlYWwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG9wdGltaXphdGlvbiBvbiB0aG9zZSBjdXJy
ZW50bHkuCi0gICAgICAgIAotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBz
b3VyY2UubV90eXBlOwotICAgICAgICBpZiAodHlwZSAmIH4oU3BlY051bWJlciB8IFNwZWNTdHJp
bmcgfCBTcGVjQm9vbGVhbikpIHsKLSAgICAgICAgICAgIHR5cGUgJj0gKFNwZWNOdW1iZXIgfCBT
cGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pOwotICAgICAgICAgICAgdHlwZSB8PSBTcGVjU3RyaW5n
OwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9uLnNldFR5cGUodHlwZSk7Ci0gICAgICAg
IGlmIChkZXN0aW5hdGlvbi5pc0NsZWFyKCkpCi0gICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIFRvU3RyaW5nOiB7
Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNh
c2UgU3RyaW5nT2JqZWN0VXNlOgotICAgICAgICAgICAgLy8gVGhpcyBhbHNvIGZpbHRlcnMgdGhh
dCB0aGUgU3RyaW5nT2JqZWN0IGhhcyB0aGUgcHJpbW9yZGlhbCBTdHJpbmdPYmplY3QKLSAgICAg
ICAgICAgIC8vIHN0cnVjdHVyZS4KLSAgICAgICAgICAgIGZpbHRlcigKLSAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKSwKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5jb2RlT3JpZ2luKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpOwotICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gV2UgY291bGQgYmUgbW9yZSBwcmVjaXNlIGJ1
dCBpdCdzIGxpa2VseSBub3Qgd29ydGggaXQuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7IC8vIFdlIGNvdWxkIGJlIG1vcmUgcHJlY2lzZSBidXQgaXQncyBsaWtlbHkgbm90
IHdvcnRoIGl0LgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2VsbFVzZToKLSAg
ICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBo
LCBtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgICAgICAKLSAgICBjYXNlIE5ld1N0cmluZ09iamVjdDogewotICAgICAgICBBU1NF
UlQobm9kZS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZTdHJpbmdPYmplY3Q6OnNfaW5m
byk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVyZSgp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgY2FzZSBOZXdBcnJh
eToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoCi0gICAgICAgICAgICBtX2dyYXBoLAotICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBl
RHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpOwotICAgICAgICBtX2hhdmVT
dHJ1Y3R1cmVzID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgTmV3
QXJyYXlCdWZmZXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KAotICAgICAgICAgICAgbV9ncmFwaCwKLSAgICAgICAgICAgIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvcklu
ZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKLSAgICAg
ICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBO
ZXdBcnJheVdpdGhTaXplOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0FycmF5KTsKLSAgICAgICAgbV9oYXZlU3RydWN0
dXJlcyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgY2FzZSBOZXdS
ZWdleHA6Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5yZWdFeHBTdHJ1Y3R1cmUoKSk7Ci0gICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgIGNhc2UgVG9UaGlzOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9
IGZvck5vZGUobm9kZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVzdGluYXRpb24gPSBzb3Vy
Y2U7Ci0gICAgICAgIGRlc3RpbmF0aW9uLm1lcmdlKFNwZWNPYmplY3RPdGhlcik7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQ3JlYXRlVGhpczogewotICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUoU3BlY0ZpbmFsT2JqZWN0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgICAgICAKLSAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKLSAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE5ld09i
amVjdDoKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJl
KCkpOwotICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIAotICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoCi0gICAgICAgICAgICBtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwotICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2Ug
Q3JlYXRlQXJndW1lbnRzOgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKLSAgICAgICAgICAg
IG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikt
PmFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKLSAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9uOgot
ICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKLSAgICAgICAgLy8gRG9lcyBub3RoaW5nIHRoYXQg
aXMgdXNlci12aXNpYmxlLgotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hlY2tBcmd1bWVu
dHNOb3RDcmVhdGVkOgotICAgICAgICBpZiAoaXNFbXB0eVNwZWN1bGF0aW9uKAotICAgICAgICAg
ICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
YXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpCi0gICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNh
c2UgR2V0TXlBcmd1bWVudHNMZW5ndGg6Ci0gICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4
ZWN1dGFibGUgZG9lcyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6
ZQotICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBpcyBub3Qg
c3VmZmljaWVudCB0byBmb3JjZSBjb25zdGFudCBmb2xkaW5nCi0gICAgICAgIC8vIG9mIEdldE15
QXJndW1lbnRzTGVuZ3RoLCBiZWNhdXNlIEdldE15QXJndW1lbnRzTGVuZ3RoIGlzIGEgY2xvYmJl
cmluZyBvcGVyYXRpb24uCi0gICAgICAgIC8vIFdlIHBlcmZvcm0gZnVydGhlciBvcHRpbWl6YXRp
b25zIG9uIHRoaXMgbGF0ZXIgb24uCi0gICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0gICAgICAgICAg
ICAgICAgbV9ncmFwaCwganNOdW1iZXIobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
Ci0gICAgICAgICAgICAhaXNFbXB0eVNwZWN1bGF0aW9uKAotICAgICAgICAgICAgICAgIG1fdmFy
aWFibGVzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVn
aXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAg
ICAgICAgCi0gICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6Ci0gICAgICAgIC8vIFRo
aXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIGFyZ3VtZW50cyBv
YmplY3QgaGFkIGEgZ2V0dGVyCi0gICAgICAgIC8vIGluc3RhbGxlZCBvbiB0aGUgbGVuZ3RoIHBy
b3BlcnR5LgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKLSAgICAgICAgLy8gV2UgY3VycmVudGx5IG1ha2Ugbm8gZ3VhcmFudGVlIGFib3V0IHdo
YXQgdGhpcyByZXR1cm5zIGJlY2F1c2UgaXQgZG9lcyBub3QKLSAgICAgICAgLy8gc3BlY3VsYXRl
IHRoYXQgdGhlIGxlbmd0aCBwcm9wZXJ0eSBpcyBhY3R1YWxseSBhIGxlbmd0aC4KLSAgICAgICAg
Zm9yTm9kZShub2RlKS5tYWtlVG9wKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUg
aXRzIGFyZ3VtZW50cywgc28gd2UgY2FuIG9wdGltaXplCi0gICAgICAgIC8vIHRoZSBhcmd1bWVu
dHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlzIGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQg
YnkgdGhlCi0gICAgICAgIC8vIEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCi0gICAgICAg
IGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAg
Y2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVz
IGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBhY2Nlc3NpbmcgaGFzCi0gICAgICAgIC8vIGEgZ2V0dGVy
LiBXZSBkb24ndCBzcGVjdWxhdGUgYWdhaW5zdCB0aGlzLgotICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgLy8gQW5kIHRoZSByZXN1
bHQgaXMgdW5rbm93bi4KLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIE5ld0Z1bmN0aW9uOgotICAgIGNhc2UgTmV3RnVu
Y3Rpb25FeHByZXNzaW9uOgotICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgotICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldCgKLSAgICAgICAgICAgIG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmZ1bmN0aW9uU3RydWN0dXJlKCkpOwotICAg
ICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShTcGVjRnVuY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICAgICAg
Ci0gICAgY2FzZSBTZXRDYWxsZWU6Ci0gICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgIGNhc2UgR2V0U2NvcGU6IC8vIEZJWE1FOiBXZSBjb3VsZCBn
ZXQgcmlkIG9mIHRoZXNlIGlmIHdlIGtub3cgdGhhdCB0aGUgSlNGdW5jdGlvbiBpcyBhIGNvbnN0
YW50LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MjAyCi0gICAg
Y2FzZSBHZXRNeVNjb3BlOgotICAgIGNhc2UgU2tpcFRvcFNjb3BlOgotICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUoU3BlY0NlbGxPdGhlcik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBTa2lwU2NvcGU6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlmIChjaGlsZCAmJiB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKGpzQ2FzdDxKU1Njb3BlKj4oY2hpbGQuYXNDZWxsKCkpLT5uZXh0KCkpKSkgewot
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0NlbGxPdGhlcik7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVyczoK
LSAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpT
IHZhbHVlLgotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKLSAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgY2FzZSBQdXRDbG9zdXJlVmFyOgotICAgICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJzKG5v
ZGUtPmNvZGVPcmlnaW4pOwotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgIGNhc2Ug
R2V0QnlJZDoKLSAgICBjYXNlIEdldEJ5SWRGbHVzaDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgaWYgKCFub2RlLT5wcmVkaWN0aW9uKCkpIHsKLSAgICAgICAgICAg
IG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7
Ci0gICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICBHZXRCeUlk
U3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV92bSwgc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFz
c2VydCB0aGluZ3MgdGhhdCB3ZSBjYW4ndCBoYW5kbGUgYW5kIHRoYXQgdGhlIGNvbXB1dGVGb3Io
KSBtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgLy8gYWJvdmUgd29uJ3QgYmUgYWJsZSB0byBy
ZXR1cm4uCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuc3RydWN0dXJlU2V0KCku
c2l6ZSgpID09IDEpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXN0YXR1cy5jaGFpbigp
KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMu
c3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQobV9ncmFwaCwgc3RhdHVzLnNwZWNpZmljVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwot
ICAgICAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIHN0YXR1cy5zdHJ1Y3R1
cmVTZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGUp
Lm1ha2VUb3AoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICBjYXNlIEdldEFy
cmF5TGVuZ3RoOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQg
aXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNBcnJheSwgc28gaXQncyBnb29kIGVu
b3VnaC4KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIENoZWNrRXhlY3V0YWJsZTogewotICAgICAgICAv
LyBGSVhNRTogV2UgY291bGQgdHJhY2sgZXhlY3V0YWJsZXMgaW4gQWJzdHJhY3RWYWx1ZSwgd2hp
Y2ggd291bGQgYWxsb3cgdXMgdG8gZ2V0IHJpZCBvZiB0aGVzZSBjaGVja3MKLSAgICAgICAgLy8g
bW9yZSB0aG9yb3VnaGx5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2MjAwCi0gICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBlbGltaW5hdGUgdGhlc2UgZW50aXJl
bHkgaWYgd2Uga25vdyB0aGUgZXhhY3QgdmFsdWUgdGhhdCBmbG93cyBpbnRvIHRoaXMuCi0gICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDEKLSAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTog
ewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBz
dHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCi0gICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEFT
U0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91
bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KLQotICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNl
dCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwotCi0gICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKLSAgICAgICAgICAgIG1fZm91bmRDb25z
dGFudHMgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOwotCi0gICAgICAgIC8vIElmIHRoaXMgc3RydWN0dXJlIGNo
ZWNrIGlzIGF0dGVtcHRpbmcgdG8gcHJvdmUga25vd2xlZGdlIGFscmVhZHkgaGVsZCBpbgotICAg
ICAgICAvLyB0aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgc2V0IHRoZW4gdGhlIGNvbnN0YW50
IGZvbGRpbmcgcGhhc2Ugc2hvdWxkCi0gICAgICAgIC8vIHR1cm4gdGhpcyBpbnRvIGEgd2F0Y2hw
b2ludCBpbnN0ZWFkLgotICAgICAgICBpZiAodmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZS5pc1N1YnNldE9mKHNldCkKLSAgICAgICAgICAgICYmIHZhbHVlLm1fZnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkpIHsKLSAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwotICAgICAgICAgICAgZmlsdGVyKHZhbHVlLCB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxl
U3RydWN0dXJlLnNpbmdsZXRvbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQpOwotICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0g
dHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50OiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7Ci0KLSAgICAgICAgLy8gSXQncyBvbmx5IHZhbGlkIHRvIGlzc3VlIGEg
c3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCBpZiB3ZSBhbHJlYWR5Ci0gICAgICAgIC8v
IGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBjb3ZlcnMgYSBzdXBlcnNldCBvZiB0aGUgc3RydWN0
dXJlcyBrbm93biB0bwotICAgICAgICAvLyBiZWxvbmcgdG8gdGhlIHNldCBvZiBmdXR1cmUgc3Ry
dWN0dXJlcyB0aGF0IHRoaXMgdmFsdWUgbWF5IGhhdmUuCi0gICAgICAgIC8vIEN1cnJlbnRseSwg
d2Ugb25seSBpc3N1ZSBzaW5nbGV0b24gd2F0Y2hwb2ludHMgKHRoYXQgY2hlY2sgb25lIHN0cnVj
dHVyZSkKLSAgICAgICAgLy8gYW5kIG91ciBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgY2Fu
IG9ubHkgY29udGFpbiB6ZXJvLCBvbmUsIG9yIGFuCi0gICAgICAgIC8vIGluZmluaXR5IG9mIHN0
cnVjdHVyZXMuCi0gICAgICAgIEFTU0VSVCgKLSAgICAgICAgICAgIHZhbHVlLm1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkp
KQotICAgICAgICAgICAgfHwgbV9ncmFwaC53YXRjaHBvaW50cygpLnNob3VsZEFzc3VtZU1peGVk
U3RhdGUobm9kZS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKTsKLSAg
ICAgICAgCi0gICAgICAgIGZpbHRlcih2YWx1ZSwgbm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAg
ICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6Ci0gICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgotICAgICAgICBpZiAoIWZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSkgewot
ICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7Ci0gICAgICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVz
ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdldEJ1dHRlcmZs
eToKLSAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgIGNhc2UgUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOyAvLyBUaGUg
cmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvcndh
cmRDaGVja0FycmF5OgotICAgIGNhc2UgQ2hlY2tBcnJheTogewotICAgICAgICBpZiAobm9kZS0+
YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkpKSB7Ci0gICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
IC8vIExpZXMsIGJ1dCB0aGlzIGlzIGZvbGxvd2VkIGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlW
YWwpIHRoYXQgYWx3YXlzIGV4aXQsIHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0
byBiZSBjbGV2ZXIgaGVyZS4KLSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgZmlsdGVyKG5v
ZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZmlsdGVy
KG5vZGUtPmNoaWxkMSgpLCBTcGVjQXJndW1lbnRzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hp
bGQxKCksIFNwZWNJbnQ4QXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNw
ZWNJbnQxNkFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMkFycmF5OgotICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjSW50MzJB
cnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJh
eToKLSAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY1VpbnQ4QXJyYXkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5
OgotICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjVWludDhDbGFtcGVkQXJy
YXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5
OgotICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjVWludDE2QXJyYXkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAg
ICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjVWludDMyQXJyYXkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAg
ICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0Zsb2F0MzJBcnJheSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAg
ZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjRmxvYXQ2NEFycmF5KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGZpbHRlckFy
cmF5TW9kZXMobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0
UGFzc0ZpbHRlcmluZygpKTsKLSAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEFycmF5aWZ5OiB7Ci0gICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKSkpIHsKLSAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9k
ZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6Q29udmVydAotICAgICAgICAgICAgfHwgbm9kZS0+
YXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29udmVydCk7Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4
SW5CbG9jayk7Ci0gICAgICAgIGZpbHRlckFycmF5TW9kZXMobm9kZS0+Y2hpbGQxKCksIG5vZGUt
PmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygpKTsKLSAgICAgICAgbV9o
YXZlU3RydWN0dXJlcyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEFy
cmF5aWZ5VG9TdHJ1Y3R1cmU6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgU3RydWN0dXJlU2V0IHNldCA9IG5vZGUtPnN0
cnVjdHVyZSgpOwotICAgICAgICBpZiAodmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5p
c1N1YnNldE9mKHNldCkKLSAgICAgICAgICAgIHx8IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLmlzU3Vic2V0T2Yoc2V0KSkKLSAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVl
OwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBjbG9iYmVyU3RydWN0
dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCk7Ci0gICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuY2xl
YXIoKTsKLSAgICAgICAgYnJlYWs7IAotICAgIH0KLSAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7Ci0g
ICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgICAgICAgICAKLSAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICAgICAgICAgIAotICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewotICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYg
KHZhbHVlID09IG5vZGUtPmZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIG1fZm91bmRDb25zdGFu
dHMgPSB0cnVlOwotICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAv
LyBMaWVzISBXZSBjYW4gZG8gYmV0dGVyLgotICAgICAgICBmaWx0ZXJCeVZhbHVlKG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5mdW5jdGlvbigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAg
ICAKLSAgICBjYXNlIFB1dEJ5SWQ6Ci0gICAgY2FzZSBQdXRCeUlkRGlyZWN0OgotICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKLSAgICAg
ICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigK
LSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdm0sCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiksCi0gICAgICAgICAgICAgICAgc3RydWN0
dXJlLAotICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlm
aWVyTnVtYmVyKCldLAotICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVj
dCk7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkg
ewotICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7Ci0gICAg
ICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIHN0YXR1cy5u
ZXdTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ICAKLSAgICBjYXNlIEluOgotICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRldGVybWluZSB3aGVu
IHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBiYXNlZCBvbiBhYnN0cmFjdAotICAgICAg
ICAvLyB2YWx1ZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVP
cmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
Qm9vbGVhbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgY2FzZSBHZXRHbG9i
YWxWYXI6Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwotICAgICAgICBicmVhazsK
LSAgICAgICAgCi0gICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgotICAgIGNhc2UgVmFySW5q
ZWN0aW9uV2F0Y2hwb2ludDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIC8vIFNhZGx5LCB3ZSBkb24ndCBwcm9w
YWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENoZWNrSGFzSW5zdGFuY2UKLSAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICBjYXNlIEluc3RhbmNlT2Y6Ci0gICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIC8vIEFnYWluLCBzYWRseSwgd2UgZG9uJ3QgcHJv
cGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBJbnN0YW5jZU9mCi0gICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgY2FzZSBQaGk6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3Jt
ID09IFNTQSk7Ci0gICAgICAgIC8vIFRoZSBzdGF0ZSBvZiB0aGlzIG5vZGUgd291bGQgaGF2ZSBh
bHJlYWR5IGJlZW4gZGVjaWRlZC4KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2Ug
VXBzaWxvbjogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7Ci0gICAgICAgIGZvck5v
ZGUobm9kZS0+cGhpKCkpID0gdmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAg
Ci0gICAgY2FzZSBGbHVzaDoKLSAgICBjYXNlIFBoYW50b21Mb2NhbDoKLSAgICBjYXNlIEJyZWFr
cG9pbnQ6Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgY2FzZSBDYWxsOgotICAg
IGNhc2UgQ29uc3RydWN0OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5tYWtlVG9wKCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBGb3Jj
ZU9TUkV4aXQ6Ci0gICAgY2FzZSBGb3J3YXJkRm9yY2VPU1JFeGl0OgotICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoKLSAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICBjYXNlIFBoYW50b206Ci0gICAgY2FzZSBJbmxpbmVTdGFydDoKLSAgICBjYXNlIENvdW50RXhl
Y3V0aW9uOgotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBMYXN0Tm9kZVR5cGU6
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV9pc1ZhbGlkOwotfQotCi1ib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKLXsKLSAgICByZXR1cm4g
ZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spKTsK
LX0KLQotYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jaykK
LXsKLSAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICBpZiAo
IXN0YXJ0RXhlY3V0aW5nKG5vZGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBl
eGVjdXRlRWRnZXMobm9kZSk7Ci0gICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9j
aywgbm9kZSk7Ci19Ci0KLWlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJXb3JsZChj
b25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2spCi17Ci0g
ICAgY2xvYmJlckNhcHR1cmVkVmFycyhjb2RlT3JpZ2luKTsKLSAgICBjbG9iYmVyU3RydWN0dXJl
cyhpbmRleEluQmxvY2spOwotfQotCi1pbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVy
Q2FwdHVyZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCi17Ci0gICAgaWYgKGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgIGNvbnN0IEJpdFZlY3RvciYgY2Fw
dHVyZWRWYXJzID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IGNhcHR1cmVkVmFycy5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgICAgIGlmICghY2FwdHVyZWRWYXJzLnF1aWNrR2V0KGkpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgbV92YXJpYWJsZXMubG9jYWwoaSkubWFrZVRvcCgpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fY29kZUJsb2Nr
LT5tX251bVZhcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDYXB0
dXJlZChpKSkKLSAgICAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5sb2NhbChpKS5tYWtlVG9wKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gbV92YXJpYWJsZXMubnVt
YmVyT2ZBcmd1bWVudHMoKTsgaS0tOykgewotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ2Fw
dHVyZWQoYXJndW1lbnRUb09wZXJhbmQoaSkpKQotICAgICAgICAgICAgbV92YXJpYWJsZXMuYXJn
dW1lbnQoaSkubWFrZVRvcCgpOwotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgQWJzdHJhY3RTdGF0
ZTo6Y2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKQotewotICAgIGlmICgh
bV9oYXZlU3RydWN0dXJlcykKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoc2l6ZV90IGkgPSBp
bmRleEluQmxvY2sgKyAxOyBpLS07KQotICAgICAgICBmb3JOb2RlKG1fYmxvY2stPmF0KGkpKS5j
bG9iYmVyU3RydWN0dXJlcygpOwotICAgIGZvciAoc2l6ZV90IGkgPSBtX3ZhcmlhYmxlcy5udW1i
ZXJPZkFyZ3VtZW50cygpOyBpLS07KQotICAgICAgICBtX3ZhcmlhYmxlcy5hcmd1bWVudChpKS5j
bG9iYmVyU3RydWN0dXJlcygpOwotICAgIGZvciAoc2l6ZV90IGkgPSBtX3ZhcmlhYmxlcy5udW1i
ZXJPZkxvY2FscygpOyBpLS07KQotICAgICAgICBtX3ZhcmlhYmxlcy5sb2NhbChpKS5jbG9iYmVy
U3RydWN0dXJlcygpOwotICAgIG1faGF2ZVN0cnVjdHVyZXMgPSBmYWxzZTsKLSAgICBtX2RpZENs
b2JiZXIgPSB0cnVlOwotfQotCi1ib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwo
QWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5v
ZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIAotICAgIEFic3RyYWN0VmFsdWUgc291cmNlOwotICAgIAotICAgIGlmIChub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAgICAgIC8vIElmIGl0J3MgY2Fw
dHVyZWQgdGhlbiB3ZSBrbm93IHRoYXQgd2hhdGV2ZXIgdmFsdWUgd2FzIHN0b3JlZCBpbnRvIHRo
ZSB2YXJpYWJsZSBsYXN0IGlzIHRoZQotICAgICAgICAvLyBvbmUgd2UgY2FyZSBhYm91dC4gVGhp
cyBpcyB0cnVlIGV2ZW4gaWYgdGhlIHZhcmlhYmxlIGF0IHRhaWwgaXMgZGVhZCwgd2hpY2ggbWln
aHQgaGFwcGVuIGlmCi0gICAgICAgIC8vIHRoZSBsYXN0IHRoaW5nIHdlIGRpZCB0byB0aGUgdmFy
aWFibGUgd2FzIGEgR2V0TG9jYWwgYW5kIHRoZW4gZW5kZWQgdXAgbm93IHVzaW5nIHRoZQotICAg
ICAgICAvLyBHZXRMb2NhbCdzIHJlc3VsdC4KLSAgICAgICAgCi0gICAgICAgIHNvdXJjZSA9IGlu
VmFyaWFibGU7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAg
ICAgICBkYXRhTG9nRigiICAgICAgICAgIFRyYW5zZmVyaW5nICIpOwotICAgICAgICBzb3VyY2Uu
ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICBkYXRhTG9nRigiIGZyb20gbGFzdCBhY2Nl
c3MgZHVlIHRvIGNhcHR1cmVkIHZhcmlhYmxlLlxuIik7Ci0jZW5kaWYKLSAgICB9IGVsc2Ugewot
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxv
Z0YoIiAgICAgICAgICBJdCdzIGxpdmUsIG5vZGUgQCV1LlxuIiwgbm9kZS0+aW5kZXgoKSk7Ci0j
ZW5kaWYKLSAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2Ug
UGhpOgotICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgotICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDoKLSAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgIC8vIFRoZSBibG9jayB0cmFuc2Zl
cnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgotICAgICAgICAgICAgc291cmNlID0gaW5W
YXJpYWJsZTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFRyYW5zZmVyaW5nICIpOwotICAgICAgICAgICAg
c291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgZnJv
bSBoZWFkIHRvIHRhaWwuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIC8vIFRoZSBibG9jayBy
ZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgc3BlY3VsYXRpb25zLgotICAgICAgICAg
ICAgc291cmNlID0gZm9yTm9kZShub2RlKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFJlZmluaW5nIHRv
ICIpOwotICAgICAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCJcbiIpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHNl
dHMgdGhlIHZhcmlhYmxlLCBhbmQgcG90ZW50aWFsbHkgcmVmaW5lcyBpdCwgYm90aAotICAgICAg
ICAgICAgLy8gYmVmb3JlIGFuZCBhZnRlciBzZXR0aW5nIGl0LgotICAgICAgICAgICAgaWYgKG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHVubmVjZXNzYXJpbHkgbG9zZXMgcHJlY2lzaW9u
LgotICAgICAgICAgICAgICAgIHNvdXJjZS5zZXRUeXBlKFNwZWNEb3VibGUpOwotICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgICAgICBTZXR0aW5nIHRvICIpOwotICAgICAgICAgICAgc291cmNl
LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGRlc3RpbmF0aW9uID09IHNvdXJjZSkg
ewotICAgICAgICAvLyBBYnN0cmFjdCBleGVjdXRpb24gZGlkIG5vdCBjaGFuZ2UgdGhlIG91dHB1
dCB2YWx1ZSBvZiB0aGUgdmFyaWFibGUsIGZvciB0aGlzCi0gICAgICAgIC8vIGJhc2ljIGJsb2Nr
LCBvbiB0aGlzIGl0ZXJhdGlvbi4KLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgTm90IGNoYW5nZWQhXG4iKTsKLSNl
bmRpZgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIC8vIEFic3RyYWN0
IGV4ZWN1dGlvbiByZWFjaGVkIGEgbmV3IGNvbmNsdXNpb24gYWJvdXQgdGhlIHNwZWN1bGF0aW9u
cyByZWFjaGVkIGFib3V0Ci0gICAgLy8gdGhpcyB2YXJpYWJsZSBhZnRlciBleGVjdXRpb24gb2Yg
dGhpcyBiYXNpYyBibG9jay4gVXBkYXRlIHRoZSBzdGF0ZSwgYW5kIHJldHVybgotICAgIC8vIHRy
dWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZml4cG9pbnQgbXVzdCBnbyBvbiEKLSAgICBkZXN0aW5h
dGlvbiA9IHNvdXJjZTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
Ci0gICAgZGF0YUxvZ0YoIiAgICAgICAgICBDaGFuZ2VkIVxuIik7Ci0jZW5kaWYKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0Jsb2NrKiBmcm9t
LCBCYXNpY0Jsb2NrKiB0bykKLXsKLSAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mQXJndW1lbnRzKCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50
cygpKTsKLSAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkg
PT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICAKLSAgICBib29s
IGNoYW5nZWQgPSBmYWxzZTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7Ci0g
ICAgY2FzZSBUaHJlYWRlZENQUzogewotICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsr
YXJndW1lbnQpIHsKLSAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gdG8t
PnZhbHVlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpLCB0by0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3Vt
ZW50KSwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBmcm9t
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewotICAgICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmxvY2FsKGxv
Y2FsKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3Mo
ZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCksIHRvLT52YXJpYWJs
ZXNBdEhlYWQubG9jYWwobG9jYWwpLCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwp
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2Ug
U1NBOiB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBmcm9tLT52YWx1ZXNBdFRhaWwuc2l6ZSgp
OyBpLS07KQotICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+dmFsdWVzQXRIZWFkW2ldLm1lcmdl
KGZyb20tPnZhbHVlc0F0VGFpbFtpXSk7Ci0gICAgICAgIAotICAgICAgICBIYXNoU2V0PE5vZGUq
Pjo6aXRlcmF0b3IgaXRlciA9IHRvLT5zc2EtPmxpdmVBdEhlYWQuYmVnaW4oKTsKLSAgICAgICAg
SGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHRvLT5zc2EtPmxpdmVBdEhlYWQuZW5kKCk7
Ci0gICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICBOb2Rl
KiBub2RlID0gKml0ZXI7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHRvLT5zc2EtPnZhbHVlc0F0
SGVhZC5maW5kKG5vZGUpLT52YWx1ZS5tZXJnZSgKLSAgICAgICAgICAgICAgICBmcm9tLT5zc2Et
PnZhbHVlc0F0VGFpbC5maW5kKG5vZGUpLT52YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIXRvLT5j
ZmFIYXNWaXNpdGVkKQotICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAKLSAgICB0by0+Y2Zh
U2hvdWxkUmV2aXNpdCB8PSBjaGFuZ2VkOwotICAgIAotICAgIHJldHVybiBjaGFuZ2VkOwotfQot
Ci1pbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycyhCYXNpY0Jsb2Nr
KiBiYXNpY0Jsb2NrKQotewotICAgIE5vZGUqIHRlcm1pbmFsID0gYmFzaWNCbG9jay0+bGFzdCgp
OwotICAgIAotICAgIEFTU0VSVCh0ZXJtaW5hbC0+aXNUZXJtaW5hbCgpKTsKLSAgICAKLSAgICBz
d2l0Y2ggKHRlcm1pbmFsLT5vcCgpKSB7Ci0gICAgY2FzZSBKdW1wOiB7Ci0gICAgICAgIEFTU0VS
VChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gPT0gSW52YWxpZEJyYW5jaERpcmVjdGlv
bik7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBk
YXRhTG9nKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIiwgKnRlcm1pbmFsLT50YWtlbkJsb2Nr
KCksICIuXG4iKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgdGVy
bWluYWwtPnRha2VuQmxvY2soKSk7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIEJyYW5jaDog
ewotICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9IEludmFs
aWRCcmFuY2hEaXJlY3Rpb24pOwotICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIiAg
ICAgICAgTWVyZ2luZyB0byBibG9jayAiLCAqdGVybWluYWwtPnRha2VuQmxvY2soKSwgIi5cbiIp
OwotI2VuZGlmCi0gICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gIT0g
VGFrZUZhbHNlKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCB0ZXJt
aW5hbC0+dGFrZW5CbG9jaygpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCi0gICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAiLCAqdGVy
bWluYWwtPm5vdFRha2VuQmxvY2soKSwgIi5cbiIpOwotI2VuZGlmCi0gICAgICAgIGlmIChiYXNp
Y0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gIT0gVGFrZVRydWUpCi0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT5ub3RUYWtlbkJsb2NrKCkpOwotICAg
ICAgICByZXR1cm4gY2hhbmdlZDsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgU3dpdGNoOiB7
Ci0gICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBjb29sIHRvIGJlIHNwYXJzZSBjb25kaXRp
b25hbCBmb3IgU3dpdGNoJ3MuIEN1cnJlbnRseQotICAgICAgICAvLyB3ZSdyZSBub3QuIEhvd2V2
ZXIgSSBzb21laG93IGRvdWJ0IHRoYXQgdGhpcyB3aWxsIGV2ZXIgYmUgYSBiaWcgZGVhbC4KLSAg
ICAgICAgQVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJh
bmNoRGlyZWN0aW9uKTsKLSAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IHRlcm1pbmFsLT5zd2l0
Y2hEYXRhKCk7Ci0gICAgICAgIGJvb2wgY2hhbmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEt
PmZhbGxUaHJvdWdoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6
ZSgpOyBpLS07KQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRh
LT5jYXNlc1tpXS50YXJnZXQpOwotICAgICAgICByZXR1cm4gY2hhbmdlZDsKLSAgICB9Ci0gICAg
ICAgIAotICAgIGNhc2UgUmV0dXJuOgotICAgIGNhc2UgVGhyb3c6Ci0gICAgY2FzZSBUaHJvd1Jl
ZmVyZW5jZUVycm9yOgotICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0
aW9uID09IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWlubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUmIGRlc3Rp
bmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGUqIGRlc3RpbmF0aW9uTm9kZSwgTm9k
ZSogc291cmNlTm9kZSkKLXsKLSAgICBpZiAoIWRlc3RpbmF0aW9uTm9kZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VSVF9VTlVTRUQoc291cmNlTm9kZSwgc291cmNlTm9k
ZSk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIHNvbWUgc3BhcnNlIGNvbmRpdGlv
bmFsIHByb3BhZ2F0aW9uIGhlcmUhCi0gICAgCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uLm1lcmdl
KHNvdXJjZSk7Ci19Ci0KLXZvaWQgQWJzdHJhY3RTdGF0ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KQotewotICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9ibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0
KGkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZSk7Ci0gICAg
ICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aWYgKGZpcnN0KQotICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgb3V0LnByaW50ZigiICIpOwotICAgICAgICBvdXQucHJpbnRmKCJAJWx1OiIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG5vZGUtPmluZGV4KCkpKTsKLSAgICAgICAgdmFsdWUu
ZHVtcChvdXQpOwotICAgIH0KLX0KLQotRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFN0YXRlOjpm
aWx0ZXIoQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQotewot
ICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFwaCwgc2V0KSA9PSBGaWx0cmF0aW9uT0spCi0gICAg
ICAgIHJldHVybiBGaWx0cmF0aW9uT0s7Ci0gICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgcmV0
dXJuIENvbnRyYWRpY3Rpb247Ci19Ci0gICAgCi1GaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0U3Rh
dGU6OmZpbHRlckFycmF5TW9kZXMoQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEFycmF5TW9kZXMgYXJy
YXlNb2RlcykKLXsKLSAgICBpZiAodmFsdWUuZmlsdGVyQXJyYXlNb2RlcyhhcnJheU1vZGVzKSA9
PSBGaWx0cmF0aW9uT0spCi0gICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7Ci0gICAgbV9pc1Zh
bGlkID0gZmFsc2U7Ci0gICAgcmV0dXJuIENvbnRyYWRpY3Rpb247Ci19Ci0gICAgCi1GaWx0cmF0
aW9uUmVzdWx0IEFic3RyYWN0U3RhdGU6OmZpbHRlcihBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSkKLXsKLSAgICBpZiAodmFsdWUuZmlsdGVyKHR5cGUpID09IEZpbHRy
YXRpb25PSykKLSAgICAgICAgcmV0dXJuIEZpbHRyYXRpb25PSzsKLSAgICBtX2lzVmFsaWQgPSBm
YWxzZTsKLSAgICByZXR1cm4gQ29udHJhZGljdGlvbjsKLX0KLSAgICAKLUZpbHRyYXRpb25SZXN1
bHQgQWJzdHJhY3RTdGF0ZTo6ZmlsdGVyQnlWYWx1ZSgKLSAgICBBYnN0cmFjdFZhbHVlJiBhYnN0
cmFjdFZhbHVlLCBKU1ZhbHVlIGNvbmNyZXRlVmFsdWUpCi17Ci0gICAgaWYgKGFic3RyYWN0VmFs
dWUuZmlsdGVyQnlWYWx1ZShjb25jcmV0ZVZhbHVlKSA9PSBGaWx0cmF0aW9uT0spCi0gICAgICAg
IHJldHVybiBGaWx0cmF0aW9uT0s7Ci0gICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgcmV0dXJu
IENvbnRyYWRpY3Rpb247Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTUyODI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzMyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBERkdBYnN0cmFjdFN0YXRlX2gKLSNkZWZpbmUgREZHQWJzdHJhY3RT
dGF0ZV9oCi0KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLQotI2lmIEVOQUJMRShERkdfSklU
KQotCi0jaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgotI2luY2x1ZGUgIkRGR0JyYW5jaERp
cmVjdGlvbi5oIgotI2luY2x1ZGUgIkRGR0dyYXBoLmgiCi0jaW5jbHVkZSAiREZHTm9kZS5oIgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVC
bG9jazsKLQotbmFtZXNwYWNlIERGRyB7Ci0KLXN0cnVjdCBCYXNpY0Jsb2NrOwotCi0vLyBUaGlz
IGltcGxlbWVudHMgdGhlIG5vdGlvbiBvZiBhbiBhYnN0cmFjdCBzdGF0ZSBmb3IgZmxvdy1zZW5z
aXRpdmUgaW50cmFwcm9jZWR1cmFsCi0vLyBjb250cm9sIGZsb3cgYW5hbHlzaXMgKENGQSksIHdp
dGggYSBmb2N1cyBvbiB0aGUgZWxpbWluYXRpb24gb2YgcmVkdW5kYW50IHR5cGUgY2hlY2tzLgot
Ly8gSXQgYWxzbyBpbXBsZW1lbnRzIG1vc3Qgb2YgdGhlIG1lY2hhbmlzbXMgb2YgYWJzdHJhY3Qg
aW50ZXJwcmV0YXRpb24gdGhhdCBzdWNoIGFuCi0vLyBhbmFseXNpcyB3b3VsZCB1c2UuIFRoaXMg
Y2xhc3Mgc2hvdWxkIGJlIHVzZWQgaW4gdHdvIGlkaW9tczoKLS8vCi0vLyAxKSBQZXJmb3JtaW5n
IHRoZSBDRkEuIEluIHRoaXMgY2FzZSwgQWJzdHJhY3RTdGF0ZSBzaG91bGQgYmUgcnVuIG92ZXIg
YWxsIGJhc2ljCi0vLyAgICBibG9ja3MgcmVwZWF0ZWRseSB1bnRpbCBjb252ZXJnZW5jZSBpcyBy
ZWFjaGVkLiBDb252ZXJnZW5jZSBpcyBkZWZpbmVkIGJ5Ci0vLyAgICBlbmRCYXNpY0Jsb2NrKEFi
c3RyYWN0U3RhdGU6Ok1lcmdlVG9TdWNjZXNzb3JzKSByZXR1cm5pbmcgZmFsc2UgZm9yIGFsbCBi
bG9ja3MuCi0vLwotLy8gMikgUmVtYXRlcmlhbGl6aW5nIHRoZSByZXN1bHRzIG9mIGEgcHJldmlv
dXNseSBleGVjdXRlZCBDRkEuIEluIHRoaXMgY2FzZSwKLS8vICAgIEFic3RyYWN0U3RhdGUgc2hv
dWxkIGJlIHJ1biBvdmVyIHdoYXRldmVyIGJhc2ljIGJsb2NrIHlvdSdyZSBpbnRlcmVzdGVkIGlu
IHVwCi0vLyAgICB0byB0aGUgcG9pbnQgb2YgdGhlIG5vZGUgYXQgd2hpY2ggeW91J2QgbGlrZSB0
byBpbnRlcnJvZ2F0ZSB0aGUga25vd24gdHlwZQotLy8gICAgb2YgYWxsIG90aGVyIG5vZGVzLiBB
dCB0aGlzIHBvaW50IGl0J3Mgc2FmZSB0byBkaXNjYXJkIHRoZSBBYnN0cmFjdFN0YXRlIGVudGly
ZWx5LAotLy8gICAgY2FsbCByZXNldCgpLCBvciB0byBydW4gaXQgdG8gdGhlIGVuZCBvZiB0aGUg
YmFzaWMgYmxvY2sgYW5kIGNhbGwKLS8vICAgIGVuZEJhc2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6
RG9udE1lcmdlKS4gVGhlIGxhdHRlciBvcHRpb24gaXMgc2FmZXN0IGJlY2F1c2UKLS8vICAgIGl0
IHBlcmZvcm1zIHNvbWUgdXNlZnVsIGludGVncml0eSBjaGVja3MuCi0vLwotLy8gQWZ0ZXIgdGhl
IENGQSBpcyBydW4sIHRoZSBpbnRlci1ibG9jayBzdGF0ZSBpcyBzYXZlZCBhdCB0aGUgaGVhZHMg
YW5kIHRhaWxzIG9mIGFsbAotLy8gYmFzaWMgYmxvY2tzLiBUaGlzIGFsbG93cyB0aGUgaW50cmEt
YmxvY2sgc3RhdGUgdG8gYmUgcmVtYXRlcmlhbGl6ZWQgYnkganVzdAotLy8gZXhlY3V0aW5nIHRo
ZSBDRkEgZm9yIHRoYXQgYmxvY2suIElmIHlvdSBuZWVkIHRvIGtub3cgaW50ZXItYmxvY2sgc3Rh
dGUgb25seSwgdGhlbgotLy8geW91IG9ubHkgbmVlZCB0byBleGFtaW5lIHRoZSBCYXNpY0Jsb2Nr
OjptX3ZhbHVlc0F0SGVhZCBvciBtX3ZhbHVlc0F0VGFpbCBmaWVsZHMuCi0vLwotLy8gUnVubmlu
ZyB0aGlzIGFuYWx5c2lzIGludm9sdmVzIHRoZSBmb2xsb3dpbmcsIG1vZHVsbyB0aGUgaW50ZXIt
YmxvY2sgc3RhdGUKLS8vIG1lcmdpbmcgYW5kIGNvbnZlcmdlbmNlIGZpeHBvaW50OgotLy8KLS8v
IEFic3RyYWN0U3RhdGUgc3RhdGUoY29kZUJsb2NrLCBncmFwaCk7Ci0vLyBzdGF0ZS5iZWdpbkJh
c2ljQmxvY2soYmFzaWNCbG9jayk7Ci0vLyBib29sIGVuZFJlYWNoZWQgPSB0cnVlOwotLy8gZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2stPnNpemUoKTsgKytpKSB7Ci0vLyAgICAg
aWYgKCFzdGF0ZS5leGVjdXRlKGkpKQotLy8gICAgICAgICBicmVhazsKLS8vIH0KLS8vIGJvb2wg
cmVzdWx0ID0gc3RhdGUuZW5kQmFzaWNCbG9jayg8ZWl0aGVyIE1lcmdlIG9yIERvbnRNZXJnZT4p
OwotCi1jbGFzcyBBYnN0cmFjdFN0YXRlIHsKLXB1YmxpYzoKLSAgICBlbnVtIE1lcmdlTW9kZSB7
Ci0gICAgICAgIC8vIERvbid0IG1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0cmFjdFN0YXRlIHdpdGgg
YmFzaWMgYmxvY2tzLgotICAgICAgICBEb250TWVyZ2UsCi0gICAgICAgIAotICAgICAgICAvLyBN
ZXJnZSB0aGUgc3RhdGUgaW4gQWJzdHJhY3RTdGF0ZSB3aXRoIHRoZSB0YWlsIG9mIHRoZSBiYXNp
YwotICAgICAgICAvLyBibG9jayBiZWluZyBhbmFseXplZC4KLSAgICAgICAgTWVyZ2VUb1RhaWws
Ci0gICAgICAgIAotICAgICAgICAvLyBNZXJnZSB0aGUgc3RhdGUgaW4gQWJzdHJhY3RTdGF0ZSB3
aXRoIHRoZSB0YWlsIG9mIHRoZSBiYXNpYwotICAgICAgICAvLyBibG9jaywgYW5kIHdpdGggdGhl
IGhlYWRzIG9mIHN1Y2Nlc3NvciBibG9ja3MuCi0gICAgICAgIE1lcmdlVG9TdWNjZXNzb3JzCi0g
ICAgfTsKLSAgICAKLSAgICBBYnN0cmFjdFN0YXRlKEdyYXBoJik7Ci0gICAgCi0gICAgfkFic3Ry
YWN0U3RhdGUoKTsKLSAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUqIG5vZGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gbm9kZS0+dmFsdWU7Ci0gICAgfQotICAgIAotICAgIEFi
c3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZv
ck5vZGUoZWRnZS5ub2RlKCkpOwotICAgIH0KLSAgICAKLSAgICBPcGVyYW5kczxBYnN0cmFjdFZh
bHVlPiYgdmFyaWFibGVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhYmxlczsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBuZWVkc1R5cGVDaGVjayhOb2RlKiBub2RlLCBTcGVjdWxhdGVk
VHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gpCi0gICAgewotICAgICAgICByZXR1cm4gZm9yTm9kZShu
b2RlKS5tX3R5cGUgJiB+dHlwZXNQYXNzZWRUaHJvdWdoOwotICAgIH0KLSAgICAKLSAgICBib29s
IG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJv
dWdoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5lZWRzVHlwZUNoZWNrKGVkZ2Uubm9kZSgpLCB0
eXBlc1Bhc3NlZFRocm91Z2gpOwotICAgIH0KLSAgICAKLSAgICBib29sIG5lZWRzVHlwZUNoZWNr
KEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZWVkc1R5cGVDaGVjayhlZGdlLCB0
eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSk7Ci0gICAgfQotICAgIAotICAgIC8vIENhbGwg
dGhpcyBiZWZvcmUgYmVnaW5uaW5nIENGQSB0byBpbml0aWFsaXplIHRoZSBhYnN0cmFjdCB2YWx1
ZXMgb2YKLSAgICAvLyBhcmd1bWVudHMsIGFuZCB0byBpbmRpY2F0ZSB3aGljaCBibG9ja3Mgc2hv
dWxkIGJlIGxpc3RlZCBmb3IgQ0ZBCi0gICAgLy8gZXhlY3V0aW9uLgotICAgIHZvaWQgaW5pdGlh
bGl6ZSgpOwotCi0gICAgLy8gU3RhcnQgYWJzdHJhY3RseSBleGVjdXRpbmcgdGhlIGdpdmVuIGJh
c2ljIGJsb2NrLiBJbml0aWFsaXplcyB0aGUKLSAgICAvLyBub3Rpb24gb2YgYWJzdHJhY3Qgc3Rh
dGUgdG8gd2hhdCB3ZSBiZWxpZXZlIGl0IHRvIGJlIGF0IHRoZSBoZWFkCi0gICAgLy8gb2YgdGhl
IGJhc2ljIGJsb2NrLCBhY2NvcmRpbmcgdG8gdGhlIGJhc2ljIGJsb2NrJ3MgZGF0YSBzdHJ1Y3R1
cmVzLgotICAgIC8vIFRoaXMgbWV0aG9kIGFsc28gc2V0cyBjZmFTaG91bGRSZXZpc2l0IHRvIGZh
bHNlLgotICAgIHZvaWQgYmVnaW5CYXNpY0Jsb2NrKEJhc2ljQmxvY2sqKTsKLSAgICAKLSAgICAv
LyBGaW5pc2ggYWJzdHJhY3RseSBleGVjdXRpbmcgYSBiYXNpYyBibG9jay4gSWYgTWVyZ2VUb1Rh
aWwgb3IKLSAgICAvLyBNZXJnZVRvU3VjY2Vzc29ycyBpcyBwYXNzZWQsIHRoZW4gdGhpcyBtZXJn
ZXMgZXZlcnl0aGluZyB3ZSBoYXZlCi0gICAgLy8gbGVhcm5lZCBhYm91dCBob3cgdGhlIHN0YXRl
IGNoYW5nZXMgZHVyaW5nIHRoaXMgYmxvY2sncyBleGVjdXRpb24gaW50bwotICAgIC8vIHRoZSBi
bG9jaydzIGRhdGEgc3RydWN0dXJlcy4gVGhlcmUgYXJlIHRocmVlIHJldHVybiBtb2RlcywgZGVw
ZW5kaW5nCi0gICAgLy8gb24gdGhlIHZhbHVlIG9mIG1lcmdlTW9kZToKLSAgICAvLwotICAgIC8v
IERvbnRNZXJnZToKLSAgICAvLyAgICBBbHdheXMgcmV0dXJucyBmYWxzZS4KLSAgICAvLwotICAg
IC8vIE1lcmdlVG9UYWlsOgotICAgIC8vICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RhdGUgb2Yg
dGhlIGJsb2NrIGF0IHRoZSB0YWlsIHdhcyBjaGFuZ2VkLgotICAgIC8vICAgIFRoaXMgbWVhbnMg
dGhhdCB5b3UgbXVzdCBjYWxsIG1lcmdlVG9TdWNjZXNzb3JzKCksIGFuZCBpZiB0aGF0Ci0gICAg
Ly8gICAgcmV0dXJucyB0cnVlLCB0aGVuIHlvdSBtdXN0IHJldmlzaXQgKGF0IGxlYXN0KSB0aGUg
c3VjY2Vzc29yCi0gICAgLy8gICAgYmxvY2tzLiBGYWxzZSB3aWxsIGFsd2F5cyBiZSByZXR1cm5l
ZCBpZiB0aGUgYmxvY2sgaXMgdGVybWluYWwKLSAgICAvLyAgICAoaS5lLiBlbmRzIGluIFRocm93
IG9yIFJldHVybiwgb3IgaGFzIGEgRm9yY2VPU1JFeGl0IGluc2lkZSBpdCkuCi0gICAgLy8KLSAg
ICAvLyBNZXJnZVRvU3VjY2Vzc29yczoKLSAgICAvLyAgICBSZXR1cm5zIHRydWUgaWYgdGhlIHN0
YXRlIG9mIHRoZSBibG9jayBhdCB0aGUgdGFpbCB3YXMgY2hhbmdlZCwKLSAgICAvLyAgICBhbmQs
IGlmIHRoZSBzdGF0ZSBhdCB0aGUgaGVhZHMgb2Ygc3VjY2Vzc29ycyB3YXMgY2hhbmdlZC4KLSAg
ICAvLyAgICBBIHRydWUgcmV0dXJuIG1lYW5zIHRoYXQgeW91IG11c3QgcmV2aXNpdCAoYXQgbGVh
c3QpIHRoZSBzdWNjZXNzb3IKLSAgICAvLyAgICBibG9ja3MuIFRoaXMgYWxzbyBzZXRzIGNmYVNo
b3VsZFJldmlzaXQgdG8gdHJ1ZSBmb3IgYmFzaWMgYmxvY2tzCi0gICAgLy8gICAgdGhhdCBtdXN0
IGJlIHZpc2l0ZWQgbmV4dC4KLSAgICBib29sIGVuZEJhc2ljQmxvY2soTWVyZ2VNb2RlKTsKLSAg
ICAKLSAgICAvLyBSZXNldCB0aGUgQWJzdHJhY3RTdGF0ZS4gVGhpcyB0aHJvd3MgYXdheSBhbnkg
cmVzdWx0cywgYW5kIGF0IHRoaXMgcG9pbnQKLSAgICAvLyB5b3UgY2FuIHNhZmVseSBjYWxsIGJl
Z2luQmFzaWNCbG9jaygpIG9uIGFueSBiYXNpYyBibG9jay4KLSAgICB2b2lkIHJlc2V0KCk7Ci0g
ICAgCi0gICAgLy8gQWJzdHJhY3RseSBleGVjdXRlcyB0aGUgZ2l2ZW4gbm9kZS4gVGhlIG5ldyBh
YnN0cmFjdCBzdGF0ZSBpcyBzdG9yZWQgaW50byBhbgotICAgIC8vIGFic3RyYWN0IHN0YWNrIHN0
b3JlZCBpbiAqdGhpcy4gTG9hZHMgb2YgbG9jYWwgdmFyaWFibGVzICh0aGF0IHNwYW4KLSAgICAv
LyBiYXNpYyBibG9ja3MpIGludGVycm9nYXRlIHRoZSBiYXNpYyBibG9jaydzIG5vdGlvbiBvZiB0
aGUgc3RhdGUgYXQgdGhlIGhlYWQuCi0gICAgLy8gU3RvcmVzIHRvIGxvY2FsIHZhcmlhYmxlcyBh
cmUgaGFuZGxlZCBpbiBlbmRCYXNpY0Jsb2NrKCkuIFRoaXMgcmV0dXJucyB0cnVlCi0gICAgLy8g
aWYgZXhlY3V0aW9uIHNob3VsZCBjb250aW51ZSBwYXN0IHRoaXMgbm9kZS4gTm90YWJseSwgaXQg
d2lsbCByZXR1cm4gdHJ1ZQotICAgIC8vIGZvciBibG9jayB0ZXJtaW5hbHMsIHNvIGxvbmcgYXMg
dGhvc2UgdGVybWluYWxzIGFyZSBub3QgUmV0dXJuIG9yIHZhcmlhbnRzCi0gICAgLy8gb2YgVGhy
b3cuCi0gICAgLy8KLSAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8gYmUgZXF1aXZhbGVudCB0
byBkb2luZzoKLSAgICAvLwotICAgIC8vIGlmIChzdGF0ZS5zdGFydEV4ZWN1dGluZyhpbmRleCkp
IHsKLSAgICAvLyAgICAgc3RhdGUuZXhlY3V0ZUVkZ2VzKGluZGV4KTsKLSAgICAvLyAgICAgcmVz
dWx0ID0gc3RhdGUuZXhlY3V0ZUVmZmVjdHMoaW5kZXgpOwotICAgIC8vIH0gZWxzZQotICAgIC8v
ICAgICByZXN1bHQgPSB0cnVlOwotICAgIGJvb2wgZXhlY3V0ZSh1bnNpZ25lZCBpbmRleEluQmxv
Y2spOwotICAgIAotICAgIC8vIEluZGljYXRlIHRoZSBzdGFydCBvZiBleGVjdXRpb24gb2YgdGhl
IG5vZGUuIEl0IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUsCi0gICAgLy8gdGhhdCBpcyBw
cm9ncmVzc2l2ZWx5IGJ1aWx0IHVwIGJ5IGV4ZWN1dGVFZGdlcygpIGFuZCBleGVjdXRlRWZmZWN0
cygpLiBJbgotICAgIC8vIHBhcnRpY3VsYXIsIHRoaXMgcmVzZXRzIGNhbkV4aXQoKSwgc28gaWYg
eW91IHdhbnQgdG8gImtub3ciIGJldHdlZW4gY2FsbHMgb2YKLSAgICAvLyBzdGFydEV4ZWN1dGlu
ZygpIGFuZCBleGVjdXRlRWRnZXMoKS9FZmZlY3RzKCkgd2hldGhlciB0aGUgbGFzdCBydW4gb2Yg
dGhlCi0gICAgLy8gYW5hbHlzaXMgY29uY2x1ZGVkIHRoYXQgdGhlIG5vZGUgY2FuIGV4aXQsIHlv
dSBzaG91bGQgcHJvYmFibHkgc2V0IHRoYXQKLSAgICAvLyBpbmZvcm1hdGlvbiBhc2lkZSBwcmlv
ciB0byBjYWxsaW5nIHN0YXJ0RXhlY3V0aW5nKCkuCi0gICAgYm9vbCBzdGFydEV4ZWN1dGluZyhO
b2RlKik7Ci0gICAgYm9vbCBzdGFydEV4ZWN1dGluZyh1bnNpZ25lZCBpbmRleEluQmxvY2spOwot
ICAgIAotICAgIC8vIEFic3RyYWN0bHkgZXhlY3V0ZSB0aGUgZWRnZXMgb2YgdGhlIGdpdmVuIG5v
ZGUuIFRoaXMgcnVucyBmaWx0ZXJFZGdlQnlVc2UoKQotICAgIC8vIG9uIGFsbCBlZGdlcyBvZiB0
aGUgbm9kZS4gWW91IGNhbiBza2lwIHRoaXMgc3RlcCwgaWYgeW91IGhhdmUgYWxyZWFkeSB1c2Vk
Ci0gICAgLy8gZmlsdGVyRWRnZUJ5VXNlKCkgKG9yIHNvbWUgZXF1aXZhbGVudCkgb24gZWFjaCBl
ZGdlLgotICAgIHZvaWQgZXhlY3V0ZUVkZ2VzKE5vZGUqKTsKLSAgICB2b2lkIGV4ZWN1dGVFZGdl
cyh1bnNpZ25lZCBpbmRleEluQmxvY2spOwotICAgIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBm
aWx0ZXJFZGdlQnlVc2UoTm9kZSogbm9kZSwgRWRnZSYgZWRnZSkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtYXlIYXZlVHlwZUNoZWNrKGVkZ2UudXNlS2luZCgpKSB8fCAhbmVlZHNUeXBlQ2hlY2so
ZWRnZSkpOwotICAgICAgICBmaWx0ZXJCeVR5cGUobm9kZSwgZWRnZSwgdHlwZUZpbHRlckZvcihl
ZGdlLnVzZUtpbmQoKSkpOwotICAgIH0KLSAgICAKLSAgICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUg
dGhlIGVmZmVjdHMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgY2hhbmdlcyB0aGUgYWJzdHJhY3QK
LSAgICAvLyBzdGF0ZSBhc3N1bWluZyB0aGF0IGVkZ2VzIGhhdmUgYWxyZWFkeSBiZWVuIGZpbHRl
cmVkLgotICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKLSAg
ICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSopOwotICAg
IAotICAgIC8vIERpZCB0aGUgbGFzdCBleGVjdXRlZCBub2RlIGNsb2JiZXIgdGhlIHdvcmxkPwot
ICAgIGJvb2wgZGlkQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkQ2xvYmJlcjsgfQotICAg
IAotICAgIC8vIElzIHRoZSBleGVjdXRpb24gc3RhdGUgc3RpbGwgdmFsaWQ/IFRoaXMgd2lsbCBi
ZSBmYWxzZSBpZiBleGVjdXRlKCkgaGFzCi0gICAgLy8gcmV0dXJuZWQgZmFsc2UgcHJldmlvdXNs
eS4KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAK
LSAgICAvLyBNZXJnZSB0aGUgYWJzdHJhY3Qgc3RhdGUgc3RvcmVkIGF0IHRoZSBmaXJzdCBibG9j
aydzIHRhaWwgaW50byB0aGUgc2Vjb25kCi0gICAgLy8gYmxvY2sncyBoZWFkLiBSZXR1cm5zIHRy
dWUgaWYgdGhlIHNlY29uZCBibG9jaydzIHN0YXRlIGNoYW5nZWQuIElmIHNvLAotICAgIC8vIHRo
YXQgYmxvY2sgbXVzdCBiZSBhYnN0cmFjdGx5IGludGVycHJldGVkIGFnYWluLiBUaGlzIGFsc28g
c2V0cwotICAgIC8vIHRvLT5jZmFTaG91bGRSZXZpc2l0IHRvIHRydWUsIGlmIGl0IHJldHVybnMg
dHJ1ZSwgb3IgaWYgdG8gaGFzIG5vdCBiZWVuCi0gICAgLy8gdmlzaXRlZCB5ZXQuCi0gICAgYm9v
bCBtZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7Ci0gICAgCi0gICAgLy8g
TWVyZ2UgdGhlIGFic3RyYWN0IHN0YXRlIHN0b3JlZCBhdCB0aGUgYmxvY2sncyB0YWlsIGludG8g
YWxsIG9mIGl0cwotICAgIC8vIHN1Y2Nlc3NvcnMuIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhl
IHN1Y2Nlc3NvcnMnIHN0YXRlcyBjaGFuZ2VkLiBOb3RlCi0gICAgLy8gdGhhdCB0aGlzIGlzIGF1
dG9tYXRpY2FsbHkgY2FsbGVkIGluIGVuZEJhc2ljQmxvY2soKSBpZiBNZXJnZU1vZGUgaXMKLSAg
ICAvLyBNZXJnZVRvU3VjY2Vzc29ycy4KLSAgICBib29sIG1lcmdlVG9TdWNjZXNzb3JzKEJhc2lj
QmxvY2sqKTsKLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7Ci0gICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5v
ZGUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpbHRl
cihmb3JOb2RlKG5vZGUpLCBzZXQpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2RlcyhUIG5vZGUsIEFycmF5
TW9kZXMgYXJyYXlNb2RlcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBmaWx0ZXJBcnJheU1vZGVz
KGZvck5vZGUobm9kZSksIGFycmF5TW9kZXMpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwg
dHlwZSk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgRmlsdHJh
dGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKFQgbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmaWx0ZXJCeVZhbHVlKGZvck5vZGUobm9kZSksIHZhbHVlKTsKLSAgICB9
Ci0gICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0
IFN0cnVjdHVyZVNldCYpOwotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2RlcyhB
YnN0cmFjdFZhbHVlJiwgQXJyYXlNb2Rlcyk7Ci0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIo
QWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZp
bHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEpTVmFsdWUpOwotICAgIAotcHJpdmF0ZToKLSAg
ICB2b2lkIGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJs
b2NrKTsKLSAgICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3QgQ29kZU9yaWdpbiYpOwot
ICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKLSAgICAK
LSAgICBib29sIG1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFi
c3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGUqKTsKLSAgICAKLSAgICBzdGF0aWMgYm9vbCBt
ZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJz
dHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlKiBkZXN0aW5hdGlvbk5vZGUsIE5vZGUqIHNvdXJjZU5v
ZGUpOwotICAgIAotICAgIGVudW0gQm9vbGVhblJlc3VsdCB7Ci0gICAgICAgIFVua25vd25Cb29s
ZWFuUmVzdWx0LAotICAgICAgICBEZWZpbml0ZWx5RmFsc2UsCi0gICAgICAgIERlZmluaXRlbHlU
cnVlCi0gICAgfTsKLSAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSosIEFic3Ry
YWN0VmFsdWUmKTsKLSAgICAKLSAgICBib29sIHRyeVNldENvbnN0YW50KE5vZGUqIG5vZGUsIEpT
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgY29uc3Rh
bnQgZm9sZCBzb21ldGhpbmcgdGhhdCB3aWxsIHByb2R1Y2UgdmFsdWVzIHRoYXQgY29udHJhdmVu
ZQotICAgICAgICAvLyBwcmVkaWN0aW9ucy4gSWYgdGhhdCBoYXBwZW5zIHRoZW4gd2Uga25vdyB0
aGF0IHRoZSBjb2RlIHdpbGwgT1NSIGV4aXQsIGZvcmNpbmcKLSAgICAgICAgLy8gcmVjb21waWxh
dGlvbi4gQnV0IGlmIHdlIHRyaWVkIHRvIGNvbnN0YW50IGZvbGQgdGhlbiB3ZSdsbCBoYXZlIGEg
dmVyeSBkZWdlbmVyYXRlCi0gICAgICAgIC8vIElSOiBuYW1lbHkgd2UnbGwgaGF2ZSBhIEpTQ29u
c3RhbnQgdGhhdCBjb250cmF2ZW5lcyBpdHMgb3duIHByZWRpY3Rpb24uIFRoZXJlJ3MgYQotICAg
ICAgICAvLyBsb3Qgb2Ygc3VidGxlIGNvZGUgdGhhdCBhc3N1bWVzIHRoYXQKLSAgICAgICAgLy8g
c3BlY3VsYXRpb25Gcm9tVmFsdWUoanNDb25zdGFudCkgPT0ganNDb25zdGFudC5wcmVkaWN0aW9u
KCkuICJIYXJkZW5pbmciIHRoYXQgY29kZQotICAgICAgICAvLyBpcyBwcm9iYWJseSBsZXNzIHNh
bmUgdGhhbiBqdXN0IHB1bGxpbmcgYmFjayBvbiBjb25zdGFudCBmb2xkaW5nLgotICAgICAgICBT
cGVjdWxhdGVkVHlwZSBvbGRUeXBlID0gbm9kZS0+cHJlZGljdGlvbigpOwotICAgICAgICBpZiAo
bWVyZ2VTcGVjdWxhdGlvbnMoc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpLCBvbGRUeXBlKSAh
PSBvbGRUeXBlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgdmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBu
b2RlLCBFZGdlJiBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKGVkZ2UpOwotICAgICAgICBpZiAodmFsdWUubV90
eXBlICYgfnR5cGUpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAg
ICAgICAgICBlZGdlLnNldFByb29mU3RhdHVzKE5lZWRzQ2hlY2spOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGVkZ2Uuc2V0UHJvb2ZTdGF0dXMoSXNQcm92ZWQpOwotICAgICAgICAKLSAg
ICAgICAgZmlsdGVyKHZhbHVlLCB0eXBlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCB2ZXJpZnlF
ZGdlKE5vZGUqLCBFZGdlKTsKLSAgICB2b2lkIHZlcmlmeUVkZ2VzKE5vZGUqKTsKLSAgICAKLSAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwotICAgIEdyYXBoJiBtX2dyYXBoOwotICAgIAotICAg
IE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IG1fdmFyaWFibGVzOwotICAgIEJhc2ljQmxvY2sqIG1f
YmxvY2s7Ci0gICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKLSAgICAKLSAgICBib29sIG1faGF2ZVN0
cnVjdHVyZXM7Ci0gICAgYm9vbCBtX2ZvdW5kQ29uc3RhbnRzOwotICAgIAotICAgIGJvb2wgbV9p
c1ZhbGlkOwotICAgIGJvb2wgbV9kaWRDbG9iYmVyOwotICAgIAotICAgIEJyYW5jaERpcmVjdGlv
biBtX2JyYW5jaERpcmVjdGlvbjsgLy8gVGhpcyBpcyBvbmx5IHNldCBmb3IgYmxvY2tzIHRoYXQg
ZW5kIGluIEJyYW5jaCBhbmQgdGhhdCBleGVjdXRlIHRvIGNvbXBsZXRpb24gKGkuZS4gbV9pc1Zh
bGlkID09IHRydWUpLgotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCi0KLSNlbmRpZiAvLyBERkdBYnN0cmFjdFN0YXRlX2gKLQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI4MjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAot
I2luY2x1ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgi
CiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAx
NTI4MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOSBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNp
bmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCiAKQEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIENGQVBoYXNlKEdyYXBo
JiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImNvbnRyb2wgZmxvdyBhbmFseXNpcyIp
CiAgICAgICAgICwgbV9zdGF0ZShncmFwaCkKKyAgICAgICAgLCBtX2ludGVycHJldGVyKGdyYXBo
LCBtX3N0YXRlKQogICAgIHsKICAgICB9CiAgICAgCkBAIC05NywxMCArOTksMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChpKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgJXMgQCV1
OiAiLCBHcmFwaDo6b3BOYW1lKG5vZGUtPm9wKCkpLCBub2RlLT5pbmRleCgpKTsKLSAgICAgICAg
ICAgICAgICBtX3N0YXRlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgICAgICBt
X2ludGVycHJldGVyLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgICAgICAgICBkYXRh
TG9nRigiXG4iKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghbV9zdGF0ZS5leGVj
dXRlKGkpKSB7CisgICAgICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpKSkgewog
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
RigiICAgICAgICAgRXhwZWN0IE9TUiBleGl0LlxuIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0xMDgsMTAgKzExMCwxMCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIGlmICh2
ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgdGFpbCByZWdzOiAiKTsKLSAg
ICAgICAgICAgIG1fc3RhdGUuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAgICAgbV9p
bnRlcnByZXRlci5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgICAgICBkYXRhTG9nRigi
XG4iKTsKICAgICAgICAgfQotICAgICAgICBtX2NoYW5nZWQgfD0gbV9zdGF0ZS5lbmRCYXNpY0Js
b2NrKEFic3RyYWN0U3RhdGU6Ok1lcmdlVG9TdWNjZXNzb3JzKTsKKyAgICAgICAgbV9jaGFuZ2Vk
IHw9IG1fc3RhdGUuZW5kQmFzaWNCbG9jayhNZXJnZVRvU3VjY2Vzc29ycyk7CiAgICAgICAgIAog
ICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIHRhaWwg
dmFyczogIik7CkBAIC0xMzEsNyArMTMzLDggQEAgcHJpdmF0ZToKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOworICAgIEluUGxhY2VBYnN0cmFjdFN0YXRlIG1f
c3RhdGU7CisgICAgQWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJzdHJhY3RTdGF0ZT4gbV9p
bnRlcnByZXRlcjsKICAgICAKICAgICBib29sIG1fY2hhbmdlZDsKICAgICB1bnNpZ25lZCBtX2Nv
dW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI4MjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUg
IkRGR0Fic3RyYWN0U3RhdGUuaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgog
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMTUyODI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4
LDEwIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgIkRGR0Fic3RyYWN0U3Rh
dGUuaCIKKyNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1
ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAj
aW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCkBAIC00NCw2
ICs0NSw3IEBAIHB1YmxpYzoKICAgICBDb25zdGFudEZvbGRpbmdQaGFzZShHcmFwaCYgZ3JhcGgp
CiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJjb25zdGFudCBmb2xkaW5nIikKICAgICAgICAgLCBt
X3N0YXRlKGdyYXBoKQorICAgICAgICAsIG1faW50ZXJwcmV0ZXIoZ3JhcGgsIG1fc3RhdGUpCiAg
ICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCiAgICAgewogICAgIH0KQEAgLTEwMCw3ICsx
MDIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgewotICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3Qg
dGhhdCB3ZSBtYXkgZmlsdGVyIG9uIGNlbGwuCisgICAgICAgICAgICAgICAgICAgIG1faW50ZXJw
cmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1h
eSBmaWx0ZXIgb24gY2VsbC4KICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhh
bnRvbSgpOwogICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDksNyArMTExLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBpZiAoc3RydWN0dXJlVmFsdWUuaXNTdWJzZXRPZihzZXQpCiAgICAgICAgICAgICAg
ICAgICAgICYmIHN0cnVjdHVyZVZhbHVlLmhhc1NpbmdsZXRvbigpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlVmFsdWUuc2luZ2xldG9uKCk7
Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBD
YXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4KKyAgICAgICAgICAgICAg
ICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIENhdGNoIHRoZSBm
YWN0IHRoYXQgd2UgbWF5IGZpbHRlciBvbiBjZWxsLgogICAgICAgICAgICAgICAgICAgICBBZGph
Y2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGRyZW47CiAgICAgICAgICAgICAgICAgICAg
IGNoaWxkcmVuLnJlbW92ZUVkZ2UoMCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghIWNoaWxk
cmVuLmNoaWxkMSgpKSB7CkBAIC0xNzcsNyArMTc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAvLyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2ggdGhlIENGQSBmb3J3
YXJkIG92ZXIgdGhlIEdldEJ5SWQKICAgICAgICAgICAgICAgICAvLyBhbmQgbWFrZSBzdXJlIHdl
IHNpZ25hbCB0byB0aGUgbG9vcCB0aGF0IGl0IHNob3VsZCBjb250aW51ZSBhbmQgbm90CiAgICAg
ICAgICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KLSAgICAgICAgICAgICAgICBtX3N0
YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBtX2ludGVycHJldGVy
LmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobmVlZHNXYXRjaHBvaW50
KSB7CkBAIC0yNDAsNyArMjQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBOb3cg
YmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2ggdGhlIENGQSBmb3J3YXJkIG92ZXIgdGhl
IFB1dEJ5SWQKICAgICAgICAgICAgICAgICAvLyBhbmQgbWFrZSBzdXJlIHdlIHNpZ25hbCB0byB0
aGUgbG9vcCB0aGF0IGl0IHNob3VsZCBjb250aW51ZSBhbmQgbm90CiAgICAgICAgICAgICAgICAg
Ly8gZG8gYW55IGVsaW1pbmF0aW9ucy4KLSAgICAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUo
aW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobmVlZHNXYXRjaHBvaW50KSB7CkBAIC0zMjks
NyArMzMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9j
ayk7CiAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkgfHwgbV9zdGF0ZS5k
aWRDbG9iYmVyKCkgfHwgbm9kZS0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSku
dmFsdWUoKTsKQEAgLTQxNyw3ICs0MTksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIEVkZ2Uod2Vha0Nv
bnN0YW50LCBDZWxsVXNlKSk7CiAgICAgfQogICAgIAotICAgIEFic3RyYWN0U3RhdGUgbV9zdGF0
ZTsKKyAgICBJblBsYWNlQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOworICAgIEFic3RyYWN0SW50ZXJw
cmV0ZXI8SW5QbGFjZUFic3RyYWN0U3RhdGU+IG1faW50ZXJwcmV0ZXI7CiAgICAgSW5zZXJ0aW9u
U2V0IG1faW5zZXJ0aW9uU2V0OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkdl
dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUHV0QnlJ
ZFN0YXR1cy5oIgorI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK0luUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZShHcmFwaCYgZ3JhcGgpCisgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgICwgbV92YXJpYWJs
ZXMobV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBncmFwaC5tX2xvY2FsVmFy
cykKKyAgICAsIG1fYmxvY2soMCkKK3sKK30KKworSW5QbGFjZUFic3RyYWN0U3RhdGU6On5JblBs
YWNlQWJzdHJhY3RTdGF0ZSgpIHsgfQorCit2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpiZWdp
bkJhc2ljQmxvY2soQmFzaWNCbG9jayogYmFzaWNCbG9jaykKK3sKKyAgICBBU1NFUlQoIW1fYmxv
Y2spOworICAgIAorICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVy
T2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7
CisgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2Fscygp
ID09IGJhc2ljQmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICBBU1NF
UlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkgPT0gYmFzaWNC
bG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOworICAgIAorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+c2l6ZSgpOyBpKyspCisgICAgICAgIGZvck5v
ZGUoYmFzaWNCbG9jay0+YXQoaSkpLmNsZWFyKCk7CisKKyAgICBtX3ZhcmlhYmxlcyA9IGJhc2lj
QmxvY2stPnZhbHVlc0F0SGVhZDsKKyAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gZmFsc2U7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5udW1iZXJPZkFyZ3VtZW50cygpOyAr
K2kpIHsKKyAgICAgICAgaWYgKG1fdmFyaWFibGVzLmFyZ3VtZW50KGkpLmhhc0Nsb2JiZXJhYmxl
U3RhdGUoKSkgeworICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fdmFyaWFibGVzLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICBpZiAobV92YXJp
YWJsZXMubG9jYWwoaSkuaGFzQ2xvYmJlcmFibGVTdGF0ZSgpKSB7CisgICAgICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgSGFzaE1h
cDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSBiYXNpY0Jsb2NrLT5zc2Et
PnZhbHVlc0F0SGVhZC5iZWdpbigpOworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZh
bHVlPjo6aXRlcmF0b3IgZW5kID0gYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQuZW5kKCk7
CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBmb3JO
b2RlKGl0ZXItPmtleSkgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAgIGlmIChpdGVyLT52YWx1
ZS5oYXNDbG9iYmVyYWJsZVN0YXRlKCkpCisgICAgICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJl
cyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYmFzaWNCbG9jay0+Y2ZhU2hv
dWxkUmV2aXNpdCA9IGZhbHNlOworICAgIGJhc2ljQmxvY2stPmNmYUhhc1Zpc2l0ZWQgPSB0cnVl
OworICAgIG1fYmxvY2sgPSBiYXNpY0Jsb2NrOworICAgIG1faXNWYWxpZCA9IHRydWU7CisgICAg
bV9mb3VuZENvbnN0YW50cyA9IGZhbHNlOworICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gSW52YWxp
ZEJyYW5jaERpcmVjdGlvbjsKK30KKworc3RhdGljIHZvaWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFw
PE5vZGUqLCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBIYXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3sK
KyAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICAKKyAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3Ig
aXRlciA9IGxpdmUuYmVnaW4oKTsKKyAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0g
bGl2ZS5lbmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgdmFs
dWVzLmFkZCgqaXRlciwgQWJzdHJhY3RWYWx1ZSgpKTsKK30KKwordm9pZCBJblBsYWNlQWJzdHJh
Y3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCit7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGgu
YmxvY2soMCk7CisgICAgcm9vdC0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRydWU7CisgICAgcm9vdC0+
Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOworICAgIHJvb3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFs
c2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVy
T2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
IHsKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTm9k
ZSogbm9kZSA9IHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKTsKKyAgICAgICAgQVNT
RVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICBpZiAoIW5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgeworICAgICAgICAgICAg
cm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uID0KKyAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVu
dEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24pKQorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5
cGUoU3BlY0ludDMyKTsKKyAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJl
ZGljdGlvbikpCisgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0
VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pKQorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNl
dFR5cGUoU3BlY0NlbGwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOworICAgICAgICAKKyAgICAgICAgcm9vdC0+dmFs
dWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CisgICAgfQorICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAg
ICAgICBOb2RlKiBub2RlID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOworICAgICAg
ICBpZiAobm9kZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQor
ICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLm1ha2VUb3AoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7
CisgICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOworICAgIH0KKyAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDEgOyBibG9ja0luZGV4IDwgbV9ncmFwaC5u
dW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAg
ICAgYmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKKyAgICAgICAgYmxvY2stPmNmYUhh
c1Zpc2l0ZWQgPSBmYWxzZTsKKyAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFs
c2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0SGVhZC5u
dW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhl
YWQuYXJndW1lbnQoaSkuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdFRhaWwu
YXJndW1lbnQoaSkuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7CisgICAg
ICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CisgICAgICAgICAg
ICBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0
ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7CisgICAgICAgICAgICB2YWx1ZS5zZXRN
b3N0U3BlY2lmaWMobV9ncmFwaCwgbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7
CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1
ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5v
cGVyYW5kKG9wZXJhbmQpLm1lcmdlKHZhbHVlKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICBkYXRhTG9nRigiICAgIEluaXRpYWxpemluZyBC
bG9jayAjJXUsIG9wZXJhbmQgciVkLCB0byAiLCBibG9ja0luZGV4LCBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKS5kdW1wKFdURjo6ZGF0
YUZpbGUoKSk7CisgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKKyNlbmRpZgorICAgICAgICB9
CisgICAgICAgIGJsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBzZXRMaXZlVmFsdWVzKGJsb2NrLT5zc2EtPnZhbHVlc0F0SGVhZCwgYmxv
Y2stPnNzYS0+bGl2ZUF0SGVhZCk7CisgICAgICAgICAgICBzZXRMaXZlVmFsdWVzKGJsb2NrLT5z
c2EtPnZhbHVlc0F0VGFpbCwgYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK2Jvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VN
b2RlIG1lcmdlTW9kZSkKK3sKKyAgICBBU1NFUlQobV9ibG9jayk7CisgICAgCisgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2Jsb2NrOyAvLyBTYXZlIHRoZSBibG9jayBmb3Igc3VjY2Vzc29yIG1l
cmdpbmcuCisgICAgCisgICAgYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0gbV9mb3VuZENvbnN0
YW50czsKKyAgICBibG9jay0+Y2ZhRGlkRmluaXNoID0gbV9pc1ZhbGlkOworICAgIGJsb2NrLT5j
ZmFCcmFuY2hEaXJlY3Rpb24gPSBtX2JyYW5jaERpcmVjdGlvbjsKKyAgICAKKyAgICBpZiAoIW1f
aXNWYWxpZCkgeworICAgICAgICByZXNldCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIGlmIChtZXJnZU1v
ZGUgIT0gRG9udE1lcmdlIHx8ICFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgc3dpdGNoICht
X2dyYXBoLm1fZm9ybSkgeworICAgICAgICBjYXNlIFRocmVhZGVkQ1BTOiB7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CisjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgIE1lcmdpbmcgc3RhdGUgZm9yIGFyZ3VtZW50ICV6dS5cbiIsIGFyZ3VtZW50KTsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZh
bHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1
bWVudCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAw
OyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2Nh
bCkgeworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0YXRlIGZvciBsb2NhbCAlenUuXG4i
LCBsb2NhbCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiA9IGJsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwpOworICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9j
YWwobG9jYWwpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgU1NBOiB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2Nr
LT52YWx1ZXNBdFRhaWwuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBi
bG9jay0+dmFsdWVzQXRUYWlsW2ldLm1lcmdlKG1fdmFyaWFibGVzW2ldKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBibG9jay0+c3Nh
LT5saXZlQXRUYWlsLmJlZ2luKCk7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0
b3IgZW5kID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5lbmQoKTsKKyAgICAgICAgICAgIGZvciAo
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9ICpp
dGVyOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gYmxvY2stPnNzYS0+dmFsdWVzQXRUYWls
LmZpbmQobm9kZSktPnZhbHVlLm1lcmdlKGZvck5vZGUobm9kZSkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBBU1NFUlQobWVyZ2VNb2RlICE9IERvbnRNZXJnZSB8fCAhY2hh
bmdlZCk7CisgICAgCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQor
ICAgIGRhdGFMb2dGKCIgICAgICAgIEJyYW5jaCBkaXJlY3Rpb24gPSAlc1xuIiwgYnJhbmNoRGly
ZWN0aW9uVG9TdHJpbmcobV9icmFuY2hEaXJlY3Rpb24pKTsKKyNlbmRpZgorICAgIAorICAgIHJl
c2V0KCk7CisgICAgCisgICAgaWYgKG1lcmdlTW9kZSAhPSBNZXJnZVRvU3VjY2Vzc29ycykKKyAg
ICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgCisgICAgcmV0dXJuIG1lcmdlVG9TdWNjZXNzb3Jz
KGJsb2NrKTsKK30KKwordm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6cmVzZXQoKQoreworICAg
IG1fYmxvY2sgPSAwOworICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgIG1fYnJhbmNoRGlyZWN0
aW9uID0gSW52YWxpZEJyYW5jaERpcmVjdGlvbjsKK30KKworYm9vbCBJblBsYWNlQWJzdHJhY3RT
dGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJh
Y3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgQWJzdHJhY3RWYWx1ZSBzb3VyY2U7Cisg
ICAgCisgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsK
KyAgICAgICAgLy8gSWYgaXQncyBjYXB0dXJlZCB0aGVuIHdlIGtub3cgdGhhdCB3aGF0ZXZlciB2
YWx1ZSB3YXMgc3RvcmVkIGludG8gdGhlIHZhcmlhYmxlIGxhc3QgaXMgdGhlCisgICAgICAgIC8v
IG9uZSB3ZSBjYXJlIGFib3V0LiBUaGlzIGlzIHRydWUgZXZlbiBpZiB0aGUgdmFyaWFibGUgYXQg
dGFpbCBpcyBkZWFkLCB3aGljaCBtaWdodCBoYXBwZW4gaWYKKyAgICAgICAgLy8gdGhlIGxhc3Qg
dGhpbmcgd2UgZGlkIHRvIHRoZSB2YXJpYWJsZSB3YXMgYSBHZXRMb2NhbCBhbmQgdGhlbiBlbmRl
ZCB1cCBub3cgdXNpbmcgdGhlCisgICAgICAgIC8vIEdldExvY2FsJ3MgcmVzdWx0LgorICAgICAg
ICAKKyAgICAgICAgc291cmNlID0gaW5WYXJpYWJsZTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgVHJhbnNmZXJp
bmcgIik7CisgICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRh
dGFMb2dGKCIgZnJvbSBsYXN0IGFjY2VzcyBkdWUgdG8gY2FwdHVyZWQgdmFyaWFibGUuXG4iKTsK
KyNlbmRpZgorICAgIH0gZWxzZSB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQorICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIEl0J3MgbGl2ZSwgbm9kZSBAJXUu
XG4iLCBub2RlLT5pbmRleCgpKTsKKyNlbmRpZgorICAgIAorICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6Cisg
ICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAg
ICAgLy8gVGhlIGJsb2NrIHRyYW5zZmVycyB0aGUgdmFsdWUgZnJvbSBoZWFkIHRvIHRhaWwuCisg
ICAgICAgICAgICBzb3VyY2UgPSBpblZhcmlhYmxlOworI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgVHJhbnNm
ZXJpbmcgIik7CisgICAgICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAg
ICAgICAgICAgZGF0YUxvZ0YoIiBmcm9tIGhlYWQgdG8gdGFpbC5cbiIpOworI2VuZGlmCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldExvY2FsOgorICAg
ICAgICAgICAgLy8gVGhlIGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRkaXRpb25hbCBz
cGVjdWxhdGlvbnMuCisgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUpOworI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICAgICAgUmVmaW5pbmcgdG8gIik7CisgICAgICAgICAgICBzb3VyY2UuZHVtcChXVEY6
OmRhdGFGaWxlKCkpOworICAgICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CisjZW5kaWYKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAg
ICAgICAgICAvLyBUaGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxseSBy
ZWZpbmVzIGl0LCBib3RoCisgICAgICAgICAgICAvLyBiZWZvcmUgYW5kIGFmdGVyIHNldHRpbmcg
aXQuCisgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVz
ZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgdW5uZWNl
c3NhcmlseSBsb3NlcyBwcmVjaXNpb24uCisgICAgICAgICAgICAgICAgc291cmNlLnNldFR5cGUo
U3BlY0RvdWJsZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzb3VyY2Ug
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCisgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFNldHRpbmcgdG8g
Iik7CisgICAgICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAg
ICAgZGF0YUxvZ0YoIlxuIik7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAo
ZGVzdGluYXRpb24gPT0gc291cmNlKSB7CisgICAgICAgIC8vIEFic3RyYWN0IGV4ZWN1dGlvbiBk
aWQgbm90IGNoYW5nZSB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgZm9yIHRoaXMK
KyAgICAgICAgLy8gYmFzaWMgYmxvY2ssIG9uIHRoaXMgaXRlcmF0aW9uLgorI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAg
ICBOb3QgY2hhbmdlZCFcbiIpOworI2VuZGlmCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgCisgICAgLy8gQWJzdHJhY3QgZXhlY3V0aW9uIHJlYWNoZWQgYSBuZXcgY29uY2x1c2lv
biBhYm91dCB0aGUgc3BlY3VsYXRpb25zIHJlYWNoZWQgYWJvdXQKKyAgICAvLyB0aGlzIHZhcmlh
YmxlIGFmdGVyIGV4ZWN1dGlvbiBvZiB0aGlzIGJhc2ljIGJsb2NrLiBVcGRhdGUgdGhlIHN0YXRl
LCBhbmQgcmV0dXJuCisgICAgLy8gdHJ1ZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBmaXhwb2ludCBt
dXN0IGdvIG9uIQorICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICBkYXRhTG9nRigiICAgICAgICAgIENoYW5nZWQh
XG4iKTsKKyNlbmRpZgorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluUGxhY2VBYnN0cmFj
dFN0YXRlOjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBB
U1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCkgPT0gdG8tPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICBBU1NFUlQoZnJvbS0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkxvY2FscygpKTsKKyAgICAKKyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAKKyAg
ICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7CisgICAgY2FzZSBUaHJlYWRlZENQUzogeworICAg
ICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZnJvbS0+dmFyaWFibGVz
QXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gdG8tPnZhbHVlc0F0SGVhZC5hcmd1bWVudChhcmd1
bWVudCk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tz
KGRlc3RpbmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpLCB0by0+
dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSwgZnJvbS0+dmFyaWFibGVzQXRUYWls
LmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
c2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZM
b2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRp
b24gPSB0by0+dmFsdWVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0
VGFpbC5sb2NhbChsb2NhbCksIHRvLT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpLCBmcm9t
LT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgU1NBOiB7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBmcm9tLT52YWx1ZXNBdFRhaWwuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgY2hhbmdl
ZCB8PSB0by0+dmFsdWVzQXRIZWFkW2ldLm1lcmdlKGZyb20tPnZhbHVlc0F0VGFpbFtpXSk7Cisg
ICAgICAgIAorICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IHRvLT5zc2Et
PmxpdmVBdEhlYWQuYmVnaW4oKTsKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVu
ZCA9IHRvLT5zc2EtPmxpdmVBdEhlYWQuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHRvLT5zc2EtPnZhbHVlc0F0SGVhZC5maW5kKG5vZGUpLT52YWx1ZS5tZXJn
ZSgKKyAgICAgICAgICAgICAgICBmcm9tLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKG5vZGUpLT52
YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBpZiAoIXRvLT5jZmFIYXNWaXNpdGVkKQorICAgICAgICBjaGFu
Z2VkID0gdHJ1ZTsKKyAgICAKKyAgICB0by0+Y2ZhU2hvdWxkUmV2aXNpdCB8PSBjaGFuZ2VkOwor
ICAgIAorICAgIHJldHVybiBjaGFuZ2VkOworfQorCitpbmxpbmUgYm9vbCBJblBsYWNlQWJzdHJh
Y3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmFzaWNCbG9jaykKK3sKKyAg
ICBOb2RlKiB0ZXJtaW5hbCA9IGJhc2ljQmxvY2stPmxhc3QoKTsKKyAgICAKKyAgICBBU1NFUlQo
dGVybWluYWwtPmlzVGVybWluYWwoKSk7CisgICAgCisgICAgc3dpdGNoICh0ZXJtaW5hbC0+b3Ao
KSkgeworICAgIGNhc2UgSnVtcDogeworICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJh
bmNoRGlyZWN0aW9uID09IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOworI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJn
aW5nIHRvIGJsb2NrICIsICp0ZXJtaW5hbC0+dGFrZW5CbG9jaygpLCAiLlxuIik7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT50YWtlbkJsb2NrKCkp
OworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBCcmFuY2g6IHsKKyAgICAgICAgQVNTRVJUKGJh
c2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsK
KyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgICAgICAgIE1lcmdpbmcgdG8gYmxv
Y2sgIiwgKnRlcm1pbmFsLT50YWtlbkJsb2NrKCksICIuXG4iKTsKKyNlbmRpZgorICAgICAgICBp
ZiAoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9IFRha2VGYWxzZSkKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgdGVybWluYWwtPnRha2VuQmxvY2soKSk7
CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRh
TG9nKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIiwgKnRlcm1pbmFsLT5ub3RUYWtlbkJsb2Nr
KCksICIuXG4iKTsKKyNlbmRpZgorICAgICAgICBpZiAoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGly
ZWN0aW9uICE9IFRha2VUcnVlKQorICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Js
b2NrLCB0ZXJtaW5hbC0+bm90VGFrZW5CbG9jaygpKTsKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7
CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFN3aXRjaDogeworICAgICAgICAvLyBGSVhNRTog
SXQgd291bGQgYmUgY29vbCB0byBiZSBzcGFyc2UgY29uZGl0aW9uYWwgZm9yIFN3aXRjaCdzLiBD
dXJyZW50bHkKKyAgICAgICAgLy8gd2UncmUgbm90LiBIb3dldmVyIEkgc29tZWhvdyBkb3VidCB0
aGF0IHRoaXMgd2lsbCBldmVyIGJlIGEgYmlnIGRlYWwuCisgICAgICAgIEFTU0VSVChiYXNpY0Js
b2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gPT0gSW52YWxpZEJyYW5jaERpcmVjdGlvbik7CisgICAg
ICAgIFN3aXRjaERhdGEqIGRhdGEgPSB0ZXJtaW5hbC0+c3dpdGNoRGF0YSgpOworICAgICAgICBi
b29sIGNoYW5nZWQgPSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmNhc2VzLnNpemUoKTsgaS0tOykKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsK
KyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFJldHVy
bjoKKyAgICBjYXNlIFRocm93OgorICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICAg
ICAgQVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNo
RGlyZWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVy
Z2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3Ry
YWN0VmFsdWUmIHNvdXJjZSwgTm9kZSogZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2Rl
KQoreworICAgIGlmICghZGVzdGluYXRpb25Ob2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgQVNTRVJUX1VOVVNFRChzb3VyY2VOb2RlLCBzb3VyY2VOb2RlKTsKKyAgICAKKyAg
ICAvLyBGSVhNRTogV2UgY291bGQgZG8gc29tZSBzcGFyc2UgY29uZGl0aW9uYWwgcHJvcGFnYXRp
b24gaGVyZSEKKyAgICAKKyAgICByZXR1cm4gZGVzdGluYXRpb24ubWVyZ2Uoc291cmNlKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZV9oCisjZGVmaW5lIERGR0luUGxhY2VBYnN0cmFjdFN0
YXRlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZHQnJhbmNoRGly
ZWN0aW9uLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdNZXJnZU1vZGUu
aCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgSW5QbGFjZUFic3RyYWN0U3RhdGUgeworcHVibGljOgorICAgIEluUGxhY2VB
YnN0cmFjdFN0YXRlKEdyYXBoJiBncmFwaCk7CisgICAgCisgICAgfkluUGxhY2VBYnN0cmFjdFN0
YXRlKCk7CisgICAgCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlKiBub2RlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5vZGUtPnZhbHVlOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFj
dFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmb3JOb2Rl
KGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4m
IHZhcmlhYmxlcygpCisgICAgeworICAgICAgICByZXR1cm4gbV92YXJpYWJsZXM7CisgICAgfQor
ICAgIAorICAgIC8vIENhbGwgdGhpcyBiZWZvcmUgYmVnaW5uaW5nIENGQSB0byBpbml0aWFsaXpl
IHRoZSBhYnN0cmFjdCB2YWx1ZXMgb2YKKyAgICAvLyBhcmd1bWVudHMsIGFuZCB0byBpbmRpY2F0
ZSB3aGljaCBibG9ja3Mgc2hvdWxkIGJlIGxpc3RlZCBmb3IgQ0ZBCisgICAgLy8gZXhlY3V0aW9u
LgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisgICAgLy8gU3RhcnQgYWJzdHJhY3RseSBleGVj
dXRpbmcgdGhlIGdpdmVuIGJhc2ljIGJsb2NrLiBJbml0aWFsaXplcyB0aGUKKyAgICAvLyBub3Rp
b24gb2YgYWJzdHJhY3Qgc3RhdGUgdG8gd2hhdCB3ZSBiZWxpZXZlIGl0IHRvIGJlIGF0IHRoZSBo
ZWFkCisgICAgLy8gb2YgdGhlIGJhc2ljIGJsb2NrLCBhY2NvcmRpbmcgdG8gdGhlIGJhc2ljIGJs
b2NrJ3MgZGF0YSBzdHJ1Y3R1cmVzLgorICAgIC8vIFRoaXMgbWV0aG9kIGFsc28gc2V0cyBjZmFT
aG91bGRSZXZpc2l0IHRvIGZhbHNlLgorICAgIHZvaWQgYmVnaW5CYXNpY0Jsb2NrKEJhc2ljQmxv
Y2sqKTsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2s7IH0KKyAgICAKKyAgICAvLyBGaW5pc2ggYWJzdHJhY3RseSBleGVjdXRpbmcgYSBiYXNpYyBi
bG9jay4gSWYgTWVyZ2VUb1RhaWwgb3IKKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29ycyBpcyBwYXNz
ZWQsIHRoZW4gdGhpcyBtZXJnZXMgZXZlcnl0aGluZyB3ZSBoYXZlCisgICAgLy8gbGVhcm5lZCBh
Ym91dCBob3cgdGhlIHN0YXRlIGNoYW5nZXMgZHVyaW5nIHRoaXMgYmxvY2sncyBleGVjdXRpb24g
aW50bworICAgIC8vIHRoZSBibG9jaydzIGRhdGEgc3RydWN0dXJlcy4gVGhlcmUgYXJlIHRocmVl
IHJldHVybiBtb2RlcywgZGVwZW5kaW5nCisgICAgLy8gb24gdGhlIHZhbHVlIG9mIG1lcmdlTW9k
ZToKKyAgICAvLworICAgIC8vIERvbnRNZXJnZToKKyAgICAvLyAgICBBbHdheXMgcmV0dXJucyBm
YWxzZS4KKyAgICAvLworICAgIC8vIE1lcmdlVG9UYWlsOgorICAgIC8vICAgIFJldHVybnMgdHJ1
ZSBpZiB0aGUgc3RhdGUgb2YgdGhlIGJsb2NrIGF0IHRoZSB0YWlsIHdhcyBjaGFuZ2VkLgorICAg
IC8vICAgIFRoaXMgbWVhbnMgdGhhdCB5b3UgbXVzdCBjYWxsIG1lcmdlVG9TdWNjZXNzb3JzKCks
IGFuZCBpZiB0aGF0CisgICAgLy8gICAgcmV0dXJucyB0cnVlLCB0aGVuIHlvdSBtdXN0IHJldmlz
aXQgKGF0IGxlYXN0KSB0aGUgc3VjY2Vzc29yCisgICAgLy8gICAgYmxvY2tzLiBGYWxzZSB3aWxs
IGFsd2F5cyBiZSByZXR1cm5lZCBpZiB0aGUgYmxvY2sgaXMgdGVybWluYWwKKyAgICAvLyAgICAo
aS5lLiBlbmRzIGluIFRocm93IG9yIFJldHVybiwgb3IgaGFzIGEgRm9yY2VPU1JFeGl0IGluc2lk
ZSBpdCkuCisgICAgLy8KKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29yczoKKyAgICAvLyAgICBSZXR1
cm5zIHRydWUgaWYgdGhlIHN0YXRlIG9mIHRoZSBibG9jayBhdCB0aGUgdGFpbCB3YXMgY2hhbmdl
ZCwKKyAgICAvLyAgICBhbmQsIGlmIHRoZSBzdGF0ZSBhdCB0aGUgaGVhZHMgb2Ygc3VjY2Vzc29y
cyB3YXMgY2hhbmdlZC4KKyAgICAvLyAgICBBIHRydWUgcmV0dXJuIG1lYW5zIHRoYXQgeW91IG11
c3QgcmV2aXNpdCAoYXQgbGVhc3QpIHRoZSBzdWNjZXNzb3IKKyAgICAvLyAgICBibG9ja3MuIFRo
aXMgYWxzbyBzZXRzIGNmYVNob3VsZFJldmlzaXQgdG8gdHJ1ZSBmb3IgYmFzaWMgYmxvY2tzCisg
ICAgLy8gICAgdGhhdCBtdXN0IGJlIHZpc2l0ZWQgbmV4dC4KKyAgICBib29sIGVuZEJhc2ljQmxv
Y2soTWVyZ2VNb2RlKTsKKyAgICAKKyAgICAvLyBSZXNldCB0aGUgQWJzdHJhY3RTdGF0ZS4gVGhp
cyB0aHJvd3MgYXdheSBhbnkgcmVzdWx0cywgYW5kIGF0IHRoaXMgcG9pbnQKKyAgICAvLyB5b3Ug
Y2FuIHNhZmVseSBjYWxsIGJlZ2luQmFzaWNCbG9jaygpIG9uIGFueSBiYXNpYyBibG9jay4KKyAg
ICB2b2lkIHJlc2V0KCk7CisgICAgCisgICAgLy8gRGlkIHRoZSBsYXN0IGV4ZWN1dGVkIG5vZGUg
Y2xvYmJlciB0aGUgd29ybGQ/CisgICAgYm9vbCBkaWRDbG9iYmVyKCkgY29uc3QgeyByZXR1cm4g
bV9kaWRDbG9iYmVyOyB9CisgICAgCisgICAgLy8gSXMgdGhlIGV4ZWN1dGlvbiBzdGF0ZSBzdGls
bCB2YWxpZD8gVGhpcyB3aWxsIGJlIGZhbHNlIGlmIGV4ZWN1dGUoKSBoYXMKKyAgICAvLyByZXR1
cm5lZCBmYWxzZSBwcmV2aW91c2x5LgorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNWYWxpZDsgfQorICAgIAorICAgIC8vIE1lcmdlIHRoZSBhYnN0cmFjdCBzdGF0ZSBzdG9y
ZWQgYXQgdGhlIGZpcnN0IGJsb2NrJ3MgdGFpbCBpbnRvIHRoZSBzZWNvbmQKKyAgICAvLyBibG9j
aydzIGhlYWQuIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2Vjb25kIGJsb2NrJ3Mgc3RhdGUgY2hhbmdl
ZC4gSWYgc28sCisgICAgLy8gdGhhdCBibG9jayBtdXN0IGJlIGFic3RyYWN0bHkgaW50ZXJwcmV0
ZWQgYWdhaW4uIFRoaXMgYWxzbyBzZXRzCisgICAgLy8gdG8tPmNmYVNob3VsZFJldmlzaXQgdG8g
dHJ1ZSwgaWYgaXQgcmV0dXJucyB0cnVlLCBvciBpZiB0byBoYXMgbm90IGJlZW4KKyAgICAvLyB2
aXNpdGVkIHlldC4KKyAgICBib29sIG1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sq
IHRvKTsKKyAgICAKKyAgICAvLyBNZXJnZSB0aGUgYWJzdHJhY3Qgc3RhdGUgc3RvcmVkIGF0IHRo
ZSBibG9jaydzIHRhaWwgaW50byBhbGwgb2YgaXRzCisgICAgLy8gc3VjY2Vzc29ycy4gUmV0dXJu
cyB0cnVlIGlmIGFueSBvZiB0aGUgc3VjY2Vzc29ycycgc3RhdGVzIGNoYW5nZWQuIE5vdGUKKyAg
ICAvLyB0aGF0IHRoaXMgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgaW4gZW5kQmFzaWNCbG9jaygp
IGlmIE1lcmdlTW9kZSBpcworICAgIC8vIE1lcmdlVG9TdWNjZXNzb3JzLgorICAgIGJvb2wgbWVy
Z2VUb1N1Y2Nlc3NvcnMoQmFzaWNCbG9jayopOworICAgIAorICAgIC8vIE1ldGhvZHMgaW50ZW5k
ZWQgdG8gYmUgY2FsbGVkIGZyb20gQWJzdHJhY3RJbnRlcnByZXRlci4KKyAgICB2b2lkIHNldERp
ZENsb2JiZXIoYm9vbCBkaWRDbG9iYmVyKSB7IG1fZGlkQ2xvYmJlciA9IGRpZENsb2JiZXI7IH0K
KyAgICB2b2lkIHNldElzVmFsaWQoYm9vbCBpc1ZhbGlkKSB7IG1faXNWYWxpZCA9IGlzVmFsaWQ7
IH0KKyAgICB2b2lkIHNldEJyYW5jaERpcmVjdGlvbihCcmFuY2hEaXJlY3Rpb24gYnJhbmNoRGly
ZWN0aW9uKSB7IG1fYnJhbmNoRGlyZWN0aW9uID0gYnJhbmNoRGlyZWN0aW9uOyB9CisgICAgdm9p
ZCBzZXRGb3VuZENvbnN0YW50cyhib29sIGZvdW5kQ29uc3RhbnRzKSB7IG1fZm91bmRDb25zdGFu
dHMgPSBmb3VuZENvbnN0YW50czsgfQorICAgIGJvb2wgaGF2ZVN0cnVjdHVyZXMoKSBjb25zdCB7
IHJldHVybiBtX2hhdmVTdHJ1Y3R1cmVzOyB9IC8vIEl0J3MgYWx3YXlzIHNhZmUgdG8gcmV0dXJu
IHRydWUuCisgICAgdm9pZCBzZXRIYXZlU3RydWN0dXJlcyhib29sIGhhdmVTdHJ1Y3R1cmVzKSB7
IG1faGF2ZVN0cnVjdHVyZXMgPSBoYXZlU3RydWN0dXJlczsgfQorCitwcml2YXRlOgorICAgIGJv
b2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RW
YWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSopOworCisgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJs
ZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUm
IHNvdXJjZSwgTm9kZSogZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKKyAgICAK
KyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICAKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBt
X3ZhcmlhYmxlczsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIAorICAgIGJvb2wgbV9o
YXZlU3RydWN0dXJlczsKKyAgICBib29sIG1fZm91bmRDb25zdGFudHM7CisgICAgCisgICAgYm9v
bCBtX2lzVmFsaWQ7CisgICAgYm9vbCBtX2RpZENsb2JiZXI7CisgICAgCisgICAgQnJhbmNoRGly
ZWN0aW9uIG1fYnJhbmNoRGlyZWN0aW9uOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGZvciBibG9ja3Mg
dGhhdCBlbmQgaW4gQnJhbmNoIGFuZCB0aGF0IGV4ZWN1dGUgdG8gY29tcGxldGlvbiAoaS5lLiBt
X2lzVmFsaWQgPT0gdHJ1ZSkuCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0luUGxhY2VBYnN0cmFjdFN0
YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNZXJnZU1vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01lcmdlTW9kZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNZXJnZU1vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTWVyZ2VNb2RlX2gKKyNkZWZpbmUgREZH
TWVyZ2VNb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIE1l
cmdlTW9kZSB7CisgICAgLy8gRG9uJ3QgbWVyZ2UgdGhlIHN0YXRlIGluIEFic3RyYWN0U3RhdGUg
d2l0aCBiYXNpYyBibG9ja3MuCisgICAgRG9udE1lcmdlLAorICAgIAorICAgIC8vIE1lcmdlIHRo
ZSBzdGF0ZSBpbiBBYnN0cmFjdFN0YXRlIHdpdGggdGhlIHRhaWwgb2YgdGhlIGJhc2ljCisgICAg
Ly8gYmxvY2sgYmVpbmcgYW5hbHl6ZWQuCisgICAgTWVyZ2VUb1RhaWwsCisgICAgCisgICAgLy8g
TWVyZ2UgdGhlIHN0YXRlIGluIEFic3RyYWN0U3RhdGUgd2l0aCB0aGUgdGFpbCBvZiB0aGUgYmFz
aWMKKyAgICAvLyBibG9jaywgYW5kIHdpdGggdGhlIGhlYWRzIG9mIHN1Y2Nlc3NvciBibG9ja3Mu
CisgICAgTWVyZ2VUb1N1Y2Nlc3NvcnMKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIERGR01lcmdlTW9kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTUy
ODI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYyLDcgKzg2Miw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3Rh
dGUuZm9yTm9kZShlZGdlKTsKICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBl
OwogICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAhPSBLbm93bkludDMyVXNlIHx8ICEodmFsdWUu
bV90eXBlICYgflNwZWNJbnQzMikpOwotICAgIG1fc3RhdGUuZmlsdGVyKHZhbHVlLCBTcGVjSW50
MzIpOworICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKHZhbHVlLCBTcGVjSW50MzIpOwogICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsK
ICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lz
dGVyXTsKIApAQCAtOTYzLDcgKzk2Myw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZURvdWIKICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShl
ZGdlKTsKICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOwogICAgIEFTU0VS
VChlZGdlLnVzZUtpbmQoKSAhPSBLbm93bk51bWJlclVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5T
cGVjTnVtYmVyKSk7Ci0gICAgbV9zdGF0ZS5maWx0ZXIodmFsdWUsIFNwZWNOdW1iZXIpOworICAg
IG1faW50ZXJwcmV0ZXIuZmlsdGVyKHZhbHVlLCBTcGVjTnVtYmVyKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAK
QEAgLTExMDAsNyArMTEwMCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUNlbGwKICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdlKTsK
ICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOwogICAgIEFTU0VSVCgoZWRn
ZS51c2VLaW5kKCkgIT0gS25vd25DZWxsVXNlICYmIGVkZ2UudXNlS2luZCgpICE9IEtub3duU3Ry
aW5nVXNlKSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOwotICAgIG1fc3RhdGUuZmls
dGVyKHZhbHVlLCBTcGVjQ2VsbCk7CisgICAgbV9pbnRlcnByZXRlci5maWx0ZXIodmFsdWUsIFNw
ZWNDZWxsKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmly
dHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAgLTExNzcsNyArMTE3Nyw3IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICNlbmRpZgogICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
PSB2YWx1ZS5tX3R5cGU7Ci0gICAgbV9zdGF0ZS5maWx0ZXIodmFsdWUsIFNwZWNCb29sZWFuKTsK
KyAgICBtX2ludGVycHJldGVyLmZpbHRlcih2YWx1ZSwgU3BlY0Jvb2xlYW4pOwogICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVy
XTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTI4MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjIsNyArODIy
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOwogICAgIFNwZWN1bGF0ZWRU
eXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7CiAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtu
b3duSW50MzJVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0ludDMyKSk7Ci0gICAgbV9zdGF0
ZS5maWx0ZXIodmFsdWUsIFNwZWNJbnQzMik7CisgICAgbV9pbnRlcnByZXRlci5maWx0ZXIodmFs
dWUsIFNwZWNJbnQzMik7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVk
Z2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCkBAIC05NzIsNyArOTcyLDcgQEAgRlBSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2
YWx1ZS5tX3R5cGU7CiAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3duTnVtYmVyVXNl
IHx8ICEodmFsdWUubV90eXBlICYgflNwZWNOdW1iZXIpKTsKLSAgICBtX3N0YXRlLmZpbHRlcih2
YWx1ZSwgU3BlY051bWJlcik7CisgICAgbV9pbnRlcnByZXRlci5maWx0ZXIodmFsdWUsIFNwZWNO
dW1iZXIpOwogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0
dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbklu
Zm9bdmlydHVhbFJlZ2lzdGVyXTsKIApAQCAtMTEyOCw3ICsxMTI4LDcgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
bV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5t
X3R5cGU7CiAgICAgQVNTRVJUKChlZGdlLnVzZUtpbmQoKSAhPSBLbm93bkNlbGxVc2UgJiYgZWRn
ZS51c2VLaW5kKCkgIT0gS25vd25TdHJpbmdVc2UpIHx8ICEodmFsdWUubV90eXBlICYgflNwZWND
ZWxsKSk7Ci0gICAgbV9zdGF0ZS5maWx0ZXIodmFsdWUsIFNwZWNDZWxsKTsKKyAgICBtX2ludGVy
cHJldGVyLmZpbHRlcih2YWx1ZSwgU3BlY0NlbGwpOwogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIApAQCAtMTIwNSw3
ICsxMjA1LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogI2Vu
ZGlmCiAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CiAg
ICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKLSAgICBtX3N0YXRlLmZpbHRl
cih2YWx1ZSwgU3BlY0Jvb2xlYW4pOworICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKHZhbHVlLCBT
cGVjQm9vbGVhbik7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2Ut
PnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTUyODI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkFy
Z3VtZW50cy5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR0Jp
bmFyeVN3aXRjaC5oIgogI2luY2x1ZGUgIkRGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2Vu
ZXJhdG9yLmgiCkBAIC00OCw2ICs0OSw3IEBAIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJ
VChKSVRDb21waWwKICAgICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxWYXJzKQog
ICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQog
ICAgICwgbV9zdGF0ZShtX2ppdC5ncmFwaCgpKQorICAgICwgbV9pbnRlcnByZXRlcihtX2ppdC5n
cmFwaCgpLCBtX3N0YXRlKQogICAgICwgbV9zdHJlYW0oJmppdC5qaXRDb2RlKCktPnZhcmlhYmxl
RXZlbnRTdHJlYW0pCiAgICAgLCBtX21pbmlmaWVkR3JhcGgoJmppdC5qaXRDb2RlKCktPm1pbmlm
aWVkREZHKQogICAgICwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyhmYWxzZSkKQEAgLTI2Miw3
ICsyNjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2CiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpiYWNrd2FyZFR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwg
RWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGp1bXBUb0ZhaWwpCiB7CiAgICAgQVNTRVJUKG5lZWRzVHlwZUNoZWNrKGVkZ2Us
IHR5cGVzUGFzc2VkVGhyb3VnaCkpOwotICAgIG1fc3RhdGUuZmlsdGVyKGVkZ2UsIHR5cGVzUGFz
c2VkVGhyb3VnaCk7CisgICAgbV9pbnRlcnByZXRlci5maWx0ZXIoZWRnZSwgdHlwZXNQYXNzZWRU
aHJvdWdoKTsKICAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgc291cmNlLCBl
ZGdlLm5vZGUoKSwganVtcFRvRmFpbCk7CiB9CiAKQEAgLTE3MDMsNyArMTcwNSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgbV9jYW5FeGl0ID0gbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpOwotICAgICAgICBi
b29sIHNob3VsZEV4ZWN1dGVFZmZlY3RzID0gbV9zdGF0ZS5zdGFydEV4ZWN1dGluZyhtX2N1cnJl
bnROb2RlKTsKKyAgICAgICAgYm9vbCBzaG91bGRFeGVjdXRlRWZmZWN0cyA9IG1faW50ZXJwcmV0
ZXIuc3RhcnRFeGVjdXRpbmcobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIG1faml0LnNldEZvck5v
ZGUobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG1fY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgIGlmICghbV9jdXJyZW50Tm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkgewpAQCAtMTgwMCw3ICsxODAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUN1cnJlbnRCbG9jawogICAgICAgICAKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhl
IGFic3RyYWN0IHN0YXRlIGlzIHJlbWF0ZXJpYWxpemVkIGZvciB0aGUgbmV4dCBub2RlLgogICAg
ICAgICBpZiAoc2hvdWxkRXhlY3V0ZUVmZmVjdHMpCi0gICAgICAgICAgICBtX3N0YXRlLmV4ZWN1
dGVFZmZlY3RzKG1faW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhl
Y3V0ZUVmZmVjdHMobV9pbmRleEluQmxvY2spOwogICAgICAgICAKICAgICAgICAgaWYgKG1fY3Vy
cmVudE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CkBAIC00MjczLDcgKzQyNzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9T
dHJpbmdPbkNlCiAgICAgICAgIAogICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQo
bV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5zdHJpbmdPYmplY3RTdHJ1
Y3R1cmUoKSkpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3Qob3AxR1BSKTsK
LSAgICAgICAgICAgIG1fc3RhdGUuZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nT2Jq
ZWN0KTsKKyAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBT
cGVjU3RyaW5nT2JqZWN0KTsKICAgICAgICAgfQogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNXcmFwcGVyT2JqZWN0OjppbnRlcm5hbFZhbHVlQ2Vs
bE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOwpAQCAtNDI5Nyw3ICs0Mjk5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRv
U3RyaW5nT25DZQogICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKICAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICBtX3N0YXRlLmZpbHRlcihu
b2RlLT5jaGlsZDEoKSwgU3BlY1N0cmluZyB8IFNwZWNTdHJpbmdPYmplY3QpOworICAgICAgICBt
X2ludGVycHJldGVyLmZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmluZyB8IFNwZWNTdHJp
bmdPYmplY3QpOwogICAgICAgICAKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OwogICAgICAgICBicmVhazsKQEAgLTQ1MTMsNyArNDUxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0ZVN0cmluZ0lkZW4KICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2UsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLAogICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXNJZGVudGlmaWVyKCkp
KSk7CiAgICAgCi0gICAgbV9zdGF0ZS5maWx0ZXIoZWRnZSwgU3BlY1N0cmluZ0lkZW50KTsKKyAg
ICBtX2ludGVycHJldGVyLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nSWRlbnQpOwogfQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmdJZGVudChFZGdlIGVkZ2UsIEdQUlJlZyBz
dHJpbmcpCkBAIC00NTYxLDcgKzQ1NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGVTdHJpbmdPYmplCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBzcGVjdWxhdGVTdHJpbmdP
YmplY3QoZ3ByKTsKLSAgICBtX3N0YXRlLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nT2JqZWN0KTsK
KyAgICBtX2ludGVycHJldGVyLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nT2JqZWN0KTsKIH0KIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdPYmplY3QoRWRnZSBl
ZGdlKQpAQCAtNDU4Niw3ICs0NTg4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRl
U3RyaW5nT3JTdAogICAgIAogICAgIGlzU3RyaW5nLmxpbmsoJm1faml0KTsKICAgICAKLSAgICBt
X3N0YXRlLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nIHwgU3BlY1N0cmluZ09iamVjdCk7CisgICAg
bV9pbnRlcnByZXRlci5maWx0ZXIoZWRnZSwgU3BlY1N0cmluZyB8IFNwZWNTdHJpbmdPYmplY3Qp
OwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVOb3RDZWxsKEVkZ2UgZWRnZSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHJldmlzaW9uIDE1MjgyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOSBAQAogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKLSNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAiREZH
QWJzdHJhY3RJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkRGR0dlbmVyYXRpb25JbmZvLmgiCisj
aW5jbHVkZSAiREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCIKICNpbmNsdWRlICJERkdKSVRDb21w
aWxlci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0SnVt
cFBsYWNlaG9sZGVyLmgiCkBAIC0yMDYyLDcgKzIwNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCwgSlNWYWx1ZVJlZ3MsIEVkZ2Up
OwogICAgIAogICAgIC8vIEhlbHBlcnMgZm9yIHBlcmZvcm1pbmcgdHlwZSBjaGVja3Mgb24gYW4g
ZWRnZSBzdG9yZWQgaW4gdGhlIGdpdmVuIHJlZ2lzdGVycy4KLSAgICBib29sIG5lZWRzVHlwZUNo
ZWNrKEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKSB7IHJldHVy
biBtX3N0YXRlLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCk7IH0KKyAg
ICBib29sIG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNz
ZWRUaHJvdWdoKSB7IHJldHVybiBtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5
cGVzUGFzc2VkVGhyb3VnaCk7IH0KICAgICB2b2lkIGJhY2t3YXJkVHlwZUNoZWNrKEpTVmFsdWVT
b3VyY2UsIEVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCk7CiAgICAgdm9pZCB0eXBlQ2hlY2soSlNWYWx1ZVNvdXJj
ZSwgRWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsKTsKICAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNv
dXJjZSwgRWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5Jik7CkBAIC0yMTc0LDcg
KzIxNzUsOCBAQCBwdWJsaWM6CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CiAgICAgQ29kZU9y
aWdpbiBtX2NvZGVPcmlnaW5Gb3JPU1I7CiAgICAgCi0gICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRl
OworICAgIEluUGxhY2VBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CisgICAgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxJblBsYWNlQWJzdHJhY3RTdGF0ZT4gbV9pbnRlcnByZXRlcjsKICAgICAKICAgICBWYXJp
YWJsZUV2ZW50U3RyZWFtKiBtX3N0cmVhbTsKICAgICBNaW5pZmllZEdyYXBoKiBtX21pbmlmaWVk
R3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkocmV2aXNpb24gMTUyODI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDggQEAK
ICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgi
Ci0jaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCIK
ICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiRlRMRXhp
dFRodW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKQEAgLTUz
LDcgKzU0LDcgQEAgc3RhdGljIGludCBjb21waWxlQ291bnRlcjsKICAgICAgICAgRm9ybWF0dGVk
VmFsdWUgX2Z0Y19sb3dWYWx1ZSA9IChsb3dWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICAgICAgRWRnZSBfZnRjX2hpZ2hWYWx1ZSA9IChoaWdoVmFsdWUpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgX2Z0Y190eXBlc1Bhc3Nl
ZFRocm91Z2ggPSAodHlwZXNQYXNzZWRUaHJvdWdoKTsgIFwKLSAgICAgICAgaWYgKCFtX3N0YXRl
Lm5lZWRzVHlwZUNoZWNrKF9mdGNfaGlnaFZhbHVlLCBfZnRjX3R5cGVzUGFzc2VkVGhyb3VnaCkp
IFwKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKF9mdGNfaGlnaFZh
bHVlLCBfZnRjX3R5cGVzUGFzc2VkVGhyb3VnaCkpIFwKICAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAg
ICAgdHlwZUNoZWNrKF9mdGNfbG93VmFsdWUsIF9mdGNfaGlnaFZhbHVlLCBfZnRjX3R5cGVzUGFz
c2VkVGhyb3VnaCwgKGZhaWxDb25kaXRpb24pKTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQpAQCAt
NjksNiArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKQogICAgICAgICAsIG1fZXhpdFRodW5rR2VuZXJhdG9y
KHN0YXRlKQogICAgICAgICAsIG1fc3RhdGUoc3RhdGUuZ3JhcGgpCisgICAgICAgICwgbV9pbnRl
cnByZXRlcihzdGF0ZS5ncmFwaCwgbV9zdGF0ZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtMjE5
LDcgKzIyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFi
bGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAiLCBtX25vZGUsICJcbiIpOwog
ICAgICAgICAKLSAgICAgICAgYm9vbCBzaG91bGRFeGVjdXRlRWZmZWN0cyA9IG1fc3RhdGUuc3Rh
cnRFeGVjdXRpbmcobV9ub2RlKTsKKyAgICAgICAgYm9vbCBzaG91bGRFeGVjdXRlRWZmZWN0cyA9
IG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcobV9ub2RlKTsKICAgICAgICAgCiAgICAgICAg
IG1fZGlyZWN0aW9uID0gKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpID8gRm9y
d2FyZFNwZWN1bGF0aW9uIDogQmFja3dhcmRTcGVjdWxhdGlvbjsKICAgICAgICAgCkBAIC00MDgs
NyArNDEwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fbGl2ZS5hZGQobV9ub2RlKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKLSAgICAgICAgICAgIG1f
c3RhdGUuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsKKyAgICAgICAgICAgIG1faW50ZXJwcmV0
ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KQEAgLTE5MjksMTEgKzE5MzEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgRm9y
bWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBl
c1Bhc3NlZFRocm91Z2gsCiAgICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uLCBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVlIHJlY292ZXJ5KQogICAgIHsKLSAg
ICAgICAgaWYgKCFtX3N0YXRlLm5lZWRzVHlwZUNoZWNrKGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRU
aHJvdWdoKSkKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGhpZ2hW
YWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
QVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtpbmQoKSkpOwogICAgICAgICBh
cHBlbmRPU1JFeGl0KEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUubm9kZSgpLCBmYWlsQ29u
ZGl0aW9uLCBkaXJlY3Rpb24sIHJlY292ZXJ5KTsKLSAgICAgICAgbV9zdGF0ZS5maWx0ZXIoaGln
aFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gpOworICAgICAgICBtX2ludGVycHJldGVyLmZpbHRl
cihoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCk7CiAgICAgfQogICAgIAogICAgIExWYWx1
ZSBsb3dJbnQzMihFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9t
YXRpY09wZXJhbmRTcGVjdWxhdGlvbikKQEAgLTIxNzgsNyArMjE4MCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgogICAgICAgICBj
YXNlIEtub3duTnVtYmVyVXNlOgotICAgICAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm5lZWRzVHlw
ZUNoZWNrKGVkZ2UpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5uZWVkc1R5
cGVDaGVjayhlZGdlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbnQzMlVz
ZToKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGVkZ2UpOwpAQCAtMjE4Nyw3ICsyMTg5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6Ci0gICAgICAgICAgICBBU1NFUlQo
IW1fc3RhdGUubmVlZHNUeXBlQ2hlY2soZWRnZSkpOworICAgICAgICAgICAgQVNTRVJUKCFtX2lu
dGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlKTsK
QEAgLTIyODcsNyArMjI4OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIo
RWRnZSBlZGdlKQogICAgIHsKICAgICAgICAgLy8gRG8gYW4gZWFybHkgcmV0dXJuIGhlcmUgYmVj
YXVzZSBsb3dEb3VibGUoKSBjYW4gY3JlYXRlIGEgbG90IG9mIGNvbnRyb2wgZmxvdy4KLSAgICAg
ICAgaWYgKCFtX3N0YXRlLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQorICAgICAgICBpZiAoIW1faW50
ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgICAgICBsb3dEb3VibGUoZWRnZSk7CkBAIC0yMjk2LDcgKzIyOTgsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc3BlY3VsYXRlUmVhbE51bWJlcihFZGdlIGVkZ2UpCiAgICAgewogICAg
ICAgICAvLyBEbyBhbiBlYXJseSByZXR1cm4gaGVyZSBiZWNhdXNlIGxvd0RvdWJsZSgpIGNhbiBj
cmVhdGUgYSBsb3Qgb2YgY29udHJvbCBmbG93LgotICAgICAgICBpZiAoIW1fc3RhdGUubmVlZHNU
eXBlQ2hlY2soZWRnZSkpCisgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVj
ayhlZGdlKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSB2
YWx1ZSA9IGxvd0RvdWJsZShlZGdlKTsKQEAgLTI4NjIsNyArMjg2NCw4IEBAIHByaXZhdGU6CiAg
ICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CiAgICAgRXhpdFRodW5rR2VuZXJhdG9yIG1fZXhpdFRo
dW5rR2VuZXJhdG9yOwogICAgIAotICAgIEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKKyAgICBJblBs
YWNlQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOworICAgIEFic3RyYWN0SW50ZXJwcmV0ZXI8SW5QbGFj
ZUFic3RyYWN0U3RhdGU+IG1faW50ZXJwcmV0ZXI7CiAgICAgQmFzaWNCbG9jayogbV9oaWdoQmxv
Y2s7CiAgICAgQmFzaWNCbG9jayogbV9uZXh0SGlnaEJsb2NrOwogICAgIExCYXNpY0Jsb2NrIG1f
bmV4dExvd0Jsb2NrOwo=
</data>
<flag name="review"
          id="228799"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>